diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index dff2f3043b..9c4c34dc12 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -165,7 +165,9 @@ jobs: uses: actions/cache@v2 with: path: /usr/local/share/vcpkg/installed - key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} + key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} - name: Prepare vcpkg run: | @@ -241,7 +243,9 @@ jobs: uses: actions/cache@v2 with: path: vcpkg/installed - key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} + key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} - name: Prepare vcpkg shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a31613a978..c921fe259d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -498,7 +498,10 @@ jobs: uses: actions/cache@v2 with: path: /usr/local/share/vcpkg/installed - key: ${{ steps.key.outputs.image }}-vcpkg-release + key: ${{ steps.key.outputs.image }}-vcpkg-release-0 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-release + ${{ steps.key.outputs.image }}-vcpkg-x64 - name: Prepare vcpkg run: | @@ -700,7 +703,9 @@ jobs: uses: actions/cache@v2 with: path: vcpkg/installed - key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} + key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} - name: Prepare vcpkg shell: bash diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index d6eca7bfba..3b1aec73f0 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -65,11 +65,11 @@ Company::Company(uint16 name_1, bool is_ai) this->name_1 = name_1; this->location_of_HQ = INVALID_TILE; this->is_ai = is_ai; - this->terraform_limit = _settings_game.construction.terraform_frame_burst << 16; + this->terraform_limit = (uint32)_settings_game.construction.terraform_frame_burst << 16; this->clear_limit = _settings_game.construction.clear_frame_burst << 16; - this->tree_limit = _settings_game.construction.tree_frame_burst << 16; - this->purchase_land_limit = _settings_game.construction.purchase_land_frame_burst << 16; - this->build_object_limit = _settings_game.construction.build_object_frame_burst << 16; + this->tree_limit = (uint32)(uint32)_settings_game.construction.tree_frame_burst << 16; + this->purchase_land_limit = (uint32)_settings_game.construction.purchase_land_frame_burst << 16; + this->build_object_limit = (uint32)_settings_game.construction.build_object_frame_burst << 16; for (uint j = 0; j < 4; j++) this->share_owners[j] = COMPANY_SPECTATOR; InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, INVALID_COMPANY); @@ -279,11 +279,11 @@ void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cst) void UpdateLandscapingLimits() { for (Company *c : Company::Iterate()) { - c->terraform_limit = std::min(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint32)_settings_game.construction.terraform_frame_burst << 16); - c->clear_limit = std::min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16); - c->tree_limit = std::min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16); - c->purchase_land_limit = std::min(c->purchase_land_limit + _settings_game.construction.purchase_land_per_64k_frames, (uint32)_settings_game.construction.purchase_land_frame_burst << 16); - c->build_object_limit = std::min(c->build_object_limit + _settings_game.construction.build_object_per_64k_frames, (uint32)_settings_game.construction.build_object_frame_burst << 16); + c->terraform_limit = std::min((uint64)c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint64)_settings_game.construction.terraform_frame_burst << 16); + c->clear_limit = std::min((uint64)c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint64)_settings_game.construction.clear_frame_burst << 16); + c->tree_limit = std::min((uint64)c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint64)_settings_game.construction.tree_frame_burst << 16); + c->purchase_land_limit = std::min((uint64)c->purchase_land_limit + _settings_game.construction.purchase_land_per_64k_frames, (uint64)_settings_game.construction.purchase_land_frame_burst << 16); + c->build_object_limit = std::min((uint64)c->build_object_limit + _settings_game.construction.build_object_per_64k_frames, (uint64)_settings_game.construction.build_object_frame_burst << 16); } } diff --git a/src/currency.cpp b/src/currency.cpp index 46c478d0d9..841f00d56a 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -67,6 +67,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 10, "", CF_NOEURO, "HKD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_HKD }, ///< hong kong dollar { 90, "", CF_NOEURO, u8"\u20b9", "", 0, STR_GAME_OPTIONS_CURRENCY_INR }, ///< Indian Rupee { 19, "", CF_NOEURO, "Rp", "", 0, STR_GAME_OPTIONS_CURRENCY_IDR }, ///< Indonesian Rupiah + { 5, "", CF_NOEURO, "RM", "", 0, STR_GAME_OPTIONS_CURRENCY_MYR }, ///< Malaysian Ringgit }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index 37d1c66b92..e97fc6cb84 100644 --- a/src/currency.h +++ b/src/currency.h @@ -64,6 +64,7 @@ enum Currencies { CURRENCY_HKD, ///< Hong Kong Dollar CURRENCY_INR, ///< Indian Rupee CURRENCY_IDR, ///< Indonesian Rupiah + CURRENCY_MYR, ///< Malaysian Ringgit CURRENCY_END, ///< always the last item }; diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 26a40c4516..9ac78dc68b 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -274,6 +274,7 @@ void PerformanceMeasurer::SetExpectedRate(double rate) */ /* static */ void PerformanceMeasurer::Paused(PerformanceElement elem) { + PerformanceMeasurer::SetInactive(elem); _pf_data[elem].AddPause(GetPerformanceTimer()); } @@ -399,7 +400,6 @@ struct FramerateWindow : Window { { const double threshold_good = target * 0.95; const double threshold_bad = target * 2 / 3; - value = std::min(9999.99, value); this->value = (uint32)(value * 100); this->strid = (value > threshold_good) ? STR_FRAMERATE_FPS_GOOD : (value < threshold_bad) ? STR_FRAMERATE_FPS_BAD : STR_FRAMERATE_FPS_WARN; } @@ -408,7 +408,6 @@ struct FramerateWindow : Window { { const double threshold_good = target / 3; const double threshold_bad = target; - value = std::min(9999.99, value); this->value = (uint32)(value * 100); this->strid = (value < threshold_good) ? STR_FRAMERATE_MS_GOOD : (value > threshold_bad) ? STR_FRAMERATE_MS_BAD : STR_FRAMERATE_MS_WARN; } diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index b11cb7bedb..6bfc859b61 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1455,6 +1455,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupa les desp STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Defineix la disposició de la companyia a la finestra de despeses STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Treu automàticament els senyals durant la construcció ferroviària: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Treu automàticament els senyals ferroviaris que hi hagi pel mig durant la construcció de rail. Aneu amb compte ja que pot provocar col·lisions de trens. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Límit de velocitat de la partida: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Estableix el límit de velocitat de la partida quan s'activa l'avanç ràpid del temps. 0 = sense límit (tan ràpid com pugui el vostre ordinador). Els valors per sota de 100{NBSP}% alenteixen la partida. El límit de velocitat depèn de les característiques del vostre ordinador i de la partida que esteu jugant (mida del mapa, nombre de vehicles, longitud de les rutes...). +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}{NBSP}% de la velocitat normal +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sense límit (tan ràpid com pugui el vostre ordinador) STR_CONFIG_SETTING_SOUND_TICKER :Barra de notícies: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reprodueix un so quan apareixen les notícies resumides a la barra inferior @@ -1822,7 +1826,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Comprova STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostra els paràmetres de les IA/Script de la partida STR_INTRO_TOOLTIP_QUIT :{BLACK}Surt de l'OpenTTD. -STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu-ne si hi ha actualitzacions disponibles. +STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu si hi ha actualitzacions disponibles. STR_INTRO_TRANSLATION :{BLACK}A aquesta traducció li falten {NUM} caden{P a es}. Si us plau, ajudeu a fer millor l'OpenTTD unint-vos com a traductor. Vegeu el fitxer readme.txt per més detalls. # Quit window diff --git a/src/lang/czech.txt b/src/lang/czech.txt index faf5c96adf..02f3bb1605 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3675,6 +3675,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Požadované zd STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} byla vypnuta {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Neplatný/neznámý sprite layout formát (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Příliš mnoho prvků v seznamu hodnot vlastností (sprite {3:NUM}, vlastnost {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Neplatné zpětné volání průmyslové produkce (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varování! diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 5cedc836de..cb5e121600 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1454,6 +1454,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bed STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatisch seinen verwijderen tijdens spooraanleg: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Seinen automatisch verwijderen tijdens spooraanleg als deze in de weg staan. Dit kan botsingen veroorzaken. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limiet verhoogde spelsnelheid: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Beperkt de snelheid van het spel wanneer de spelsnelheid is verhoogt. 0 = geen limiet (alleen beperkt door de computer zelf). Waarden onder 100% vertragen het spel. De hoogste waarde hangt af van de specifcaties van de computer en kan afhankelijk van het spel variëren. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normale spelsnelheid +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Geen limiet (alleen beperkt door de computer zelf) STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffecten af bij korte nieuwsberichten diff --git a/src/lang/english.txt b/src/lang/english.txt index e48fceb286..879ea8ccef 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -960,6 +960,7 @@ STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminb STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee (INR) STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian Rupiah (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit (MYR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left diff --git a/src/lang/german.txt b/src/lang/german.txt index e2b2303ae8..b650d3f42c 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1611,6 +1611,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Zwischensummen STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Lege das Layout für das Fenster mit den Firmenausgaben fest STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatische Entfernung von Signalen während der Errichtung von Bahntrassen: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatische Entfernung von Signalen während der Errichtung der Bahntrasse, wenn diese sich im Weg befinden. Hinweis: Dies kann zu Unfällen führen! +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Zeitraffer Geschwindigkeitslimit: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit wie schnell das Spiel läuft, wenn Zeitraffer aktiviert ist. 0= unlimitiert (so schnell, wie ihr Computer es erlaubt). Eingaben unter 100% können das Spiel verlangsamen. Das obere Limit hängt von den technischen Spezifikationen ihres Computer ab und kann großen Einfluss auf das Spiel haben +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normale Spielgeschwindigkeit +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Keine Beschränkung (so schnell wie ihr Computer es erlaubt) STR_CONFIG_SETTING_ENABLE_BUILD_RIVER :Aktiviere das Bauen von Flüssen: {STRING} STR_CONFIG_SETTING_ENABLE_BUILD_RIVER_HELPTEXT :Aktiviere das Bauen von Flüssen außerhalb des Szenarioeditors diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 5a43ca9261..aa44bffa4d 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -295,6 +295,8 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Επιλ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Επιλέξτε κριτήρια φιλτραρίσματος STR_BUTTON_SORT_BY :{BLACK}Ταξινόμηση κατά STR_BUTTON_RENAME :{BLACK}Μετονομασία +STR_BUTTON_CATCHMENT :{BLACK}Κάλυψη +STR_TOOLTIP_CATCHMENT :{BLACK}Εναλλαγή επίδειξης περιοχής κάλυψης STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Κλείσιμο παραθύρου STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Τίτλος παραθύρου - σύρετε το για να το μετακινήσετε @@ -371,8 +373,13 @@ 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_THIS_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}Παύση παιχνιδιού @@ -398,6 +405,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Μεγέ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Σμίκρυνση εικόνας STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Κατασκευάστε δρόμους +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Κτίσιμο τραχιοδρόμων STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Κατασκευή λιμένων STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Κατασκευάστε αεροδρόμια STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ανοίξτε την μπάρα εργαλείων μορφοποίησης εδάφους για ανύψωση/βύθιση γης, δενδροφύτευση, κλπ. @@ -707,7 +715,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Συντονι STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Επόπτης Διαδρομών STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Διευθυντής STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Ανώτερος Υπάλληλος -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Διαχειριστής +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Πρόεδρος STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Πρόεδρος STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Μεγιστάνας @@ -842,6 +850,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA 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_RAINFOREST :{TINY_FONT}{BLACK}Τροπικό δάσος STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Χωράφια STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Δέντρα STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Βράχοι @@ -873,6 +882,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}* * ΑΠΟΘΗΚΕΥΣΗ ΠΑΙΧΝΙΔΙΟΥ * * @@ -967,6 +977,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} @@ -1034,6 +1045,9 @@ STR_GAME_OPTIONS_CURRENCY_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_INR :Ρουπία Ινδίας (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Οδηγούν από αριστερά @@ -1090,6 +1104,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :άλλη STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Μέγεθος διεπαφής STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος στοιχείου διεπαφής +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(αυτόματη ανίχνευση) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Κανονικό STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος @@ -1534,6 +1549,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Διατήρη STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Διατήρηση ανοικτών των εργαλείων για γέφυρες, σήραγγες, κλπ μετά από τη χρήση STR_CONFIG_SETTING_EXPENSES_LAYOUT :Ομαδοποίηση εξόδων στο παράθυρο οικονομικών της εταιρίας: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Ορίστε τη μορφή για το παράθυρο των εξόδων της εταιρείας +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Όριο ταχύτητας γρήγορης κίνησης: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Όριο ταχύτητας του παιχνιδιού όταν είναι ενεργοποιημένη η γρήγορη ταχύτητα. 0 = κανένα όριο (όσο γρήγορα επιτρέπει ο υπολογιστής σας). Τιμές κάτω του 100% επιβραδύνουν το παιχνίδι. Το ανώτατο όριο εξαρτάται από τις προδιαγραφές του υπολογιστή σας και μπορεί να μεταβάλλεται ανάλογα με το παιχνίδι. STR_CONFIG_SETTING_SOUND_TICKER :Ήχος ειδήσεων: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Παίζει ήχο για περιληπτικά μηνύματα ειδήσεων @@ -1582,6 +1599,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Επιτρέπ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Επιτρέπεται η συμμετοχή παικτών υπολογιστή AI σε παιχνίδια πολλαπλών παικτών STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#εντολών πριν την παύση δεσμών ενεργειών: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Μέγιστος αριθμός βημάτων υπολογισμού που κάνει κάποιο σενάριο σε κάθε σειρά +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Πόση μνήμη μπορεί να καταναλώσει ένα script προτού τερματιστεί αναγκαστικά. Μπορεί να χρειαστεί να αυξηθεί για μεγαλύτερους χάρτες. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Τα διαστήματα μεταξύ συντήρησης είναι σε ποσοστά: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Επιλέξτε εάν η επισκευή των οχημάτων εξαρτάται από τον χρόνο που πέρασε από την τελευταία επισκευή ή από την μείωση της αξιοπιστίας κατά ένα συγκεκριμένο ποσοστό της μέγιστης αξιοπιστίας @@ -1640,8 +1659,13 @@ 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_ECONOMY_TYPE :Τύπος οικονομίας: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Η ομαλή οικονομία κάνει διαφοροποιήσεις στην παραγωγή πιο συχνά, και σε μικρότερα βήματα. Η παγωμένη οικονομία σταματά τις διαφοροποιήσεις στην παραγωγή και το κλείσιμο των βιομηχανιών. Αυτή η ρύθμιση μπορεί να μην έχει καμία αλλαγή εάν οι τύποι βιομηχανιών προσφέρονται από ένα NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Ομαλή STR_CONFIG_SETTING_ALLOW_SHARES :Ενεργοποίηση της δυνατότητας αγοράς μετοχών από άλλες εταιρίες: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Όταν είναι ενεργοποιημένη, επιτρέπεται η αγοραπωλησία εταιρικών μετοχών. Οι μετοχές θα είναι διαθέσιμες μόνο όταν οι εταιρείες φτάνουν μια ορισμένη ηλικία +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Ελάχιστη ηλικία εταιρίας για συναλλαγή μετοχών: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Το ποσοστό κέρδους από το σκέλος μεταφοράς στα συστήματα τροφοδότησης: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Το ποσοστό του εισοδήματος που δίνεται στα ενδιάμεσα σκέλη των συστημάτων τροφοδότησης, δίνοντας μεγαλύτερο έλεγχο στο εισόδημα STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Όταν σύρετε, τοποθετούνται σήματα κάθε: {STRING} @@ -1689,6 +1713,7 @@ 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_SPREAD_RAINFOREST :Φυτρώνει αλλά εξαπλώνεται μόνο σε τροπικό δάσος STR_CONFIG_SETTING_TOOLBAR_POS :Θέση κύριας εργαλειοθήκης: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Οριζόντια τοποθέτηση της κύριας γραμμής εργαλείων στο επάνω μέρος της οθόνης @@ -1887,6 +1912,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}Όχι @@ -1898,6 +1924,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Είσ # Cheat window STR_CHEATS :{WHITE}Απατεωνιές STR_CHEATS_TOOLTIP :{BLACK}Τα κουτάκια δείχνουν αν έχετε ξαναχρησιμοποιήσει αυτή την απατεωνιά +STR_CHEATS_NOTE :{BLACK}Σημείωση: κάθε χρήση αυτών των ρυθμίσεων θα καταγραφεί από το αρχείο αποθήκευσης STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING} @@ -2049,6 +2076,7 @@ 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_TOOLTIP :{BLACK}Αναζήτηση στο διαδίκτυο για δημόσιους διακομιστές STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Προσθήκη διακομιστή STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Προσθέτει ένα διακομιστή στη λίστα ο οποίος θα ελέγχεται κάθε φορά για ενεργά παιχνίδια. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Εκκίνηση διακομιστή @@ -2232,6 +2260,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}Χρειαστήκατε πολύ χρόνο για να συμπληρώσετε τον κωδικό @@ -2273,11 +2302,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Παιχνίδ 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} συμμετέχει στο παιχνίδι @@ -2287,8 +2318,10 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} σ STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ξεκίνησε μια νέα εταιρία (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} αποχώρησε από το παιχνίδι ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} άλλαξαν το όνομά τους σε {STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} έδωσε {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}Περιεχόμενο κατεβαίνει @@ -2509,6 +2542,8 @@ 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 :Δρόμος +STR_ROAD_NAME_TRAM :Τροχιόδρομος # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Προσανατολισμός Σταθμού Οχημάτων @@ -2596,6 +2631,10 @@ STR_TREES_RANDOM_TYPE :{BLACK}Δέντ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθετήστε δέντρα τυχαίου τύπου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Τυχαία Δέντρα STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Φυτέψτε δέντρα τυχαία στο έδαφος +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Κανονικό +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Φυτέψτε μοναδικά δέντρα σέρνοντας πάνω από το τοπίο. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Άλσος +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Φυτέψτε μικρά δάση σέρνοντας πάνω από το τοπίο. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Δημιουργία Γης @@ -2646,12 +2685,14 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Τυχα # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Χρηματοδότηση νέας βιομηχανίας STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Επιλέξτε την κατάλληλη βιομηχανία από την λίστα -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Πολλές τυχαίες βιομηχανίες +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Δημιουργία τυχαίων βιομηχανιών STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Γέμισε τον χάρτη με τυχαία τοποθετημένες βιομηχανίες STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Κόστος: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Διερεύνηση STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Κατασκευή STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Χρηματοδότηση +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Αφαίρεση όλων των βιομηχανιών +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Αφαίρεση όλων των βιομηχανιών που υπάρχουν αυτή την στιγμή στον χάρτι # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Αλυσίδα βιομηχανιών για τη βιομηχανία {STRING} @@ -2693,8 +2734,10 @@ 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_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} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Όριο ταχύτητας τραμ: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Πέτρες @@ -2811,6 +2854,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} καρέ/δευτερόλεπτο STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} καρέ/δευτερόλεπτο STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} καρέ/δευτερόλεπτο +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} ς ############ Leave those lines in this order!! @@ -2874,6 +2918,7 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :Φιλτράρισμα κειμένου: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Αντικατάσταση Αρχείου STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Είστε σίγουροι οτι θέλετε να αντικαταστήσετε το υπάρχων αρχείο; +STR_SAVELOAD_DIRECTORY :{STRING} (Κατάλογος) STR_SAVELOAD_OSKTITLE :{BLACK}Δώστε το όνομα του παιχνιδιού προς αποθήκευση @@ -3134,6 +3179,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Εναλ # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Επεξεργασία κειμένου πινακίδας +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία της πινακίδας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της πινακίδας STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Μετάβαση στην επόμενη πινακίδα STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Μετάβαση στη προηγούμενη πινακίδα @@ -3176,6 +3222,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_COMPANY_RATINGS :{BLACK}Ποσοστά εταιρίας μεταφορών: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Διαθέσιμες πράξεις: @@ -3215,10 +3262,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Εται STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στον στόχο για να επικεντρωθεί η οθόνη στη βιομηχανία/πόλη/τετραγωνίδιο. Με Ctrl+Κλικ ανοίγει το παράθυρο θέασης στην τοποθεσία της βιομηχανίας/πόλης/τετραγωνίδιου # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Ερώτηση -STR_GOAL_QUESTION_CAPTION_INFORMATION :Πληροφορίες -STR_GOAL_QUESTION_CAPTION_WARNING :Προειδοποίηση -STR_GOAL_QUESTION_CAPTION_ERROR :Σφάλμα +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Ερώτηση +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Πληροφορίες +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Προειδοποίηση +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Σφάλμα ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Ακύρωση @@ -3409,6 +3456,7 @@ STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Εποι STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Λεπτομέρειες STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβολή λεπτομερούς μέτρησης υποδομών STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Δώστε χρήματα +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Δώστε χρήματα σε αυτή την εταρία STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Νέο Πρόσωπο STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Επιλογή νέου προσώπου διευθυντή @@ -3426,7 +3474,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Πώλη STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Όνομα Εταιρίας STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Όνομα Διευθυντή -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το πόσο των χρημάτων που θέλετε να δώσετε +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το χρηματικό ποσό που θέλετε να δώσετε STR_BUY_COMPANY_MESSAGE :{WHITE}Ψάχνουμε μία εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG}; @@ -3435,6 +3483,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Υποδ 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}Σταθμοί: @@ -3446,7 +3495,13 @@ 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_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} 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 :Όλοι οι τύποι φορτίου # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3540,6 +3595,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Νέα Οχήμ STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Νέα Οχήματα Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Νέα Οχήματα Δρόμου +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Νέα οχήματα τραμ ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Νέα Οχήματα Σιδηρόδρομου @@ -3709,6 +3765,7 @@ STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Μόλι STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}ατμομηχανή STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE.geniki :ατμομηχανής +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Μηχανή ηλεκτροδοτουμένου σιδηροδρόμου STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=f}μηχανής μονοτρόχιου STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE.geniki :μηχανής monorail STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=f}μηχανής maglev @@ -3716,6 +3773,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE.geniki :μηχανής STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=n}οχήματος δρόμου STR_ENGINE_PREVIEW_ROAD_VEHICLE.geniki :Οχήματος δρόμου +STR_ENGINE_PREVIEW_TRAM_VEHICLE :όχημα τροχιοδρόμου STR_ENGINE_PREVIEW_AIRCRAFT :{G=n}αεροσκάφους STR_ENGINE_PREVIEW_AIRCRAFT.geniki :αεροσκάφους @@ -3761,12 +3819,14 @@ STR_REPLACE_WAGONS :Βαγόνια STR_REPLACE_ALL_RAILTYPE :Όλα τα οχήματα σιδηρόδρομου STR_REPLACE_HELP_RAILTYPE :{BLACK}Επιλέξτε τον τύπο σιδηροδρόμου για τον οποίο θέλετε να γίνει η αντικατάσταση των μηχανών +STR_REPLACE_HELP_ROADTYPE :{BLACK}Επιλέξτε τον τύπο δρόμου για τον οποίο θέλετε να γίνει η αντικατάσταση των μηχανών STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Εμφανίζει ποια μηχανή αυτή στα αριστερά θα αντικατασταθεί, εάν υπάρχει STR_REPLACE_RAIL_VEHICLES :Οχήματα Σιδηροδρόμου STR_REPLACE_ELRAIL_VEHICLES :Οχήματα Ηλεκτρικού Σιδηροδρόμου STR_REPLACE_MONORAIL_VEHICLES :Οχήματα Μονοτρόχιου STR_REPLACE_MAGLEV_VEHICLES :Οχήματα Maglev +STR_REPLACE_TRAM_VEHICLES :Οχήματα τροχιοδρόμου STR_REPLACE_REMOVE_WAGON :{BLACK}Αφαίρεση βαγονιού: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Υποχρεώνει την αυτόματη αντικατάσταση να διατηρεί σταθερό το μήκος του τρένου αφαιρώντας βαγόνια (ξεκινώντας από μπροστά), όταν η αντικατάσταση της μηχανής κάνει το τρένο μεγαλύτερο @@ -3774,6 +3834,8 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Υποχ # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του οχήματος. Με διπλό κλικ θα ακολουθείται το αυτοκίνητο στην κύρια προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του οχήματος +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του πλοίου. Με διπλό κλικ θα ακολουθείται το πλοίο στην κύρια προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του πλοίου STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το τρένο στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το όχημα στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή @@ -3805,6 +3867,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφά STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών πλοίου STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών αεροσκάφους +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχων ενέργεια οχήματος - κάντε κλικ για να σταματήσετε/ξεκινήσετε το όχημα # Messages in the start stop button in the vehicle view @@ -4033,6 +4096,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Μετατρο STR_ORDER_STOP_ORDER :(Στάση) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Δεν μπορείτε να χρησιμοποιήσετε τον σταθμό){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Σιωπηρή) @@ -4211,6 +4275,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Αποδ STR_AI_LIST_CANCEL :{BLACK}Άκυρωση STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Να μην γίνει αλλαγή δέσμης ενεργειών +STR_SCREENSHOT_CAPTION :{WHITE}Βγάλτε στιγμιότυπο εικόνας +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Το στιγμιότυπο οθόνης έχει μεγεθυνθεί πλήρως +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Στιγμιότυπο χάρτη υψομετρίας # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Παράμετροι @@ -4476,6 +4543,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Λάθος τύ STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Το {VEHICLE} είναι πολύ μεγάλο μετά την ανανέωση STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Χωρίς εφαρμογή κανόνων αυτόματης ανανέωσης/αντικατάστασης STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(χρηματικό όριο) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Το καινούριο όχημα δεν μπορεί να επανεξοπλιστεί σε σειρά {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Αδύνατος συνδυασμός σιδηροδρόμου @@ -4503,6 +4571,11 @@ 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_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_TRAMWAY :{WHITE}... μη συμβατός τραχιοδρόμος # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Δεν μπορεί να κτιστεί κανάλι εδώ @@ -4759,13 +4832,13 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=n}Ορυχε ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Ανώνυμο -STR_SV_TRAIN_NAME :{G=n}Τρένο {COMMA} +STR_SV_TRAIN_NAME :{G=n}Τρένο #{COMMA} STR_SV_TRAIN_NAME.geniki :Τρένου {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=n}Όχημα Δρόμου {COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=n}Όχημα Δρόμου #{COMMA} STR_SV_ROAD_VEHICLE_NAME.geniki :Οχήματος Δρόμου {COMMA} -STR_SV_SHIP_NAME :{G=n}Πλοίο {COMMA} +STR_SV_SHIP_NAME :{G=n}Πλοίο #{COMMA} STR_SV_SHIP_NAME.geniki :Πλοίου {COMMA} -STR_SV_AIRCRAFT_NAME :{G=n}Αεροσκάφος {COMMA} +STR_SV_AIRCRAFT_NAME :{G=n}Αεροσκάφος #{COMMA} STR_SV_AIRCRAFT_NAME.geniki :Αεροσκάφους {COMMA} STR_SV_STNAME :{STRING} @@ -5068,6 +5141,7 @@ STR_FORMAT_BUOY_NAME :Σημαδού 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/korean.txt b/src/lang/korean.txt index e2044cc81d..a63946547d 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1626,6 +1626,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :재정 창에 STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :재정 창에 나타나는 회사 비용을 어떻게 표시할지 설정합니다. STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :선로 건설 중 신호기 자동 제거: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :신호기가 이미 있는 선로에 선로를 추가로 설치하면 신호기를 자동으로 제거합니다. 잘못 사용하면 잠재적으로 열차가 충돌할 수 있다는 점을 명심하세요. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :빨리 감기 속도 제한: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :빨리 감기를 했을 때 게임이 진행되는 속도를 제한할 수 있습니다. 0으로 설정하면 컴퓨터가 허용하는 만큼 빠르게 돌립니다. 100% 미만의 값으로 설정하면 게임이 느리게 돌아갑니다. 빨리 감기 속도의 최댓값은 컴퓨터의 성능에 따라 결정되며 맵에 따라 다를 수 있습니다. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :보통 게임 속도의 {NUM}% +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :제한 없음 (컴퓨터가 허용하는 만큼 빠르게) STR_CONFIG_SETTING_ENABLE_BUILD_RIVER :강 건설 활성화: {STRING} STR_CONFIG_SETTING_ENABLE_BUILD_RIVER_HELPTEXT :시나리오 편집기 밖에서 강을 건설할 수 있게 할지 설정합니다. diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index b43595b865..99b037c87e 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1457,6 +1457,9 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Grupper utgifte STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definer oppsettet for vinduet som viser selskapets utgifter STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatisk fjerne signaler mens jernbane bygges: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatisk fjerne signaler mens jernbane bygges dersom signalene er i veien. Vær oppmerksom på at dette kan potensielt lede til togkrasj. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Grense for hvor fort spillet kjører: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal hastighet +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ingen grense (så fort som maskinen din tillater) STR_CONFIG_SETTING_SOUND_TICKER :Nyhetstavle: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Spille av lyd for oppsummerte nyhetsmeldinger diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 8f778c90f3..8dfc5c33a2 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -705,7 +705,7 @@ STR_GROUP_BY_SHARED_ORDERS :Polecenia wspó # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Szybkie przemijanie czasu w grze +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Przyspieszenie czasu w grze STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opcje STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Zapis gry, opuszczenie gry, wyjście STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Wyświetl mapę, dodatkowy podgląd lub listę napisów @@ -1834,6 +1834,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Pogrupuj wydatk STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Określa układ okienka wydatków firmy STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatycznie usuwaj sygnały podczas budowy torów: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatycznie usuwaj sygnały, które przeszkadzają w budowie toru. Pamiętaj, że może to doprowadzić do zderzenia pociągów, w przypadku usunięcia ważnych sygnałów. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Ograniczenie prędkości przyspieszonego czasu w grze: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Ograniczenie prędkości gry, kiedy przyspieszenie czasu jest włączone. 0 = bez ograniczenia (tak szybko, jak pozwoli na to komputer). Wartości poniżej 100% spowolnią grę. Górny limit jest zależny od specyfikacji komputera i może się różnić w zależności od rozgrywki. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normalnej prędkości gry +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Brak ograniczenia (tak szybko, jak pozwoli na to komputer) STR_CONFIG_SETTING_SOUND_TICKER :Pasek informacji: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Odtwarzaj dźwięk dla podsumowania wiadomości diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index a7858f9443..dcdc3e3442 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -614,7 +614,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordinador de STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervisor de Rutas STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Jefe STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Subdirector -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director(a) STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnate @@ -697,7 +697,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clic en STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Lista de empresas que han llegado a {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabla de clasificación de empresas en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Hombre de negocios +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Empresario(a) STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresario STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrial STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalista @@ -948,6 +948,7 @@ STR_GAME_OPTIONS_CURRENCY_NTD :Nuevo dólar ta 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) +STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonesia (IDR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Manejar por la izquierda @@ -1004,6 +1005,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :Otra STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Tamaño de la interfaz STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Elegir el tamaño de los elementos de la interfaz +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(detectar) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Cuádruple @@ -1011,6 +1013,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Cuádruple STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamaño de letra STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Elegir qué tamaño de letra usar en la interfaz +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(detectar) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Cuádruple @@ -1452,6 +1455,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupar gastos STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definir el diseño de la ventana de finanzas STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Quitar señales de forma automática al construir vías férreas: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Quitar las señales de forma automática al construir vías férreas si estas obstruyen. Puede provocar choques de trenes. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Límite de velocidad del avance rápido: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Límite de velocidad del avance rápido. 0 significa sin límite o la velocidad que el sistema permita. Valores debajo de 100% retardan el juego. El límite más alto varía en factor de las capacidades del sistema y el juego. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% velocidad normal +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sin límite (lo que permita el sistema) STR_CONFIG_SETTING_SOUND_TICKER :Boletín de noticias: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reproducir sonido para mensajes resumidos de noticias @@ -2847,6 +2854,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: 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? +STR_SAVELOAD_DIRECTORY :{STRING} (Carpeta) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Carpeta superior) STR_SAVELOAD_OSKTITLE :{BLACK}Indicar un nombre para la partida a guardar @@ -2997,7 +3006,7 @@ STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Número # NewGRF inspect window STR_NEWGRF_INSPECT_CAPTION :{WHITE}Analizar: {STRING} STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Superior -STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspeccionar objeto del entorno superior +STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspeccionar objeto del entorno externo STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} en {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objeto diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 5fef927dc2..86d4cdadf9 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1454,6 +1454,10 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Gruppera utgift STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Välj layout för företagens utgiftsfönster STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatiskt ta bort signaler vid byggande av järnväg: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Ta automatiskt bort signaler vid byggande av järnväg om signalerna är i vägen. Notera att detta kan leda till att tåg krockar. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Snabbspolnings begränsning: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Begränsa hur snabbt spelet går när snabbspolning är aktiverad. 0 = ingen begränsning (så snabbt som din dator tillåter). Värden under 100% saktar ner spelet. Den övre begränsningen beror på din dators specifikationer och kan variera beroende på spelet. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal spel hastighet +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ingen begränsning (Så snabbt som din dator tillåter) STR_CONFIG_SETTING_SOUND_TICKER :Summerade nyheter: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Spela ljudeffekt för sammanfattade nyhetsmeddelanden diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index cdb0673af1..b6467f05df 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -309,6 +309,7 @@ STR_SORT_BY_POPULATION :மக்கள STR_SORT_BY_RATING :மதிப்பீடு # Group by options for vehicle list +STR_GROUP_BY_NONE :ஒன்றுமில்லை # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}இடை நிறுத்து @@ -1356,6 +1357,7 @@ STR_CONFIG_SETTING_AI_PROFILE_EASY :எளிதா STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :நடுத்தரமான STR_CONFIG_SETTING_AI_PROFILE_HARD :கடுமையான +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :கணினிகளை பல்வீரர் ஆட்டத்தில் அனுமதி: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :பழுதுபார்த்தல்கள் இடையே உள்ள காலத்தினை சதவிகிதத்தில் காட்டவும்: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS :இரயிகளின் பழுதுபார்த்தல் இடைவேளி: {STRING} @@ -1609,6 +1611,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}நீ # Cheat window STR_CHEATS :{WHITE}ஏமாற்றுகள் +STR_CHEATS_NOTE :{BLACK}குறிப்பு: இந்த அமைப்புகளின் எந்தவொரு பயன்பாடும் பதிவு செய்யப்படும் STR_CHEAT_MONEY :{LTBLUE}{CURRENCY_LONG} ஆக பணத்தை உயர்த்து STR_CHEAT_CHANGE_COMPANY :{LTBLUE}இந்த நிறுவனமாக ஆடுகிறீர்கள்: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}அதிசய நிலச்சமனி (தொழிற்சாலைகள் மற்றும் பொருட்களை நீக்குவதற்கு): {ORANGE}{STRING} @@ -1980,6 +1983,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} புதிய நிறுவனம் (#{2:NUM})வை துவக்கி உள்ளார் STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ஆட்டத்தை விட்டு வெளியேரினார் ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} அவரது/அவளது பெயரினை {STRING} என்று மாற்றினார் +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} தங்கள் நிறுவனத்திற்கு {1:STRING} {2:CURRENCY_LONG} கொடுத்தார் STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}சர்வர் ஆட்டத்தினை முடித்தது STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}சர்வர் மீண்டும் தொடங்குகிறது...{}சற்று பொறுக்கவும்... STR_NETWORK_MESSAGE_KICKED :*** {STRING} வெளியேற்றப்பட்டார். காரணம்: ({STRING}) @@ -2297,7 +2301,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}ஏத # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}புதிய தொழிற்சாலையினை நிறுவு STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}இந்தப் பட்டியலிருந்து பொருத்தமான தொழிற்சாலை ஒன்றினை தேர்ந்தெடு -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :பல மாறுபட்ட தொழிற்சாலைகள் +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}மாறுபட்ட தொழிற்சாலைகளை உருவாக்குக STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}விலை: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}எங்கேயோ நிறுவு STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}கட்டு @@ -2795,10 +2799,10 @@ STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}நிறுவனத்தின் குறிக்கோள்கள்: # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :கேள்வி -STR_GOAL_QUESTION_CAPTION_INFORMATION :தகவல் -STR_GOAL_QUESTION_CAPTION_WARNING :எச்சரிக்கை -STR_GOAL_QUESTION_CAPTION_ERROR :பிழை +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}கேள்வி +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}தகவல் +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}எச்சரிக்கை +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}பிழை ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :இரத்து செய் @@ -2997,6 +3001,7 @@ STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :நிறுவ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :மேலாளரின் பெயர் STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :கொடுக்கப்படும் பணத்தின் அளவினை இடவும் +STR_BUY_COMPANY_MESSAGE :{WHITE}எங்கள் நிறுவனத்தை கையகப்படுத்த ஒரு போக்குவரத்து நிறுவனத்தை நாங்கள் தேடுகிறோம்.{}{}நீங்கள் {COMPANY}யை {CURRENCY_LONG} வாங்க விரும்புகிறீர்களா? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} இன் கட்டுமானங்கள் @@ -3144,11 +3149,12 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_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+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டு +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் இரயில் வாகனத்தை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும். STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் சாலை வாகனத்தை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும் STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் கப்பலை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும் STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் விமானத்தை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும் +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் சாலை வாகனத்தை வாங்கி புதுப்பிக்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும். STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}பெயரிடு STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}பெயரிடு @@ -4258,10 +4264,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :சர்க் ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :பெயரிடாதது -STR_SV_TRAIN_NAME :இரயில் {COMMA} -STR_SV_ROAD_VEHICLE_NAME :சாலை வாகனம் {COMMA} -STR_SV_SHIP_NAME :கப்பல் {COMMA} -STR_SV_AIRCRAFT_NAME :விமானம் {COMMA} +STR_SV_TRAIN_NAME :இரயில் #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :சாலை வாகனம் #{COMMA} +STR_SV_SHIP_NAME :கப்பல் #{COMMA} +STR_SV_AIRCRAFT_NAME :விமானம் #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} வடக்கு diff --git a/src/settings_type.h b/src/settings_type.h index 115d709510..dc5b247761 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -21,6 +21,15 @@ #include "zoom_type.h" #include "openttd.h" +/* Used to validate sizes of "max" value in settings. */ +const size_t MAX_SLE_UINT8 = UINT8_MAX; +const size_t MAX_SLE_UINT16 = UINT16_MAX; +const size_t MAX_SLE_UINT32 = UINT32_MAX; +const size_t MAX_SLE_UINT = UINT_MAX; +const size_t MAX_SLE_INT8 = INT8_MAX; +const size_t MAX_SLE_INT16 = INT16_MAX; +const size_t MAX_SLE_INT32 = INT32_MAX; +const size_t MAX_SLE_INT = INT_MAX; /** Settings profiles and highscore tables. */ enum SettingsProfile { diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index ac3a2a85ac..8dd9ff6f4a 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -186,11 +186,13 @@ struct SettingsIniFile : IniLoadFile { }; OutputStore _stored_output; ///< Temporary storage of the output, until all processing is done. +OutputStore _post_amble_output; ///< Similar to _stored_output, but for the post amble. -static const char *PREAMBLE_GROUP_NAME = "pre-amble"; ///< Name of the group containing the pre amble. +static const char *PREAMBLE_GROUP_NAME = "pre-amble"; ///< Name of the group containing the pre amble. static const char *POSTAMBLE_GROUP_NAME = "post-amble"; ///< Name of the group containing the post amble. -static const char *TEMPLATES_GROUP_NAME = "templates"; ///< Name of the group containing the templates. -static const char *DEFAULTS_GROUP_NAME = "defaults"; ///< Name of the group containing default values for the template variables. +static const char *TEMPLATES_GROUP_NAME = "templates"; ///< Name of the group containing the templates. +static const char *VALIDATION_GROUP_NAME = "validation"; ///< Name of the group containing the validation statements. +static const char *DEFAULTS_GROUP_NAME = "defaults"; ///< Name of the group containing default values for the template variables. /** * Load the INI file. @@ -239,17 +241,84 @@ static const char *FindItemValue(const char *name, IniGroup *grp, IniGroup *defa return item->value->c_str(); } +/** + * Parse a single entry via a template and output this. + * @param item The template to use for the output. + * @param grp Group current being used for template rendering. + * @param default_grp Default values for items not set in @grp. + * @param output Output to use for result. + */ +static void DumpLine(IniItem *item, IniGroup *grp, IniGroup *default_grp, OutputStore &output) +{ + static const int MAX_VAR_LENGTH = 64; + + /* Prefix with #if/#ifdef/#ifndef */ + static const char * const pp_lines[] = {"if", "ifdef", "ifndef", nullptr}; + int count = 0; + for (const char * const *name = pp_lines; *name != nullptr; name++) { + const char *condition = FindItemValue(*name, grp, default_grp); + if (condition != nullptr) { + output.Add("#", 1); + output.Add(*name); + output.Add(" ", 1); + output.Add(condition); + output.Add("\n", 1); + count++; + } + } + + /* Output text of the template, except template variables of the form '$[_a-z0-9]+' which get replaced by their value. */ + const char *txt = item->value->c_str(); + while (*txt != '\0') { + if (*txt != '$') { + output.Add(txt, 1); + txt++; + continue; + } + txt++; + if (*txt == '$') { // Literal $ + output.Add(txt, 1); + txt++; + continue; + } + + /* Read variable. */ + char variable[MAX_VAR_LENGTH]; + int i = 0; + while (i < MAX_VAR_LENGTH - 1) { + if (!(txt[i] == '_' || (txt[i] >= 'a' && txt[i] <= 'z') || (txt[i] >= '0' && txt[i] <= '9'))) break; + variable[i] = txt[i]; + i++; + } + variable[i] = '\0'; + txt += i; + + if (i > 0) { + /* Find the text to output. */ + const char *valitem = FindItemValue(variable, grp, default_grp); + if (valitem != nullptr) output.Add(valitem); + } else { + output.Add("$", 1); + } + } + output.Add("\n", 1); // \n after the expanded template. + while (count > 0) { + output.Add("#endif\n"); + count--; + } +} + /** * Output all non-special sections through the template / template variable expansion system. * @param ifile Loaded INI data. */ 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}; + static const char * const special_group_names[] = {PREAMBLE_GROUP_NAME, POSTAMBLE_GROUP_NAME, DEFAULTS_GROUP_NAME, TEMPLATES_GROUP_NAME, VALIDATION_GROUP_NAME, nullptr}; IniGroup *default_grp = ifile->GetGroup(DEFAULTS_GROUP_NAME, false); IniGroup *templates_grp = ifile->GetGroup(TEMPLATES_GROUP_NAME, false); + IniGroup *validation_grp = ifile->GetGroup(VALIDATION_GROUP_NAME, false); if (templates_grp == nullptr) return; /* Output every group, using its name as template name. */ @@ -263,61 +332,14 @@ static void DumpSections(IniLoadFile *ifile) fprintf(stderr, "settingsgen: Warning: Cannot find template %s\n", grp->name.c_str()); continue; } + DumpLine(template_item, grp, default_grp, _stored_output); - /* Prefix with #if/#ifdef/#ifndef */ - static const char * const pp_lines[] = {"if", "ifdef", "ifndef", nullptr}; - int count = 0; - for (const char * const *name = pp_lines; *name != nullptr; name++) { - const char *condition = FindItemValue(*name, grp, default_grp); - if (condition != nullptr) { - _stored_output.Add("#", 1); - _stored_output.Add(*name); - _stored_output.Add(" ", 1); - _stored_output.Add(condition); - _stored_output.Add("\n", 1); - count++; + if (validation_grp != nullptr) { + IniItem *validation_item = validation_grp->GetItem(grp->name, false); // Find template value. + if (validation_item != nullptr && validation_item->value.has_value()) { + DumpLine(validation_item, grp, default_grp, _post_amble_output); } } - - /* 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->c_str(); - while (*txt != '\0') { - if (*txt != '$') { - _stored_output.Add(txt, 1); - txt++; - continue; - } - txt++; - if (*txt == '$') { // Literal $ - _stored_output.Add(txt, 1); - txt++; - continue; - } - - /* Read variable. */ - char variable[MAX_VAR_LENGTH]; - int i = 0; - while (i < MAX_VAR_LENGTH - 1) { - if (!(txt[i] == '_' || (txt[i] >= 'a' && txt[i] <= 'z') || (txt[i] >= '0' && txt[i] <= '9'))) break; - variable[i] = txt[i]; - i++; - } - variable[i] = '\0'; - txt += i; - - if (i > 0) { - /* Find the text to output. */ - const char *valitem = FindItemValue(variable, grp, default_grp); - if (valitem != nullptr) _stored_output.Add(valitem); - } else { - _stored_output.Add("$", 1); - } - } - _stored_output.Add("\n", 1); // \n after the expanded template. - while (count > 0) { - _stored_output.Add("#endif\n"); - count--; - } } } @@ -476,6 +498,7 @@ int CDECL main(int argc, char *argv[]) } _stored_output.Clear(); + _post_amble_output.Clear(); for (int i = 0; i < mgo.numleft; i++) ProcessIniFile(mgo.argv[i]); @@ -483,6 +506,7 @@ int CDECL main(int argc, char *argv[]) if (output_file == nullptr) { CopyFile(before_file, stdout); _stored_output.Write(stdout); + _post_amble_output.Write(stdout); CopyFile(after_file, stdout); } else { static const char * const tmp_output = "tmp2.xxx"; @@ -494,6 +518,7 @@ int CDECL main(int argc, char *argv[]) } CopyFile(before_file, fp); _stored_output.Write(fp); + _post_amble_output.Write(fp); CopyFile(after_file, fp); fclose(fp); diff --git a/src/table/company_settings.ini b/src/table/company_settings.ini index 0f5237860d..99ec3f871a 100644 --- a/src/table/company_settings.ini +++ b/src/table/company_settings.ini @@ -22,6 +22,9 @@ SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $in SDT_NULL = SDT_NULL($length, $from, $to, $extver), SDT_END = SDT_END() +[validation] +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); + [defaults] flags = 0 guiflags = SGF_PER_COMPANY diff --git a/src/table/currency_settings.ini b/src/table/currency_settings.ini index 15c5d17e21..e09dd7ba7f 100644 --- a/src/table/currency_settings.ini +++ b/src/table/currency_settings.ini @@ -14,6 +14,9 @@ SDT_CHR = SDT_CHR($base, $var, $flags, $guiflags, $def, SDT_STR = SDT_STR($base, $var, $type, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat, $startup, $extver, nullptr), SDT_END = SDT_END() +[validation] +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); + [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NONE diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini index 76bf70ac4e..ccb1081fb1 100644 --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -47,6 +47,13 @@ SDT_OMANY = SDT_OMANY($base, $var, $type, $flags, $guiflags, $def, $ma SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $startup, $extver, nullptr, $orderproc), SDT_END = SDT_END() +[validation] +SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); + [defaults] flags = 0 guiflags = SGF_NONE @@ -151,7 +158,8 @@ var = game_creation.snow_line_height type = SLE_UINT8 def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT -max = MAX_SNOWLINE_HEIGHT * TILE_HEIGHT +# "max" used to be MAX_SNOWLINE_HEIGHT * TILE_HEIGHT, but this would overflow the storage. +max = UINT8_MAX to = SLV_22 ;;game_creation.desert_amount diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini index 6c52703390..4230249606 100644 --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -26,6 +26,10 @@ SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $startup, $extver, nullptr, $orderproc), SDTG_END = SDTG_END() +[validation] +SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); + [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NONE diff --git a/src/table/settings.ini b/src/table/settings.ini index bf936f90fa..ce33a4ffaf 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -153,6 +153,14 @@ SDT_END = SDT_END() SDT_LINKGRAPH_PER_CARGO = SDT_ENUM(GameSettings, linkgraph.distribution_per_cargo[$linkgraph_cargo], SLE_UINT8, $flags | SLF_NOT_IN_CONFIG, $guiflags | SGF_NO_NEWGAME, DT_PER_CARGO_DEFAULT, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO_HELPTEXT, $proc, $from, $to, SC_EXPERT, false, SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_MODES), nullptr, _linkgraph_mode_per_cargo), +[validation] +SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); + [defaults] flags = 0 guiflags = SGF_NONE @@ -592,7 +600,7 @@ type = SLE_UINT16 from = SLV_156 def = 4096 min = 0 -max = 1 << 30 +max = 1 << 15 interval = 1 cat = SC_EXPERT @@ -614,7 +622,7 @@ type = SLE_UINT16 from = SLV_156 def = 4096 min = 0 -max = 1 << 30 +max = 1 << 15 interval = 1 cat = SC_EXPERT @@ -636,7 +644,7 @@ type = SLE_UINT16 from = SLV_175 def = 4096 min = 0 -max = 1 << 30 +max = 1 << 15 interval = 1 cat = SC_EXPERT @@ -657,7 +665,7 @@ var = construction.purchase_land_frame_burst type = SLE_UINT16 def = 1024 min = 0 -max = 1 << 30 +max = 1 << 15 interval = 1 cat = SC_EXPERT patxname = ""buy_land_rate_limit.construction.purchase_land_frame_burst"" @@ -679,7 +687,7 @@ var = construction.build_object_frame_burst type = SLE_UINT16 def = 2048 min = 0 -max = 1 << 30 +max = 1 << 15 interval = 1 cat = SC_EXPERT patxname = ""build_object_rate_limit.construction.build_object_frame_burst"" @@ -5209,7 +5217,7 @@ flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_0ISDISABLED | SGF_NO_NETWORK def = 2500 min = 0 -max = 100000 +max = 50000 interval = 10 str = STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT strhelp = STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT diff --git a/src/table/win32_settings.ini b/src/table/win32_settings.ini index a0913a19d5..c6c56516c5 100644 --- a/src/table/win32_settings.ini +++ b/src/table/win32_settings.ini @@ -18,6 +18,9 @@ SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $startup, $extver, nullptr, $orderproc), SDTG_END = SDTG_END() +[validation] +SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); + [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NONE diff --git a/src/table/window_settings.ini b/src/table/window_settings.ini index ec2d3ceac0..bb20a1d21d 100644 --- a/src/table/window_settings.ini +++ b/src/table/window_settings.ini @@ -14,6 +14,9 @@ SDT_BOOL = SDT_BOOL($base, $var, $flags, $guiflags, $def, SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $startup, $extver, nullptr, $orderproc), SDT_END = SDT_END() +[validation] +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size"); + [defaults] base = WindowDesc flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 01e4c8c0ae..1504e23cb6 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -196,6 +196,10 @@ bool VideoDriver_Cocoa::ToggleFullscreen(bool full_screen) if ([ this->window respondsToSelector:@selector(toggleFullScreen:) ]) { [ this->window performSelector:@selector(toggleFullScreen:) withObject:this->window ]; + + /* Hide the menu bar and the dock */ + [ NSMenu setMenuBarVisible:!full_screen ]; + this->UpdateVideoModes(); return true; } diff --git a/src/video/video_driver.cpp b/src/video/video_driver.cpp index 61688dd55d..b6c4d4717c 100644 --- a/src/video/video_driver.cpp +++ b/src/video/video_driver.cpp @@ -42,7 +42,7 @@ bool VideoDriver::Tick() } /* Prevent drawing when switching mode, as windows can be removed when they should still appear. */ - if (this->HasGUI() && cur_ticks >= this->next_draw_tick && (_switch_mode == SM_NONE || HasModalProgress())) { + if (this->HasGUI() && cur_ticks >= this->next_draw_tick && (_switch_mode == SM_NONE || _game_mode == GM_BOOTSTRAP || HasModalProgress())) { this->next_draw_tick += this->GetDrawInterval(); /* Avoid next_draw_tick getting behind more and more if it cannot keep up. */ if (this->next_draw_tick < cur_ticks - ALLOWED_DRIFT * this->GetDrawInterval()) this->next_draw_tick = cur_ticks; diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index e084b86eff..9c1214f5f1 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -138,7 +138,7 @@ bool VideoDriver_Win32Base::MakeWindow(bool full_screen) _fullscreen = full_screen; /* recreate window? */ - if ((full_screen || this->fullscreen) && this->main_wnd) { + if ((full_screen != this->fullscreen) && this->main_wnd) { DestroyWindow(this->main_wnd); this->main_wnd = 0; } @@ -716,7 +716,9 @@ LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) if (video_driver->fullscreen) { if (active && minimized) { /* Restore the game window */ + Dimension d = _bck_resolution; // Save current non-fullscreen window size as it will be overwritten by ShowWindow. ShowWindow(hwnd, SW_RESTORE); + _bck_resolution = d; video_driver->MakeWindow(true); } else if (!active && !minimized) { /* Minimise the window and restore desktop */