From e07afaeffb1da098dd8d623b5b66b339ee57530c Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 15 Dec 2020 21:39:29 +0100 Subject: [PATCH 01/16] 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 02/16] 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 03/16] 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 04/16] 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 05/16] 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 06/16] 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 07/16] 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 08/16] Update: Translations from eints finnish: 47 changes by hpiirai --- src/lang/finnish.txt | 95 ++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 47 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 09/16] 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 10/16] 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 11/16] 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 12/16] 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 13/16] 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 14/16] 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 15/16] 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 16/16] 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) {