From 60dcf3b5e25e58fa09ac41015436dc9f330c3846 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Jan 2024 19:32:39 +0000 Subject: [PATCH 01/21] Codechange: Rename TownEffect to TownAcceptanceEffect. This makes it clearer that TownEffect only affects acceptance behaviour. --- src/cargotype.h | 22 ++++----- src/economy.cpp | 2 +- src/newgrf.cpp | 12 ++--- src/newgrf_town.cpp | 16 +++---- src/saveload/afterload.cpp | 22 ++++----- src/saveload/oldloader_sl.cpp | 8 ++-- src/saveload/town_sl.cpp | 12 ++--- src/script/api/script_cargo.cpp | 4 +- src/script/api/script_cargo.hpp | 12 ++--- src/script/api/script_town.cpp | 2 +- src/script/api/script_townlist.cpp | 2 +- src/table/cargo_const.h | 76 +++++++++++++++--------------- src/town.h | 6 +-- src/town_cmd.cpp | 22 ++++----- src/town_cmd.h | 4 +- src/town_gui.cpp | 6 +-- 16 files changed, 114 insertions(+), 114 deletions(-) diff --git a/src/cargotype.h b/src/cargotype.h index da4e663495..f6b638f3af 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -21,16 +21,16 @@ typedef uint32_t CargoLabel; /** Town growth effect when delivering cargo. */ -enum TownEffect : byte { - TE_BEGIN = 0, - TE_NONE = TE_BEGIN, ///< Cargo has no effect. - TE_PASSENGERS, ///< Cargo behaves passenger-like. - TE_MAIL, ///< Cargo behaves mail-like. - TE_GOODS, ///< Cargo behaves goods/candy-like. - TE_WATER, ///< Cargo behaves water-like. - TE_FOOD, ///< Cargo behaves food/fizzy-drinks-like. - TE_END, ///< End of town effects. - NUM_TE = TE_END, ///< Amount of town effects. +enum TownAcceptanceEffect : byte { + TAE_BEGIN = 0, + TAE_NONE = TAE_BEGIN, ///< Cargo has no effect. + TAE_PASSENGERS, ///< Cargo behaves passenger-like. + TAE_MAIL, ///< Cargo behaves mail-like. + TAE_GOODS, ///< Cargo behaves goods/candy-like. + TAE_WATER, ///< Cargo behaves water-like. + TAE_FOOD, ///< Cargo behaves food/fizzy-drinks-like. + TAE_END, ///< End of town effects. + NUM_TAE = TAE_END, ///< Amount of town effects. }; /** Cargo classes. */ @@ -64,7 +64,7 @@ struct CargoSpec { uint8_t transit_periods[2]; bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). - TownEffect town_effect; ///< The effect that delivering this cargo type has on towns. Also affects destination of subsidies. + TownAcceptanceEffect town_acceptance_effect; ///< The effect that delivering this cargo type has on towns. Also affects destination of subsidies. uint8_t callback_mask; ///< Bitmask of cargo callbacks that have to be called StringID name; ///< Name of this type of cargo. diff --git a/src/economy.cpp b/src/economy.cpp index dff71a0f48..7b262e7d4d 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1136,7 +1136,7 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, ui /* Increase town's counter for town effects */ const CargoSpec *cs = CargoSpec::Get(cargo_type); - st->town->received[cs->town_effect].new_act += accepted_total; + st->town->received[cs->town_acceptance_effect].new_act += accepted_total; /* Determine profit */ Money profit = GetTransportedGoodsIncome(accepted_total, distance, periods_in_transit, cargo_type); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4f22d04f37..659e2de913 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3066,15 +3066,15 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea uint8_t substitute_type = buf->ReadByte(); switch (substitute_type) { - case 0x00: cs->town_effect = TE_PASSENGERS; break; - case 0x02: cs->town_effect = TE_MAIL; break; - case 0x05: cs->town_effect = TE_GOODS; break; - case 0x09: cs->town_effect = TE_WATER; break; - case 0x0B: cs->town_effect = TE_FOOD; break; + case 0x00: cs->town_acceptance_effect = TAE_PASSENGERS; break; + case 0x02: cs->town_acceptance_effect = TAE_MAIL; break; + case 0x05: cs->town_acceptance_effect = TAE_GOODS; break; + case 0x09: cs->town_acceptance_effect = TAE_WATER; break; + case 0x0B: cs->town_acceptance_effect = TAE_FOOD; break; default: GrfMsg(1, "CargoChangeInfo: Unknown town growth substitute value {}, setting to none.", substitute_type); FALLTHROUGH; - case 0xFF: cs->town_effect = TE_NONE; break; + case 0xFF: cs->town_acceptance_effect = TAE_NONE; break; } break; } diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index 5565551ee0..57a68941a8 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -99,14 +99,14 @@ case 0xC9: return GB(ClampTo(this->t->supplied[CT_MAIL].old_act), 8, 8); case 0xCA: return this->t->GetPercentTransported(CT_PASSENGERS); case 0xCB: return this->t->GetPercentTransported(CT_MAIL); - case 0xCC: return this->t->received[TE_FOOD].new_act; - case 0xCD: return GB(this->t->received[TE_FOOD].new_act, 8, 8); - case 0xCE: return this->t->received[TE_WATER].new_act; - case 0xCF: return GB(this->t->received[TE_WATER].new_act, 8, 8); - case 0xD0: return this->t->received[TE_FOOD].old_act; - case 0xD1: return GB(this->t->received[TE_FOOD].old_act, 8, 8); - case 0xD2: return this->t->received[TE_WATER].old_act; - case 0xD3: return GB(this->t->received[TE_WATER].old_act, 8, 8); + case 0xCC: return this->t->received[TAE_FOOD].new_act; + case 0xCD: return GB(this->t->received[TAE_FOOD].new_act, 8, 8); + case 0xCE: return this->t->received[TAE_WATER].new_act; + case 0xCF: return GB(this->t->received[TAE_WATER].new_act, 8, 8); + case 0xD0: return this->t->received[TAE_FOOD].old_act; + case 0xD1: return GB(this->t->received[TAE_FOOD].old_act, 8, 8); + case 0xD2: return this->t->received[TAE_WATER].old_act; + case 0xD3: return GB(this->t->received[TAE_WATER].old_act, 8, 8); case 0xD4: return this->t->road_build_months; case 0xD5: return this->t->fund_buildings_months; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index b81c8730d2..38b87c0561 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2225,15 +2225,15 @@ bool AfterLoadGame() s->remaining = 12 - s->remaining; // convert "age" to "remaining" s->awarded = INVALID_COMPANY; // not awarded to anyone const CargoSpec *cs = CargoSpec::Get(s->cargo_type); - switch (cs->town_effect) { - case TE_PASSENGERS: - case TE_MAIL: + switch (cs->town_acceptance_effect) { + case TAE_PASSENGERS: + case TAE_MAIL: /* Town -> Town */ s->src_type = s->dst_type = SourceType::Town; if (Town::IsValidID(s->src) && Town::IsValidID(s->dst)) continue; break; - case TE_GOODS: - case TE_FOOD: + case TAE_GOODS: + case TAE_FOOD: /* Industry -> Town */ s->src_type = SourceType::Industry; s->dst_type = SourceType::Town; @@ -2251,9 +2251,9 @@ bool AfterLoadGame() * Town -> Town subsidies are converted using simple heuristic */ s->remaining = 24 - s->remaining; // convert "age of awarded subsidy" to "remaining" const CargoSpec *cs = CargoSpec::Get(s->cargo_type); - switch (cs->town_effect) { - case TE_PASSENGERS: - case TE_MAIL: { + switch (cs->town_acceptance_effect) { + case TAE_PASSENGERS: + case TAE_MAIL: { /* Town -> Town */ const Station *ss = Station::GetIfValid(s->src); const Station *sd = Station::GetIfValid(s->dst); @@ -2813,12 +2813,12 @@ bool AfterLoadGame() /* Set the default cargo requirement for town growth */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_WINTER; + if (FindFirstCargoWithTownAcceptanceEffect(TAE_FOOD) != nullptr) t->goal[TAE_FOOD] = TOWN_GROWTH_WINTER; break; case LT_TROPIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_DESERT; - if (FindFirstCargoWithTownEffect(TE_WATER) != nullptr) t->goal[TE_WATER] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownAcceptanceEffect(TAE_FOOD) != nullptr) t->goal[TAE_FOOD] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownAcceptanceEffect(TAE_WATER) != nullptr) t->goal[TAE_WATER] = TOWN_GROWTH_DESERT; break; } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index c5d405ea57..57510b739a 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -601,10 +601,10 @@ static const OldChunks town_chunk[] = { OCL_NULL( 2 ), ///< pct_pass_transported / pct_mail_transported, now computed on the fly - OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_FOOD].new_act ), - OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_WATER].new_act ), - OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_FOOD].old_act ), - OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_WATER].old_act ), + OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_FOOD].new_act ), + OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_WATER].new_act ), + OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_FOOD].old_act ), + OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_WATER].old_act ), OCL_SVAR( OC_UINT8, Town, road_build_months ), OCL_SVAR( OC_UINT8, Town, fund_buildings_months ), diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 10c0763599..0907b2464f 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -174,7 +174,7 @@ public: void Load(Town *t) const override { - size_t length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? (size_t)TE_END : SlGetStructListLength(TE_END); + size_t length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? (size_t)TAE_END : SlGetStructListLength(TAE_END); for (size_t i = 0; i < length; i++) { SlObject(&t->received[i], this->GetLoadDescription()); } @@ -239,12 +239,12 @@ static const SaveLoad _town_desc[] = { SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, SLV_9, SLV_165), - SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), - SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), - SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), - SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVARNAME(Town, received[TAE_FOOD].old_act, "received[TE_FOOD].old_act", SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVARNAME(Town, received[TAE_WATER].old_act, "received[TE_WATER].old_act", SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVARNAME(Town, received[TAE_FOOD].new_act, "received[TE_FOOD].new_act", SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVARNAME(Town, received[TAE_WATER].new_act, "received[TE_WATER].new_act", SLE_UINT16, SL_MIN_VERSION, SLV_165), - SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION), + SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TAE, SLV_165, SL_MAX_VERSION), SLE_CONDSSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, SLV_168, SL_MAX_VERSION), diff --git a/src/script/api/script_cargo.cpp b/src/script/api/script_cargo.cpp index 814f7b36c2..4f6ab51f67 100644 --- a/src/script/api/script_cargo.cpp +++ b/src/script/api/script_cargo.cpp @@ -25,7 +25,7 @@ /* static */ bool ScriptCargo::IsValidTownEffect(TownEffect towneffect_type) { - return (towneffect_type >= (TownEffect)TE_BEGIN && towneffect_type < (TownEffect)TE_END); + return (towneffect_type >= (TownEffect)TAE_BEGIN && towneffect_type < (TownEffect)TAE_END); } /* static */ std::optional ScriptCargo::GetName(CargoID cargo_type) @@ -67,7 +67,7 @@ { if (!IsValidCargo(cargo_type)) return TE_NONE; - return (ScriptCargo::TownEffect)::CargoSpec::Get(cargo_type)->town_effect; + return (ScriptCargo::TownEffect)::CargoSpec::Get(cargo_type)->town_acceptance_effect; } /* static */ Money ScriptCargo::GetCargoIncome(CargoID cargo_type, SQInteger distance, SQInteger days_in_transit) diff --git a/src/script/api/script_cargo.hpp b/src/script/api/script_cargo.hpp index 40977df165..ff3671ff53 100644 --- a/src/script/api/script_cargo.hpp +++ b/src/script/api/script_cargo.hpp @@ -42,12 +42,12 @@ public: */ enum TownEffect { /* Note: these values represent part of the in-game TownEffect enum */ - TE_NONE = ::TE_NONE, ///< This cargo has no effect on a town - TE_PASSENGERS = ::TE_PASSENGERS, ///< This cargo supplies passengers to a town - TE_MAIL = ::TE_MAIL, ///< This cargo supplies mail to a town - TE_GOODS = ::TE_GOODS, ///< This cargo supplies goods to a town - TE_WATER = ::TE_WATER, ///< This cargo supplies water to a town - TE_FOOD = ::TE_FOOD, ///< This cargo supplies food to a town + TE_NONE = ::TAE_NONE, ///< This cargo has no effect on a town + TE_PASSENGERS = ::TAE_PASSENGERS, ///< This cargo supplies passengers to a town + TE_MAIL = ::TAE_MAIL, ///< This cargo supplies mail to a town + TE_GOODS = ::TAE_GOODS, ///< This cargo supplies goods to a town + TE_WATER = ::TAE_WATER, ///< This cargo supplies water to a town + TE_FOOD = ::TAE_FOOD, ///< This cargo supplies food to a town }; /** diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 57e94db7de..3b700c98f1 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -133,7 +133,7 @@ goal = Clamp(goal, 0, UINT32_MAX); - return ScriptObject::Command::Do(town_id, (::TownEffect)towneffect_id, goal); + return ScriptObject::Command::Do(town_id, (::TownAcceptanceEffect)towneffect_id, goal); } /* static */ SQInteger ScriptTown::GetCargoGoal(TownID town_id, ScriptCargo::TownEffect towneffect_id) diff --git a/src/script/api/script_townlist.cpp b/src/script/api/script_townlist.cpp index ec9a81f3f4..e9ef63e9ac 100644 --- a/src/script/api/script_townlist.cpp +++ b/src/script/api/script_townlist.cpp @@ -20,7 +20,7 @@ ScriptTownList::ScriptTownList(HSQUIRRELVM vm) ScriptTownEffectList::ScriptTownEffectList() { - for (int i = TE_BEGIN; i < TE_END; i++) { + for (int i = TAE_BEGIN; i < TAE_END; i++) { this->AddItem(i); } } diff --git a/src/table/cargo_const.h b/src/table/cargo_const.h index 9d5c4ef0fe..52f615d2ae 100644 --- a/src/table/cargo_const.h +++ b/src/table/cargo_const.h @@ -36,62 +36,62 @@ * @param td1 CargoSpec->transit_periods[0]. * @param td2 CargoSpec->transit_periods[1]. * @param freight Cargo type is considered to be freight (affects train freight multiplier). - * @param te The effect that delivering this cargo type has on towns. Also affects destination of subsidies. + * @param tae The effect that delivering this cargo type has on towns. * @param str_plural The name suffix used to populate CargoSpec->name, CargoSpec->quantifier, * CargoSpec->abbrev and CargoSpec->sprite. See above for more detailed information. * @param str_singular The name suffix used to populate CargoSpec->name_single. See above for more information. * @param str_volume Name of a single unit of cargo of this type. * @param classes Classes of this cargo type. @see CargoClass */ -#define MK(bt, label, colour, weight, mult, ip, td1, td2, freight, te, str_plural, str_singular, str_volume, classes) \ - {label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, te, 0, \ +#define MK(bt, label, colour, weight, mult, ip, td1, td2, freight, tae, str_plural, str_singular, str_volume, classes) \ + {label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, 0, \ MK_STR_CARGO_PLURAL(str_plural), MK_STR_CARGO_SINGULAR(str_singular), str_volume, MK_STR_QUANTITY(str_plural), MK_STR_ABBREV(str_plural), \ MK_SPRITE(str_plural), nullptr, nullptr, 0} /** Cargo types available by default. */ static const CargoSpec _default_cargo[] = { - MK( 0, 'PASS', 152, 1, 0x400, 3185, 0, 24, false, TE_PASSENGERS, PASSENGERS, PASSENGER, STR_PASSENGERS, CC_PASSENGERS), - MK( 1, 'COAL', 6, 16, 0x100, 5916, 7, 255, true, TE_NONE, COAL, COAL, STR_TONS, CC_BULK), - MK( 2, 'MAIL', 15, 4, 0x200, 4550, 20, 90, false, TE_MAIL, MAIL, MAIL, STR_BAGS, CC_MAIL), + MK( 0, 'PASS', 152, 1, 0x400, 3185, 0, 24, false, TAE_PASSENGERS, PASSENGERS, PASSENGER, STR_PASSENGERS, CC_PASSENGERS), + MK( 1, 'COAL', 6, 16, 0x100, 5916, 7, 255, true, TAE_NONE, COAL, COAL, STR_TONS, CC_BULK), + MK( 2, 'MAIL', 15, 4, 0x200, 4550, 20, 90, false, TAE_MAIL, MAIL, MAIL, STR_BAGS, CC_MAIL), /* Oil in temperate and arctic */ - MK( 3, 'OIL_', 174, 16, 0x100, 4437, 25, 255, true, TE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID), + MK( 3, 'OIL_', 174, 16, 0x100, 4437, 25, 255, true, TAE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID), /* Oil in subtropic */ - MK( 3, 'OIL_', 174, 16, 0x100, 4892, 25, 255, true, TE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID), - MK( 4, 'LVST', 208, 3, 0x100, 4322, 4, 18, true, TE_NONE, LIVESTOCK, LIVESTOCK, STR_ITEMS, CC_PIECE_GOODS), - MK( 5, 'GOOD', 194, 8, 0x200, 6144, 5, 28, true, TE_GOODS, GOODS, GOODS, STR_CRATES, CC_EXPRESS), - MK( 6, 'GRAI', 191, 16, 0x100, 4778, 4, 40, true, TE_NONE, GRAIN, GRAIN, STR_TONS, CC_BULK), - MK( 6, 'WHEA', 191, 16, 0x100, 4778, 4, 40, true, TE_NONE, WHEAT, WHEAT, STR_TONS, CC_BULK), - MK( 6, 'MAIZ', 191, 16, 0x100, 4322, 4, 40, true, TE_NONE, MAIZE, MAIZE, STR_TONS, CC_BULK), + MK( 3, 'OIL_', 174, 16, 0x100, 4892, 25, 255, true, TAE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID), + MK( 4, 'LVST', 208, 3, 0x100, 4322, 4, 18, true, TAE_NONE, LIVESTOCK, LIVESTOCK, STR_ITEMS, CC_PIECE_GOODS), + MK( 5, 'GOOD', 194, 8, 0x200, 6144, 5, 28, true, TAE_GOODS, GOODS, GOODS, STR_CRATES, CC_EXPRESS), + MK( 6, 'GRAI', 191, 16, 0x100, 4778, 4, 40, true, TAE_NONE, GRAIN, GRAIN, STR_TONS, CC_BULK), + MK( 6, 'WHEA', 191, 16, 0x100, 4778, 4, 40, true, TAE_NONE, WHEAT, WHEAT, STR_TONS, CC_BULK), + MK( 6, 'MAIZ', 191, 16, 0x100, 4322, 4, 40, true, TAE_NONE, MAIZE, MAIZE, STR_TONS, CC_BULK), /* Wood in temperate and arctic */ - MK( 7, 'WOOD', 84, 16, 0x100, 5005, 15, 255, true, TE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS), + MK( 7, 'WOOD', 84, 16, 0x100, 5005, 15, 255, true, TAE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS), /* Wood in subtropic */ - MK( 7, 'WOOD', 84, 16, 0x100, 7964, 15, 255, true, TE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS), - MK( 8, 'IORE', 184, 16, 0x100, 5120, 9, 255, true, TE_NONE, IRON_ORE, IRON_ORE, STR_TONS, CC_BULK), - MK( 9, 'STEL', 10, 16, 0x100, 5688, 7, 255, true, TE_NONE, STEEL, STEEL, STR_TONS, CC_PIECE_GOODS), - MK( 10, 'VALU', 202, 2, 0x100, 7509, 1, 32, true, TE_NONE, VALUABLES, VALUABLES, STR_BAGS, CC_ARMOURED), - MK( 10, 'GOLD', 202, 8, 0x100, 5802, 10, 40, true, TE_NONE, GOLD, GOLD, STR_BAGS, CC_ARMOURED), - MK( 10, 'DIAM', 202, 2, 0x100, 5802, 10, 255, true, TE_NONE, DIAMONDS, DIAMOND, STR_BAGS, CC_ARMOURED), - MK( 11, 'PAPR', 10, 16, 0x100, 5461, 7, 60, true, TE_NONE, PAPER, PAPER, STR_TONS, CC_PIECE_GOODS), - MK( 12, 'FOOD', 48, 16, 0x100, 5688, 0, 30, true, TE_FOOD, FOOD, FOOD, STR_TONS, CC_EXPRESS | CC_REFRIGERATED), - MK( 13, 'FRUT', 208, 16, 0x100, 4209, 0, 15, true, TE_NONE, FRUIT, FRUIT, STR_TONS, CC_BULK | CC_REFRIGERATED), - MK( 14, 'CORE', 184, 16, 0x100, 4892, 12, 255, true, TE_NONE, COPPER_ORE, COPPER_ORE, STR_TONS, CC_BULK), - MK( 15, 'WATR', 10, 16, 0x100, 4664, 20, 80, true, TE_WATER, WATER, WATER, STR_LITERS, CC_LIQUID), - MK( 16, 'RUBR', 6, 16, 0x100, 4437, 2, 20, true, TE_NONE, RUBBER, RUBBER, STR_LITERS, CC_LIQUID), - MK( 17, 'SUGR', 6, 16, 0x100, 4437, 20, 255, true, TE_NONE, SUGAR, SUGAR, STR_TONS, CC_BULK), - MK( 18, 'TOYS', 174, 2, 0x100, 5574, 25, 255, true, TE_NONE, TOYS, TOY, STR_ITEMS, CC_PIECE_GOODS), - MK( 19, 'BATT', 208, 4, 0x100, 4322, 2, 30, true, TE_NONE, BATTERIES, BATTERY, STR_ITEMS, CC_PIECE_GOODS), - MK( 20, 'SWET', 194, 5, 0x200, 6144, 8, 40, true, TE_GOODS, SWEETS, SWEETS, STR_BAGS, CC_EXPRESS), - MK( 21, 'TOFF', 191, 16, 0x100, 4778, 14, 60, true, TE_NONE, TOFFEE, TOFFEE, STR_TONS, CC_BULK), - MK( 22, 'COLA', 84, 16, 0x100, 4892, 5, 75, true, TE_NONE, COLA, COLA, STR_LITERS, CC_LIQUID), - MK( 23, 'CTCD', 184, 16, 0x100, 5005, 10, 25, true, TE_NONE, CANDYFLOSS, CANDYFLOSS, STR_TONS, CC_BULK), - MK( 24, 'BUBL', 10, 1, 0x100, 5077, 20, 80, true, TE_NONE, BUBBLES, BUBBLE, STR_ITEMS, CC_PIECE_GOODS), - MK( 25, 'PLST', 202, 16, 0x100, 4664, 30, 255, true, TE_NONE, PLASTIC, PLASTIC, STR_LITERS, CC_LIQUID), - MK( 26, 'FZDR', 48, 2, 0x100, 6250, 30, 50, true, TE_FOOD, FIZZY_DRINKS, FIZZY_DRINK, STR_ITEMS, CC_PIECE_GOODS), + MK( 7, 'WOOD', 84, 16, 0x100, 7964, 15, 255, true, TAE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS), + MK( 8, 'IORE', 184, 16, 0x100, 5120, 9, 255, true, TAE_NONE, IRON_ORE, IRON_ORE, STR_TONS, CC_BULK), + MK( 9, 'STEL', 10, 16, 0x100, 5688, 7, 255, true, TAE_NONE, STEEL, STEEL, STR_TONS, CC_PIECE_GOODS), + MK( 10, 'VALU', 202, 2, 0x100, 7509, 1, 32, true, TAE_NONE, VALUABLES, VALUABLES, STR_BAGS, CC_ARMOURED), + MK( 10, 'GOLD', 202, 8, 0x100, 5802, 10, 40, true, TAE_NONE, GOLD, GOLD, STR_BAGS, CC_ARMOURED), + MK( 10, 'DIAM', 202, 2, 0x100, 5802, 10, 255, true, TAE_NONE, DIAMONDS, DIAMOND, STR_BAGS, CC_ARMOURED), + MK( 11, 'PAPR', 10, 16, 0x100, 5461, 7, 60, true, TAE_NONE, PAPER, PAPER, STR_TONS, CC_PIECE_GOODS), + MK( 12, 'FOOD', 48, 16, 0x100, 5688, 0, 30, true, TAE_FOOD, FOOD, FOOD, STR_TONS, CC_EXPRESS | CC_REFRIGERATED), + MK( 13, 'FRUT', 208, 16, 0x100, 4209, 0, 15, true, TAE_NONE, FRUIT, FRUIT, STR_TONS, CC_BULK | CC_REFRIGERATED), + MK( 14, 'CORE', 184, 16, 0x100, 4892, 12, 255, true, TAE_NONE, COPPER_ORE, COPPER_ORE, STR_TONS, CC_BULK), + MK( 15, 'WATR', 10, 16, 0x100, 4664, 20, 80, true, TAE_WATER, WATER, WATER, STR_LITERS, CC_LIQUID), + MK( 16, 'RUBR', 6, 16, 0x100, 4437, 2, 20, true, TAE_NONE, RUBBER, RUBBER, STR_LITERS, CC_LIQUID), + MK( 17, 'SUGR', 6, 16, 0x100, 4437, 20, 255, true, TAE_NONE, SUGAR, SUGAR, STR_TONS, CC_BULK), + MK( 18, 'TOYS', 174, 2, 0x100, 5574, 25, 255, true, TAE_NONE, TOYS, TOY, STR_ITEMS, CC_PIECE_GOODS), + MK( 19, 'BATT', 208, 4, 0x100, 4322, 2, 30, true, TAE_NONE, BATTERIES, BATTERY, STR_ITEMS, CC_PIECE_GOODS), + MK( 20, 'SWET', 194, 5, 0x200, 6144, 8, 40, true, TAE_GOODS, SWEETS, SWEETS, STR_BAGS, CC_EXPRESS), + MK( 21, 'TOFF', 191, 16, 0x100, 4778, 14, 60, true, TAE_NONE, TOFFEE, TOFFEE, STR_TONS, CC_BULK), + MK( 22, 'COLA', 84, 16, 0x100, 4892, 5, 75, true, TAE_NONE, COLA, COLA, STR_LITERS, CC_LIQUID), + MK( 23, 'CTCD', 184, 16, 0x100, 5005, 10, 25, true, TAE_NONE, CANDYFLOSS, CANDYFLOSS, STR_TONS, CC_BULK), + MK( 24, 'BUBL', 10, 1, 0x100, 5077, 20, 80, true, TAE_NONE, BUBBLES, BUBBLE, STR_ITEMS, CC_PIECE_GOODS), + MK( 25, 'PLST', 202, 16, 0x100, 4664, 30, 255, true, TAE_NONE, PLASTIC, PLASTIC, STR_LITERS, CC_LIQUID), + MK( 26, 'FZDR', 48, 2, 0x100, 6250, 30, 50, true, TAE_FOOD, FIZZY_DRINKS, FIZZY_DRINK, STR_ITEMS, CC_PIECE_GOODS), /* Void slot in temperate */ - MK(0xFF, 0, 1, 0, 0x100, 5688, 0, 30, true, TE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE), + MK(0xFF, 0, 1, 0, 0x100, 5688, 0, 30, true, TAE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE), /* Void slot in arctic */ - MK(0xFF, 0, 184, 0, 0x100, 5120, 9, 255, true, TE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE), + MK(0xFF, 0, 184, 0, 0x100, 5120, 9, 255, true, TAE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE), }; diff --git a/src/town.h b/src/town.h index 81dddd2621..75182c285a 100644 --- a/src/town.h +++ b/src/town.h @@ -73,8 +73,8 @@ struct Town : TownPool::PoolItem<&_town_pool> { int16_t ratings[MAX_COMPANIES]; ///< ratings of each company for this town TransportedCargoStat supplied[NUM_CARGO]; ///< Cargo statistics about supplied cargo. - TransportedCargoStat received[NUM_TE]; ///< Cargo statistics about received cargotypes. - uint32_t goal[NUM_TE]; ///< Amount of cargo required for the town to grow. + TransportedCargoStat received[NUM_TAE]; ///< Cargo statistics about received cargotypes. + uint32_t goal[NUM_TAE]; ///< Amount of cargo required for the town to grow. std::string text; ///< General text with additional information. @@ -232,7 +232,7 @@ HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile); void SetTownRatingTestMode(bool mode); TownActions GetMaskOfTownActions(CompanyID cid, const Town *t); bool GenerateTowns(TownLayout layout); -const CargoSpec *FindFirstCargoWithTownEffect(TownEffect effect); +const CargoSpec *FindFirstCargoWithTownAcceptanceEffect(TownAcceptanceEffect effect); extern const byte _town_action_costs[TACT_COUNT]; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index c7ab11ff3b..2f98727a5c 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1920,12 +1920,12 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSi /* Set the default cargo requirement for town growth */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_WINTER; + if (FindFirstCargoWithTownAcceptanceEffect(TAE_FOOD) != nullptr) t->goal[TAE_FOOD] = TOWN_GROWTH_WINTER; break; case LT_TROPIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_DESERT; - if (FindFirstCargoWithTownEffect(TE_WATER) != nullptr) t->goal[TE_WATER] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownAcceptanceEffect(TAE_FOOD) != nullptr) t->goal[TAE_FOOD] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownAcceptanceEffect(TAE_WATER) != nullptr) t->goal[TAE_WATER] = TOWN_GROWTH_DESERT; break; } @@ -2874,10 +2874,10 @@ CommandCost CmdRenameTown(DoCommandFlag flags, TownID town_id, const std::string * @param effect Town effect of interest * @return first active cargo slot with that effect */ -const CargoSpec *FindFirstCargoWithTownEffect(TownEffect effect) +const CargoSpec *FindFirstCargoWithTownAcceptanceEffect(TownAcceptanceEffect effect) { for (const CargoSpec *cs : CargoSpec::Iterate()) { - if (cs->town_effect == effect) return cs; + if (cs->town_acceptance_effect == effect) return cs; } return nullptr; } @@ -2886,25 +2886,25 @@ const CargoSpec *FindFirstCargoWithTownEffect(TownEffect effect) * Change the cargo goal of a town. * @param flags Type of operation. * @param town_id Town ID to cargo game of. - * @param te TownEffect to change the game of. + * @param tae TownEffect to change the game of. * @param goal The new goal value. * @return Empty cost or an error. */ -CommandCost CmdTownCargoGoal(DoCommandFlag flags, TownID town_id, TownEffect te, uint32_t goal) +CommandCost CmdTownCargoGoal(DoCommandFlag flags, TownID town_id, TownAcceptanceEffect tae, uint32_t goal) { if (_current_company != OWNER_DEITY) return CMD_ERROR; - if (te < TE_BEGIN || te >= TE_END) return CMD_ERROR; + if (tae < TAE_BEGIN || tae >= TAE_END) return CMD_ERROR; Town *t = Town::GetIfValid(town_id); if (t == nullptr) return CMD_ERROR; /* Validate if there is a cargo which is the requested TownEffect */ - const CargoSpec *cargo = FindFirstCargoWithTownEffect(te); + const CargoSpec *cargo = FindFirstCargoWithTownAcceptanceEffect(tae); if (cargo == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { - t->goal[te] = goal; + t->goal[tae] = goal; UpdateTownGrowth(t); InvalidateWindowData(WC_TOWN_VIEW, town_id); } @@ -3634,7 +3634,7 @@ static void UpdateTownGrowth(Town *t) if (t->fund_buildings_months == 0) { /* Check if all goals are reached for this town to grow (given we are not funding it) */ - for (int i = TE_BEGIN; i < TE_END; i++) { + for (int i = TAE_BEGIN; i < TAE_END; i++) { switch (t->goal[i]) { case TOWN_GROWTH_WINTER: if (TileHeight(t->xy) >= GetSnowLine() && t->received[i].old_act == 0 && t->cache.population > 90) return; diff --git a/src/town_cmd.h b/src/town_cmd.h index 3ee49365c3..b422c22f17 100644 --- a/src/town_cmd.h +++ b/src/town_cmd.h @@ -14,14 +14,14 @@ #include "company_type.h" #include "town_type.h" -enum TownEffect : byte; +enum TownAcceptanceEffect : byte; std::tuple CmdFoundTown(DoCommandFlag flags, TileIndex tile, TownSize size, bool city, TownLayout layout, bool random_location, uint32_t townnameparts, const std::string &text); CommandCost CmdRenameTown(DoCommandFlag flags, TownID town_id, const std::string &text); CommandCost CmdDoTownAction(DoCommandFlag flags, TownID town_id, uint8_t action); CommandCost CmdTownGrowthRate(DoCommandFlag flags, TownID town_id, uint16_t growth_rate); CommandCost CmdTownRating(DoCommandFlag flags, TownID town_id, CompanyID company_id, int16_t rating); -CommandCost CmdTownCargoGoal(DoCommandFlag flags, TownID town_id, TownEffect te, uint32_t goal); +CommandCost CmdTownCargoGoal(DoCommandFlag flags, TownID town_id, TownAcceptanceEffect tae, uint32_t goal); CommandCost CmdTownSetText(DoCommandFlag flags, TownID town_id, const std::string &text); CommandCost CmdExpandTown(DoCommandFlag flags, TownID town_id, uint32_t grow_amount); CommandCost CmdDeleteTown(DoCommandFlag flags, TownID town_id); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index b283180dc1..9124e09672 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -421,7 +421,7 @@ public: tr.top += GetCharacterHeight(FS_NORMAL); bool first = true; - for (int i = TE_BEGIN; i < TE_END; i++) { + for (int i = TAE_BEGIN; i < TAE_END; i++) { if (this->town->goal[i] == 0) continue; if (this->town->goal[i] == TOWN_GROWTH_WINTER && (TileHeight(this->town->xy) < LowestSnowLine() || this->town->cache.population <= 90)) continue; if (this->town->goal[i] == TOWN_GROWTH_DESERT && (GetTropicZone(this->town->xy) != TROPICZONE_DESERT || this->town->cache.population <= 60)) continue; @@ -434,7 +434,7 @@ public: bool rtl = _current_text_dir == TD_RTL; - const CargoSpec *cargo = FindFirstCargoWithTownEffect((TownEffect)i); + const CargoSpec *cargo = FindFirstCargoWithTownAcceptanceEffect((TownAcceptanceEffect)i); assert(cargo != nullptr); StringID string; @@ -542,7 +542,7 @@ public: uint aimed_height = 3 * GetCharacterHeight(FS_NORMAL); bool first = true; - for (int i = TE_BEGIN; i < TE_END; i++) { + for (int i = TAE_BEGIN; i < TAE_END; i++) { if (this->town->goal[i] == 0) continue; if (this->town->goal[i] == TOWN_GROWTH_WINTER && (TileHeight(this->town->xy) < LowestSnowLine() || this->town->cache.population <= 90)) continue; if (this->town->goal[i] == TOWN_GROWTH_DESERT && (GetTropicZone(this->town->xy) != TROPICZONE_DESERT || this->town->cache.population <= 60)) continue; From 8d69d0549d4d9d605f154301dae35040661d624f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Jan 2024 19:32:39 +0000 Subject: [PATCH 02/21] Codechange: Add town production effect type and assign to cargo types. --- src/cargotype.cpp | 4 ++++ src/cargotype.h | 18 ++++++++++++++++++ src/newgrf.cpp | 8 ++++++++ src/table/cargo_const.h | 2 +- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/cargotype.cpp b/src/cargotype.cpp index dafb4e1164..7181782ec4 100644 --- a/src/cargotype.cpp +++ b/src/cargotype.cpp @@ -22,6 +22,7 @@ #include "safeguards.h" CargoSpec CargoSpec::array[NUM_CARGO]; +std::array, NUM_TPE> CargoSpec::town_production_cargoes{}; /** * Bitmask of cargo types available. This includes phony cargoes like regearing cargoes. @@ -192,6 +193,7 @@ static bool CargoSpecClassSorter(const CargoSpec * const &a, const CargoSpec * c /** Initialize the list of sorted cargo specifications. */ void InitializeSortedCargoSpecs() { + for (auto &tpc : CargoSpec::town_production_cargoes) tpc.clear(); _sorted_cargo_specs.clear(); /* Add each cargo spec to the list, and determine the largest cargo icon size. */ for (const CargoSpec *cargo : CargoSpec::Iterate()) { @@ -210,6 +212,8 @@ void InitializeSortedCargoSpecs() _standard_cargo_mask = 0; uint8_t nb_standard_cargo = 0; for (const auto &cargo : _sorted_cargo_specs) { + assert(cargo->town_production_effect != INVALID_TPE); + CargoSpec::town_production_cargoes[cargo->town_production_effect].push_back(cargo); if (cargo->classes & CC_SPECIAL) break; nb_standard_cargo++; SetBit(_standard_cargo_mask, cargo->Index()); diff --git a/src/cargotype.h b/src/cargotype.h index f6b638f3af..06e2661461 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -33,6 +33,20 @@ enum TownAcceptanceEffect : byte { NUM_TAE = TAE_END, ///< Amount of town effects. }; +/** Town effect when producing cargo. */ +enum TownProductionEffect : byte { + TPE_NONE, ///< Town will not produce this cargo type. + TPE_PASSENGERS, ///< Cargo behaves passenger-like for production. + TPE_MAIL, ///< Cargo behaves mail-like for production. + NUM_TPE, + + /** + * Invalid town production effect. Used as a sentinel to indicate if a NewGRF has explicitly set an effect. + * This does not 'exist' after cargo types are finalised. + */ + INVALID_TPE, +}; + /** Cargo classes. */ enum CargoClass { CC_NOAVAILABLE = 0, ///< No cargo class has been specified @@ -65,6 +79,7 @@ struct CargoSpec { bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). TownAcceptanceEffect town_acceptance_effect; ///< The effect that delivering this cargo type has on towns. Also affects destination of subsidies. + TownProductionEffect town_production_effect{INVALID_TPE}; ///< The effect on town cargo production. uint8_t callback_mask; ///< Bitmask of cargo callbacks that have to be called StringID name; ///< Name of this type of cargo. @@ -171,6 +186,9 @@ struct CargoSpec { */ static IterateWrapper Iterate(size_t from = 0) { return IterateWrapper(from); } + /** List of cargo specs for each Town Product Effect. */ + static std::array, NUM_TPE> town_production_cargoes; + private: static CargoSpec array[NUM_CARGO]; ///< Array holding all CargoSpecs diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 659e2de913..34246726a1 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -9186,6 +9186,14 @@ static void FinaliseEngineArray() void FinaliseCargoArray() { for (CargoSpec &cs : CargoSpec::array) { + if (cs.town_production_effect == INVALID_TPE) { + /* Set default town production effect by cargo label. */ + switch (cs.label) { + case 'PASS': cs.town_production_effect = TPE_PASSENGERS; break; + case 'MAIL': cs.town_production_effect = TPE_MAIL; break; + default: cs.town_production_effect = TPE_NONE; break; + } + } if (!cs.IsValid()) { cs.name = cs.name_single = cs.units_volume = STR_NEWGRF_INVALID_CARGO; cs.quantifier = STR_NEWGRF_INVALID_CARGO_QUANTITY; diff --git a/src/table/cargo_const.h b/src/table/cargo_const.h index 52f615d2ae..b7fc6213fd 100644 --- a/src/table/cargo_const.h +++ b/src/table/cargo_const.h @@ -44,7 +44,7 @@ * @param classes Classes of this cargo type. @see CargoClass */ #define MK(bt, label, colour, weight, mult, ip, td1, td2, freight, tae, str_plural, str_singular, str_volume, classes) \ - {label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, 0, \ + {label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, INVALID_TPE, 0, \ MK_STR_CARGO_PLURAL(str_plural), MK_STR_CARGO_SINGULAR(str_singular), str_volume, MK_STR_QUANTITY(str_plural), MK_STR_ABBREV(str_plural), \ MK_SPRITE(str_plural), nullptr, nullptr, 0} From 6d93fa649cdf9a02605c86a7f78e0544409cc079 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Jan 2024 19:32:41 +0000 Subject: [PATCH 03/21] Change: Towns generate cargo based on town production effect. This replaces the fixed handling of passengers and mail. --- src/town_cmd.cpp | 90 ++++++++++++++++++++++++++++++++---------------- src/town_gui.cpp | 22 ++++++------ 2 files changed, 72 insertions(+), 40 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 2f98727a5c..5663c11815 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -541,9 +541,52 @@ static void TownGenerateCargo(Town *t, CargoID ct, uint amount, StationFinder &s amount = ScaleByCargoScale(amount, true); /* Actually generate cargo and update town statistics. */ - uint moved = MoveGoodsToStation(ct, amount, SourceType::Town, t->index, stations.GetStations()); t->supplied[ct].new_max += amount; - t->supplied[ct].new_act += moved; + t->supplied[ct].new_act += MoveGoodsToStation(ct, amount, SourceType::Town, t->index, stations.GetStations());; +} + +/** + * Generate cargo for a house using the original algorithm. + * @param t The current town. + * @param tpe The town production effect. + * @param rate The town's product rate for this production. + * @param stations Available stations for this house. + */ +static void TownGenerateCargoOriginal(Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations) +{ + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[tpe]) { + uint32_t r = Random(); + if (GB(r, 0, 8) < rate) { + CargoID cid = cs->Index(); + uint amt = GB(r, 0, 8) / 8 + 1; + + TownGenerateCargo(t, cid, amt, stations, true); + } + } +} + +/** + * Generate cargo for a house using the binominal algorithm. + * @param t The current town. + * @param tpe The town production effect. + * @param rate The town's product rate for this production. + * @param stations Available stations for this house. + */ +static void TownGenerateCargoBinominal(Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations) +{ + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[tpe]) { + CargoID cid = cs->Index(); + uint32_t r = Random(); + + /* Make a bitmask with up to 32 bits set, one for each potential pax. */ + int genmax = (rate + 7) / 8; + uint32_t genmask = (genmax >= 32) ? 0xFFFFFFFF : ((1 << genmax) - 1); + + /* Mask random value by potential pax and count number of actual pax. */ + uint amt = CountBits(r & genmask); + + TownGenerateCargo(t, cid, amt, stations, true); + } } /** @@ -600,15 +643,8 @@ static void TileLoop_Town(TileIndex tile) switch (_settings_game.economy.town_cargogen_mode) { case TCGM_ORIGINAL: /* Original (quadratic) cargo generation algorithm */ - if (GB(r, 0, 8) < hs->population) { - uint amt = GB(r, 0, 8) / 8 + 1; - TownGenerateCargo(t, CT_PASSENGERS, amt, stations, true); - } - - if (GB(r, 8, 8) < hs->mail_generation) { - uint amt = GB(r, 8, 8) / 8 + 1; - TownGenerateCargo(t, CT_MAIL, amt, stations, true); - } + TownGenerateCargoOriginal(t, TPE_PASSENGERS, hs->population, stations); + TownGenerateCargoOriginal(t, TPE_MAIL, hs->mail_generation, stations); break; case TCGM_BITCOUNT: @@ -616,20 +652,8 @@ static void TileLoop_Town(TileIndex tile) /* Reduce generation rate to a 1/4, using tile bits to spread out distribution. * As tick counter is incremented by 256 between each call, we ignore the lower 8 bits. */ if (GB(TimerGameTick::counter, 8, 2) == GB(tile.base(), 0, 2)) { - /* Make a bitmask with up to 32 bits set, one for each potential pax */ - int genmax = (hs->population + 7) / 8; - uint32_t genmask = (genmax >= 32) ? 0xFFFFFFFF : ((1 << genmax) - 1); - /* Mask random value by potential pax and count number of actual pax */ - uint amt = CountBits(r & genmask); - /* Adjust and apply */ - TownGenerateCargo(t, CT_PASSENGERS, amt, stations, true); - - /* Do the same for mail, with a fresh random */ - r = Random(); - genmax = (hs->mail_generation + 7) / 8; - genmask = (genmax >= 32) ? 0xFFFFFFFF : ((1 << genmax) - 1); - amt = CountBits(r & genmask); - TownGenerateCargo(t, CT_MAIL, amt, stations, true); + TownGenerateCargoBinominal(t, TPE_PASSENGERS, hs->population, stations); + TownGenerateCargoBinominal(t, TPE_MAIL, hs->mail_generation, stations); } break; @@ -731,10 +755,14 @@ static void AddProducedCargo_Town(TileIndex tile, CargoArray &produced) } } else { if (hs->population > 0) { - produced[CT_PASSENGERS]++; + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[TPE_PASSENGERS]) { + produced[cs->Index()]++; + } } if (hs->mail_generation > 0) { - produced[CT_MAIL]++; + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[TPE_MAIL]) { + produced[cs->Index()]++; + } } } } @@ -1883,8 +1911,12 @@ void UpdateTownRadius(Town *t) */ void UpdateTownMaxPass(Town *t) { - t->supplied[CT_PASSENGERS].old_max = ScaleByCargoScale(t->cache.population >> 3, true); - t->supplied[CT_MAIL].old_max = ScaleByCargoScale(t->cache.population >> 4, true); + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[TPE_PASSENGERS]) { + t->supplied[cs->Index()].old_max = ScaleByCargoScale(t->cache.population >> 3, true); + } + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[TPE_MAIL]) { + t->supplied[cs->Index()].old_max = ScaleByCargoScale(t->cache.population >> 4, true); + } } static void UpdateTownGrowthRate(Town *t); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 9124e09672..c3e1bf1a2a 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -408,17 +408,17 @@ public: tr.top += GetCharacterHeight(FS_NORMAL); StringID str_last_period = TimerGameEconomy::UsingWallclockUnits() ? STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX : STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX; - SetDParam(0, 1 << CT_PASSENGERS); - SetDParam(1, this->town->supplied[CT_PASSENGERS].old_act); - SetDParam(2, this->town->supplied[CT_PASSENGERS].old_max); - DrawString(tr, str_last_period); - tr.top += GetCharacterHeight(FS_NORMAL); - SetDParam(0, 1 << CT_MAIL); - SetDParam(1, this->town->supplied[CT_MAIL].old_act); - SetDParam(2, this->town->supplied[CT_MAIL].old_max); - DrawString(tr, str_last_period); - tr.top += GetCharacterHeight(FS_NORMAL); + for (auto tpe : {TPE_PASSENGERS, TPE_MAIL}) { + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[tpe]) { + CargoID cid = cs->Index(); + SetDParam(0, 1ULL << cid); + SetDParam(1, this->town->supplied[cid].old_act); + SetDParam(2, this->town->supplied[cid].old_max); + DrawString(tr, str_last_period); + tr.top += GetCharacterHeight(FS_NORMAL); + } + } bool first = true; for (int i = TAE_BEGIN; i < TAE_END; i++) { @@ -539,7 +539,7 @@ public: */ uint GetDesiredInfoHeight(int width) const { - uint aimed_height = 3 * GetCharacterHeight(FS_NORMAL); + uint aimed_height = static_cast(1 + CargoSpec::town_production_cargoes[TPE_PASSENGERS].size() + CargoSpec::town_production_cargoes[TPE_MAIL].size()) * GetCharacterHeight(FS_NORMAL); bool first = true; for (int i = TAE_BEGIN; i < TAE_END; i++) { From 03b2640ea181193de604c14e3554f8fa55ca07ab Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Jan 2024 19:32:42 +0000 Subject: [PATCH 04/21] Change: Passenger subsidies are generated for any TPE_PASSENGER cargo type. --- src/subsidy.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 3d9a60408e..7f423b9b57 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -286,9 +286,13 @@ bool FindSubsidyPassengerRoute() { if (!Subsidy::CanAllocateItem()) return false; + /* Pick a random TPE_PASSENGER type */ + uint32_t r = RandomRange(static_cast(CargoSpec::town_production_cargoes[TPE_PASSENGERS].size())); + CargoID cid = CargoSpec::town_production_cargoes[TPE_PASSENGERS][r]->Index(); + const Town *src = Town::GetRandom(); if (src->cache.population < SUBSIDY_PAX_MIN_POPULATION || - src->GetPercentTransported(CT_PASSENGERS) > SUBSIDY_MAX_PCT_TRANSPORTED) { + src->GetPercentTransported(cid) > SUBSIDY_MAX_PCT_TRANSPORTED) { return false; } @@ -298,9 +302,9 @@ bool FindSubsidyPassengerRoute() } if (DistanceManhattan(src->xy, dst->xy) > SUBSIDY_MAX_DISTANCE) return false; - if (CheckSubsidyDuplicate(CT_PASSENGERS, SourceType::Town, src->index, SourceType::Town, dst->index)) return false; + if (CheckSubsidyDuplicate(cid, SourceType::Town, src->index, SourceType::Town, dst->index)) return false; - CreateSubsidy(CT_PASSENGERS, SourceType::Town, src->index, SourceType::Town, dst->index); + CreateSubsidy(cid, SourceType::Town, src->index, SourceType::Town, dst->index); return true; } @@ -332,7 +336,9 @@ bool FindSubsidyTownCargoRoute() } /* Passenger subsidies are not handled here. */ - town_cargo_produced[CT_PASSENGERS] = 0; + for (const CargoSpec *cs : CargoSpec::town_production_cargoes[TPE_PASSENGERS]) { + town_cargo_produced[cs->Index()] = 0; + } uint8_t cargo_count = town_cargo_produced.GetCount(); From 2e6c6b719fb83e831f9af130495eeed444ffe0e1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Jan 2024 19:32:42 +0000 Subject: [PATCH 05/21] Change: Link houses production on industry chain graph by TPE_PASSENGERS or TPE_MAIL cargo. --- src/industry_gui.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 672cd03c85..6810433c17 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2428,10 +2428,11 @@ struct CargoesRow { if (!IsValidCargoID(cargo_fld->u.cargo.supp_cargoes[i])) ind_fld->u.industry.other_produced[i] = others[--other_count]; } } else { - /* Houses only display what is demanded. */ + /* Houses only display cargo that towns produce. */ for (uint i = 0; i < cargo_fld->u.cargo.num_cargoes; i++) { CargoID cid = cargo_fld->u.cargo.vertical_cargoes[i]; - if (cid == CT_PASSENGERS || cid == CT_MAIL) cargo_fld->ConnectCargo(cid, true); + TownProductionEffect tpe = CargoSpec::Get(cid)->town_production_effect; + if (tpe == TPE_PASSENGERS || tpe == TPE_MAIL) cargo_fld->ConnectCargo(cid, true); } } } @@ -2683,8 +2684,10 @@ struct IndustryCargoesWindow : public Window { static bool HousesCanSupply(const CargoID *cargoes, uint length) { for (uint i = 0; i < length; i++) { - if (!IsValidCargoID(cargoes[i])) continue; - if (cargoes[i] == CT_PASSENGERS || cargoes[i] == CT_MAIL) return true; + CargoID cid = cargoes[i]; + if (!IsValidCargoID(cid)) continue; + TownProductionEffect tpe = CargoSpec::Get(cid)->town_production_effect; + if (tpe == TPE_PASSENGERS || tpe == TPE_MAIL) return true; } return false; } From 6f6f09910d00551740d168f8def9ef75bd2ef55f Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Fri, 2 Feb 2024 15:51:57 -0500 Subject: [PATCH 06/21] Fix #10118: Cycle through current signal group, not just path signals (#11798) --- src/lang/english.txt | 2 +- src/rail_gui.cpp | 26 +++++++++++++++++++++++--- src/rail_gui.h | 4 ++-- src/table/settings/gui_settings.ini | 8 ++++---- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index fa7aabb881..b8bd1efa9d 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1939,7 +1939,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year wh STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cycle through signal types: {STRING2} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Select which signal types to cycle through when Ctrl+Clicking on a built signal with the signal tool ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Path signals only +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Current group only STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :All visible STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Show signal types: {STRING2} diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 4c09c32e8d..6185254e86 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -241,16 +241,36 @@ static void GenericPlaceSignals(TileIndex tile) Command::Post(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM, CcPlaySound_CONSTRUCTION_RAIL, tile, track); } else { /* Which signals should we cycle through? */ - SignalType cycle_start = _settings_client.gui.cycle_signal_types == SIGNAL_CYCLE_ALL && _settings_client.gui.signal_gui_mode == SIGNAL_GUI_ALL ? SIGTYPE_BLOCK : SIGTYPE_PBS; + bool tile_has_signal = IsValidTrack(track) && HasSignalOnTrack(tile, track); + SignalType cur_signal_on_tile = tile_has_signal ? GetSignalType(tile, track) : _cur_signal_type; + SignalType cycle_start; + SignalType cycle_end; + + /* Start with the least restrictive case: the player wants to cycle through all signals they can see. */ + if (_settings_client.gui.cycle_signal_types == SIGNAL_CYCLE_ALL) { + cycle_start = _settings_client.gui.signal_gui_mode == SIGNAL_GUI_ALL ? SIGTYPE_BLOCK : SIGTYPE_PBS; + cycle_end = SIGTYPE_LAST; + } else { + /* Only cycle through signals of the same group (block or path) as the current signal on the tile. */ + if (cur_signal_on_tile <= SIGTYPE_LAST_NOPBS) { + /* Block signals only. */ + cycle_start = SIGTYPE_BLOCK; + cycle_end = SIGTYPE_LAST_NOPBS; + } else { + /* Path signals only. */ + cycle_start = SIGTYPE_PBS; + cycle_end = SIGTYPE_LAST; + } + } if (FindWindowById(WC_BUILD_SIGNAL, 0) != nullptr) { /* signal GUI is used */ Command::Post(_convert_signal_button ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE, CcPlaySound_CONSTRUCTION_RAIL, - tile, track, _cur_signal_type, _cur_signal_variant, _convert_signal_button, false, _ctrl_pressed, cycle_start, SIGTYPE_LAST, 0, 0); + tile, track, _cur_signal_type, _cur_signal_variant, _convert_signal_button, false, _ctrl_pressed, cycle_start, cycle_end, 0, 0); } else { SignalVariant sigvar = TimerGameCalendar::year < _settings_client.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC; Command::Post(STR_ERROR_CAN_T_BUILD_SIGNALS_HERE, CcPlaySound_CONSTRUCTION_RAIL, - tile, track, _settings_client.gui.default_signal_type, sigvar, false, false, _ctrl_pressed, cycle_start, SIGTYPE_LAST, 0, 0); + tile, track, _settings_client.gui.default_signal_type, sigvar, false, false, _ctrl_pressed, cycle_start, cycle_end, 0, 0); } } diff --git a/src/rail_gui.h b/src/rail_gui.h index 9af41eb82e..ef51130e8b 100644 --- a/src/rail_gui.h +++ b/src/rail_gui.h @@ -27,8 +27,8 @@ enum SignalGUISettings : uint8_t { /** Settings for which signals are cycled through by control-clicking on the signal with the signal tool. */ enum SignalCycleSettings : uint8_t { - SIGNAL_CYCLE_PATH = 0, ///< Cycle through path signals only. - SIGNAL_CYCLE_ALL = 1, ///< Cycle through all signals visible. + SIGNAL_CYCLE_GROUP = 0, ///< Cycle through current signal group (block or path) only. + SIGNAL_CYCLE_ALL = 1, ///< Cycle through all signals visible to the player. }; #endif /* RAIL_GUI_H */ diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index 5cc1c3ecdb..2abb58464f 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -519,13 +519,13 @@ cat = SC_EXPERT var = gui.cycle_signal_types type = SLE_UINT8 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -def = 0 -min = 0 -max = 1 +def = SIGNAL_CYCLE_GROUP +min = SIGNAL_CYCLE_GROUP +max = SIGNAL_CYCLE_ALL interval = 1 str = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES strhelp = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT -strval = STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS +strval = STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP cat = SC_ADVANCED [SDTC_VAR] From f2db624e85b3a53a57d5b6169b378a2eca46acdc Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Fri, 2 Feb 2024 15:52:20 -0500 Subject: [PATCH 07/21] Change: Add dividers between signal groups (#11897) --- src/rail_gui.cpp | 81 +++++++++++++++++++++------------------ src/widgets/rail_widget.h | 10 +---- 2 files changed, 46 insertions(+), 45 deletions(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 6185254e86..a326c31532 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1717,14 +1717,8 @@ private: { bool show_non_path_signals = (_settings_client.gui.signal_gui_mode == SIGNAL_GUI_ALL); - this->GetWidget(WID_BS_SEMAPHORE_NORM_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_ELECTRIC_NORM_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_SEMAPHORE_ENTRY_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_ELECTRIC_ENTRY_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_SEMAPHORE_EXIT_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_ELECTRIC_EXIT_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_SEMAPHORE_COMBO_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); - this->GetWidget(WID_BS_ELECTRIC_COMBO_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); + this->GetWidget(WID_BS_BLOCK_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); + this->GetWidget(WID_BS_BLOCK_SPACER_SEL)->SetDisplayedPlane(show_non_path_signals ? 0 : SZSP_NONE); } public: @@ -1876,44 +1870,57 @@ public: /** Nested widget definition of the build signal window */ static constexpr NWidgetPart _nested_signal_builder_widgets[] = { + /* Title bar and buttons. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BS_CAPTION), SetDataTip(STR_BUILD_SIGNAL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP), EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_SEMAPHORE_NORM_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_SEMAPHORE_ENTRY_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_SEMAPHORE_EXIT_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_SEMAPHORE_COMBO_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP), EndContainer(), + + /* Container for both signal groups, spacers, and convert/autofill buttons. */ + NWidget(NWID_HORIZONTAL), + /* Block signals (can be hidden). */ + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_BLOCK_SEL), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + /* Semaphore block signals. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP), EndContainer(), + EndContainer(), + /* Electric block signals. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP), EndContainer(), + EndContainer(), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP), EndContainer(), - NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), SetFill(1, 1), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_ELECTRIC_NORM_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_ELECTRIC_ENTRY_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_ELECTRIC_EXIT_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP), EndContainer(), + + /* Divider (only shown if block signals visible). */ + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_BLOCK_SPACER_SEL), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetMinimalSize(4, 0), EndContainer(), + EndContainer(), + + /* Path signals. */ + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + /* Semaphore path signals. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP), EndContainer(), EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_ELECTRIC_COMBO_SEL), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP), EndContainer(), + /* Electric path signals. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP), EndContainer(), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP), EndContainer(), + EndContainer(), + + /* Convert/autofill buttons. */ + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), SetFill(1, 1), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1), NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_JUST_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetTextStyle(TC_ORANGE), SetFill(1, 1), NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2), diff --git a/src/widgets/rail_widget.h b/src/widgets/rail_widget.h index b418e45bd1..a5834b2779 100644 --- a/src/widgets/rail_widget.h +++ b/src/widgets/rail_widget.h @@ -98,14 +98,8 @@ enum BuildSignalWidgets : WidgetID { WID_BS_DRAG_SIGNALS_DENSITY_LABEL, ///< The current signal density. WID_BS_DRAG_SIGNALS_DENSITY_DECREASE, ///< Decrease the signal density. WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, ///< Increase the signal density. - WID_BS_SEMAPHORE_NORM_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_NORM. - WID_BS_ELECTRIC_NORM_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_NORM. - WID_BS_SEMAPHORE_ENTRY_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_ENTRY. - WID_BS_ELECTRIC_ENTRY_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_ENTRY. - WID_BS_SEMAPHORE_EXIT_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_EXIT. - WID_BS_ELECTRIC_EXIT_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_EXIT. - WID_BS_SEMAPHORE_COMBO_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_COMBO. - WID_BS_ELECTRIC_COMBO_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_COMBO. + WID_BS_BLOCK_SEL, ///< Container for the block signal group, which can be hidden. + WID_BS_BLOCK_SPACER_SEL, ///< Container for the spacer between block and path signal groups, which can be hidden. }; /** Widgets of the #BuildRailDepotWindow class. */ From 8a4f0c4b023ce415bd4fbf49572d132b488ae62c Mon Sep 17 00:00:00 2001 From: frosch Date: Fri, 2 Feb 2024 21:30:40 +0100 Subject: [PATCH 08/21] Codechange: Simplify error throwing/catching in squirrel compiler. --- src/3rdparty/squirrel/squirrel/sqcompiler.cpp | 18 +++++++----------- src/3rdparty/squirrel/squirrel/sqcompiler.h | 7 +------ src/3rdparty/squirrel/squirrel/sqfuncstate.cpp | 8 +++----- src/3rdparty/squirrel/squirrel/sqfuncstate.h | 7 ++----- src/3rdparty/squirrel/squirrel/sqlexer.cpp | 6 ++---- src/3rdparty/squirrel/squirrel/sqlexer.h | 6 ++---- 6 files changed, 17 insertions(+), 35 deletions(-) diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp index 668e5a4d27..6f67796839 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp @@ -57,19 +57,15 @@ typedef sqvector ExpStateVec; class SQCompiler { public: - SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _token(0), _fs(nullptr), _lex(_ss(v), rg, up, ThrowError, this), _debugline(0), _debugop(0) + SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _token(0), _fs(nullptr), _lex(_ss(v), rg, up), _debugline(0), _debugop(0) { _vm=v; _sourcename = SQString::Create(_ss(v), sourcename); _lineinfo = lineinfo;_raiseerror = raiseerror; } - NORETURN static void ThrowError(void *ud, const SQChar *s) { - SQCompiler *c = (SQCompiler *)ud; - c->Error(s); - } - NORETURN void Error(const std::string &msg) + [[noreturn]] void Error(const std::string &msg) { - throw msg; + throw CompileException(msg); } void Lex(){ _token = _lex.Lex();} void PushExpState(){ _expstates.push_back(ExpState()); } @@ -159,7 +155,7 @@ public: _debugline = 1; _debugop = 0; - SQFuncState funcstate(_ss(_vm), nullptr,ThrowError,this); + SQFuncState funcstate(_ss(_vm), nullptr); funcstate._name = SQString::Create(_ss(_vm), "main"); _fs = &funcstate; _fs->AddParameter(_fs->CreateString("this")); @@ -181,12 +177,12 @@ public: #endif return true; } - catch (const std::string &compilererror) { + catch (const CompileException &compilererror) { if(_raiseerror && _ss(_vm)->_compilererrorhandler) { - _ss(_vm)->_compilererrorhandler(_vm, compilererror.c_str(), type(_sourcename) == OT_STRING ? _stringval(_sourcename) : "unknown", + _ss(_vm)->_compilererrorhandler(_vm, compilererror.what(), type(_sourcename) == OT_STRING ? _stringval(_sourcename) : "unknown", _lex._currentline, _lex._currentcolumn); } - _vm->_lasterror = SQString::Create(_ss(_vm), compilererror); + _vm->_lasterror = SQString::Create(_ss(_vm), compilererror.what()); return false; } } diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.h b/src/3rdparty/squirrel/squirrel/sqcompiler.h index 08946fb60c..cdb6b1d65c 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.h +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.h @@ -71,12 +71,7 @@ struct SQVM; #define TK_ENUM 323 #define TK_CONST 324 -/* MSVC doesn't like NORETURN for function prototypes, but we kinda need it for GCC. */ -#if defined(_MSC_VER) && !defined(__clang__) -typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s); -#else -typedef NORETURN void(*CompilerErrorFunc)(void *ud, const SQChar *s); -#endif +using CompileException = std::runtime_error; bool Compile(SQVM *vm, SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out, bool raiseerror, bool lineinfo); #endif //_SQCOMPILER_H_ diff --git a/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp b/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp index 1f9decc6e0..e6e64ba81a 100644 --- a/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp +++ b/src/3rdparty/squirrel/squirrel/sqfuncstate.cpp @@ -93,7 +93,7 @@ void DumpLiteral(SQObjectPtr &o) } #endif -SQFuncState::SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc efunc,void *ed) +SQFuncState::SQFuncState(SQSharedState *ss,SQFuncState *parent) { _nliterals = 0; _literals = SQTable::Create(ss,0); @@ -106,15 +106,13 @@ SQFuncState::SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc _traps = 0; _returnexp = 0; _varparams = false; - _errfunc = efunc; - _errtarget = ed; _bgenerator = false; } void SQFuncState::Error(const SQChar *err) { - _errfunc(_errtarget,err); + throw CompileException(err); } #ifdef _DEBUG_DUMP @@ -550,7 +548,7 @@ SQFunctionProto *SQFuncState::BuildProto() SQFuncState *SQFuncState::PushChildState(SQSharedState *ss) { SQFuncState *child = (SQFuncState *)sq_malloc(sizeof(SQFuncState)); - new (child) SQFuncState(ss,this,_errfunc,_errtarget); + new (child) SQFuncState(ss,this); _childstates.push_back(child); return child; } diff --git a/src/3rdparty/squirrel/squirrel/sqfuncstate.h b/src/3rdparty/squirrel/squirrel/sqfuncstate.h index c0bf1e5e9e..739eb16261 100644 --- a/src/3rdparty/squirrel/squirrel/sqfuncstate.h +++ b/src/3rdparty/squirrel/squirrel/sqfuncstate.h @@ -6,12 +6,12 @@ struct SQFuncState { - SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc efunc,void *ed); + SQFuncState(SQSharedState *ss,SQFuncState *parent); ~SQFuncState(); #ifdef _DEBUG_DUMP void Dump(SQFunctionProto *func); #endif - void Error(const SQChar *err); + [[noreturn]] void Error(const SQChar *err); SQFuncState *PushChildState(SQSharedState *ss); void PopChildState(); void AddInstruction(SQOpcode _op,SQInteger arg0=0,SQInteger arg1=0,SQInteger arg2=0,SQInteger arg3=0){SQInstruction i(_op,arg0,arg1,arg2,arg3);AddInstruction(i);} @@ -75,9 +75,6 @@ struct SQFuncState SQSharedState *_sharedstate; sqvector _childstates; SQInteger GetConstant(const SQObject &cons); -private: - CompilerErrorFunc _errfunc; - void *_errtarget; }; diff --git a/src/3rdparty/squirrel/squirrel/sqlexer.cpp b/src/3rdparty/squirrel/squirrel/sqlexer.cpp index e91e9ecc52..f8e9d1754c 100644 --- a/src/3rdparty/squirrel/squirrel/sqlexer.cpp +++ b/src/3rdparty/squirrel/squirrel/sqlexer.cpp @@ -35,10 +35,8 @@ void SQLexer::APPEND_CHAR(char32_t c) } } -SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,CompilerErrorFunc efunc,void *ed) +SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up) { - _errfunc = efunc; - _errtarget = ed; _sharedstate = ss; _keywords = SQTable::Create(ss, 26); ADD_KEYWORD(while, TK_WHILE); @@ -96,7 +94,7 @@ SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,CompilerE NORETURN void SQLexer::Error(const SQChar *err) { - _errfunc(_errtarget,err); + throw CompileException(err); } void SQLexer::Next() diff --git a/src/3rdparty/squirrel/squirrel/sqlexer.h b/src/3rdparty/squirrel/squirrel/sqlexer.h index 3a4e76b339..9ce9469b24 100644 --- a/src/3rdparty/squirrel/squirrel/sqlexer.h +++ b/src/3rdparty/squirrel/squirrel/sqlexer.h @@ -5,8 +5,8 @@ struct SQLexer { ~SQLexer(); - SQLexer(SQSharedState *ss,SQLEXREADFUNC rg,SQUserPointer up,CompilerErrorFunc efunc,void *ed); - NORETURN void Error(const SQChar *err); + SQLexer(SQSharedState *ss,SQLEXREADFUNC rg,SQUserPointer up); + [[noreturn]] void Error(const SQChar *err); SQInteger Lex(); const SQChar *Tok2Str(SQInteger tok); private: @@ -35,8 +35,6 @@ public: char32_t _currdata; SQSharedState *_sharedstate; sqvector _longstr; - CompilerErrorFunc _errfunc; - void *_errtarget; }; #endif From b1718478c853a22481ea756ab0ea2f8b57da47f9 Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 31 Jan 2024 21:03:17 +0100 Subject: [PATCH 09/21] Codechange: Replace old non-standard attributes with C++17/20 standard attributes. --- src/3rdparty/squirrel/squirrel/sqlexer.cpp | 2 +- src/3rdparty/squirrel/squirrel/sqvm.cpp | 10 ++--- src/aircraft.h | 2 +- src/blitter/32bpp_anim_sse4.hpp | 2 +- src/blitter/8bpp_optimized.hpp | 2 +- src/blitter/8bpp_simple.hpp | 2 +- src/company_gui.cpp | 6 +-- src/console.cpp | 2 +- src/core/alloc_func.cpp | 4 +- src/core/alloc_func.hpp | 4 +- src/core/overflowsafe_type.hpp | 6 +-- src/depot_gui.cpp | 2 +- src/disaster_vehicle.h | 2 +- src/effectvehicle_base.h | 2 +- src/elrail.cpp | 2 +- src/engine_gui.cpp | 2 +- src/error.cpp | 4 +- src/error_func.h | 4 +- src/fileio.cpp | 4 +- src/fios_gui.cpp | 2 +- src/industry_gui.cpp | 4 +- src/misc_gui.cpp | 6 +-- src/music/extmidi.cpp | 2 +- src/network/core/network_game_info.cpp | 12 +++--- src/network/network_chat_gui.cpp | 2 +- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 4 +- src/network/network_server.cpp | 2 +- src/newgrf.cpp | 8 ++-- src/newgrf_airport.h | 2 +- src/newgrf_gui.cpp | 8 ++-- src/newgrf_industries.cpp | 2 +- src/newgrf_industries.h | 2 +- src/newgrf_object.cpp | 2 +- src/newgrf_object.h | 2 +- src/newgrf_roadstop.h | 2 +- src/newgrf_station.h | 2 +- src/order_cmd.cpp | 6 +-- src/order_gui.cpp | 2 +- src/os/windows/crashlog_win.cpp | 2 +- src/pathfinder/yapf/yapf_destrail.hpp | 4 +- src/rail_cmd.cpp | 14 +++---- src/rail_gui.cpp | 2 +- src/roadveh.h | 2 +- src/saveload/afterload.cpp | 2 +- src/saveload/company_sl.cpp | 2 +- src/saveload/saveload.cpp | 6 +-- src/saveload/saveload_error.hpp | 6 +-- src/script/api/script_error.cpp | 2 +- src/script/api/script_stationlist.cpp | 4 +- src/settings.cpp | 2 +- src/settingsgen/settingsgen.cpp | 2 +- src/ship.h | 2 +- src/signal.cpp | 4 +- src/signs_gui.cpp | 2 +- src/smallmap_gui.cpp | 8 ++-- src/spritecache.cpp | 2 +- src/station_base.h | 2 +- src/station_cmd.cpp | 2 +- src/stdafx.h | 43 ++-------------------- src/strgen/strgen.cpp | 4 +- src/strgen/strgen.h | 2 +- src/terraform_gui.cpp | 2 +- src/timer/timer.h | 6 +-- src/timetable_gui.cpp | 2 +- src/town_cmd.cpp | 6 +-- src/town_gui.cpp | 2 +- src/train.h | 2 +- src/train_cmd.cpp | 4 +- src/tree_cmd.cpp | 4 +- src/vehicle.cpp | 2 +- src/vehicle_gui.cpp | 10 ++--- src/vehiclelist.cpp | 2 +- src/video/win32_v.cpp | 2 +- src/viewport.cpp | 8 ++-- src/water_cmd.cpp | 8 ++-- src/waypoint_base.h | 2 +- src/widget.cpp | 26 ++++++------- src/window.cpp | 28 +++++++------- 79 files changed, 169 insertions(+), 206 deletions(-) diff --git a/src/3rdparty/squirrel/squirrel/sqlexer.cpp b/src/3rdparty/squirrel/squirrel/sqlexer.cpp index f8e9d1754c..96e43f4af7 100644 --- a/src/3rdparty/squirrel/squirrel/sqlexer.cpp +++ b/src/3rdparty/squirrel/squirrel/sqlexer.cpp @@ -92,7 +92,7 @@ SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up) Next(); } -NORETURN void SQLexer::Error(const SQChar *err) +[[noreturn]] void SQLexer::Error(const SQChar *err) { throw CompileException(err); } diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp index 56f8868c76..02dbc1625d 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.cpp +++ b/src/3rdparty/squirrel/squirrel/sqvm.cpp @@ -217,7 +217,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result) _RET_SUCCEED(_integer(res)) } } - FALLTHROUGH; + [[fallthrough]]; default: _RET_SUCCEED( _userpointer(o1) < _userpointer(o2)?-1:1 ); } @@ -289,7 +289,7 @@ void SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res) //else keeps going to the default } } - FALLTHROUGH; + [[fallthrough]]; default: str = fmt::format("({} : 0x{:08X})",GetTypeName(o),(size_t)(void*)_rawval(o)); } @@ -541,7 +541,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr _generator(o1)->Resume(this, arg_2+1); _FINISH(0); } - FALLTHROUGH; + [[fallthrough]]; default: Raise_Error(fmt::format("cannot iterate {}", GetTypeName(o1))); } @@ -776,7 +776,7 @@ exception_restore: ct_stackbase = _stackbase; goto common_call; } - FALLTHROUGH; + [[fallthrough]]; case _OP_CALL: { ct_tailcall = false; ct_target = arg0; @@ -1338,7 +1338,7 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr return true; } } - FALLTHROUGH; + [[fallthrough]]; case OT_USERDATA: if(_delegable(self)->_delegate) { SQObjectPtr t; diff --git a/src/aircraft.h b/src/aircraft.h index 0beab20dfb..3ac5a6102e 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -71,7 +71,7 @@ struct AircraftCache { /** * Aircraft, helicopters, rotors and their shadows belong to this class. */ -struct Aircraft FINAL : public SpecializedVehicle { +struct Aircraft final : public SpecializedVehicle { uint16_t crashed_counter; ///< Timer for handling crash animations. byte pos; ///< Next desired position of the aircraft. byte previous_pos; ///< Previous desired position of the aircraft. diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index 379e7e9647..d11c90d341 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -32,7 +32,7 @@ #define MARGIN_NORMAL_THRESHOLD 4 /** The SSE4 32 bpp blitter with palette animation. */ -class Blitter_32bppSSE4_Anim FINAL : public Blitter_32bppSSE2_Anim, public Blitter_32bppSSE4 { +class Blitter_32bppSSE4_Anim final : public Blitter_32bppSSE2_Anim, public Blitter_32bppSSE4 { private: public: diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index 169dee0c26..39a7d91d22 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -14,7 +14,7 @@ #include "factory.hpp" /** 8bpp blitter optimised for speed. */ -class Blitter_8bppOptimized FINAL : public Blitter_8bppBase { +class Blitter_8bppOptimized final : public Blitter_8bppBase { public: /** Data stored about a (single) sprite. */ struct SpriteData { diff --git a/src/blitter/8bpp_simple.hpp b/src/blitter/8bpp_simple.hpp index 455d76d937..23d49d7f91 100644 --- a/src/blitter/8bpp_simple.hpp +++ b/src/blitter/8bpp_simple.hpp @@ -14,7 +14,7 @@ #include "factory.hpp" /** Most trivial 8bpp blitter. */ -class Blitter_8bppSimple FINAL : public Blitter_8bppBase { +class Blitter_8bppSimple final : public Blitter_8bppBase { public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 3785d11693..bf25b9022a 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -399,7 +399,7 @@ struct CompanyFinancesWindow : Window { case WID_CF_EXPS_PRICE2: case WID_CF_EXPS_PRICE3: size->height = GetTotalCategoriesHeight(); - FALLTHROUGH; + [[fallthrough]]; case WID_CF_BALANCE_VALUE: case WID_CF_LOAN_VALUE: @@ -819,7 +819,7 @@ public: size->width = 0; break; } - FALLTHROUGH; + [[fallthrough]]; case WID_SCL_PRI_COL_DROPDOWN: { this->square = GetSpriteSize(SPR_SQUARE); @@ -1649,7 +1649,7 @@ public: /* OK button */ case WID_SCMF_ACCEPT: Command::Post(this->face); - FALLTHROUGH; + [[fallthrough]]; /* Cancel button */ case WID_SCMF_CANCEL: diff --git a/src/console.cpp b/src/console.cpp index baeb893e83..9781283095 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -351,7 +351,7 @@ void IConsoleCmdExec(const std::string &command_string, const uint recurse_count tokenstream[tstream_i++] = *++cmdptr; break; } - FALLTHROUGH; + [[fallthrough]]; default: // Normal character tokenstream[tstream_i++] = *cmdptr; diff --git a/src/core/alloc_func.cpp b/src/core/alloc_func.cpp index b02b1a84a4..00f9ecdb1a 100644 --- a/src/core/alloc_func.cpp +++ b/src/core/alloc_func.cpp @@ -17,7 +17,7 @@ * Function to exit with an error message after malloc() or calloc() have failed * @param size number of bytes we tried to allocate */ -void NORETURN MallocError(size_t size) +[[noreturn]] void MallocError(size_t size) { FatalError("Out of memory. Cannot allocate {} bytes", size); } @@ -26,7 +26,7 @@ void NORETURN MallocError(size_t size) * Function to exit with an error message after realloc() have failed * @param size number of bytes we tried to allocate */ -void NORETURN ReallocError(size_t size) +[[noreturn]] void ReallocError(size_t size) { FatalError("Out of memory. Cannot reallocate {} bytes", size); } diff --git a/src/core/alloc_func.hpp b/src/core/alloc_func.hpp index 0e3920a184..3bc4dde683 100644 --- a/src/core/alloc_func.hpp +++ b/src/core/alloc_func.hpp @@ -17,8 +17,8 @@ * binary needlessly large. */ -void NORETURN MallocError(size_t size); -void NORETURN ReallocError(size_t size); +[[noreturn]] void MallocError(size_t size); +[[noreturn]] void ReallocError(size_t size); /** * Checks whether allocating memory would overflow size_t. diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 8e40973192..455510f831 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -53,7 +53,7 @@ public: inline constexpr OverflowSafeInt& operator += (const OverflowSafeInt& other) { #ifdef HAS_OVERFLOW_BUILTINS - if (unlikely(__builtin_add_overflow(this->m_value, other.m_value, &this->m_value))) { + if (__builtin_add_overflow(this->m_value, other.m_value, &this->m_value)) [[unlikely]] { this->m_value = (other.m_value < 0) ? T_MIN : T_MAX; } #else @@ -76,7 +76,7 @@ public: inline constexpr OverflowSafeInt& operator -= (const OverflowSafeInt& other) { #ifdef HAS_OVERFLOW_BUILTINS - if (unlikely(__builtin_sub_overflow(this->m_value, other.m_value, &this->m_value))) { + if (__builtin_sub_overflow(this->m_value, other.m_value, &this->m_value)) [[unlikely]] { this->m_value = (other.m_value < 0) ? T_MAX : T_MIN; } #else @@ -114,7 +114,7 @@ public: { #ifdef HAS_OVERFLOW_BUILTINS const bool is_result_positive = (this->m_value < 0) == (factor < 0); // -ve * -ve == +ve - if (unlikely(__builtin_mul_overflow(this->m_value, factor, &this->m_value))) { + if (__builtin_mul_overflow(this->m_value, factor, &this->m_value)) [[unlikely]] { this->m_value = is_result_positive ? T_MAX : T_MIN; } #else diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index f523825b85..9b7831c156 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -497,7 +497,7 @@ struct DepotWindow : Window { switch (this->type) { case VEH_TRAIN: if (wagon) return MODE_ERROR; - FALLTHROUGH; + [[fallthrough]]; case VEH_ROAD: if (xm <= this->flag_size.width) return MODE_START_STOP; diff --git a/src/disaster_vehicle.h b/src/disaster_vehicle.h index 196f4ade95..fc3abecc6e 100644 --- a/src/disaster_vehicle.h +++ b/src/disaster_vehicle.h @@ -34,7 +34,7 @@ enum DisasterSubType { /** * Disasters, like submarines, skyrangers and their shadows, belong to this class. */ -struct DisasterVehicle FINAL : public SpecializedVehicle { +struct DisasterVehicle final : public SpecializedVehicle { SpriteID image_override; ///< Override for the default disaster vehicle sprite. VehicleID big_ufo_destroyer_target; ///< The big UFO that this destroyer is supposed to bomb. byte flags; ///< Flags about the state of the vehicle, @see AirVehicleFlags diff --git a/src/effectvehicle_base.h b/src/effectvehicle_base.h index 7926a0ee7a..2c0d2744c5 100644 --- a/src/effectvehicle_base.h +++ b/src/effectvehicle_base.h @@ -21,7 +21,7 @@ * - bulldozer (road works) * - bubbles (industry) */ -struct EffectVehicle FINAL : public SpecializedVehicle { +struct EffectVehicle final : public SpecializedVehicle { uint16_t animation_state; ///< State primarily used to change the graphics/behaviour. byte animation_substate; ///< Sub state to time the change of the graphics/behaviour. diff --git a/src/elrail.cpp b/src/elrail.cpp index 72021cb9ed..20fb2facce 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -125,7 +125,7 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) static TrackBits MaskWireBits(TileIndex t, TrackBits tracks) { /* Single track bits are never masked out. */ - if (likely(HasAtMostOneBit(tracks))) return tracks; + if (HasAtMostOneBit(tracks)) [[likely]] return tracks; if (!IsPlainRailTile(t)) return tracks; diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 908c856199..bbf5ba5626 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -128,7 +128,7 @@ struct EnginePreviewWindow : Window { switch (widget) { case WID_EP_YES: Command::Post(this->window_number); - FALLTHROUGH; + [[fallthrough]]; case WID_EP_NO: if (!_shift_pressed) this->Close(); break; diff --git a/src/error.cpp b/src/error.cpp index 2d90a83e2b..a1cba7d02e 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -10,12 +10,12 @@ #include "stdafx.h" #include "error_func.h" -void NORETURN NotReachedError(int line, const char *file) +[[noreturn]] void NotReachedError(int line, const char *file) { FatalError("NOT_REACHED triggered at line {} of {}", line, file); } -void NORETURN AssertFailedError(int line, const char *file, const char *expression) +[[noreturn]] void AssertFailedError(int line, const char *file, const char *expression) { FatalError("Assertion failed at line {} of {}: {}", line, file, expression); } diff --git a/src/error_func.h b/src/error_func.h index a1fb7a2c33..afbe763abe 100644 --- a/src/error_func.h +++ b/src/error_func.h @@ -12,8 +12,8 @@ #include "3rdparty/fmt/format.h" -void NORETURN UserErrorI(const std::string &str); -void NORETURN FatalErrorI(const std::string &str); +[[noreturn]] void UserErrorI(const std::string &str); +[[noreturn]] void FatalErrorI(const std::string &str); #define UserError(format_string, ...) UserErrorI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) #define FatalError(format_string, ...) FatalErrorI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) diff --git a/src/fileio.cpp b/src/fileio.cpp index 26792fa596..71a65e4add 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -327,7 +327,7 @@ FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory s case BASESET_DIR: f = FioFOpenFile(filename, mode, OLD_GM_DIR, filesize); if (f != nullptr) break; - FALLTHROUGH; + [[fallthrough]]; case NEWGRF_DIR: f = FioFOpenFile(filename, mode, OLD_DATA_DIR, filesize); break; @@ -1230,7 +1230,7 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r switch (sd) { case BASESET_DIR: num += this->Scan(extension, OLD_GM_DIR, tars, recursive); - FALLTHROUGH; + [[fallthrough]]; case NEWGRF_DIR: num += this->Scan(extension, OLD_DATA_DIR, tars, recursive); break; diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 041189711f..ac073062fe 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -836,7 +836,7 @@ public: /* We reset the files filtered */ this->OnInvalidateData(SLIWD_FILTER_CHANGES); - FALLTHROUGH; + [[fallthrough]]; case SLIWD_SELECTION_CHANGES: /* Selection changes */ diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 6810433c17..f2420cb8fd 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -886,14 +886,14 @@ public: switch (suffix.display) { case CSD_CARGO_AMOUNT_TEXT: SetDParamStr(3, suffix.text); - FALLTHROUGH; + [[fallthrough]]; case CSD_CARGO_AMOUNT: str = stockpiling ? STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT : STR_INDUSTRY_VIEW_ACCEPT_CARGO; break; case CSD_CARGO_TEXT: SetDParamStr(3, suffix.text); - FALLTHROUGH; + [[fallthrough]]; case CSD_CARGO: str = STR_INDUSTRY_VIEW_ACCEPT_CARGO; break; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 64e1d02840..2e9928e793 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -1025,11 +1025,11 @@ struct QueryStringWindow : public Window switch (widget) { case WID_QS_DEFAULT: this->editbox.text.DeleteAll(); - FALLTHROUGH; + [[fallthrough]]; case WID_QS_OK: this->OnOk(); - FALLTHROUGH; + [[fallthrough]]; case WID_QS_CANCEL: this->Close(); @@ -1181,7 +1181,7 @@ struct QueryWindow : public Window { this->proc(this->parent, true); this->proc = nullptr; } - FALLTHROUGH; + [[fallthrough]]; case WKC_ESC: this->Close(); diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index 74539ff569..af62d3488d 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -122,7 +122,7 @@ void MusicDriver_ExtMidi::DoPlay() case -1: Debug(driver, 0, "extmidi: couldn't fork: {}", strerror(errno)); - FALLTHROUGH; + [[fallthrough]]; default: this->song.clear(); diff --git a/src/network/core/network_game_info.cpp b/src/network/core/network_game_info.cpp index 5c7404040d..ceffa9e227 100644 --- a/src/network/core/network_game_info.cpp +++ b/src/network/core/network_game_info.cpp @@ -274,17 +274,17 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info, const GameInfo switch (game_info_version) { case 7: info->ticks_playing = p->Recv_uint64(); - FALLTHROUGH; + [[fallthrough]]; case 6: newgrf_serialisation = (NewGRFSerializationType)p->Recv_uint8(); if (newgrf_serialisation >= NST_END) return; - FALLTHROUGH; + [[fallthrough]]; case 5: { info->gamescript_version = (int)p->Recv_uint32(); info->gamescript_name = p->Recv_string(NETWORK_NAME_LENGTH); - FALLTHROUGH; + [[fallthrough]]; } case 4: { @@ -326,19 +326,19 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info, const GameInfo *dst = c; dst = &c->next; } - FALLTHROUGH; + [[fallthrough]]; } case 3: info->calendar_date = Clamp(p->Recv_uint32(), 0, CalendarTime::MAX_DATE.base()); info->calendar_start = Clamp(p->Recv_uint32(), 0, CalendarTime::MAX_DATE.base()); - FALLTHROUGH; + [[fallthrough]]; case 2: info->companies_max = p->Recv_uint8 (); info->companies_on = p->Recv_uint8 (); p->Recv_uint8(); // Used to contain max-spectators. - FALLTHROUGH; + [[fallthrough]]; case 1: info->server_name = p->Recv_string(NETWORK_NAME_LENGTH); diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index c91a74bde6..ece8f5e88a 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -454,7 +454,7 @@ struct NetworkChatWindow : public Window { switch (widget) { case WID_NC_SENDBUTTON: /* Send */ SendChat(this->message_editbox.text.buf, this->dtype, this->dest); - FALLTHROUGH; + [[fallthrough]]; case WID_NC_CLOSE: /* Cancel */ this->Close(); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 886992130c..6b16a91647 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -894,7 +894,7 @@ public: return ES_HANDLED; } /* space is pressed and filter is focused. */ - FALLTHROUGH; + [[fallthrough]]; default: return ES_NOT_HANDLED; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index e7a597b9b3..2590475ca7 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2134,7 +2134,7 @@ struct NetworkJoinStatusWindow : Window { progress = 15; // We don't have the final size yet; the server is still compressing! break; } - FALLTHROUGH; + [[fallthrough]]; default: // Waiting is 15%, so the resting receivement of map is maximum 70% progress = 15 + _network_join_bytes * (100 - 15) / _network_join_bytes_total; @@ -2307,7 +2307,7 @@ struct NetworkCompanyPasswordWindow : public Window { switch (widget) { case WID_NCP_OK: this->OnOk(); - FALLTHROUGH; + [[fallthrough]]; case WID_NCP_CANCEL: this->Close(); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index c6cb213115..96c95434e5 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1362,7 +1362,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co } default: Debug(net, 1, "Received unknown chat destination type {}; doing broadcast instead", desttype); - FALLTHROUGH; + [[fallthrough]]; case DESTTYPE_BROADCAST: for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 34246726a1..4781e460a6 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3073,7 +3073,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea case 0x0B: cs->town_acceptance_effect = TAE_FOOD; break; default: GrfMsg(1, "CargoChangeInfo: Unknown town growth substitute value {}, setting to none.", substitute_type); - FALLTHROUGH; + [[fallthrough]]; case 0xFF: cs->town_acceptance_effect = TAE_NONE; break; } break; @@ -4279,7 +4279,7 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR RailType resolved_rt = GetRailTypeByLabel(BSWAP32(label), false); if (resolved_rt != INVALID_RAILTYPE) { switch (prop) { - case 0x0F: SetBit(rti->powered_railtypes, resolved_rt); FALLTHROUGH; // Powered implies compatible. + case 0x0F: SetBit(rti->powered_railtypes, resolved_rt); [[fallthrough]]; // Powered implies compatible. case 0x0E: SetBit(rti->compatible_railtypes, resolved_rt); break; case 0x18: SetBit(rti->introduction_required_railtypes, resolved_rt); break; case 0x19: SetBit(rti->introduces_railtypes, resolved_rt); break; @@ -4396,7 +4396,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte break; } GrfMsg(1, "RailTypeReserveInfo: Ignoring property 1D for rail type {} because no label was set", id + i); - FALLTHROUGH; + [[fallthrough]]; case 0x0E: // Compatible railtype list case 0x0F: // Powered railtype list @@ -4885,7 +4885,7 @@ static bool HandleChangeInfoResult(const char *caller, ChangeInfoResult cir, uin case CIR_UNKNOWN: GrfMsg(0, "{}: Unknown property 0x{:02X} of feature 0x{:02X}, disabling", caller, property, feature); - FALLTHROUGH; + [[fallthrough]]; case CIR_INVALID_ID: { /* No debug message for an invalid ID, as it has already been output */ diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index a07dd504b5..297d0d1c25 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -189,7 +189,7 @@ struct AirportResolverObject : public ResolverObject { { TownScopeResolver *tsr = this->GetTown(); if (tsr != nullptr) return tsr; - FALLTHROUGH; + [[fallthrough]]; } default: return ResolverObject::GetScope(scope, relative); } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index d3d7ad4fe0..c1fdb7aec2 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1048,7 +1048,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { break; } /* With double click, continue */ - FALLTHROUGH; + [[fallthrough]]; } case WID_NS_REMOVE: { // Remove GRF @@ -1106,7 +1106,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { break; } /* With double click, continue */ - FALLTHROUGH; + [[fallthrough]]; } case WID_NS_ADD: @@ -1261,7 +1261,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } this->avails.ForceRebuild(); - FALLTHROUGH; + [[fallthrough]]; case GOID_NEWGRF_CURRENT_LOADED: this->modified = false; @@ -1270,7 +1270,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case GOID_NEWGRF_LIST_EDITED: this->preset = -1; - FALLTHROUGH; + [[fallthrough]]; case GOID_NEWGRF_CHANGES_MADE: UpdateScrollBars(); diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index b2db76a431..59660d0db9 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -126,7 +126,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte param_setID, byte layo case 0xFFFFFFFF: // current grf GrfID = GetIndustrySpec(current->type)->grf_prop.grffile->grfid; - FALLTHROUGH; + [[fallthrough]]; default: // use the grfid specified in register 100h SetBit(param_setID, 7); // bit 7 means it is not an old type diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index 4cae362258..1a2132951e 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -57,7 +57,7 @@ struct IndustriesResolverObject : public ResolverObject { TownScopeResolver *tsr = this->GetTown(); if (tsr != nullptr) return tsr; } - FALLTHROUGH; + [[fallthrough]]; default: return ResolverObject::GetScope(scope, relative); diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 740f82ec97..55c53039b4 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -239,7 +239,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(byte local_id, uint32_t grf case 0xFFFFFFFF: // current grf grf_id = grfid; - FALLTHROUGH; + [[fallthrough]]; default: // use the grfid specified in register 100h idx = _object_mngr.GetID(local_id, grf_id); diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 14200091bf..a763ef5fc5 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -148,7 +148,7 @@ struct ObjectResolverObject : public ResolverObject { case VSG_SCOPE_PARENT: { TownScopeResolver *tsr = this->GetTown(); if (tsr != nullptr) return tsr; - FALLTHROUGH; + [[fallthrough]]; } default: diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index bcea002c87..3c9800c0b1 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -107,7 +107,7 @@ struct RoadStopResolverObject : public ResolverObject { case VSG_SCOPE_PARENT: { TownScopeResolver *tsr = this->GetTown(); if (tsr != nullptr) return tsr; - FALLTHROUGH; + [[fallthrough]]; } default: return ResolverObject::GetScope(scope, relative); } diff --git a/src/newgrf_station.h b/src/newgrf_station.h index eae3a42522..8c9aa60976 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -66,7 +66,7 @@ struct StationResolverObject : public ResolverObject { case VSG_SCOPE_PARENT: { TownScopeResolver *tsr = this->GetTown(); if (tsr != nullptr) return tsr; - FALLTHROUGH; + [[fallthrough]]; } default: diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 1594065a10..03aed58932 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -756,7 +756,7 @@ CommandCost CmdInsertOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se case OSL_PLATFORM_NEAR_END: case OSL_PLATFORM_MIDDLE: if (v->type != VEH_TRAIN) return CMD_ERROR; - FALLTHROUGH; + [[fallthrough]]; case OSL_PLATFORM_FAR_END: break; @@ -865,7 +865,7 @@ CommandCost CmdInsertOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se case OCV_LOAD_PERCENTAGE: case OCV_RELIABILITY: if (new_order.GetConditionValue() > 100) return CMD_ERROR; - FALLTHROUGH; + [[fallthrough]]; default: if (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) return CMD_ERROR; @@ -1388,7 +1388,7 @@ CommandCost CmdModifyOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se case OCV_LOAD_PERCENTAGE: case OCV_RELIABILITY: if (order->GetConditionValue() > 100) order->SetConditionValue(100); - FALLTHROUGH; + [[fallthrough]]; default: if (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) order->SetConditionComparator(OCC_EQUALS); diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 62780c4850..f5b6a4b404 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -844,7 +844,7 @@ public: case VIWD_AUTOREPLACE: /* Autoreplace replaced the vehicle */ this->vehicle = Vehicle::Get(this->window_number); - FALLTHROUGH; + [[fallthrough]]; case VIWD_CONSIST_CHANGED: /* Vehicle composition was changed. */ diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index e74fc5ed0b..b7d830bb8c 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -71,7 +71,7 @@ static const std::map exception_code_to_name{ * * @param exit_code The exit code to return. */ -static void NORETURN ImmediateExitProcess(uint exit_code) +[[noreturn]] static void ImmediateExitProcess(uint exit_code) { /* TerminateProcess may fail in some special edge cases; fall back to ExitProcess in this case. */ TerminateProcess(GetCurrentProcess(), exit_code); diff --git a/src/pathfinder/yapf/yapf_destrail.hpp b/src/pathfinder/yapf/yapf_destrail.hpp index 7abc4294ee..f39a8a2c4b 100644 --- a/src/pathfinder/yapf/yapf_destrail.hpp +++ b/src/pathfinder/yapf/yapf_destrail.hpp @@ -140,7 +140,7 @@ public: * waypoint. */ Yapf().DisableCache(true); } - FALLTHROUGH; + [[fallthrough]]; case OT_GOTO_STATION: m_destTile = CalcClosestStationTile(v->current_order.GetDestination(), v->tile, v->current_order.IsType(OT_GOTO_STATION) ? STATION_RAIL : STATION_WAYPOINT); @@ -152,7 +152,7 @@ public: if (v->current_order.GetDepotActionType() & ODATFB_NEAREST_DEPOT) { m_any_depot = true; } - FALLTHROUGH; + [[fallthrough]]; default: m_destTile = v->dest_tile; diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 6a0377868a..3b93a5d32c 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -562,7 +562,7 @@ CommandCost CmdBuildSingleRail(DoCommandFlag flags, TileIndex tile, RailType rai if (IsLevelCrossing(tile) && GetCrossingRailBits(tile) == trackbit) { return_cmd_error(STR_ERROR_ALREADY_BUILT); } - FALLTHROUGH; + [[fallthrough]]; } default: { @@ -2475,13 +2475,13 @@ static void DrawTile_Track(TileInfo *ti) switch (GetRailDepotDirection(ti->tile)) { case DIAGDIR_NE: if (!IsInvisibilitySet(TO_BUILDINGS)) break; - FALLTHROUGH; + [[fallthrough]]; case DIAGDIR_SW: DrawGroundSprite(ground + RTO_X, PAL_NONE); break; case DIAGDIR_NW: if (!IsInvisibilitySet(TO_BUILDINGS)) break; - FALLTHROUGH; + [[fallthrough]]; case DIAGDIR_SE: DrawGroundSprite(ground + RTO_Y, PAL_NONE); break; @@ -2495,13 +2495,13 @@ static void DrawTile_Track(TileInfo *ti) switch (GetRailDepotDirection(ti->tile)) { case DIAGDIR_NE: if (!IsInvisibilitySet(TO_BUILDINGS)) break; - FALLTHROUGH; + [[fallthrough]]; case DIAGDIR_SW: DrawGroundSprite(overlay + RTO_X, PALETTE_CRASH); break; case DIAGDIR_NW: if (!IsInvisibilitySet(TO_BUILDINGS)) break; - FALLTHROUGH; + [[fallthrough]]; case DIAGDIR_SE: DrawGroundSprite(overlay + RTO_Y, PALETTE_CRASH); break; @@ -2515,13 +2515,13 @@ static void DrawTile_Track(TileInfo *ti) switch (GetRailDepotDirection(ti->tile)) { case DIAGDIR_NE: if (!IsInvisibilitySet(TO_BUILDINGS)) break; - FALLTHROUGH; + [[fallthrough]]; case DIAGDIR_SW: DrawGroundSprite(rti->base_sprites.single_x, PALETTE_CRASH); break; case DIAGDIR_NW: if (!IsInvisibilitySet(TO_BUILDINGS)) break; - FALLTHROUGH; + [[fallthrough]]; case DIAGDIR_SE: DrawGroundSprite(rti->base_sprites.single_y, PALETTE_CRASH); break; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index a326c31532..636f5e6c2b 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -2305,7 +2305,7 @@ static void SetDefaultRailGui() if (count[rt] > 0) break; /* No rail, just get the first available one */ - FALLTHROUGH; + [[fallthrough]]; } case 0: { /* Use first available type */ diff --git a/src/roadveh.h b/src/roadveh.h index f05e7ee3a6..3205da5083 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -103,7 +103,7 @@ struct RoadVehPathCache { /** * Buses, trucks and trams belong to this class. */ -struct RoadVehicle FINAL : public GroundVehicle { +struct RoadVehicle final : public GroundVehicle { RoadVehPathCache path; ///< Cached path. byte state; ///< @see RoadVehicleStates byte frame; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 38b87c0561..6954d0909b 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -160,7 +160,7 @@ static void ConvertTownOwner() if (GB(tile.m5(), 4, 2) == ROAD_TILE_CROSSING && HasBit(tile.m3(), 7)) { tile.m3() = OWNER_TOWN; } - FALLTHROUGH; + [[fallthrough]]; case MP_TUNNELBRIDGE: if (tile.m1() & 0x80) SetTileOwner(tile, OWNER_TOWN); diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 99e8b43a51..ef83c6de03 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -186,7 +186,7 @@ void AfterLoadCompanyStats() } } } - FALLTHROUGH; + [[fallthrough]]; case MP_OBJECT: if (GetWaterClass(tile) == WATER_CLASS_CANAL) { diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 78032edc9d..c4e078cf39 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -329,7 +329,7 @@ static void SlNullPointers() * @note This function does never return as it throws an exception to * break out of all the saveload code. */ -void NORETURN SlError(StringID string, const std::string &extra_msg) +[[noreturn]] void SlError(StringID string, const std::string &extra_msg) { /* Distinguish between loading into _load_check_data vs. normal save/load. */ if (_sl.action == SLA_LOAD_CHECK) { @@ -359,7 +359,7 @@ void NORETURN SlError(StringID string, const std::string &extra_msg) * @note This function does never return as it throws an exception to * break out of all the saveload code. */ -void NORETURN SlErrorCorrupt(const std::string &msg) +[[noreturn]] void SlErrorCorrupt(const std::string &msg) { SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, msg); } @@ -1934,7 +1934,7 @@ void ChunkHandler::LoadCheck(size_t len) const case CH_TABLE: case CH_SPARSE_TABLE: SlTableHeader({}); - FALLTHROUGH; + [[fallthrough]]; case CH_ARRAY: case CH_SPARSE_ARRAY: SlSkipArray(); diff --git a/src/saveload/saveload_error.hpp b/src/saveload/saveload_error.hpp index 1bf3c1556c..5500d90231 100644 --- a/src/saveload/saveload_error.hpp +++ b/src/saveload/saveload_error.hpp @@ -13,8 +13,8 @@ #include "../3rdparty/fmt/format.h" #include "../strings_type.h" -void NORETURN SlError(StringID string, const std::string &extra_msg = {}); -void NORETURN SlErrorCorrupt(const std::string &msg); +[[noreturn]] void SlError(StringID string, const std::string &extra_msg = {}); +[[noreturn]] void SlErrorCorrupt(const std::string &msg); /** * Issue an SlErrorCorrupt with a format string. @@ -25,7 +25,7 @@ void NORETURN SlErrorCorrupt(const std::string &msg); * break out of all the saveload code. */ template -inline void NORETURN SlErrorCorruptFmt(const fmt::format_string format, Args&&... fmt_args) +[[noreturn]] inline void SlErrorCorruptFmt(const fmt::format_string format, Args&&... fmt_args) { SlErrorCorrupt(fmt::format(format, std::forward(fmt_args)...)); } diff --git a/src/script/api/script_error.cpp b/src/script/api/script_error.cpp index 3d365c23bb..1d18ef112a 100644 --- a/src/script/api/script_error.cpp +++ b/src/script/api/script_error.cpp @@ -38,7 +38,7 @@ ScriptError::ScriptErrorMapString ScriptError::error_map_string = ScriptError::S case TEXT_TAB_SPECIAL: if (index < 0xE4) break; // Player name - FALLTHROUGH; + [[fallthrough]]; case TEXT_TAB_TOWN: if (index < 0xC0) break; // Town name diff --git a/src/script/api/script_stationlist.cpp b/src/script/api/script_stationlist.cpp index d2c1d532b1..c7038c1ca1 100644 --- a/src/script/api/script_stationlist.cpp +++ b/src/script/api/script_stationlist.cpp @@ -153,13 +153,13 @@ void CargoCollector::Update(StationID from, StationID via, uint amount) switch (Tselector) { case ScriptStationList_Cargo::CS_VIA_BY_FROM: if (via != this->other_station) return; - FALLTHROUGH; + [[fallthrough]]; case ScriptStationList_Cargo::CS_BY_FROM: key = from; break; case ScriptStationList_Cargo::CS_FROM_BY_VIA: if (from != this->other_station) return; - FALLTHROUGH; + [[fallthrough]]; case ScriptStationList_Cargo::CS_BY_VIA: key = via; break; diff --git a/src/settings.cpp b/src/settings.cpp index 18c4790818..e2e3116531 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -255,7 +255,7 @@ static int ParseIntList(const char *p, T *items, size_t maxitems) /* Do not accept multiple commas between numbers */ if (!comma) return -1; comma = false; - FALLTHROUGH; + [[fallthrough]]; case ' ': p++; diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 869ec5bb30..0ab4d5bd43 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -27,7 +27,7 @@ * @param s Format string. * @note Function does not return. */ -void NORETURN FatalErrorI(const std::string &msg) +[[noreturn]] void FatalErrorI(const std::string &msg) { fmt::print(stderr, "settingsgen: FATAL: {}\n", msg); exit(1); diff --git a/src/ship.h b/src/ship.h index 955bbf6bfe..5335deefeb 100644 --- a/src/ship.h +++ b/src/ship.h @@ -21,7 +21,7 @@ typedef std::deque ShipPathCache; /** * All ships have this type. */ -struct Ship FINAL : public SpecializedVehicle { +struct Ship final : public SpecializedVehicle { TrackBits state; ///< The "track" the ship is following. ShipPathCache path; ///< Cached path. Direction rotation; ///< Visible direction. diff --git a/src/signal.cpp b/src/signal.cpp index 2326ad78fb..d060c58d22 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -500,7 +500,7 @@ static SigSegState UpdateSignalsInBuffer(Owner owner) _tbdset.Add(tile, INVALID_DIAGDIR); // start from depot inside break; } - FALLTHROUGH; + [[fallthrough]]; case MP_STATION: case MP_ROAD: @@ -510,7 +510,7 @@ static SigSegState UpdateSignalsInBuffer(Owner owner) _tbdset.Add(tile + TileOffsByDiagDir(dir), ReverseDiagDir(dir)); break; } - FALLTHROUGH; + [[fallthrough]]; default: /* jump to next tile */ diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 848cb8e529..9826c87087 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -521,7 +521,7 @@ struct SignWindow : Window, SignList { case WID_QES_OK: if (RenameSign(this->cur_sign, this->name_editbox.text.buf)) break; - FALLTHROUGH; + [[fallthrough]]; case WID_QES_CANCEL: this->Close(); diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 3df7ab6e14..b058290aaf 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -506,7 +506,7 @@ static inline uint32_t GetSmallMapRoutesPixels(TileIndex tile, TileType t) const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; return ApplyMask(cs->default_colour, &andor); } - FALLTHROUGH; + [[fallthrough]]; } default: @@ -1598,11 +1598,11 @@ public: if (tbl->show_on_map && tbl->type == _smallmap_industry_highlight) { legend_colour = _smallmap_industry_highlight_state ? PC_WHITE : PC_BLACK; } - FALLTHROUGH; + [[fallthrough]]; case SMT_LINKSTATS: SetDParam(0, tbl->legend); - FALLTHROUGH; + [[fallthrough]]; case SMT_OWNER: if (this->map_type != SMT_OWNER || tbl->company != INVALID_COMPANY) { @@ -1617,7 +1617,7 @@ public: } break; } - FALLTHROUGH; + [[fallthrough]]; default: if (this->map_type == SMT_CONTOUR) SetDParam(0, tbl->height * TILE_HEIGHT_STEP); diff --git a/src/spritecache.cpp b/src/spritecache.cpp index ae97b53fcc..0762e905bf 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -913,7 +913,7 @@ static void *HandleInvalidSpriteRequest(SpriteID sprite, SpriteType requested, S switch (requested) { case SpriteType::Normal: if (sprite == SPR_IMG_QUERY) UserError("Uhm, would you be so kind not to load a NewGRF that makes the 'query' sprite a non-normal sprite?"); - FALLTHROUGH; + [[fallthrough]]; case SpriteType::Font: return GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, allocator); case SpriteType::Recolour: diff --git a/src/station_base.h b/src/station_base.h index 86b43fbf14..f3f19fc382 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -439,7 +439,7 @@ struct IndustryCompare { typedef std::set IndustryList; /** Station data structure */ -struct Station FINAL : SpecializedStation { +struct Station final : SpecializedStation { public: RoadStop *GetPrimaryRoadStop(RoadStopType type) const { diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index f1bcd69fd0..9e10faa9d0 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3450,7 +3450,7 @@ static void TileLoop_Station(TileIndex tile) case STATION_DOCK: if (!IsTileFlat(tile)) break; // only handle water part - FALLTHROUGH; + [[fallthrough]]; case STATION_OILRIG: //(station part) case STATION_BUOY: diff --git a/src/stdafx.h b/src/stdafx.h index 8b474920e7..5fc27f4dcc 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -84,24 +84,7 @@ /* Stuff for GCC */ #if defined(__GNUC__) || (defined(__clang__) && !defined(_MSC_VER)) -# define NORETURN __attribute__ ((noreturn)) # define CDECL -# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) -# define FINAL final -# else -# define FINAL -# endif - - /* Use fallthrough attribute where supported */ -# if __GNUC__ >= 7 -# if __cplusplus > 201402L // C++17 -# define FALLTHROUGH [[fallthrough]] -# else -# define FALLTHROUGH __attribute__((fallthrough)) -# endif -# else -# define FALLTHROUGH -# endif #endif /* __GNUC__ || __clang__ */ #if __GNUC__ > 11 || (__GNUC__ == 11 && __GNUC_MINOR__ >= 1) @@ -110,13 +93,6 @@ # define NOACCESS(args) #endif -/* [[nodiscard]] on constructors doesn't work in GCC older than 10.1. */ -#if __GNUC__ < 10 || (__GNUC__ == 10 && __GNUC_MINOR__ < 1) -# define NODISCARD -#else -# define NODISCARD [[nodiscard]] -#endif - #if defined(_WIN32) # define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #endif @@ -154,20 +130,11 @@ # include # endif -# define NORETURN __declspec(noreturn) # if (_MSC_VER < 1900) # define inline __forceinline # endif # define CDECL _cdecl -# define FINAL final - - /* fallthrough attribute, VS 2017 */ -# if (_MSC_VER >= 1910) || defined(__clang__) -# define FALLTHROUGH [[fallthrough]] -# else -# define FALLTHROUGH -# endif # if defined(_WIN32) && !defined(_WIN64) # if !defined(_W64) @@ -373,26 +340,22 @@ static_assert(SIZE_MAX >= UINT32_MAX); #endif /* __APPLE__ */ #if defined(__GNUC__) || defined(__clang__) -# define likely(x) __builtin_expect(!!(x), 1) -# define unlikely(x) __builtin_expect(!!(x), 0) # define GNU_TARGET(x) [[gnu::target(x)]] #else -# define likely(x) (x) -# define unlikely(x) (x) # define GNU_TARGET(x) #endif /* __GNUC__ || __clang__ */ /* For the FMT library we only want to use the headers, not link to some library. */ #define FMT_HEADER_ONLY -void NORETURN NotReachedError(int line, const char *file); -void NORETURN AssertFailedError(int line, const char *file, const char *expression); +[[noreturn]] void NotReachedError(int line, const char *file); +[[noreturn]] void AssertFailedError(int line, const char *file, const char *expression); #define NOT_REACHED() NotReachedError(__LINE__, __FILE__) /* For non-debug builds with assertions enabled use the special assertion handler. */ #if defined(NDEBUG) && defined(WITH_ASSERT) # undef assert -# define assert(expression) do { if (unlikely(!(expression))) AssertFailedError(__LINE__, __FILE__, #expression); } while (false) +# define assert(expression) do { if (!(expression)) [[unlikely]] AssertFailedError(__LINE__, __FILE__, #expression); } while (false) #endif /* Define JSON_ASSERT, which is used by nlohmann-json. Otherwise the header-file diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 49ca24087e..6b65b60cfb 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -49,7 +49,7 @@ void StrgenErrorI(const std::string &msg) _errors++; } -void NORETURN StrgenFatalI(const std::string &msg) +[[noreturn]] void StrgenFatalI(const std::string &msg) { fmt::print(stderr, LINE_NUM_FMT("FATAL"), _file, _cur_line, msg); #ifdef _MSC_VER @@ -58,7 +58,7 @@ void NORETURN StrgenFatalI(const std::string &msg) throw std::exception(); } -void NORETURN FatalErrorI(const std::string &msg) +[[noreturn]] void FatalErrorI(const std::string &msg) { fmt::print(stderr, LINE_NUM_FMT("FATAL"), _file, _cur_line, msg); #ifdef _MSC_VER diff --git a/src/strgen/strgen.h b/src/strgen/strgen.h index e07c19b098..b7ff9ef4cb 100644 --- a/src/strgen/strgen.h +++ b/src/strgen/strgen.h @@ -149,7 +149,7 @@ ParsedCommandStruct ExtractCommandString(const char *s, bool warnings); void StrgenWarningI(const std::string &msg); void StrgenErrorI(const std::string &msg); -void NORETURN StrgenFatalI(const std::string &msg); +[[noreturn]] void StrgenFatalI(const std::string &msg); #define StrgenWarning(format_string, ...) StrgenWarningI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) #define StrgenError(format_string, ...) StrgenErrorI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) #define StrgenFatal(format_string, ...) StrgenFatalI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index e589c4f20e..0fe5e2b053 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -83,7 +83,7 @@ static void GenerateRockyArea(TileIndex end, TileIndex start) switch (GetTileType(tile)) { case MP_TREES: if (GetTreeGround(tile) == TREE_GROUND_SHORE) continue; - FALLTHROUGH; + [[fallthrough]]; case MP_CLEAR: MakeClear(tile, CLEAR_ROCKS, 3); diff --git a/src/timer/timer.h b/src/timer/timer.h index d49d60aaff..3b76be0bac 100644 --- a/src/timer/timer.h +++ b/src/timer/timer.h @@ -30,7 +30,7 @@ public: * * @param period The period of the timer. */ - NODISCARD BaseTimer(const TPeriod period) : + [[nodiscard]] BaseTimer(const TPeriod period) : period(period) { TimerManager::RegisterTimer(*this); @@ -84,7 +84,7 @@ public: * @param interval The interval between each callback. * @param callback The callback to call when the interval has passed. */ - NODISCARD IntervalTimer(const TPeriod interval, std::function callback) : + [[nodiscard]] IntervalTimer(const TPeriod interval, std::function callback) : BaseTimer(interval), callback(callback) { @@ -127,7 +127,7 @@ public: * @param callback The callback to call when the timeout has passed. * @param start Whether to start the timer immediately. If false, you can call Reset() to start it. */ - NODISCARD TimeoutTimer(const TPeriod timeout, std::function callback, bool start = false) : + [[nodiscard]] TimeoutTimer(const TPeriod timeout, std::function callback, bool start = false) : BaseTimer(timeout), fired(!start), callback(callback) diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 961e25eda2..a7e700f536 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -261,7 +261,7 @@ struct TimetableWindow : Window { SetDParamMaxValue(1, TimerGameEconomy::DateAtStartOfYear(EconomyTime::MAX_YEAR), 0, FS_SMALL); size->width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_DATE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_DATE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; } - FALLTHROUGH; + [[fallthrough]]; case WID_VT_ARRIVAL_DEPARTURE_SELECTION: case WID_VT_TIMETABLE_PANEL: diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 5663c11815..212c979eba 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1599,7 +1599,7 @@ static void GrowTownInTile(TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection t case TL_3X3_GRID: // Use 2x2 grid afterwards! GrowTownWithExtraHouse(t1, TileAddByDiagDir(house_tile, target_dir)); - FALLTHROUGH; + [[fallthrough]]; case TL_2X2_GRID: rcmd = GetTownRoadGridElement(t1, tile, target_dir); @@ -1608,7 +1608,7 @@ static void GrowTownInTile(TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection t case TL_BETTER_ROADS: // Use original afterwards! GrowTownWithExtraHouse(t1, TileAddByDiagDir(house_tile, target_dir)); - FALLTHROUGH; + [[fallthrough]]; case TL_ORIGINAL: /* Allow a house at the edge. 60% chance or @@ -3764,7 +3764,7 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold) return town; } - FALLTHROUGH; + [[fallthrough]]; case MP_HOUSE: return Town::GetByTile(tile); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index c3e1bf1a2a..39b8dfa89b 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -314,7 +314,7 @@ public: /* When double-clicking, continue */ if (click_count == 1 || y < 0 || !HasBit(this->available_actions, y)) break; - FALLTHROUGH; + [[fallthrough]]; } case WID_TA_EXECUTE: diff --git a/src/train.h b/src/train.h index f863250e5c..ae584e78d1 100644 --- a/src/train.h +++ b/src/train.h @@ -86,7 +86,7 @@ struct TrainCache { /** * 'Train' is either a loco or a wagon. */ -struct Train FINAL : public GroundVehicle { +struct Train final : public GroundVehicle { TrainCache tcache; /* Link between the two ends of a multiheaded engine */ diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 5d019380d2..12f4f9da15 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2644,7 +2644,7 @@ public: case OT_GOTO_DEPOT: /* Skip service in depot orders when the train doesn't need service. */ if ((order->GetDepotOrderType() & ODTFB_SERVICE) && !this->v->NeedsServicing()) break; - FALLTHROUGH; + [[fallthrough]]; case OT_GOTO_STATION: case OT_GOTO_WAYPOINT: this->v->current_order = *order; @@ -3781,7 +3781,7 @@ static bool TrainApproachingLineEnd(Train *v, bool signal, bool reverse) * for other directions, it will be 1, 3, 5, ..., 15 */ switch (v->direction) { case DIR_N : x = ~x + ~y + 25; break; - case DIR_NW: x = y; FALLTHROUGH; + case DIR_NW: x = y; [[fallthrough]]; case DIR_NE: x = ~x + 16; break; case DIR_E : x = ~x + y + 9; break; case DIR_SE: x = y; break; diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 99406f81fb..0263f819fb 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -428,7 +428,7 @@ CommandCost CmdPlantTree(DoCommandFlag flags, TileIndex tile, TileIndex start_ti msg = STR_ERROR_CAN_T_BUILD_ON_WATER; continue; } - FALLTHROUGH; + [[fallthrough]]; case MP_CLEAR: { if (IsBridgeAbove(current_tile)) { @@ -744,7 +744,7 @@ static void TileLoop_Trees(TileIndex tile) SetTreeGrowth(tile, 0); break; } - FALLTHROUGH; + [[fallthrough]]; case 2: { // add a neighbouring tree if (!CanPlantExtraTrees(tile)) break; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 5acb56f853..78395a64d7 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1391,7 +1391,7 @@ bool Vehicle::HandleBreakdown() SetWindowDirty(WC_VEHICLE_VIEW, this->index); SetWindowDirty(WC_VEHICLE_DETAILS, this->index); - FALLTHROUGH; + [[fallthrough]]; case 1: /* Aircraft breakdowns end only when arriving at the airport */ if (this->type == VEH_AIRCRAFT) return false; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index de0a11f11d..f034689720 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1071,7 +1071,7 @@ struct RefitWindow : public Window { Vehicle *v = Vehicle::Get(this->window_number); this->selected_vehicle = v->index; this->num_vehicles = UINT8_MAX; - FALLTHROUGH; + [[fallthrough]]; } case 2: { // The vehicle selection has changed; rebuild the entire list. @@ -1097,7 +1097,7 @@ struct RefitWindow : public Window { this->information_width = max_width; this->ReInit(); } - FALLTHROUGH; + [[fallthrough]]; } case 1: // A new cargo has been selected. @@ -1158,7 +1158,7 @@ struct RefitWindow : public Window { if (_ctrl_pressed) this->num_vehicles = UINT8_MAX; break; } - FALLTHROUGH; + [[fallthrough]]; } default: @@ -1193,7 +1193,7 @@ struct RefitWindow : public Window { this->InvalidateData(1); if (click_count == 1) break; - FALLTHROUGH; + [[fallthrough]]; } case WID_VR_REFIT: // refit button @@ -3166,7 +3166,7 @@ public: str = STR_VEHICLE_STATUS_LEAVING; break; } - FALLTHROUGH; + [[fallthrough]]; default: if (v->GetNumManualOrders() == 0) { str = STR_VEHICLE_STATUS_NO_ORDERS_VEL; diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 1f53986599..5095b71ee0 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -145,7 +145,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli } break; } - FALLTHROUGH; + [[fallthrough]]; case VL_STANDARD: for (const Vehicle *v : Vehicle::Iterate()) { diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index a2710186a2..23287b04a8 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -424,7 +424,7 @@ LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_PALETTECHANGED: if ((HWND)wParam == hwnd) return 0; - FALLTHROUGH; + [[fallthrough]]; case WM_QUERYNEWPALETTE: video_driver->PaletteChanged(hwnd); diff --git a/src/viewport.cpp b/src/viewport.cpp index 77e93cb2ff..0c40926e81 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2895,7 +2895,7 @@ static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_t byte style_t = (byte)(TileX(end_tile) > TileX(start_tile)); start_tile = TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t])); end_tile = TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t])); - FALLTHROUGH; + [[fallthrough]]; } case HT_POINT: @@ -3240,7 +3240,7 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method) case VPM_X_LIMITED: // Drag in X direction (limited size). limit = (_thd.sizelimit - 1) * TILE_SIZE; - FALLTHROUGH; + [[fallthrough]]; case VPM_FIX_X: // drag in Y direction x = sx; @@ -3249,7 +3249,7 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method) case VPM_Y_LIMITED: // Drag in Y direction (limited size). limit = (_thd.sizelimit - 1) * TILE_SIZE; - FALLTHROUGH; + [[fallthrough]]; case VPM_FIX_Y: // drag in X direction y = sy; @@ -3286,7 +3286,7 @@ calc_heightdiff_single_direction:; limit = (_thd.sizelimit - 1) * TILE_SIZE; x = sx + Clamp(x - sx, -limit, limit); y = sy + Clamp(y - sy, -limit, limit); - FALLTHROUGH; + [[fallthrough]]; case VPM_X_AND_Y: // drag an X by Y area if (_settings_client.gui.measure_tooltip) { diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 50d105dbc9..21bf4dbd21 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -165,7 +165,7 @@ bool IsPossibleDockingTile(Tile t) switch (GetTileType(t)) { case MP_WATER: if (IsLock(t) && GetLockPart(t) == LOCK_PART_MIDDLE) return false; - FALLTHROUGH; + [[fallthrough]]; case MP_RAILWAY: case MP_STATION: case MP_TUNNELBRIDGE: @@ -507,7 +507,7 @@ CommandCost CmdBuildCanal(DoCommandFlag flags, TileIndex tile, TileIndex start_t MakeSea(current_tile); break; } - FALLTHROUGH; + [[fallthrough]]; default: MakeCanal(current_tile, _current_company, Random()); @@ -1087,7 +1087,7 @@ FloodingBehaviour GetFloodingBehaviour(TileIndex tile) Slope tileh = GetTileSlope(tile); return (IsSlopeWithOneCornerRaised(tileh) ? FLOOD_ACTIVE : FLOOD_DRYUP); } - FALLTHROUGH; + [[fallthrough]]; case MP_STATION: case MP_INDUSTRY: case MP_OBJECT: @@ -1139,7 +1139,7 @@ void DoFloodTile(TileIndex target) flooded = true; break; } - FALLTHROUGH; + [[fallthrough]]; case MP_CLEAR: if (Command::Do(DC_EXEC, target).Succeeded()) { diff --git a/src/waypoint_base.h b/src/waypoint_base.h index 3ddbfc2d99..87f5d55c93 100644 --- a/src/waypoint_base.h +++ b/src/waypoint_base.h @@ -13,7 +13,7 @@ #include "base_station_base.h" /** Representation of a waypoint. */ -struct Waypoint FINAL : SpecializedStation { +struct Waypoint final : SpecializedStation { uint16_t town_cn; ///< The N-1th waypoint for this town (consecutive number) /** diff --git a/src/widget.cpp b/src/widget.cpp index 65d105292b..65278c0003 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -2641,7 +2641,7 @@ void NWidgetLeaf::SetupSmallestSize(Window *w) size.width = std::max(size.width, ScaleGUITrad(30) + sprite_size.width); size.height = std::max(sprite_size.height, GetStringBoundingBox("_").height + WidgetDimensions::scaled.framerect.Vertical()); } - FALLTHROUGH; + [[fallthrough]]; case WWT_PUSHBTN: { padding = {WidgetDimensions::scaled.frametext.Horizontal(), WidgetDimensions::scaled.framerect.Vertical()}; break; @@ -2953,7 +2953,7 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg case WPT_RESIZE: { NWidgetResizeBase *nwrb = dynamic_cast(dest.get()); - if (unlikely(nwrb == nullptr)) throw std::runtime_error("WPT_RESIZE requires NWidgetResizeBase"); + if (nwrb == nullptr) [[unlikely]] throw std::runtime_error("WPT_RESIZE requires NWidgetResizeBase"); assert(nwid_begin->u.xy.x >= 0 && nwid_begin->u.xy.y >= 0); nwrb->SetResize(nwid_begin->u.xy.x, nwid_begin->u.xy.y); break; @@ -2961,7 +2961,7 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg case WPT_MINSIZE: { NWidgetResizeBase *nwrb = dynamic_cast(dest.get()); - if (unlikely(nwrb == nullptr)) throw std::runtime_error("WPT_MINSIZE requires NWidgetResizeBase"); + if (nwrb == nullptr) [[unlikely]] throw std::runtime_error("WPT_MINSIZE requires NWidgetResizeBase"); assert(nwid_begin->u.xy.x >= 0 && nwid_begin->u.xy.y >= 0); nwrb->SetMinimalSize(nwid_begin->u.xy.x, nwid_begin->u.xy.y); break; @@ -2969,7 +2969,7 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg case WPT_MINTEXTLINES: { NWidgetResizeBase *nwrb = dynamic_cast(dest.get()); - if (unlikely(nwrb == nullptr)) throw std::runtime_error("WPT_MINTEXTLINES requires NWidgetResizeBase"); + if (nwrb == nullptr) [[unlikely]] throw std::runtime_error("WPT_MINTEXTLINES requires NWidgetResizeBase"); assert(nwid_begin->u.text_lines.size >= FS_BEGIN && nwid_begin->u.text_lines.size < FS_END); nwrb->SetMinimalTextLines(nwid_begin->u.text_lines.lines, nwid_begin->u.text_lines.spacing, nwid_begin->u.text_lines.size); break; @@ -2977,35 +2977,35 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg case WPT_TEXTSTYLE: { NWidgetCore *nwc = dynamic_cast(dest.get()); - if (unlikely(nwc == nullptr)) throw std::runtime_error("WPT_TEXTSTYLE requires NWidgetCore"); + if (nwc == nullptr) [[unlikely]] throw std::runtime_error("WPT_TEXTSTYLE requires NWidgetCore"); nwc->SetTextStyle(nwid_begin->u.text_style.colour, nwid_begin->u.text_style.size); break; } case WPT_ALIGNMENT: { NWidgetCore *nwc = dynamic_cast(dest.get()); - if (unlikely(nwc == nullptr)) throw std::runtime_error("WPT_ALIGNMENT requires NWidgetCore"); + if (nwc == nullptr) [[unlikely]] throw std::runtime_error("WPT_ALIGNMENT requires NWidgetCore"); nwc->SetAlignment(nwid_begin->u.align.align); break; } case WPT_FILL: { NWidgetResizeBase *nwrb = dynamic_cast(dest.get()); - if (unlikely(nwrb == nullptr)) throw std::runtime_error("WPT_FILL requires NWidgetResizeBase"); + if (nwrb == nullptr) [[unlikely]] throw std::runtime_error("WPT_FILL requires NWidgetResizeBase"); nwrb->SetFill(nwid_begin->u.xy.x, nwid_begin->u.xy.y); break; } case WPT_DATATIP: { NWidgetCore *nwc = dynamic_cast(dest.get()); - if (unlikely(nwc == nullptr)) throw std::runtime_error("WPT_DATATIP requires NWidgetCore"); + if (nwc == nullptr) [[unlikely]] throw std::runtime_error("WPT_DATATIP requires NWidgetCore"); nwc->widget_data = nwid_begin->u.data_tip.data; nwc->tool_tip = nwid_begin->u.data_tip.tooltip; break; } case WPT_PADDING: - if (unlikely(dest == nullptr)) throw std::runtime_error("WPT_PADDING requires NWidgetBase"); + if (dest == nullptr) [[unlikely]] throw std::runtime_error("WPT_PADDING requires NWidgetBase"); dest->SetPadding(nwid_begin->u.padding); break; @@ -3016,7 +3016,7 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg NWidgetBackground *nwb = dynamic_cast(dest.get()); if (nwb != nullptr) nwb->SetPIP(nwid_begin->u.pip.pre, nwid_begin->u.pip.inter, nwid_begin->u.pip.post); - if (unlikely(nwc == nullptr && nwb == nullptr)) throw std::runtime_error("WPT_PIPSPACE requires NWidgetPIPContainer or NWidgetBackground"); + if (nwc == nullptr && nwb == nullptr) [[unlikely]] throw std::runtime_error("WPT_PIPSPACE requires NWidgetPIPContainer or NWidgetBackground"); break; } @@ -3027,13 +3027,13 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg NWidgetBackground *nwb = dynamic_cast(dest.get()); if (nwb != nullptr) nwb->SetPIPRatio(nwid_begin->u.pip.pre, nwid_begin->u.pip.inter, nwid_begin->u.pip.post); - if (unlikely(nwc == nullptr && nwb == nullptr)) throw std::runtime_error("WPT_PIPRATIO requires NWidgetPIPContainer or NWidgetBackground"); + if (nwc == nullptr && nwb == nullptr) [[unlikely]] throw std::runtime_error("WPT_PIPRATIO requires NWidgetPIPContainer or NWidgetBackground"); break; } case WPT_SCROLLBAR: { NWidgetCore *nwc = dynamic_cast(dest.get()); - if (unlikely(nwc == nullptr)) throw std::runtime_error("WPT_SCROLLBAR requires NWidgetCore"); + if (nwc == nullptr) [[unlikely]] throw std::runtime_error("WPT_SCROLLBAR requires NWidgetCore"); nwc->scrollbar_index = nwid_begin->u.widget.index; break; } @@ -3139,7 +3139,7 @@ std::unique_ptr MakeNWidgets(const NWidgetPart *nwid_begin, const N if (container == nullptr) container = std::make_unique(); [[maybe_unused]] const NWidgetPart *nwid_part = MakeWidgetTree(nwid_begin, nwid_end, container); #ifdef WITH_ASSERT - if (unlikely(nwid_part != nwid_end)) throw std::runtime_error("Did not consume all NWidgetParts"); + if (nwid_part != nwid_end) [[unlikely]] throw std::runtime_error("Did not consume all NWidgetParts"); #endif return std::move(container); } diff --git a/src/window.cpp b/src/window.cpp index a33c3c0177..b0ae97fc5c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1267,45 +1267,45 @@ static uint GetWindowZPriority(WindowClass wc) switch (wc) { case WC_TOOLTIPS: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_ERRMSG: case WC_CONFIRM_POPUP_QUERY: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_ENDSCREEN: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_HIGHSCORE: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_DROPDOWN_MENU: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_MAIN_TOOLBAR: case WC_STATUS_BAR: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_OSK: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_QUERY_STRING: case WC_SEND_NETWORK_MSG: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_NETWORK_ASK_RELAY: case WC_MODAL_PROGRESS: case WC_NETWORK_STATUS_WINDOW: case WC_SAVE_PRESET: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_GENERATE_LANDSCAPE: case WC_SAVELOAD: @@ -1317,19 +1317,19 @@ static uint GetWindowZPriority(WindowClass wc) case WC_SCRIPT_SETTINGS: case WC_TEXTFILE: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_CONSOLE: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_NEWS_WINDOW: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; default: ++z_priority; - FALLTHROUGH; + [[fallthrough]]; case WC_MAIN_WINDOW: return z_priority; @@ -2844,7 +2844,7 @@ static void MouseLoop(MouseClick click, int mousewheel) if (!scrollwheel_scrolling || w == nullptr || w->window_class != WC_SMALLMAP) break; /* We try to use the scrollwheel to scroll since we didn't touch any of the buttons. * Simulate a right button click so we can get started. */ - FALLTHROUGH; + [[fallthrough]]; case MC_RIGHT: DispatchRightClickEvent(w, x - w->left, y - w->top); From 59a046de9c8b50121a38bcbc9e0fe87cd8cc66c0 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 2 Feb 2024 23:01:54 +0100 Subject: [PATCH 10/21] Fix: don't use non-owning string pointer in StringParameter (#11952) The string pointer can become invalid before the reference is dropped, causing out-of-bound access in windows like ErrorWindow, or News that copy 10 or 20 parameters for their internals. Co-authored-by: Jonathan G Rennison --- src/strings_internal.h | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/strings_internal.h b/src/strings_internal.h index fc28c34716..3095e33107 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -16,7 +16,6 @@ /** The data required to format and validate a single parameter of a string. */ struct StringParameter { uint64_t data; ///< The data of the parameter. - const char *string_view; ///< The string value, if it has any. std::unique_ptr string; ///< Copied string value, if it has any. char32_t type; ///< The #StringControlCode to interpret this data with when it's the first parameter, otherwise '\0'. }; @@ -106,7 +105,7 @@ public: const char *GetNextParameterString() { auto ptr = GetNextParameterPointer(); - return ptr->string != nullptr ? ptr->string->c_str() : ptr->string_view; + return ptr->string != nullptr ? ptr->string->c_str() : nullptr; } /** @@ -152,7 +151,6 @@ public: assert(n < this->parameters.size()); this->parameters[n].data = v; this->parameters[n].string.reset(); - this->parameters[n].string_view = nullptr; } template ::value, int> = 0> @@ -165,8 +163,7 @@ public: { assert(n < this->parameters.size()); this->parameters[n].data = 0; - this->parameters[n].string.reset(); - this->parameters[n].string_view = str; + this->parameters[n].string = std::make_unique(str); } void SetParam(size_t n, const std::string &str) { this->SetParam(n, str.c_str()); } @@ -176,13 +173,12 @@ public: assert(n < this->parameters.size()); this->parameters[n].data = 0; this->parameters[n].string = std::make_unique(std::move(str)); - this->parameters[n].string_view = nullptr; } uint64_t GetParam(size_t n) const { assert(n < this->parameters.size()); - assert(this->parameters[n].string_view == nullptr && this->parameters[n].string == nullptr); + assert(this->parameters[n].string == nullptr); return this->parameters[n].data; } @@ -195,7 +191,7 @@ public: { assert(n < this->parameters.size()); auto ¶m = this->parameters[n]; - return param.string != nullptr ? param.string->c_str() : param.string_view; + return param.string != nullptr ? param.string->c_str() : nullptr; } }; From fe4494ec11fc36f50e18ef336c205dab97e2a105 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 3 Feb 2024 08:09:55 +0100 Subject: [PATCH 11/21] Change: only open story-book in center when a GS does it (#11916) --- src/gui.h | 2 +- src/story.cpp | 2 +- src/story_gui.cpp | 14 +++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/gui.h b/src/gui.h index 772a53ddb0..a55978c54a 100644 --- a/src/gui.h +++ b/src/gui.h @@ -65,7 +65,7 @@ void ShowGoalsList(CompanyID company); void ShowGoalQuestion(uint16_t id, byte type, uint32_t button_mask, const std::string &question); /* story_gui.cpp */ -void ShowStoryBook(CompanyID company, uint16_t page_id = INVALID_STORY_PAGE); +void ShowStoryBook(CompanyID company, uint16_t page_id = INVALID_STORY_PAGE, bool centered = false); /* viewport_gui.cpp */ void ShowExtraViewportWindow(TileIndex tile = INVALID_TILE); diff --git a/src/story.cpp b/src/story.cpp index 0b7f0f920b..5a4f224410 100644 --- a/src/story.cpp +++ b/src/story.cpp @@ -368,7 +368,7 @@ CommandCost CmdShowStoryPage(DoCommandFlag flags, StoryPageID page_id) if (flags & DC_EXEC) { StoryPage *g = StoryPage::Get(page_id); - if ((g->company != INVALID_COMPANY && g->company == _local_company) || (g->company == INVALID_COMPANY && Company::IsValidID(_local_company))) ShowStoryBook(_local_company, page_id); + if ((g->company != INVALID_COMPANY && g->company == _local_company) || (g->company == INVALID_COMPANY && Company::IsValidID(_local_company))) ShowStoryBook(_local_company, page_id, true); } return CommandCost(); diff --git a/src/story_gui.cpp b/src/story_gui.cpp index c986042cb7..5324aaad41 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -969,7 +969,14 @@ static constexpr NWidgetPart _nested_story_book_widgets[] = { }; static WindowDesc _story_book_desc(__FILE__, __LINE__, - WDP_CENTER, "view_story", 400, 300, + WDP_AUTO, "view_story", 400, 300, + WC_STORY_BOOK, WC_NONE, + 0, + std::begin(_nested_story_book_widgets), std::end(_nested_story_book_widgets) +); + +static WindowDesc _story_book_gs_desc(__FILE__, __LINE__, + WDP_CENTER, "view_story_gs", 400, 300, WC_STORY_BOOK, WC_NONE, 0, std::begin(_nested_story_book_widgets), std::end(_nested_story_book_widgets) @@ -1041,11 +1048,12 @@ static CursorID TranslateStoryPageButtonCursor(StoryPageButtonCursor cursor) * Raise or create the story book window for \a company, at page \a page_id. * @param company 'Owner' of the story book, may be #INVALID_COMPANY. * @param page_id Page to open, may be #INVALID_STORY_PAGE. + * @param centered Whether to open the window centered. */ -void ShowStoryBook(CompanyID company, uint16_t page_id) +void ShowStoryBook(CompanyID company, uint16_t page_id, bool centered) { if (!Company::IsValidID(company)) company = (CompanyID)INVALID_COMPANY; - StoryBookWindow *w = AllocateWindowDescFront(&_story_book_desc, company, true); + StoryBookWindow *w = AllocateWindowDescFront(centered ? &_story_book_gs_desc : &_story_book_desc, company, true); if (page_id != INVALID_STORY_PAGE) w->SetSelectedPage(page_id); } From 27a920c4a8e3c8c5349b691ff2402d877955c4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 3 Feb 2024 09:42:16 +0100 Subject: [PATCH 12/21] Change: Allow to configure AI slots above max_no_competitors (#11961) --- src/ai/ai_gui.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index a49439d2d3..e3512d315d 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -149,20 +149,14 @@ struct AIConfigWindow : public Window { /** * Can the AI config in the given company slot be edited? * @param slot The slot to query. - * @return True if and only if the given AI Config slot can e edited. + * @return True if and only if the given AI Config slot can be edited. */ static bool IsEditable(CompanyID slot) { if (_game_mode != GM_NORMAL) { - return slot > 0 && slot <= GetGameSettings().difficulty.max_no_competitors; + return slot > 0 && slot < MAX_COMPANIES; } - if (Company::IsValidID(slot)) return false; - - int max_slot = GetGameSettings().difficulty.max_no_competitors; - for (CompanyID cid = COMPANY_FIRST; cid < (CompanyID)max_slot && cid < MAX_COMPANIES; cid++) { - if (Company::IsValidHumanID(cid)) max_slot++; - } - return slot < max_slot; + return slot < MAX_COMPANIES && !Company::IsValidID(slot); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -186,7 +180,14 @@ struct AIConfigWindow : public Window { if (this->selected_slot == i) { tc = TC_WHITE; } else if (IsEditable((CompanyID)i)) { - tc = TC_ORANGE; + int max_slot = GetGameSettings().difficulty.max_no_competitors; + for (const Company *c : Company::Iterate()) { + if (c->is_ai) max_slot--; + } + for (CompanyID cid = COMPANY_FIRST; cid < (CompanyID)max_slot && cid < MAX_COMPANIES; cid++) { + if (Company::IsValidHumanID(cid)) max_slot++; + } + if (i < max_slot) tc = TC_ORANGE; } else if (Company::IsValidAiID(i)) { tc = TC_GREEN; } From 849fd5ae033a5cba97f55bba4c76e1ce7867ca2a Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 3 Feb 2024 10:15:03 +0100 Subject: [PATCH 13/21] Change: [Script] replace easy/medium/hard values with default value (#11959) --- src/lang/english.txt | 7 ---- src/saveload/afterload.cpp | 6 --- src/saveload/compat/settings_sl_compat.h | 2 +- src/script/api/ai_changelog.hpp | 1 + src/script/api/game_changelog.hpp | 1 + src/script/api/script_info_docs.hpp | 14 +------ src/script/script_config.hpp | 5 +-- src/script/script_info.cpp | 53 +++++++++++++++++------- src/settings_gui.cpp | 1 - src/settings_type.h | 1 - src/table/settings/script_settings.ini | 15 ------- 11 files changed, 43 insertions(+), 63 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index b8bd1efa9d..5120fe7ba7 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1812,13 +1812,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Enabling this s STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Disable ships for computer: {STRING2} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Enabling this setting makes building ships impossible for a computer player -STR_CONFIG_SETTING_AI_PROFILE :Default settings profile: {STRING2} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Choose which settings profile to use for random AIs or for initial values when adding a new AI or Game Script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Easy -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medium -STR_CONFIG_SETTING_AI_PROFILE_HARD :Hard - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Allow AIs in multiplayer: {STRING2} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI computer players to participate in multiplayer games diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 6954d0909b..b6afb05a82 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2862,12 +2862,6 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(SLV_178)) { - extern uint8_t _old_diff_level; - /* Initialise script settings profile */ - _settings_game.script.settings_profile = IsInsideMM(_old_diff_level, SP_BEGIN, SP_END) ? _old_diff_level : (uint)SP_MEDIUM; - } - { /* Station blocked, wires and pylon flags need to be stored in the map. This is effectively cached data, so no * version check is necessary. This is done here as the SLV_182 check below needs the blocked status. */ diff --git a/src/saveload/compat/settings_sl_compat.h b/src/saveload/compat/settings_sl_compat.h index 523035a80b..84a0464c71 100644 --- a/src/saveload/compat/settings_sl_compat.h +++ b/src/saveload/compat/settings_sl_compat.h @@ -162,7 +162,7 @@ const SaveLoadCompat _settings_sl_compat[] = { SLC_VAR("economy.initial_city_size"), SLC_VAR("economy.mod_road_rebuild"), SLC_NULL(1, SL_MIN_VERSION, SLV_107), - SLC_VAR("script.settings_profile"), + SLC_NULL(1, SLV_178, SLV_TABLE_CHUNKS), SLC_VAR("ai.ai_in_multiplayer"), SLC_VAR("ai.ai_disable_veh_train"), SLC_VAR("ai.ai_disable_veh_roadveh"), diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 4bc5b5d18b..96f4bc32a6 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -33,6 +33,7 @@ * \li AISubsidyList accepts an optional filter function * \li AITownList accepts an optional filter function * \li AIVehicleList accepts an optional filter function + * \li AIInfo::AddSettings easy_value / medium_value / hard_value are replaced with default_value * * \b 13.0 * diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 44d9ac0308..810bea83e2 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -99,6 +99,7 @@ * \li GSSubsidyList accepts an optional filter function * \li GSTownList accepts an optional filter function * \li GSVehicleList accepts an optional filter function + * \li GSInfo::AddSettings easy_value / medium_value / hard_value are replaced with default_value * * \b 13.0 * diff --git a/src/script/api/script_info_docs.hpp b/src/script/api/script_info_docs.hpp index 7a884dc824..8278f39f19 100644 --- a/src/script/api/script_info_docs.hpp +++ b/src/script/api/script_info_docs.hpp @@ -222,18 +222,8 @@ public: * - max_value The maximum value of this setting. Required for integer * settings and not allowed for boolean settings. The value will be * clamped in the range [MIN(int32_t), MAX(int32_t)] (inclusive). - * - easy_value The default value if the easy difficulty level - * is selected. Required. The value will be clamped in the range - * [MIN(int32_t), MAX(int32_t)] (inclusive). - * - medium_value The default value if the medium difficulty level - * is selected. Required. The value will be clamped in the range - * [MIN(int32_t), MAX(int32_t)] (inclusive). - * - hard_value The default value if the hard difficulty level - * is selected. Required. The value will be clamped in the range - * [MIN(int32_t), MAX(int32_t)] (inclusive). - * - custom_value The default value if the custom difficulty level - * is selected. Required. The value will be clamped in the range - * [MIN(int32_t), MAX(int32_t)] (inclusive). + * - default_value The default value. Required. The value will be + * clamped in the range [MIN(int32_t), MAX(int32_t)] (inclusive). * - random_deviation If this property has a nonzero value, then the * actual value of the setting in game will be randomised in the range * [user_configured_value - random_deviation, user_configured_value + random_deviation] (inclusive). diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp index ad81f63068..58c40189e9 100644 --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -34,10 +34,7 @@ struct ScriptConfigItem { std::string description; ///< The description of the configuration setting. int min_value = 0; ///< The minimal value this configuration setting can have. int max_value = 1; ///< The maximal value this configuration setting can have. - int custom_value = 0; ///< The default value on custom difficulty setting. - int easy_value = 0; ///< The default value on easy difficulty setting. - int medium_value = 0; ///< The default value on medium difficulty setting. - int hard_value = 0; ///< The default value on hard difficulty setting. + int default_value = 0; ///< The default value of this configuration setting. int random_deviation = 0; ///< The maximum random deviation from the default value. int step_size = 1; ///< The step size in the gui. ScriptConfigFlags flags = SCRIPTCONFIG_NONE; ///< Flags for the configuration setting. diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index 1e91ed7edd..ee2c31ff5a 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -87,6 +87,10 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) ScriptConfigItem config; uint items = 0; + int easy_value = INT32_MIN; + int medium_value = INT32_MIN; + int hard_value = INT32_MIN; + /* Read the table, and find all properties we care about */ sq_pushnull(vm); while (SQ_SUCCEEDED(sq_next(vm, -2))) { @@ -122,28 +126,30 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) } else if (key == "easy_value") { SQInteger res; if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - config.easy_value = ClampTo(res); + easy_value = ClampTo(res); items |= 0x010; } else if (key == "medium_value") { SQInteger res; if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - config.medium_value = ClampTo(res); + medium_value = ClampTo(res); items |= 0x020; } else if (key == "hard_value") { SQInteger res; if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - config.hard_value = ClampTo(res); + hard_value = ClampTo(res); items |= 0x040; + } else if (key == "custom_value") { + // No longer parsed. + } else if (key == "default_value") { + SQInteger res; + if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; + config.default_value = ClampTo(res); + items |= 0x080; } else if (key == "random_deviation") { SQInteger res; if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; config.random_deviation = ClampTo(abs(res)); items |= 0x200; - } else if (key == "custom_value") { - SQInteger res; - if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; - config.custom_value = ClampTo(res); - items |= 0x080; } else if (key == "step_size") { SQInteger res; if (SQ_FAILED(sq_getinteger(vm, -1, &res))) return SQ_ERROR; @@ -162,6 +168,28 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) } sq_pop(vm, 1); + /* Check if default_value is set. Although required, this was changed with + * 14.0, and as such, older AIs don't use it yet. So we convert the older + * values into a default_value. */ + if ((items & 0x080) == 0) { + /* Easy/medium/hard should all three be defined. */ + if ((items & 0x010) == 0 || (items & 0x020) == 0 || (items & 0x040) == 0) { + this->engine->ThrowError("please define all properties of a setting (min/max not allowed for booleans)"); + return SQ_ERROR; + } + + config.default_value = medium_value; + /* If not boolean and no random deviation set, calculate it based on easy/hard difference. */ + if ((config.flags & SCRIPTCONFIG_BOOLEAN) == 0 && (items & 0x200) == 0) { + config.random_deviation = abs(hard_value - easy_value) / 2; + items |= 0x200; + } + items |= 0x080; + } else { + /* For compatibility, also act like the default sets the easy/medium/hard. */ + items |= 0x010 | 0x020 | 0x040; + } + /* Don't allow both random_deviation and SCRIPTCONFIG_BOOLEAN to * be set for the same config item. */ if ((items & 0x200) != 0 && (config.flags & SCRIPTCONFIG_BOOLEAN) != 0) { @@ -252,14 +280,7 @@ int ScriptInfo::GetSettingDefaultValue(const std::string &name) const { for (const auto &item : this->config_list) { if (item.name != name) continue; - /* The default value depends on the difficulty level */ - switch (GetGameSettings().script.settings_profile) { - case SP_EASY: return item.easy_value; - case SP_MEDIUM: return item.medium_value; - case SP_HARD: return item.hard_value; - case SP_CUSTOM: return item.custom_value; - default: NOT_REACHED(); - } + return item.default_value; } /* There is no such setting */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 26e56fcdbd..07ec5ac1e6 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2249,7 +2249,6 @@ static SettingsContainer &GetSettingsTree() { SettingsPage *npc = ai->Add(new SettingsPage(STR_CONFIG_SETTING_AI_NPC)); { - npc->Add(new SettingEntry("script.settings_profile")); npc->Add(new SettingEntry("script.script_max_opcode_till_suspend")); npc->Add(new SettingEntry("script.script_max_memory_megabytes")); npc->Add(new SettingEntry("difficulty.competitor_speed")); diff --git a/src/settings_type.h b/src/settings_type.h index afe506619c..45bf4560b0 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -405,7 +405,6 @@ struct AISettings { /** Settings related to scripts. */ struct ScriptSettings { - uint8_t settings_profile; ///< difficulty profile to set initial settings of scripts, esp. random AIs uint32_t script_max_opcode_till_suspend; ///< max opcode calls till scripts will suspend uint32_t script_max_memory_megabytes; ///< limit on memory a single script instance may have allocated }; diff --git a/src/table/settings/script_settings.ini b/src/table/settings/script_settings.ini index b2af521566..ab85cfaff0 100644 --- a/src/table/settings/script_settings.ini +++ b/src/table/settings/script_settings.ini @@ -8,7 +8,6 @@ ; and in the savegame PATS chunk. [pre-amble] -static constexpr std::initializer_list _settings_profiles{"easy", "medium", "hard"}; static const SettingVariant _script_settings_table[] = { [post-amble] @@ -41,20 +40,6 @@ extra = 0 startup = false -[SDT_OMANY] -var = script.settings_profile -type = SLE_UINT8 -from = SLV_178 -flags = SF_GUI_DROPDOWN -def = SP_EASY -min = SP_EASY -max = SP_HARD -full = _settings_profiles -str = STR_CONFIG_SETTING_AI_PROFILE -strhelp = STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT -strval = STR_CONFIG_SETTING_AI_PROFILE_EASY -cat = SC_BASIC - [SDT_VAR] var = script.script_max_opcode_till_suspend type = SLE_UINT32 From 8d62a8f0f000823906af81767b646919a3b21be9 Mon Sep 17 00:00:00 2001 From: kiwitreekor Date: Sat, 3 Feb 2024 19:17:49 +0900 Subject: [PATCH 14/21] Add: Station variable 6B to get extended station id of nearby tiles (#10953) --- src/newgrf_roadstop.cpp | 17 +++++++++++++++++ src/newgrf_station.cpp | 16 ++++++++++++++++ src/table/newgrf_debug_data.h | 2 ++ 3 files changed, 35 insertions(+) diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index ea2e260742..7baa2da9a0 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -171,6 +171,23 @@ uint32_t RoadStopScopeResolver::GetVariable(byte variable, [[maybe_unused]] uint return ssl.grfid; } + /* 16 bit road stop ID of nearby tiles */ + case 0x6B: { + TileIndex nearby_tile = GetNearbyTile(parameter, this->tile); + + if (!IsRoadStopTile(nearby_tile)) return 0xFFFFFFFF; + if (!IsCustomRoadStopSpecIndex(nearby_tile)) return 0xFFFE; + + uint32_t grfid = this->st->roadstop_speclist[GetCustomRoadStopSpecIndex(this->tile)].grfid; + + const RoadStopSpecList ssl = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; + if (ssl.grfid == grfid) { + return ssl.localidx; + } + + return 0xFFFE; + } + case 0xF0: return this->st == nullptr ? 0 : this->st->facilities; // facilities case 0xFA: return ClampTo((this->st == nullptr ? TimerGameCalendar::date : this->st->build_date) - CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR); // build date diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 4cb6049475..b556c66ded 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -376,6 +376,22 @@ TownScopeResolver *StationResolverObject::GetTown() return ssl.grfid; } + case 0x6B: { // 16 bit Station ID of nearby tiles + TileIndex nearby_tile = GetNearbyTile(parameter, this->tile); + + if (!HasStationTileRail(nearby_tile)) return 0xFFFFFFFF; + if (!IsCustomStationSpecIndex(nearby_tile)) return 0xFFFE; + + uint32_t grfid = this->st->speclist[GetCustomStationSpecIndex(this->tile)].grfid; + + const StationSpecList ssl = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; + if (ssl.grfid == grfid) { + return ssl.localidx; + } + + return 0xFFFE; + } + /* General station variables */ case 0x82: return 50; case 0x84: return this->st->string_id; diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 0cb4e96277..f11a1110a7 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -131,6 +131,7 @@ static const NIVariable _niv_stations[] = { NIV(0x68, "station info of nearby tiles"), NIV(0x69, "information about cargo accepted in the past"), NIV(0x6A, "GRFID of nearby station tiles"), + NIV(0x6B, "station ID of nearby tiles"), NIV_END() }; @@ -689,6 +690,7 @@ static const NIVariable _nif_roadstops[] = { NIV(0x68, "road stop info of nearby tiles"), NIV(0x69, "information about cargo accepted in the past"), NIV(0x6A, "GRFID of nearby road stop tiles"), + NIV(0x6B, "road stop ID of nearby tiles"), NIV_END(), }; From 59f6c199bf6546369640eb3f71f1a53525204f45 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 3 Feb 2024 10:18:10 +0000 Subject: [PATCH 15/21] Fix #11528: Don't auto-build past tunnelbridge ends (#11606) --- src/rail_cmd.cpp | 34 +++++++++++++-------- src/road_cmd.cpp | 78 ++++++++++++++++++++++++++---------------------- 2 files changed, 64 insertions(+), 48 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 3b93a5d32c..24e5c7b774 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -886,22 +886,32 @@ static CommandCost CmdRailTrackHelper(DoCommandFlag flags, TileIndex tile, TileI if (ret.Failed()) return ret; bool had_success = false; + bool under_tunnelbridge = false; CommandCost last_error = CMD_ERROR; for (;;) { - ret = remove ? Command::Do(flags, tile, TrackdirToTrack(trackdir)) : Command::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals); - - if (ret.Failed()) { - last_error = ret; - if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { - if (fail_on_obstacle) return last_error; - if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag + /* Don't try to place rail between tunnelbridge ends */ + if (IsTileType(tile, MP_TUNNELBRIDGE)) { + under_tunnelbridge = !under_tunnelbridge; + } else if (!under_tunnelbridge) { + if (remove) { + ret = Command::Do(flags, tile, TrackdirToTrack(trackdir)); + } else { + ret = Command::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals); } - /* Ownership errors are more important. */ - if (last_error.GetErrorMessage() == STR_ERROR_OWNED_BY && remove) break; - } else { - had_success = true; - total_cost.AddCost(ret); + if (ret.Failed()) { + last_error = ret; + if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { + if (fail_on_obstacle) return last_error; + if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag + } + + /* Ownership errors are more important. */ + if (last_error.GetErrorMessage() == STR_ERROR_OWNED_BY && remove) break; + } else { + had_success = true; + total_cost.AddCost(ret); + } } if (tile == end_tile) break; diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 1d814a65ee..c2501a1d12 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1007,49 +1007,55 @@ CommandCost CmdBuildLongRoad(DoCommandFlag flags, TileIndex end_tile, TileIndex bool had_bridge = false; bool had_tunnel = false; bool had_success = false; + bool under_tunnelbridge = false; /* Start tile is the first tile clicked by the user. */ for (;;) { - RoadBits bits = AxisToRoadBits(axis); - - /* Determine which road parts should be built. */ - if (!is_ai && start_tile != end_tile) { - /* Only build the first and last roadbit if they can connect to something. */ - if (tile == end_tile && !CanConnectToRoad(tile, rt, dir)) { - bits = DiagDirToRoadBits(ReverseDiagDir(dir)); - } else if (tile == start_tile && !CanConnectToRoad(tile, rt, ReverseDiagDir(dir))) { - bits = DiagDirToRoadBits(dir); + /* Don't try to place road between tunnelbridge ends */ + if (IsTileType(tile, MP_TUNNELBRIDGE)) { + under_tunnelbridge = !under_tunnelbridge; + } else if (!under_tunnelbridge) { + RoadBits bits = AxisToRoadBits(axis); + + /* Determine which road parts should be built. */ + if (!is_ai && start_tile != end_tile) { + /* Only build the first and last roadbit if they can connect to something. */ + if (tile == end_tile && !CanConnectToRoad(tile, rt, dir)) { + bits = DiagDirToRoadBits(ReverseDiagDir(dir)); + } else if (tile == start_tile && !CanConnectToRoad(tile, rt, ReverseDiagDir(dir))) { + bits = DiagDirToRoadBits(dir); + } + } else { + /* Road parts only have to be built at the start tile or at the end tile. */ + if (tile == end_tile && !end_half) bits &= DiagDirToRoadBits(ReverseDiagDir(dir)); + if (tile == start_tile && start_half) bits &= DiagDirToRoadBits(dir); } - } else { - /* Road parts only have to be built at the start tile or at the end tile. */ - if (tile == end_tile && !end_half) bits &= DiagDirToRoadBits(ReverseDiagDir(dir)); - if (tile == start_tile && start_half) bits &= DiagDirToRoadBits(dir); - } - CommandCost ret = Command::Do(flags, tile, bits, rt, drd, 0); - if (ret.Failed()) { - last_error = ret; - if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { - if (is_ai) return last_error; - if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag - } - } else { - had_success = true; - /* Only pay for the upgrade on one side of the bridges and tunnels */ - if (IsTileType(tile, MP_TUNNELBRIDGE)) { - if (IsBridge(tile)) { - if (!had_bridge || GetTunnelBridgeDirection(tile) == dir) { - cost.AddCost(ret); - } - had_bridge = true; - } else { // IsTunnel(tile) - if (!had_tunnel || GetTunnelBridgeDirection(tile) == dir) { - cost.AddCost(ret); - } - had_tunnel = true; + CommandCost ret = Command::Do(flags, tile, bits, rt, drd, 0); + if (ret.Failed()) { + last_error = ret; + if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { + if (is_ai) return last_error; + if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag } } else { - cost.AddCost(ret); + had_success = true; + /* Only pay for the upgrade on one side of the bridges and tunnels */ + if (IsTileType(tile, MP_TUNNELBRIDGE)) { + if (IsBridge(tile)) { + if (!had_bridge || GetTunnelBridgeDirection(tile) == dir) { + cost.AddCost(ret); + } + had_bridge = true; + } else { // IsTunnel(tile) + if (!had_tunnel || GetTunnelBridgeDirection(tile) == dir) { + cost.AddCost(ret); + } + had_tunnel = true; + } + } else { + cost.AddCost(ret); + } } } From a0c480c4e466b928132cc0ded914aea73c940fd4 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 3 Feb 2024 11:19:47 +0100 Subject: [PATCH 16/21] Change: "restart" now uses your newgame settings, where "reload" uses the current settings (#11962) --- src/console_cmds.cpp | 18 +++++++----------- src/openttd.cpp | 3 +-- src/openttd.h | 1 - 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 6609ef91db..a96518c823 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1217,17 +1217,13 @@ DEF_CONSOLE_CMD(ConRestart) { if (argc == 0) { IConsolePrint(CC_HELP, "Restart game. Usage: 'restart'."); - IConsolePrint(CC_HELP, "Restarts a game. It tries to reproduce the exact same map as the game started with."); - IConsolePrint(CC_HELP, "However:"); - IConsolePrint(CC_HELP, " * restarting games started in another version might create another map due to difference in map generation."); - IConsolePrint(CC_HELP, " * restarting games based on scenarios, loaded games or heightmaps will start a new game based on the settings stored in the scenario/savegame."); + IConsolePrint(CC_HELP, "Restarts a game, using the newgame settings."); + IConsolePrint(CC_HELP, " * if you started from a new game, and your newgame settings haven't changed, the game will be identical to when you started it."); + IConsolePrint(CC_HELP, " * if you started from a savegame / scenario / heightmap, the game might be different, because your settings might differ."); return true; } - /* Don't copy the _newgame pointers to the real pointers, so call SwitchToMode directly */ - _settings_game.game_creation.map_x = Map::LogX(); - _settings_game.game_creation.map_y = Map::LogY(); - _switch_mode = SM_RESTARTGAME; + StartNewGameWithoutGUI(_settings_game.game_creation.generation_seed); return true; } @@ -1236,12 +1232,12 @@ DEF_CONSOLE_CMD(ConReload) if (argc == 0) { IConsolePrint(CC_HELP, "Reload game. Usage: 'reload'."); IConsolePrint(CC_HELP, "Reloads a game."); - IConsolePrint(CC_HELP, " * if you started from a savegame / scenario / heightmap, that exact same savegame / scenario / heightmap will be loaded."); - IConsolePrint(CC_HELP, " * if you started from a new game, this acts the same as 'restart'."); + IConsolePrint(CC_HELP, " * if you started from a new game, reload the game with the current active settings."); + IConsolePrint(CC_HELP, " * if you started from a savegame / scenario / heightmap, that same savegame / scenario / heightmap will be loaded again."); return true; } - /* Don't copy the _newgame pointers to the real pointers, so call SwitchToMode directly */ + /* Use a switch-mode to prevent copying over newgame settings to active settings. */ _settings_game.game_creation.map_x = Map::LogX(); _settings_game.game_creation.map_y = Map::LogY(); _switch_mode = SM_RELOADGAME; diff --git a/src/openttd.cpp b/src/openttd.cpp index 3af31509e1..cd2ebf7ba2 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1049,7 +1049,7 @@ void SwitchToMode(SwitchMode new_mode) if (new_mode != SM_SAVE_GAME) { /* If the network is active, make it not-active */ if (_networking) { - if (_network_server && (new_mode == SM_LOAD_GAME || new_mode == SM_NEWGAME || new_mode == SM_RESTARTGAME)) { + if (_network_server && (new_mode == SM_LOAD_GAME || new_mode == SM_NEWGAME)) { NetworkReboot(); } else { NetworkDisconnect(); @@ -1113,7 +1113,6 @@ void SwitchToMode(SwitchMode new_mode) UpdateSocialIntegration(GM_NORMAL); break; - case SM_RESTARTGAME: // Restart --> 'Random game' with current settings case SM_NEWGAME: // New Game --> 'Random game' MakeNewGame(false, new_mode == SM_NEWGAME); GenerateSavegameId(); diff --git a/src/openttd.h b/src/openttd.h index 93875dfd6d..6270cb4343 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -26,7 +26,6 @@ enum GameMode { enum SwitchMode { SM_NONE, SM_NEWGAME, ///< New Game --> 'Random game'. - SM_RESTARTGAME, ///< Restart --> 'Random game' with current settings. SM_RELOADGAME, ///< Reload the savegame / scenario / heightmap you started the game with. SM_EDITOR, ///< Switch to scenario editor. SM_LOAD_GAME, ///< Load game, Play Scenario. From f6dd5053a34d0055ffa17b1e174127ba24cddc2e Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 3 Feb 2024 08:04:24 -0500 Subject: [PATCH 17/21] Feature: Order flag to unbunch vehicles at depot (#11945) --- src/aircraft_cmd.cpp | 4 ++ src/base_consist.cpp | 10 ++++ src/base_consist.h | 5 ++ src/lang/english.txt | 18 +++++-- src/order_base.h | 4 +- src/order_cmd.cpp | 57 +++++++++++++++++++++- src/order_gui.cpp | 48 ++++++++++++------ src/order_type.h | 2 + src/roadveh_cmd.cpp | 14 +++++- src/saveload/afterload.cpp | 6 +++ src/saveload/saveload.h | 1 + src/saveload/vehicle_sl.cpp | 4 ++ src/ship_cmd.cpp | 6 ++- src/timetable_cmd.cpp | 16 +++++- src/train_cmd.cpp | 12 ++++- src/vehicle.cpp | 97 +++++++++++++++++++++++++++++++++++++ src/vehicle_base.h | 4 ++ src/vehicle_cmd.cpp | 4 ++ src/vehicle_gui.cpp | 6 ++- src/widgets/order_widget.h | 3 +- 20 files changed, 293 insertions(+), 28 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 6002a05f20..e6c979f872 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1477,6 +1477,7 @@ void AircraftLeaveHangar(Aircraft *v, Direction exit_dir) } VehicleServiceInDepot(v); + v->LeaveUnbunchingDepot(); SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); SetWindowClassesDirty(WC_AIRCRAFT_LIST); @@ -1521,6 +1522,9 @@ static void AircraftEventHandler_InHangar(Aircraft *v, const AirportFTAClass *ap return; } + /* Check if we should wait here for unbunching. */ + if (v->IsWaitingForUnbunching()) return; + if (!v->current_order.IsType(OT_GOTO_STATION) && !v->current_order.IsType(OT_GOTO_DEPOT)) return; diff --git a/src/base_consist.cpp b/src/base_consist.cpp index ad9d476b66..0a30893be2 100644 --- a/src/base_consist.cpp +++ b/src/base_consist.cpp @@ -42,3 +42,13 @@ void BaseConsist::CopyConsistPropertiesFrom(const BaseConsist *src) } if (HasBit(src->vehicle_flags, VF_SERVINT_IS_CUSTOM)) SetBit(this->vehicle_flags, VF_SERVINT_IS_CUSTOM); } + +/** + * Resets all the data used for depot unbunching. + */ +void BaseConsist::ResetDepotUnbunching() +{ + this->depot_unbunching_last_departure = 0; + this->depot_unbunching_next_departure = 0; + this->round_trip_time = 0; +} diff --git a/src/base_consist.h b/src/base_consist.h index 6189604537..632e77c630 100644 --- a/src/base_consist.h +++ b/src/base_consist.h @@ -22,6 +22,10 @@ struct BaseConsist { TimerGameTick::Ticks lateness_counter; ///< How many ticks late (or early if negative) this vehicle is. TimerGameTick::TickCounter timetable_start; ///< At what tick of TimerGameTick::counter the vehicle should start its timetable. + TimerGameTick::TickCounter depot_unbunching_last_departure; ///< When the vehicle last left its unbunching depot. + TimerGameTick::TickCounter depot_unbunching_next_departure; ///< When the vehicle will next try to leave its unbunching depot. + TimerGameTick::Ticks round_trip_time; ///< How many ticks for a single circumnavigation of the orders. + uint16_t service_interval; ///< The interval for (automatic) servicing; either in days or %. VehicleOrderID cur_real_order_index;///< The index to the current real (non-implicit) order @@ -32,6 +36,7 @@ struct BaseConsist { virtual ~BaseConsist() = default; void CopyConsistPropertiesFrom(const BaseConsist *src); + void ResetDepotUnbunching(); }; #endif /* BASE_CONSIST_H */ diff --git a/src/lang/english.txt b/src/lang/english.txt index 5120fe7ba7..a8a1bc3f68 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4376,6 +4376,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Current # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Loading / Unloading STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Leaving +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Waiting to unbunch STR_VEHICLE_STATUS_CRASHED :{RED}Crashed! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Broken down STR_VEHICLE_STATUS_STOPPED :{RED}Stopped @@ -4389,6 +4390,7 @@ STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}No orde STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Heading for {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Heading for {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Service at {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Unbunch and service at {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Cannot reach {STATION}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Cannot reach {WAYPOINT}, {VELOCITY} @@ -4519,7 +4521,7 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Switch t STR_ORDERS_LIST_TOOLTIP :{BLACK}Order list - click on an order to highlight it. Ctrl+Click to scroll to the order's destination STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING4} {STRING2} {STRING} +STR_ORDER_TEXT :{STRING4} {STRING2} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - End of Orders - - STR_ORDERS_END_OF_SHARED_ORDERS :- - End of Shared Orders - - @@ -4553,11 +4555,11 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Select w STR_ORDER_DROP_REFIT_AUTO :Fixed cargo STR_ORDER_DROP_REFIT_AUTO_ANY :Available cargo -STR_ORDER_SERVICE :{BLACK}Service STR_ORDER_DROP_GO_ALWAYS_DEPOT :Always go STR_ORDER_DROP_SERVICE_DEPOT :Service if needed STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Skip this order unless a service is needed +STR_ORDER_DROP_UNBUNCH :Unbunch +STR_ORDER_DEPOT_ACTION_TOOLTIP :{BLACK}Select the action to take at this depot STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vehicle data to base jumping on @@ -4626,6 +4628,8 @@ STR_ORDER_REFIT_ORDER :(Refit to {STRI STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRING} and stop) STR_ORDER_STOP_ORDER :(Stop) +STR_ORDER_WAIT_TO_UNBUNCH :(wait to unbunch) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING1} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING1} @@ -5095,6 +5099,14 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Unable t STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot type +# Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... can only have one unbunching order +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... cannot use full load orders when vehicle has an unbunching order +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... cannot unbunch a vehicle with a full load order +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... cannot use conditional orders when vehicle has an unbunching order +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... cannot unbunch a vehicle with a conditional order +STR_ERROR_UNBUNCHING_NO_SERVICE_IF_NEEDED :{WHITE}... vehicle must always visit the depot to unbunch there + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied diff --git a/src/order_base.h b/src/order_base.h index 4e8e8bd818..73cd3c27fc 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -144,7 +144,7 @@ public: /** What caused us going to the depot? */ inline OrderDepotTypeFlags GetDepotOrderType() const { return (OrderDepotTypeFlags)GB(this->flags, 0, 3); } /** What are we going to do when in the depot. */ - inline OrderDepotActionFlags GetDepotActionType() const { return (OrderDepotActionFlags)GB(this->flags, 4, 3); } + inline OrderDepotActionFlags GetDepotActionType() const { return (OrderDepotActionFlags)GB(this->flags, 3, 4); } /** What variable do we have to compare? */ inline OrderConditionVariable GetConditionVariable() const { return (OrderConditionVariable)GB(this->dest, 11, 5); } /** What is the comparator to use? */ @@ -165,7 +165,7 @@ public: /** Set the cause to go to the depot. */ inline void SetDepotOrderType(OrderDepotTypeFlags depot_order_type) { SB(this->flags, 0, 3, depot_order_type); } /** Set what we are going to do in the depot. */ - inline void SetDepotActionType(OrderDepotActionFlags depot_service_type) { SB(this->flags, 4, 3, depot_service_type); } + inline void SetDepotActionType(OrderDepotActionFlags depot_service_type) { SB(this->flags, 3, 4, depot_service_type); } /** Set variable we have to compare. */ inline void SetConditionVariable(OrderConditionVariable condition_variable) { SB(this->dest, 11, 5, condition_variable); } /** Set the comparator to use. */ diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 03aed58932..8dd4218930 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -743,8 +743,17 @@ CommandCost CmdInsertOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se /* Filter invalid load/unload types. */ switch (new_order.GetLoadType()) { - case OLF_LOAD_IF_POSSIBLE: case OLFB_FULL_LOAD: case OLF_FULL_LOAD_ANY: case OLFB_NO_LOAD: break; - default: return CMD_ERROR; + case OLF_LOAD_IF_POSSIBLE: + case OLFB_NO_LOAD: + break; + + case OLFB_FULL_LOAD: + case OLF_FULL_LOAD_ANY: + if (v->HasUnbunchingOrder()) return_cmd_error(STR_ERROR_UNBUNCHING_NO_FULL_LOAD); + break; + + default: + return CMD_ERROR; } switch (new_order.GetUnloadType()) { case OUF_UNLOAD_IF_POSSIBLE: case OUFB_UNLOAD: case OUFB_TRANSFER: case OUFB_NO_UNLOAD: break; @@ -849,6 +858,7 @@ CommandCost CmdInsertOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se VehicleOrderID skip_to = new_order.GetConditionSkipToOrder(); if (skip_to != 0 && skip_to >= v->GetNumOrders()) return CMD_ERROR; // Always allow jumping to the first (even when there is no order). if (new_order.GetConditionVariable() >= OCV_END) return CMD_ERROR; + if (v->HasUnbunchingOrder()) return_cmd_error(STR_ERROR_UNBUNCHING_NO_CONDITIONAL); OrderConditionComparator occ = new_order.GetConditionComparator(); if (occ >= OCC_END) return CMD_ERROR; @@ -937,6 +947,9 @@ void InsertOrder(Vehicle *v, Order *new_o, VehicleOrderID sel_ord) u->cur_implicit_order_index = cur; } } + /* Unbunching data is no longer valid. */ + u->ResetDepotUnbunching(); + /* Update any possible open window of the vehicle */ InvalidateVehicleOrder(u, INVALID_VEH_ORDER_ID | (sel_ord << 8)); } @@ -1051,6 +1064,8 @@ void DeleteOrder(Vehicle *v, VehicleOrderID sel_ord) if (u->cur_implicit_order_index >= u->GetNumOrders()) u->cur_implicit_order_index = 0; } } + /* Unbunching data is no longer valid. */ + u->ResetDepotUnbunching(); /* Update any possible open window of the vehicle */ InvalidateVehicleOrder(u, sel_ord | (INVALID_VEH_ORDER_ID << 8)); @@ -1097,6 +1112,9 @@ CommandCost CmdSkipToOrder(DoCommandFlag flags, VehicleID veh_id, VehicleOrderID v->cur_implicit_order_index = v->cur_real_order_index = sel_ord; v->UpdateRealOrderIndex(); + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); + InvalidateVehicleOrder(v, VIWD_MODIFY_ORDERS); /* We have an aircraft/ship, they have a mini-schedule, so update them all */ @@ -1173,6 +1191,9 @@ CommandCost CmdMoveOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID movi } else if (u->cur_implicit_order_index < moving_order && u->cur_implicit_order_index >= target_order) { u->cur_implicit_order_index++; } + /* Unbunching data is no longer valid. */ + u->ResetDepotUnbunching(); + assert(v->orders == u->orders); /* Update any possible open window of the vehicle */ @@ -1274,10 +1295,27 @@ CommandCost CmdModifyOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se if (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) return CMD_ERROR; if (data > OLFB_NO_LOAD || data == 1) return CMD_ERROR; if (data == order->GetLoadType()) return CMD_ERROR; + if ((data & (OLFB_FULL_LOAD | OLF_FULL_LOAD_ANY)) && v->HasUnbunchingOrder()) return_cmd_error(STR_ERROR_UNBUNCHING_NO_FULL_LOAD); break; case MOF_DEPOT_ACTION: if (data >= DA_END) return CMD_ERROR; + /* The vehicle must always go to the depot (not just if it needs servicing) in order to unbunch there. */ + if ((data == DA_SERVICE) && (order->GetDepotActionType() & ODATFB_UNBUNCH)) return_cmd_error(STR_ERROR_UNBUNCHING_NO_SERVICE_IF_NEEDED); + + /* Check if we are allowed to add unbunching. We are always allowed to remove it. */ + if (data == DA_UNBUNCH) { + /* Only one unbunching order is allowed in a vehicle's orders. If this order already has an unbunching action, no error is needed. */ + if (v->HasUnbunchingOrder() && !(order->GetDepotActionType() & ODATFB_UNBUNCH)) return_cmd_error(STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED); + for (Order *o : v->Orders()) { + /* We don't allow unbunching if the vehicle has a conditional order. */ + if (o->IsType(OT_CONDITIONAL)) return_cmd_error(STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL); + /* We don't allow unbunching if the vehicle has a full load order. */ + if (o->IsType(OT_GOTO_STATION) && o->GetLoadType() & (OLFB_FULL_LOAD | OLF_FULL_LOAD_ANY)) return_cmd_error(STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD); + /* The vehicle must always go to the depot (not just if it needs servicing) in order to unbunch there. */ + if (o->IsType(OT_GOTO_DEPOT) && o->GetDepotOrderType() & ODTFB_SERVICE) return_cmd_error(STR_ERROR_UNBUNCHING_NO_SERVICE_IF_NEEDED); + } + } break; case MOF_COND_VARIABLE: @@ -1350,6 +1388,7 @@ CommandCost CmdModifyOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se case DA_ALWAYS_GO: order->SetDepotOrderType((OrderDepotTypeFlags)(order->GetDepotOrderType() & ~ODTFB_SERVICE)); order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() & ~ODATFB_HALT)); + order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() & ~ODATFB_UNBUNCH)); break; case DA_SERVICE: @@ -1360,10 +1399,17 @@ CommandCost CmdModifyOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se case DA_STOP: order->SetDepotOrderType((OrderDepotTypeFlags)(order->GetDepotOrderType() & ~ODTFB_SERVICE)); + order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() & ~ODATFB_UNBUNCH)); order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() | ODATFB_HALT)); order->SetRefit(CARGO_NO_REFIT); break; + case DA_UNBUNCH: + order->SetDepotOrderType((OrderDepotTypeFlags)(order->GetDepotOrderType() & ~ODTFB_SERVICE)); + order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() & ~ODATFB_HALT)); + order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() | ODATFB_UNBUNCH)); + break; + default: NOT_REACHED(); } @@ -1430,6 +1476,10 @@ CommandCost CmdModifyOrder(DoCommandFlag flags, VehicleID veh, VehicleOrderID se u->current_order.GetLoadType() != order->GetLoadType()) { u->current_order.SetLoadType(order->GetLoadType()); } + + /* Unbunching data is no longer valid. */ + u->ResetDepotUnbunching(); + InvalidateVehicleOrder(u, VIWD_MODIFY_ORDERS); } } @@ -1835,6 +1885,9 @@ void DeleteVehicleOrders(Vehicle *v, bool keep_orderlist, bool reset_order_indic if (!keep_orderlist) v->orders = nullptr; } + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); + if (reset_order_indices) { v->cur_implicit_order_index = v->cur_real_order_index = 0; if (v->current_order.IsType(OT_LOADING)) { diff --git a/src/order_gui.cpp b/src/order_gui.cpp index f5b6a4b404..d4ec09cb84 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -184,6 +184,7 @@ static const StringID _order_depot_action_dropdown[] = { STR_ORDER_DROP_GO_ALWAYS_DEPOT, STR_ORDER_DROP_SERVICE_DEPOT, STR_ORDER_DROP_HALT_DEPOT, + STR_ORDER_DROP_UNBUNCH, INVALID_STRING_ID }; @@ -243,11 +244,12 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int SetDParam(5, STR_EMPTY); SetDParam(8, STR_EMPTY); + SetDParam(9, STR_EMPTY); /* Check range for aircraft. */ if (v->type == VEH_AIRCRAFT && Aircraft::From(v)->GetRange() > 0 && order->IsGotoOrder()) { const Order *next = order->next != nullptr ? order->next : v->GetFirstOrder(); - if (GetOrderDistance(order, next, v) > Aircraft::From(v)->acache.cached_max_range_sqr) SetDParam(8, STR_ORDER_OUT_OF_RANGE); + if (GetOrderDistance(order, next, v) > Aircraft::From(v)->acache.cached_max_range_sqr) SetDParam(9, STR_ORDER_OUT_OF_RANGE); } switch (order->GetType()) { @@ -332,6 +334,12 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int SetDParam(5, (order->GetDepotActionType() & ODATFB_HALT) ? STR_ORDER_REFIT_STOP_ORDER : STR_ORDER_REFIT_ORDER); SetDParam(6, CargoSpec::Get(order->GetRefitCargo())->name); } + + /* Do not show unbunching in the depot in the timetable window. */ + if (!timetable && (order->GetDepotActionType() & ODATFB_UNBUNCH)) { + SetDParam(8, STR_ORDER_WAIT_TO_UNBUNCH); + } + break; case OT_GOTO_WAYPOINT: @@ -941,7 +949,6 @@ public: /* First row. */ this->RaiseWidget(WID_O_FULL_LOAD); this->RaiseWidget(WID_O_UNLOAD); - this->RaiseWidget(WID_O_SERVICE); /* Selection widgets. */ /* Train or road vehicle. */ @@ -1027,7 +1034,6 @@ public: this->SetWidgetDisabledState(WID_O_REFIT, (order->GetDepotOrderType() & ODTFB_SERVICE) || (order->GetDepotActionType() & ODATFB_HALT) || (!this->can_do_refit && !order->IsRefit())); - this->SetWidgetLoweredState(WID_O_SERVICE, order->GetDepotOrderType() & ODTFB_SERVICE); break; case OT_CONDITIONAL: { @@ -1155,6 +1161,24 @@ public: case WID_O_CAPTION: SetDParam(0, this->vehicle->index); break; + + case WID_O_DEPOT_ACTION: { + VehicleOrderID sel = this->OrderGetSel(); + const Order *order = this->vehicle->GetOrder(sel); + if (order == nullptr || !order->IsType(OT_GOTO_DEPOT)) break; + + /* Select the current action selected in the dropdown. The flags don't match the dropdown so we can't just use an index. */ + if (order->GetDepotOrderType() & ODTFB_SERVICE) { + SetDParam(0, STR_ORDER_DROP_SERVICE_DEPOT); + } else if (order->GetDepotActionType() & ODATFB_HALT) { + SetDParam(0, STR_ORDER_DROP_HALT_DEPOT); + } else if (order->GetDepotActionType() & ODATFB_UNBUNCH) { + SetDParam(0, STR_ORDER_DROP_UNBUNCH); + } else { + SetDParam(0, STR_ORDER_DROP_GO_ALWAYS_DEPOT); + } + break; + } } } @@ -1273,12 +1297,8 @@ public: this->OrderClick_Refit(0, false); break; - case WID_O_SERVICE: - if (this->GetWidget(widget)->ButtonHit(pt)) { - this->OrderClick_Service(-1); - } else { - ShowDropDownMenu(this, _order_depot_action_dropdown, DepotActionStringIndex(this->vehicle->GetOrder(this->OrderGetSel())), WID_O_SERVICE, 0, 0); - } + case WID_O_DEPOT_ACTION: + ShowDropDownMenu(this, _order_depot_action_dropdown, DepotActionStringIndex(this->vehicle->GetOrder(this->OrderGetSel())), WID_O_DEPOT_ACTION, 0, 0); break; case WID_O_REFIT_DROPDOWN: @@ -1373,7 +1393,7 @@ public: } break; - case WID_O_SERVICE: + case WID_O_DEPOT_ACTION: this->OrderClick_Service(index); break; @@ -1593,8 +1613,8 @@ static constexpr NWidgetPart _nested_orders_train_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_TOP_MIDDLE), NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_UNLOAD), SetMinimalSize(93, 12), SetFill(1, 0), SetDataTip(STR_ORDER_TOGGLE_UNLOAD, STR_ORDER_TOOLTIP_UNLOAD), SetResize(1, 0), - NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_SERVICE), SetMinimalSize(93, 12), SetFill(1, 0), - SetDataTip(STR_ORDER_SERVICE, STR_ORDER_SERVICE_TOOLTIP), SetResize(1, 0), + NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_DEPOT_ACTION), SetMinimalSize(93, 12), SetFill(1, 0), + SetDataTip(STR_JUST_STRING, STR_ORDER_DEPOT_ACTION_TOOLTIP), SetResize(1, 0), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_TOP_RIGHT), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(93, 12), SetFill(1, 0), SetResize(1, 0), EndContainer(), @@ -1671,8 +1691,8 @@ static constexpr NWidgetPart _nested_orders_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_REFIT), SetMinimalSize(186, 12), SetFill(1, 0), SetDataTip(STR_ORDER_REFIT, STR_ORDER_REFIT_TOOLTIP), SetResize(1, 0), - NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_SERVICE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_ORDER_SERVICE, STR_ORDER_SERVICE_TOOLTIP), SetResize(1, 0), + NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_DEPOT_ACTION), SetMinimalSize(124, 12), SetFill(1, 0), + SetDataTip(STR_JUST_STRING, STR_ORDER_DEPOT_ACTION_TOOLTIP), SetResize(1, 0), EndContainer(), /* Buttons for setting a condition. */ diff --git a/src/order_type.h b/src/order_type.h index 2e4717c7f2..99a2467d26 100644 --- a/src/order_type.h +++ b/src/order_type.h @@ -103,6 +103,7 @@ enum OrderDepotActionFlags { ODATF_SERVICE_ONLY = 0, ///< Only service the vehicle. ODATFB_HALT = 1 << 0, ///< Service the vehicle and then halt it. ODATFB_NEAREST_DEPOT = 1 << 1, ///< Send the vehicle to the nearest depot. + ODATFB_UNBUNCH = 1 << 2, ///< Service the vehicle and then unbunch it. }; DECLARE_ENUM_AS_BIT_SET(OrderDepotActionFlags) @@ -160,6 +161,7 @@ enum OrderDepotAction { DA_ALWAYS_GO, ///< Always go to the depot DA_SERVICE, ///< Service only if needed DA_STOP, ///< Go to the depot and stop there + DA_UNBUNCH, ///< Go to the depot and unbunch DA_END }; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 066ea84762..65ccd3a17d 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -387,7 +387,12 @@ CommandCost CmdTurnRoadVeh(DoCommandFlag flags, VehicleID veh_id) if (IsTileType(v->tile, MP_TUNNELBRIDGE) && DirToDiagDir(v->direction) == GetTunnelBridgeDirection(v->tile)) return CMD_ERROR; - if (flags & DC_EXEC) v->reverse_ctr = 180; + if (flags & DC_EXEC) { + v->reverse_ctr = 180; + + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); + } return CommandCost(); } @@ -1030,6 +1035,7 @@ bool RoadVehLeaveDepot(RoadVehicle *v, bool first) if (RoadVehFindCloseTo(v, x, y, v->direction, false) != nullptr) return true; VehicleServiceInDepot(v); + v->LeaveUnbunchingDepot(); StartRoadVehSound(v); @@ -1587,7 +1593,11 @@ static bool RoadVehController(RoadVehicle *v) if (v->current_order.IsType(OT_LOADING)) return true; - if (v->IsInDepot() && RoadVehLeaveDepot(v, true)) return true; + if (v->IsInDepot()) { + /* Check if we should wait here for unbunching. */ + if (v->IsWaitingForUnbunching()) return true; + if (RoadVehLeaveDepot(v, true)) return true; + } v->ShowVisualEffect(); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index b6afb05a82..30542dd8e0 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1765,6 +1765,12 @@ bool AfterLoadGame() v->current_order.SetLoadType(OLFB_NO_LOAD); } } + } else if (IsSavegameVersionBefore(SLV_DEPOT_UNBUNCHING)) { + /* OrderDepotActionFlags were moved, instead of starting at bit 4 they now start at bit 3. */ + for (Order *order : Order::Iterate()) { + if (!order->IsType(OT_GOTO_DEPOT)) continue; + order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() >> 1)); + } } /* The water class was moved/unified. */ diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 7ba2fdf967..9cdecc7cd7 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -374,6 +374,7 @@ enum SaveLoadVersion : uint16_t { SLV_SHIP_ACCELERATION, ///< 329 PR#10734 Start using Vehicle's acceleration field for ships too. SLV_MAX_LOAN_FOR_COMPANY, ///< 330 PR#11224 Separate max loan for each company. + SLV_DEPOT_UNBUNCHING, ///< 330 PR#11945 Allow unbunching shared order vehicles at a depot. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 0befccc1dc..1dbdb53c7d 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -738,6 +738,10 @@ public: SLE_CONDVAR(Vehicle, current_order_time, SLE_INT32, SLV_TIMETABLE_TICKS_TYPE, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, last_loading_tick, SLE_UINT64, SLV_LAST_LOADING_TICK, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, SLV_67, SL_MAX_VERSION), + + SLE_CONDVAR(Vehicle, depot_unbunching_last_departure, SLE_UINT64, SLV_DEPOT_UNBUNCHING, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, depot_unbunching_next_departure, SLE_UINT64, SLV_DEPOT_UNBUNCHING, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, round_trip_time, SLE_INT32, SLV_DEPOT_UNBUNCHING, SL_MAX_VERSION), }; #if defined(_MSC_VER) && (_MSC_VER == 1915 || _MSC_VER == 1916) return description; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 34d96bf273..920a881214 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -387,6 +387,9 @@ static bool CheckShipLeaveDepot(Ship *v) { if (!v->IsChainInDepot()) return false; + /* Check if we should wait here for unbunching. */ + if (v->IsWaitingForUnbunching()) return true; + /* We are leaving a depot, but have to go to the exact same one; re-enter */ if (v->current_order.IsType(OT_GOTO_DEPOT) && IsShipDepotTile(v->tile) && GetDepotIndex(v->tile) == v->current_order.GetDestination()) { @@ -433,8 +436,9 @@ static bool CheckShipLeaveDepot(Ship *v) v->UpdateViewport(true, true); SetWindowDirty(WC_VEHICLE_DEPOT, v->tile); - v->PlayLeaveStationSound(); VehicleServiceInDepot(v); + v->LeaveUnbunchingDepot(); + v->PlayLeaveStationSound(); InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); SetWindowClassesDirty(WC_SHIPS_LIST); diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 5e70b09147..9ba8936e45 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -205,6 +205,12 @@ CommandCost CmdChangeTimetable(DoCommandFlag flags, VehicleID veh, VehicleOrderI default: break; } + + /* Unbunching data is no longer valid for any vehicle in this shared order group. */ + Vehicle *u = v->FirstShared(); + for (; u != nullptr; u = u->NextShared()) { + u->ResetDepotUnbunching(); + } } return CommandCost(); @@ -272,6 +278,9 @@ CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_t if (u->lateness_counter > most_late) { most_late = u->lateness_counter; } + + /* Unbunching data is no longer valid. */ + u->ResetDepotUnbunching(); } if (most_late > 0) { for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) { @@ -284,6 +293,8 @@ CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_t } } else { v->lateness_counter = 0; + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index); } } @@ -383,11 +394,14 @@ CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool tim int idx = 0; for (Vehicle *w : vehs) { - w->lateness_counter = 0; ClrBit(w->vehicle_flags, VF_TIMETABLE_STARTED); /* Do multiplication, then division to reduce rounding errors. */ w->timetable_start = start_tick + (idx * total_duration / num_vehs); + + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); + SetWindowDirty(WC_VEHICLE_TIMETABLE, w->index); ++idx; } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 12f4f9da15..da95bfc218 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2112,6 +2112,9 @@ CommandCost CmdReverseTrainDirection(DoCommandFlag flags, VehicleID veh_id, bool HideFillingPercent(&v->fill_percent_te_id); ReverseTrainDirection(v); } + + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); } } return CommandCost(); @@ -2142,6 +2145,9 @@ CommandCost CmdForceTrainProceed(DoCommandFlag flags, VehicleID veh_id) * next signal we encounter. */ t->force_proceed = t->force_proceed == TFP_SIGNAL ? TFP_NONE : HasBit(t->flags, VRF_TRAIN_STUCK) || t->IsChainInDepot() ? TFP_STUCK : TFP_SIGNAL; SetWindowDirty(WC_VEHICLE_VIEW, t->index); + + /* Unbunching data is no longer valid. */ + t->ResetDepotUnbunching(); } return CommandCost(); @@ -2275,6 +2281,9 @@ static bool CheckTrainStayInDepot(Train *v) return true; } + /* Check if we should wait here for unbunching. */ + if (v->IsWaitingForUnbunching()) return true; + SigSegState seg_state; if (v->force_proceed == TFP_NONE) { @@ -2315,8 +2324,9 @@ static bool CheckTrainStayInDepot(Train *v) if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(v->tile); VehicleServiceInDepot(v); - SetWindowClassesDirty(WC_TRAINS_LIST); + v->LeaveUnbunchingDepot(); v->PlayLeaveStationSound(); + SetWindowClassesDirty(WC_TRAINS_LIST); v->track = TRACK_BIT_X; if (v->direction & 2) v->track = TRACK_BIT_Y; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 78395a64d7..8ac20d9b14 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -810,6 +810,10 @@ void Vehicle::HandlePathfindingResult(bool path_found) SetBit(this->vehicle_flags, VF_PATHFINDER_LOST); SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, WID_VV_START_STOP); InvalidateWindowClassesData(GetWindowClassForVehicleType(this->type)); + + /* Unbunching data is no longer valid. */ + this->ResetDepotUnbunching(); + /* Notify user about the event. */ AI::NewEvent(this->owner, new ScriptEventVehicleLost(this->index)); if (_settings_client.gui.lost_vehicle_warn && this->owner == _local_company) { @@ -1635,12 +1639,23 @@ void VehicleEnterDepot(Vehicle *v) * before the stop to the station after the stop can't be predicted * we shouldn't construct it when the vehicle visits the next stop. */ v->last_loading_station = INVALID_STATION; + + /* Clear unbunching data. */ + v->ResetDepotUnbunching(); + + /* Announce that the vehicle is waiting to players and AIs. */ if (v->owner == _local_company) { SetDParam(0, v->index); AddVehicleAdviceNewsItem(STR_NEWS_TRAIN_IS_WAITING + v->type, v->index); } AI::NewEvent(v->owner, new ScriptEventVehicleWaitingInDepot(v->index)); } + + /* If we've entered our unbunching depot, record the round trip duration. */ + if (v->current_order.GetDepotActionType() & ODATFB_UNBUNCH && v->depot_unbunching_last_departure > 0) { + v->round_trip_time = (TimerGameTick::counter - v->depot_unbunching_last_departure); + } + v->current_order.MakeDummy(); } } @@ -2402,6 +2417,85 @@ void Vehicle::HandleLoading(bool mode) this->IncrementImplicitOrderIndex(); } +/** + * Check if the current vehicle has an unbunching order. + * @return true Iff this vehicle has an unbunching order. + */ +bool Vehicle::HasUnbunchingOrder() const +{ + for (Order *o : this->Orders()) { + if (o->IsType(OT_GOTO_DEPOT) && o->GetDepotActionType() & ODATFB_UNBUNCH) return true; + } + return false; +} + +/** + * Leave an unbunching depot and calculate the next departure time for shared order vehicles. + */ +void Vehicle::LeaveUnbunchingDepot() +{ + /* Set the start point for this round trip time. */ + this->depot_unbunching_last_departure = TimerGameTick::counter; + + /* Tell the timetable we are now "on time." */ + this->lateness_counter = 0; + SetWindowDirty(WC_VEHICLE_TIMETABLE, this->index); + + /* Find the average travel time of vehicles that we share orders with. */ + uint num_vehicles = 0; + TimerGameTick::Ticks total_travel_time = 0; + + Vehicle *u = this->FirstShared(); + for (; u != nullptr; u = u->NextShared()) { + /* Ignore vehicles that are manually stopped or crashed. */ + if (u->vehstatus & (VS_STOPPED | VS_CRASHED)) continue; + + num_vehicles++; + total_travel_time += u->round_trip_time; + } + + /* Make sure we cannot divide by 0. */ + num_vehicles = std::max(num_vehicles, 1u); + + /* Calculate the separation by finding the average travel time, then calculating equal separation (minimum 1 tick) between vehicles. */ + TimerGameTick::Ticks separation = std::max((total_travel_time / num_vehicles / num_vehicles), 1u); + TimerGameTick::TickCounter next_departure = TimerGameTick::counter + separation; + + /* Set the departure time of all vehicles that we share orders with. */ + u = this->FirstShared(); + for (; u != nullptr; u = u->NextShared()) { + /* Ignore vehicles that are manually stopped or crashed. */ + if (u->vehstatus & (VS_STOPPED | VS_CRASHED)) continue; + + u->depot_unbunching_next_departure = next_departure; + } +} + +/** + * Check whether a vehicle inside a depot is waiting for unbunching. + * @return True if the vehicle must continue waiting, or false if it may try to leave the depot. + */ +bool Vehicle::IsWaitingForUnbunching() const +{ + assert(this->IsInDepot()); + + /* Don't bother if there are no vehicles sharing orders. */ + if (!this->IsOrderListShared()) return false; + + /* Don't do anything if there aren't enough orders. */ + if (this->GetNumOrders() <= 1) return false; + + /* + * Make sure this is the correct depot for unbunching. + * If we are headed for the first order, we must wrap around back to the last order. + */ + bool is_first_order = (this->GetOrder(this->cur_real_order_index) == this->GetFirstOrder()); + Order *previous_order = (is_first_order) ? this->GetLastOrder() : this->GetOrder(this->cur_real_order_index - 1); + if (previous_order == nullptr || !previous_order->IsType(OT_GOTO_DEPOT) || !(previous_order->GetDepotActionType() & ODATFB_UNBUNCH)) return false; + + return (this->depot_unbunching_next_departure > TimerGameTick::counter); +}; + /** * Send this vehicle to the depot using the given command(s). * @param flags the command flags (like execute and such). @@ -2416,6 +2510,9 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command) if (this->vehstatus & VS_CRASHED) return CMD_ERROR; if (this->IsStoppedInDepot()) return CMD_ERROR; + /* No matter why we're headed to the depot, unbunching data is no longer valid. */ + if (flags & DC_EXEC) this->ResetDepotUnbunching(); + if (this->current_order.IsType(OT_GOTO_DEPOT)) { bool halt_in_depot = (this->current_order.GetDepotActionType() & ODATFB_HALT) != 0; if (((command & DepotCommand::Service) != DepotCommand::None) == halt_in_depot) { diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 313ec18346..560bd41f1c 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -817,6 +817,10 @@ public: inline void SetServiceIntervalIsPercent(bool on) { SB(this->vehicle_flags, VF_SERVINT_IS_PERCENT, 1, on); } + bool HasUnbunchingOrder() const; + void LeaveUnbunchingDepot(); + bool IsWaitingForUnbunching() const; + private: /** * Advance cur_real_order_index to the next real order. diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 67cdd4bcb7..eb8da1ebb1 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -629,6 +629,10 @@ CommandCost CmdStartStopVehicle(DoCommandFlag flags, VehicleID veh_id, bool eval v->vehstatus ^= VS_STOPPED; if (v->type != VEH_TRAIN) v->cur_speed = 0; // trains can stop 'slowly' + + /* Unbunching data is no longer valid. */ + v->ResetDepotUnbunching(); + v->MarkDirty(); SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); SetWindowDirty(WC_VEHICLE_DEPOT, v->tile); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index f034689720..b07e978f64 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -3087,7 +3087,7 @@ public: { if (widget != WID_VV_START_STOP) return; - const Vehicle *v = Vehicle::Get(this->window_number); + Vehicle *v = Vehicle::Get(this->window_number); StringID str; TextColour text_colour = TC_FROMSTRING; if (v->vehstatus & VS_CRASHED) { @@ -3113,6 +3113,8 @@ public: str = STR_VEHICLE_STATUS_TRAIN_STUCK; } else if (v->type == VEH_AIRCRAFT && HasBit(Aircraft::From(v)->flags, VAF_DEST_TOO_FAR) && !v->current_order.IsType(OT_LOADING)) { str = STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR; + } else if (v->IsInDepot() && v->IsWaitingForUnbunching()) { + str = STR_VEHICLE_STATUS_WAITING_UNBUNCHING; } else { // vehicle is in a "normal" state, show current order if (mouse_over_start_stop) { if (v->vehstatus & VS_STOPPED) { @@ -3143,6 +3145,8 @@ public: str = STR_EMPTY; } else if (v->current_order.GetDepotActionType() & ODATFB_HALT) { str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL : STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL; + } else if (v->current_order.GetDepotActionType() & ODATFB_UNBUNCH) { + str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL : STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL; } else { str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL : STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL; } diff --git a/src/widgets/order_widget.h b/src/widgets/order_widget.h index 1a427ab4d5..b0399ebda6 100644 --- a/src/widgets/order_widget.h +++ b/src/widgets/order_widget.h @@ -20,11 +20,12 @@ enum OrderWidgets : WidgetID { WID_O_DELETE, ///< Delete selected order. WID_O_STOP_SHARING, ///< Stop sharing orders. WID_O_NON_STOP, ///< Goto non-stop to destination. + WID_O_DEPOT_UNBUNCHING, ///< Toggle unbunching. WID_O_GOTO, ///< Goto destination. WID_O_FULL_LOAD, ///< Select full load. WID_O_UNLOAD, ///< Select unload. WID_O_REFIT, ///< Select refit. - WID_O_SERVICE, ///< Select service (at depot). + WID_O_DEPOT_ACTION, ///< Dropdown to select the depot action (stop, service if needed, unbunch). WID_O_REFIT_DROPDOWN, ///< Open refit options. WID_O_COND_VARIABLE, ///< Choose condition variable. WID_O_COND_COMPARATOR, ///< Choose condition type. From 17d02ed45f8596d7cf57ad7ba16ce1f23d784881 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 3 Feb 2024 13:58:31 +0000 Subject: [PATCH 18/21] Feature: NewGRF properties to set town production effect and multiplier. (#11947) Town production effect is modelled on town acceptance (growth) effect, and so takes an original cargo slot for behaviour instead of a direct value. NewGRF feature 0x0B, property 0x1E, takes 1 byte. Valid values are: - 0x00 to behave like passengers - 0x02 to behave like mail - 0xFF to behave like other cargo (i.e. not produced.) If not set, town production effect is set based on the cargo label ('PASS' or 'MAIL'). Town production multiplier allows adjusting the amount of cargo produces when Town Production Effect is set, without needing to use callbacks. NewGRF feature 0x0B (cargo), property 0x1F, accepts a 2 byte (word) value, similar to the cargo capacity multiplier property. The default value is 256 which means 100%, i.e. normal rate. --- src/cargotype.h | 3 +++ src/newgrf.cpp | 18 ++++++++++++++++++ src/table/cargo_const.h | 2 +- src/town_cmd.cpp | 4 ++-- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/cargotype.h b/src/cargotype.h index 06e2661461..4c83c3ceba 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -65,6 +65,8 @@ enum CargoClass { static const byte INVALID_CARGO_BITNUM = 0xFF; ///< Constant representing invalid cargo +static const uint TOWN_PRODUCTION_DIVISOR = 256; + /** Specification of a cargo type. */ struct CargoSpec { CargoLabel label; ///< Unique label of the cargo type. @@ -80,6 +82,7 @@ struct CargoSpec { bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). TownAcceptanceEffect town_acceptance_effect; ///< The effect that delivering this cargo type has on towns. Also affects destination of subsidies. TownProductionEffect town_production_effect{INVALID_TPE}; ///< The effect on town cargo production. + uint16_t town_production_multiplier{TOWN_PRODUCTION_DIVISOR}; ///< Town production multipler, if commanded by TownProductionEffect. uint8_t callback_mask; ///< Bitmask of cargo callbacks that have to be called StringID name; ///< Name of this type of cargo. diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4781e460a6..22455baf61 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3091,6 +3091,24 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea cs->multiplier = std::max(1u, buf->ReadWord()); break; + case 0x1E: { // Town production substitute type + uint8_t substitute_type = buf->ReadByte(); + + switch (substitute_type) { + case 0x00: cs->town_production_effect = TPE_PASSENGERS; break; + case 0x02: cs->town_production_effect = TPE_MAIL; break; + default: + GrfMsg(1, "CargoChangeInfo: Unknown town production substitute value {}, setting to none.", substitute_type); + [[fallthrough]]; + case 0xFF: cs->town_production_effect = TPE_NONE; break; + } + break; + } + + case 0x1F: // Town production multiplier + cs->town_production_multiplier = std::max(1U, buf->ReadWord()); + break; + default: ret = CIR_UNKNOWN; break; diff --git a/src/table/cargo_const.h b/src/table/cargo_const.h index b7fc6213fd..f182e039df 100644 --- a/src/table/cargo_const.h +++ b/src/table/cargo_const.h @@ -44,7 +44,7 @@ * @param classes Classes of this cargo type. @see CargoClass */ #define MK(bt, label, colour, weight, mult, ip, td1, td2, freight, tae, str_plural, str_singular, str_volume, classes) \ - {label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, INVALID_TPE, 0, \ + {label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, INVALID_TPE, TOWN_PRODUCTION_DIVISOR, 0, \ MK_STR_CARGO_PLURAL(str_plural), MK_STR_CARGO_SINGULAR(str_singular), str_volume, MK_STR_QUANTITY(str_plural), MK_STR_ABBREV(str_plural), \ MK_SPRITE(str_plural), nullptr, nullptr, 0} diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 212c979eba..a2c3df76fb 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -558,7 +558,7 @@ static void TownGenerateCargoOriginal(Town *t, TownProductionEffect tpe, uint8_t uint32_t r = Random(); if (GB(r, 0, 8) < rate) { CargoID cid = cs->Index(); - uint amt = GB(r, 0, 8) / 8 + 1; + uint amt = (GB(r, 0, 8) * cs->town_production_multiplier / TOWN_PRODUCTION_DIVISOR) / 8 + 1; TownGenerateCargo(t, cid, amt, stations, true); } @@ -583,7 +583,7 @@ static void TownGenerateCargoBinominal(Town *t, TownProductionEffect tpe, uint8_ uint32_t genmask = (genmax >= 32) ? 0xFFFFFFFF : ((1 << genmax) - 1); /* Mask random value by potential pax and count number of actual pax. */ - uint amt = CountBits(r & genmask); + uint amt = CountBits(r & genmask) * cs->town_production_multiplier / TOWN_PRODUCTION_DIVISOR; TownGenerateCargo(t, cid, amt, stations, true); } From 0dfba564ab8326acf63bf160425f09fb0227f3bd Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 3 Feb 2024 15:48:54 +0100 Subject: [PATCH 19/21] Add: "restart current" console command to regenerate the map based on current settings (#11963) --- src/console_cmds.cpp | 28 +++++++++++++++++++--------- src/openttd.cpp | 3 ++- src/openttd.h | 1 + 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index a96518c823..5d8515c6ce 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1215,15 +1215,22 @@ DEF_CONSOLE_CMD(ConNewGame) DEF_CONSOLE_CMD(ConRestart) { - if (argc == 0) { - IConsolePrint(CC_HELP, "Restart game. Usage: 'restart'."); - IConsolePrint(CC_HELP, "Restarts a game, using the newgame settings."); - IConsolePrint(CC_HELP, " * if you started from a new game, and your newgame settings haven't changed, the game will be identical to when you started it."); - IConsolePrint(CC_HELP, " * if you started from a savegame / scenario / heightmap, the game might be different, because your settings might differ."); + if (argc == 0 || argc > 2) { + IConsolePrint(CC_HELP, "Restart game. Usage: 'restart [current|newgame]'."); + IConsolePrint(CC_HELP, "Restarts a game, using either the current or newgame (default) settings."); + IConsolePrint(CC_HELP, " * if you started from a new game, and your current/newgame settings haven't changed, the game will be identical to when you started it."); + IConsolePrint(CC_HELP, " * if you started from a savegame / scenario / heightmap, the game might be different, because the current/newgame settings might differ."); return true; } - StartNewGameWithoutGUI(_settings_game.game_creation.generation_seed); + if (argc == 1 || std::string_view(argv[1]) == "newgame") { + StartNewGameWithoutGUI(_settings_game.game_creation.generation_seed); + } else { + _settings_game.game_creation.map_x = Map::LogX(); + _settings_game.game_creation.map_y = Map::LogY(); + _switch_mode = SM_RESTARTGAME; + } + return true; } @@ -1231,9 +1238,12 @@ DEF_CONSOLE_CMD(ConReload) { if (argc == 0) { IConsolePrint(CC_HELP, "Reload game. Usage: 'reload'."); - IConsolePrint(CC_HELP, "Reloads a game."); - IConsolePrint(CC_HELP, " * if you started from a new game, reload the game with the current active settings."); - IConsolePrint(CC_HELP, " * if you started from a savegame / scenario / heightmap, that same savegame / scenario / heightmap will be loaded again."); + IConsolePrint(CC_HELP, "Reloads a game if loaded via savegame / scenario / heightmap."); + return true; + } + + if (_file_to_saveload.abstract_ftype == FT_NONE || _file_to_saveload.abstract_ftype == FT_INVALID) { + IConsolePrint(CC_ERROR, "No game loaded to reload."); return true; } diff --git a/src/openttd.cpp b/src/openttd.cpp index cd2ebf7ba2..3af31509e1 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1049,7 +1049,7 @@ void SwitchToMode(SwitchMode new_mode) if (new_mode != SM_SAVE_GAME) { /* If the network is active, make it not-active */ if (_networking) { - if (_network_server && (new_mode == SM_LOAD_GAME || new_mode == SM_NEWGAME)) { + if (_network_server && (new_mode == SM_LOAD_GAME || new_mode == SM_NEWGAME || new_mode == SM_RESTARTGAME)) { NetworkReboot(); } else { NetworkDisconnect(); @@ -1113,6 +1113,7 @@ void SwitchToMode(SwitchMode new_mode) UpdateSocialIntegration(GM_NORMAL); break; + case SM_RESTARTGAME: // Restart --> 'Random game' with current settings case SM_NEWGAME: // New Game --> 'Random game' MakeNewGame(false, new_mode == SM_NEWGAME); GenerateSavegameId(); diff --git a/src/openttd.h b/src/openttd.h index 6270cb4343..93875dfd6d 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -26,6 +26,7 @@ enum GameMode { enum SwitchMode { SM_NONE, SM_NEWGAME, ///< New Game --> 'Random game'. + SM_RESTARTGAME, ///< Restart --> 'Random game' with current settings. SM_RELOADGAME, ///< Reload the savegame / scenario / heightmap you started the game with. SM_EDITOR, ///< Switch to scenario editor. SM_LOAD_GAME, ///< Load game, Play Scenario. From bc4ed9085d759bd7c890e854cad562df33d771ab Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 3 Feb 2024 18:34:44 +0000 Subject: [PATCH 20/21] Update: Translations from eints english (au): 3 changes by krysclarke english (us): 3 changes by 2TallTyler chinese (simplified): 3 changes by WenSimEHRP korean: 4 changes by telk5093 russian: 19 changes by Ln-Wolf latvian: 67 changes by lexuslatvia portuguese: 3 changes by azulcosta portuguese (brazilian): 3 changes by pasantoro --- src/lang/afrikaans.txt | 14 ++---- src/lang/arabic_egypt.txt | 11 ++--- src/lang/basque.txt | 14 ++---- src/lang/belarusian.txt | 14 ++---- src/lang/brazilian_portuguese.txt | 17 +++---- src/lang/bulgarian.txt | 14 ++---- src/lang/catalan.txt | 14 ++---- src/lang/chuvash.txt | 6 +-- src/lang/croatian.txt | 14 ++---- src/lang/czech.txt | 14 ++---- src/lang/danish.txt | 14 ++---- src/lang/dutch.txt | 14 ++---- src/lang/english_AU.txt | 17 +++---- src/lang/english_US.txt | 17 +++---- src/lang/esperanto.txt | 14 ++---- src/lang/estonian.txt | 14 ++---- src/lang/faroese.txt | 13 ++--- src/lang/finnish.txt | 14 ++---- src/lang/french.txt | 14 ++---- src/lang/frisian.txt | 14 ++---- src/lang/gaelic.txt | 14 ++---- src/lang/galician.txt | 14 ++---- src/lang/german.txt | 14 ++---- src/lang/greek.txt | 14 ++---- src/lang/hebrew.txt | 14 ++---- src/lang/hindi.txt | 7 ++- src/lang/hungarian.txt | 14 ++---- src/lang/icelandic.txt | 14 ++---- src/lang/ido.txt | 6 +-- src/lang/indonesian.txt | 14 ++---- src/lang/irish.txt | 14 ++---- src/lang/italian.txt | 14 ++---- src/lang/japanese.txt | 14 ++---- src/lang/korean.txt | 19 +++----- src/lang/latin.txt | 14 ++---- src/lang/latvian.txt | 81 ++++++++++++++++++++++++++----- src/lang/lithuanian.txt | 14 ++---- src/lang/luxembourgish.txt | 14 ++---- src/lang/macedonian.txt | 6 +-- src/lang/malay.txt | 14 ++---- src/lang/maltese.txt | 6 +-- src/lang/marathi.txt | 6 +-- src/lang/norwegian_bokmal.txt | 14 ++---- src/lang/norwegian_nynorsk.txt | 13 ++--- src/lang/persian.txt | 7 ++- src/lang/polish.txt | 14 ++---- src/lang/portuguese.txt | 17 +++---- src/lang/romanian.txt | 14 ++---- src/lang/russian.txt | 36 ++++++++------ src/lang/serbian.txt | 14 ++---- src/lang/simplified_chinese.txt | 17 +++---- src/lang/slovak.txt | 14 ++---- src/lang/slovenian.txt | 14 ++---- src/lang/spanish.txt | 14 ++---- src/lang/spanish_MX.txt | 14 ++---- src/lang/swedish.txt | 14 ++---- src/lang/tamil.txt | 13 ++--- src/lang/thai.txt | 14 ++---- src/lang/traditional_chinese.txt | 14 ++---- src/lang/turkish.txt | 14 ++---- src/lang/ukrainian.txt | 14 ++---- src/lang/urdu.txt | 7 ++- src/lang/vietnamese.txt | 14 ++---- src/lang/welsh.txt | 14 ++---- 64 files changed, 297 insertions(+), 641 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index ebb6265eeb..0716ef3be9 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1574,13 +1574,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Aktiveer om te STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Sper skepe vir rekenaar: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Aktiveer om te verhoed dat die rekenaar speler kan skepe bou -STR_CONFIG_SETTING_AI_PROFILE :Verstek verstellings profiel: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Kies watter stellingsprofiel om te gebruik vir rekenaarspelers of beginwaardes vir nuwe rekenaarspelers -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Maklik -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Middelmatig -STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilik - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Laat AI in multispeler toe: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Laat AI Rekenaaar spelers by 'n multi-speler spel toe @@ -1691,7 +1684,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stel die jaar w STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Wissel deur tiepe seine: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selekteer watter sinjaaltipes om deur te wissel, wanneer Ctrl+klik gebruik word om 'n sinjaal te bou met die sinjaal gereedskap ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Pad seinligte alleenlik STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle ###length 2 @@ -3936,7 +3928,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skakel n STR_ORDERS_LIST_TOOLTIP :{BLACK}Roetelys - klik op 'n bestemming om dit te kies. Ctrl+klik skuif die skerm na die bestemming STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Einde van Opdrae - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Einde van Gedeel Opdrae - - @@ -3970,11 +3961,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Kies wat STR_ORDER_DROP_REFIT_AUTO :Vaste vrag STR_ORDER_DROP_REFIT_AUTO_ANY :Beskikbare vrag -STR_ORDER_SERVICE :{BLACK}Diens STR_ORDER_DROP_GO_ALWAYS_DEPOT :gaan altyd STR_ORDER_DROP_SERVICE_DEPOT :Diens indien nodig STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ignoreer die opdraag tensy 'n diens nodig is STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Voertuig data om sprong op te baseer @@ -4043,6 +4032,7 @@ STR_ORDER_REFIT_ORDER :(Herbou na {STR STR_ORDER_REFIT_STOP_ORDER :(Herbou na {STRING} en stop) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implesiete) @@ -4477,6 +4467,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan nie STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerde depot tipe +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is te lank na vervanging STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Outo-vervang verstellings nie gelaai nie diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 4ca9a235d2..730d9b6ab5 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1470,10 +1470,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :حظر الطا STR_CONFIG_SETTING_AI_BUILDS_SHIPS :حظر السفن على الحاسوب: {STRING} -STR_CONFIG_SETTING_AI_PROFILE :الملف الشخصي للإعدادات الافتراضية: {STRING} -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :سهل - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح بالذكاء الصناعي في اللعب الجماعي : {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :السماح بلاعبين كمبيوترالذكاء الصناعي بالمشاركة في الالعاب الجماعية. @@ -1556,7 +1552,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة اس STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :الدوران خلال الاشارات: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :حدد أنواع الإشارات التي تريد التنقل خلالها عند النقر (Ctrl+Click) فوق إشارة مبنية باستخدام أداة الإشارة ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :اشارات الطريق فقط STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :الكل واضح ###length 2 @@ -3684,7 +3679,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}غير STR_ORDERS_LIST_TOOLTIP :{BLACK}قائمة الاوامر - اضغط على الامر لختيارة. مفتاح التحكم (كنترول) + الضغط لتوجة للمحطة STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - نهاية الاوامر - - STR_ORDERS_END_OF_SHARED_ORDERS :- - نهاية الأوامر المشتركة - - @@ -3718,11 +3712,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}اختر STR_ORDER_DROP_REFIT_AUTO :شحنة ثابتة STR_ORDER_DROP_REFIT_AUTO_ANY :البضائع المتاحة -STR_ORDER_SERVICE :{BLACK} صيانة STR_ORDER_DROP_GO_ALWAYS_DEPOT :الذهاب دائما STR_ORDER_DROP_SERVICE_DEPOT :الصيانة عند الحاجة STR_ORDER_DROP_HALT_DEPOT :توقف -STR_ORDER_SERVICE_TOOLTIP :{BLACK}تجاوز هذا الامر الا اذا لم تكن الصيانة مطلوبة STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}بيانات العربة لتعريف التجاوز الى @@ -3790,6 +3782,7 @@ STR_ORDER_REFIT_ORDER :هيئة الى STR_ORDER_REFIT_STOP_ORDER :هيئت الى {STRING} و توقف 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} @@ -4208,6 +4201,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}تعذر STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :مستودع خطأ +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} طويل للغايه بعد اﻹستبدال STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}لا يوجد نظام مطبق للتبديل/ التجديد diff --git a/src/lang/basque.txt b/src/lang/basque.txt index c19f81f8b9..3ac1428f79 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1508,13 +1508,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Gaitua dagoenea STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Ordenagailuak kontrolatutako konpainiei itsasontziak erabiltzea eragotzi: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Gaitua dagoenean, ordenagailu jokalariek ezingo dute itsasontzi sarerik eraiki -STR_CONFIG_SETTING_AI_PROFILE :Profilentzako ezarpen lehenetsia: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Aukeratu ze ezarpen profil erabiliko diren ausazko IAentzat edo hasierako balioak IA edo Script joko bat geitzen denean -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Erraza -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Arrunta -STR_CONFIG_SETTING_AI_PROFILE_HARD :Zaila - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Multijokalari moduan IA baimentzea: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Baimendu ordenagailu jokalariak (IA) jokalari anitzeko jokoetan parte hartzera @@ -1605,7 +1598,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Aukeratu trenen STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Aldatu seinale mota ezberdinen artean: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Aukeratu ze seinale ezberdinen artean aldatuko den seinale lanabesarekin Ktrl+klik eginez eraikitako seinale baten gainean ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Bide-seinaleak bakarrik STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Denak ###length 2 @@ -3705,7 +3697,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Ordutegi STR_ORDERS_LIST_TOOLTIP :{BLACK}Agindu zerrenda - Klikatu agindu batean pizteko. Krtl+Klik aginduaren tokian kokatuko zaitu STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Aginduen amaiera - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Agindu konpartituen amaiera - - @@ -3739,11 +3730,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Aukeratu STR_ORDER_DROP_REFIT_AUTO :Zama finkoa STR_ORDER_DROP_REFIT_AUTO_ANY :Zama eskuragarria -STR_ORDER_SERVICE :{BLACK}Mantenimendua STR_ORDER_DROP_GO_ALWAYS_DEPOT :Joan beti STR_ORDER_DROP_SERVICE_DEPOT :Beharrezkoa bada mantenimendua egin STR_ORDER_DROP_HALT_DEPOT :Gelditu -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Agindua ez bete mantenimendua beharrezko ez bada STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Ibilgailuaren xehetasunak jauzia oinarritzeko @@ -3811,6 +3800,7 @@ STR_ORDER_REFIT_ORDER :(Honera birmold STR_ORDER_REFIT_STOP_ORDER :(honera birmoldatu {STRING} eta gelditu) STR_ORDER_STOP_ORDER :(Gelditu) + STR_ORDER_GO_TO_STATION :{STRING} {STATION}-ra {STRING} STR_ORDER_IMPLICIT :(Implizitua) @@ -4231,6 +4221,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ezin iza STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Gordailu mota okerra +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} luzeegia da ordezkatua izan ondoren STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ordezkatze automatikorik ez/ezarritako berritze arauak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 5fb2e453d9..1a35371bd7 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1893,13 +1893,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Уключэн STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Забараніць пабудову караблёў кампутарам: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Уключэньне гэтай наладкі робіць немагчымым набыцьцё караблёў для кампутарнага гульца. -STR_CONFIG_SETTING_AI_PROFILE :Зыходны профіль наладак: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Выберыце, які профіль наладак выкарыстоўваць выпадковаму ШІ ці для пачатковых значэньняў пры даданні новага ШІ ці сцэнара гульні -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Лёгкі -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Сярэдні -STR_CONFIG_SETTING_AI_PROFILE_HARD :Цяжкі - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Дазволіць штучны інтэлект (ШІ/AI) у сеткавай гульні: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Дазволіць кампутарным гульцам (штучнаму інтэлекту) браць удзел у сеткавых гульнях. @@ -2008,7 +2001,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Выбраць STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Выбар сыґналаў (Ctrl+клік): {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Якія тыпы сыґналаў можна выбраць, пстрыкаюцы з націснутым Ctrl па гатовым сыґнале. ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :толькі маршрутныя (PMS) STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :усе ###length 2 @@ -4296,7 +4288,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Праг STR_ORDERS_LIST_TOOLTIP :{BLACK}Сьпіс заданьняў: пстрыкніце заданьне для вылучэньня. Ctrl+пстрычка — агляд станцыі прызначэньня. STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Канец заданьняў - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Канец агульных заданьняў - - @@ -4330,11 +4321,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Выбе STR_ORDER_DROP_REFIT_AUTO :Нязьменны груз STR_ORDER_DROP_REFIT_AUTO_ANY :Даступны груз -STR_ORDER_SERVICE :{BLACK}Абслугоўваньне STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ісьці заўсёды STR_ORDER_DROP_SERVICE_DEPOT :Абслужыць, калі неабходна STR_ORDER_DROP_HALT_DEPOT :Стоп -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Прапусьціць гэтае заданьне, калі абслугоўваньне не патрабуецца STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Парамэтр транспарту для параўнаньня @@ -4403,6 +4392,7 @@ STR_ORDER_REFIT_ORDER :(Пераабс STR_ORDER_REFIT_STOP_ORDER :(Пераабстал. пад {STRING.acc} i стоп) 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} @@ -4832,6 +4822,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Нема STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Няправільны тып дэпо +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}ТС «{VEHICLE}» занадта доўгі пасьля замены STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Правілы аўтазамены/абнаўленьня не былі ўжыты diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 36f7ea76b5..4af3923ef7 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -635,6 +635,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Clique a # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Tabela da Liga das Empresas STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Engenheiro STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Gerenciador de Tráfego STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordenador de Transportes @@ -1812,13 +1813,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Ativado, impede STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar embarcação para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Ativado, impede que jogadores controlados pelo computador construam embarcações -STR_CONFIG_SETTING_AI_PROFILE :Perfil de configs. padrão: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolhe qual perfil de configurações a ser usado em IAs aleatórias ou em valores iniciais ao se adicionar uma nova IA ou GameScript -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Médio -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA em multiplayer: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite jogadores controlados pelo computador participar em jogos multijogador @@ -1939,7 +1933,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Seleciona o ano STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Tipo de sinal a ser exibido: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecione quais os tipos de sinais mostrar ao usar Ctrl+Clique num sinal existente com a ferramenta de sinais ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :De trajeto apenas STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostrar tipos de sinais: {STRING} @@ -4526,7 +4519,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Exibe o STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique em uma ordem para selecionar. Ctrl+Clique mostra o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fim de Ordens - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fim de Ordens Compartilhadas - - @@ -4560,11 +4552,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selecion STR_ORDER_DROP_REFIT_AUTO :Carga fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Cargas disponíveis -STR_ORDER_SERVICE :{BLACK}Manutenção STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir sempre STR_ORDER_DROP_SERVICE_DEPOT :Manutenção, se necessária STR_ORDER_DROP_HALT_DEPOT :Parar -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Pular esta ordem a menos que necessite de manutenção STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dados do veículo no qual se basear para pular ordem @@ -4633,6 +4623,7 @@ STR_ORDER_REFIT_ORDER :(Adaptar para { STR_ORDER_REFIT_STOP_ORDER :(Adaptar a {STRING} e parar) STR_ORDER_STOP_ORDER :(Parar) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Não pode usar a estação){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4835,6 +4826,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Resetar STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -5100,6 +5093,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Incapaz STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito errado +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} fica grande demais para ser substituído STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Regras de autosubstituição/renovação não estão ativadas diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index a44089d202..793ae051d5 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1540,13 +1540,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Активир STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Премахване на корабите за компютърния играч: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Активирането на тази опция, прави невъзможно управляваните от ИИ играчи да строят кораби -STR_CONFIG_SETTING_AI_PROFILE :Профил на настройки по подразбиране: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Избира кои профилни опции да се използват за случайните ИИ или за началните стойности, когато добавяте ново ИИ или Game Script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Лесно -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Средно -STR_CONFIG_SETTING_AI_PROFILE_HARD :Трудно - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Позволи AI в мрежова игра: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Разреши ИИ играчите да участват в мрежови игри @@ -1651,7 +1644,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Смяна на вида сигнал: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Изберете какъв вид сигнали да прегледате, когато Ctrl+clicking на строенето на сигнал ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Само напреднат STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Всички ###length 2 @@ -3777,7 +3769,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Виж STR_ORDERS_LIST_TOOLTIP :{BLACK}Пътен лист - натиснете върху назначение за маркиране. CTRL + натискане - центрира върху дестинацията STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Край на Заповедите - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Край на Споделения пътен лист - - @@ -3811,11 +3802,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Избе STR_ORDER_DROP_REFIT_AUTO :Фиксиран товар STR_ORDER_DROP_REFIT_AUTO_ANY :Наличен товар -STR_ORDER_SERVICE :{BLACK}Ремонт STR_ORDER_DROP_GO_ALWAYS_DEPOT :Винаги напред STR_ORDER_DROP_SERVICE_DEPOT :Сервиз, когато е необходимо STR_ORDER_DROP_HALT_DEPOT :Стоп -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Пропусни освен ако е необходим ремонт STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Данни за превозното средство, на които се базира @@ -3883,6 +3872,7 @@ STR_ORDER_REFIT_ORDER :(Преустр STR_ORDER_REFIT_STOP_ORDER :(Преоборудване на {STRING} и спиране) STR_ORDER_STOP_ORDER :(Спри) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :{G=n}(Автоматично) @@ -4309,6 +4299,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Не м STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Погрешен депо теп +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} е прекалено дълъг след замяната STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Не са открити правила за автоматично подновяване/замяна diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 0f7cdd7969..9f4cf7ae20 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1792,13 +1792,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activant aquest STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactiva els vaixells per a les IA: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activant aquesta opció fa que sigui impossible construir vaixells als jugadors IA. -STR_CONFIG_SETTING_AI_PROFILE :Perfil de paràmetres predeterminat: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolliu el perfil de paràmetres de les IA aleatòries o els seus valors inicials quan s'afegeix una nova IA o script de partida. -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Fàcil -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mitjà -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permet IA en multijugador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permet a les IA participar en partides multijugador. @@ -1919,7 +1912,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Estableix l'any STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Canvia a través dels tipus de senyal: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Seleccioneu com es commutaran els tipus de senyals quan es faci Ctrl+clic sobre un senyal ja construït amb l'eina de construir senyals. ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Només avançada STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Tots visibles STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostra els tipus de senyals: {STRING} @@ -4489,7 +4481,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Commuta STR_ORDERS_LIST_TOOLTIP :{BLACK}Llista d'ordres - clica en una ordre per marcar-la. Ctrl+Clic desplaça cap a la destinació de l'ordre STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fi d'Ordres - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fi d'Ordres Compartides - - @@ -4523,11 +4514,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Seleccio STR_ORDER_DROP_REFIT_AUTO :Càrrega fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Càrrega disponible -STR_ORDER_SERVICE :{BLACK}Servei STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vés-hi sempre STR_ORDER_DROP_SERVICE_DEPOT :Revisa si és necessari STR_ORDER_DROP_HALT_DEPOT :Para -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Salta aquesta ordre si no és que es necessita una revisió STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dades del vehicle on basar el salt a @@ -4596,6 +4585,7 @@ STR_ORDER_REFIT_ORDER :(Remodela a {ST STR_ORDER_REFIT_STOP_ORDER :(Remodela a {STRING} i para) STR_ORDER_STOP_ORDER :(Para) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No pot usar l'estació){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5063,6 +5053,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Impossib STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipus de cotxera incorrecta +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} és massa llarg després de la substitució STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No s'han aplicat normes d'autosubstitució/renovació diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index f0532f1855..4f0b1f2667 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -750,8 +750,6 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31 -###length 3 - @@ -1522,7 +1520,6 @@ STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Савӑ # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -1552,6 +1549,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -1659,6 +1657,8 @@ STR_ERROR_MESSAGE_CAPTION :{YELLOW}Пӗл +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(укҫа ҫитмест) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index fd424cc924..25147fe7b8 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1688,13 +1688,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Uključivanjem STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Isključi brodove za računalo: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Uključivanjem ove postavke, računalo-igrač neće moći koristiti brodove -STR_CONFIG_SETTING_AI_PROFILE :Profil osnovnih postavki: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Odaberi koji profil postavki će se koristiti za nasumične UI-je ili za početne vrijednosti kada se dodaje nova UI ili Skripta Igre -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lako -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Srednje -STR_CONFIG_SETTING_AI_PROFILE_HARD :Teško - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Dopusti UI u mrežnoj igri: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Dopusti UI računalnim-igračima da sudjeluju u igrama za više igrača @@ -1807,7 +1800,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Postavi godinu STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Kruži kroz vrste signala: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Odaberi kroz koje tipove signala se može kružiti, kod Ctrl+klikanja na izgrađeni signal uz pomoć alata za signale ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Samo putni signali STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Sve ###length 2 @@ -4122,7 +4114,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Promijen STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista naredbi - klikni na naredbu kako bi je označio. Ctrl+Klik klizi na odredište naredbe STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Kraj naredbi - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Kraj dijeljenih naredbi - - @@ -4156,11 +4147,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Odaberi STR_ORDER_DROP_REFIT_AUTO :Popravljen teret STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupni teret -STR_ORDER_SERVICE :{BLACK}Servis STR_ORDER_DROP_GO_ALWAYS_DEPOT :Idi neprekidno STR_ORDER_DROP_SERVICE_DEPOT :Servisiraj prema potrebi STR_ORDER_DROP_HALT_DEPOT :Stani -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Preskoči ovu narudžbu osim ako servis nije potreban STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Podaci vozila prema kojima se zasniva skok @@ -4229,6 +4218,7 @@ STR_ORDER_REFIT_ORDER :(Prenamijeni u STR_ORDER_REFIT_STOP_ORDER :(Prenamijeni u {STRING} i zaustavi se) STR_ORDER_STOP_ORDER :(Stani) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implicitno) @@ -4664,6 +4654,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ne mogu STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Pogrešna vrsta spremišta +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je predugačko nakon zamjene STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Pravilo bez autozamjene/obnove je primjenjeno diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 41343236dc..53f3594d21 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1776,13 +1776,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Zapnutím této STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Zakázat počítači lodě: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Zapnutím této volby znemožníte budování lodí hráčům, kteří jsou ovládání počítačem (AI) -STR_CONFIG_SETTING_AI_PROFILE :Výchozí nastavení: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vyber, který profil nastavení se použije pro náhnodné AI nebo jako úvodní hodnoty po přidání AI nebo herního skriptu do hry -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lehká -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Střední -STR_CONFIG_SETTING_AI_PROFILE_HARD :Těžká - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Povolit AI v síťové hře: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Umožňuje AI počítačem řízeným hráčům připojit se do hry s více hráči @@ -1901,7 +1894,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Nastav rok, ve STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Vybírat dokola návěstidla: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Vyber které semafory budou nabízeny při Ctrl+klikání při jejich stavbě. ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :pouze dokonalejší (PBS) STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Vše viditelné STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Zobraz signály typu: {STRING} @@ -4385,7 +4377,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Přepnou STR_ORDERS_LIST_TOOLTIP :{BLACK}Seznam příkazů - stiskni příkaz pro označení. Kliknutím na příkaz se stisknutým CTRL se nastaví pohled na cíl seznamu STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Konec příkazů - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Konec sdílených příkazů - - @@ -4419,11 +4410,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Zvolit d STR_ORDER_DROP_REFIT_AUTO :Neměnný náklad STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupný náklad -STR_ORDER_SERVICE :{BLACK}Údržba STR_ORDER_DROP_GO_ALWAYS_DEPOT :Jeď vždy STR_ORDER_DROP_SERVICE_DEPOT :Údržba v případě potřeby STR_ORDER_DROP_HALT_DEPOT :Zastavit -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Přeskoč tento cíl, pokud není potřeba pravidelná údržba STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vlastnost vozidla, podle které přeskakovat @@ -4492,6 +4481,7 @@ STR_ORDER_REFIT_ORDER :(Přestavět na STR_ORDER_REFIT_STOP_ORDER :(Přestavět na {STRING} a zastavit) STR_ORDER_STOP_ORDER :(Zastavit) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemůže použít stanici){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4941,6 +4931,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nelze na STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nevhodný druh depa +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je po výměně moc dlouhý STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Žádné pravidlo pro výměnu vozidel se nepoužilo diff --git a/src/lang/danish.txt b/src/lang/danish.txt index fa95eda360..9093ef77da 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1751,13 +1751,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Denne indstilli STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Deaktiver skibe for computeren: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Denne indstilling gør det umuligt for en computerspiller at bygge skibe, når den er slået til. -STR_CONFIG_SETTING_AI_PROFILE :Standart indstillingsprofil: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vælg hvilke indstillinger der skal bruges for tilfældig AIs eller for oprindelige værdier, når du tilføjer en ny AI eller spil Script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Let -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mellem -STR_CONFIG_SETTING_AI_PROFILE_HARD :Svær - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillad computerspillere i netværksspil: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillad computerstyrede spillere at deltage i multiplayer spil @@ -1878,7 +1871,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Sæt året hvor STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Bladr gennem signaltyper: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Vælg hvilke signaltyper et vælge imellem, når der Ctrl+klikkes på et bygget signal med signalværktøjet ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun togvejssignaler STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle viste STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Vis signaltyper: {STRING} @@ -4405,7 +4397,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skift ti STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordreliste - klik på en ordre for at markere den. CTRL-klik for at centrere skærmen over stationen STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Slut på ordrer - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Slut på delt ordreliste - - @@ -4439,11 +4430,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vælg ty STR_ORDER_DROP_REFIT_AUTO :Bestemt last STR_ORDER_DROP_REFIT_AUTO_ANY :Tilgængelig last -STR_ORDER_SERVICE :{BLACK}Service STR_ORDER_DROP_GO_ALWAYS_DEPOT :Altid benyt STR_ORDER_DROP_SERVICE_DEPOT :Service hvis nødvendigt STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Spring denne ordre over medmindre der er behov for service STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Data som ordrespring baseres på @@ -4512,6 +4501,7 @@ STR_ORDER_REFIT_ORDER :(Tilpas til {ST STR_ORDER_REFIT_STOP_ORDER :(Tilpas til {STRING} og stop) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruge station){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4979,6 +4969,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan ikke STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Forkert depottype +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er blevet for langt efter udskiftning STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ingen autoudskiftning/-fornyelse foretaget. diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 7ff66b414c..e24f3ecf92 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1811,13 +1811,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Het inschakelen STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Schepen voor de computer uitschakelen: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Het inschakelen van deze instelling maakt het het bouwen van schepen onmogelijk voor een computerspeler -STR_CONFIG_SETTING_AI_PROFILE :Standaard instellingenprofiel: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Hiermee selecteer je welk instellingsprofiel moet worden gebruikt bij willekeurige AI's of als startwaardes wanneer een nieuwe AI of spelscript wordt toegevoegd. -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Makkelijk -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Gemiddeld -STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilijk - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Computerspelers toestaan in netwerkspelen: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Computerspelers toestaan in netwerkspellen @@ -1938,7 +1931,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stelt het jaar STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Door seintypen bladeren: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecteer welke soorten seinen worden gebruikt wanneer je Ctrl+klikt op een bouwsein met het seingereedschap ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Alleen routeseinen STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alles zichtbaar STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Soorten sein weergeven: {STRING} @@ -4525,7 +4517,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Naar die STR_ORDERS_LIST_TOOLTIP :{BLACK}Orderlijst - klik op een order om deze te selecteren. Met Ctrl+klik ga je naar de bestemming van de order. STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Einde van orders - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Einde gedeelde orders - - @@ -4559,11 +4550,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selectee STR_ORDER_DROP_REFIT_AUTO :Vaste vracht STR_ORDER_DROP_REFIT_AUTO_ANY :Beschikbare vracht -STR_ORDER_SERVICE :{BLACK}Onderhoud STR_ORDER_DROP_GO_ALWAYS_DEPOT :Altijd gaan STR_ORDER_DROP_SERVICE_DEPOT :Onderhouden wanneer nodig STR_ORDER_DROP_HALT_DEPOT :Stoppen -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Deze order overslaan, tenzij onderhoud nodig is STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Voertuiggegevens voor basisspringen wanneer @@ -4632,6 +4621,7 @@ STR_ORDER_REFIT_ORDER :(Ombouwen naar STR_ORDER_REFIT_STOP_ORDER :(Ombouwen naar {STRING} en stop) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan station niet gebruiken){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5099,6 +5089,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan geen STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerd depot-type +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is te lang na het vervangen STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Geen automatische regels voor vervangen/vernieuwen toegepast diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 082bd5d0d6..79f6a858ee 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -634,6 +634,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Click he # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Company League Table STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Engineer STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Traffic Manager STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transport Coordinator @@ -1811,13 +1812,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Enabling this s STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Disable ships for computer: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Enabling this setting makes building ships impossible for a computer player -STR_CONFIG_SETTING_AI_PROFILE :Default settings profile: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Choose which settings profile to use for random AIs or for initial values when adding a new AI or Game Script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Easy -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medium -STR_CONFIG_SETTING_AI_PROFILE_HARD :Hard - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Allow AIs in multiplayer: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI computer players to participate in multiplayer games @@ -1938,7 +1932,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year wh STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cycle through signal types: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Select which signal types to cycle through when Ctrl+Clicking on a built signal with the signal tool ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Path signals only STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :All visible STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Show signal types: {STRING} @@ -4525,7 +4518,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Switch t STR_ORDERS_LIST_TOOLTIP :{BLACK}Order list - click on an order to highlight it. Ctrl+Click to scroll to the order's destination STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - End of Orders - - STR_ORDERS_END_OF_SHARED_ORDERS :- - End of Shared Orders - - @@ -4559,11 +4551,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Select w STR_ORDER_DROP_REFIT_AUTO :Fixed cargo STR_ORDER_DROP_REFIT_AUTO_ANY :Available cargo -STR_ORDER_SERVICE :{BLACK}Service STR_ORDER_DROP_GO_ALWAYS_DEPOT :Always go STR_ORDER_DROP_SERVICE_DEPOT :Service if needed STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Skip this order unless a service is needed STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vehicle data to base jumping on @@ -4632,6 +4622,7 @@ STR_ORDER_REFIT_ORDER :(Refit to {STRI STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRING} and stop) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4834,6 +4825,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -5099,6 +5092,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Unable t STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot type +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b19b04b6ad..f9f01d5e6e 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -634,6 +634,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Click he # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Company League Table STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Engineer STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Traffic Manager STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transport Coordinator @@ -1811,13 +1812,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Enabling this s STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Disable ships for computer: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Enabling this setting makes building ships impossible for a computer player -STR_CONFIG_SETTING_AI_PROFILE :Default settings profile: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Choose which settings profile to use for random AIs or for initial values when adding a new AI or Game Script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Easy -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medium -STR_CONFIG_SETTING_AI_PROFILE_HARD :Hard - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Allow AIs in multiplayer: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI computer players to participate in multiplayer games @@ -1938,7 +1932,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year wh STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cycle through signal types: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Select which signal types to cycle through when Ctrl+Clicking on a built signal with the signal tool ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Path signals only STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :All visible STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Show signal types: {STRING} @@ -4525,7 +4518,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Switch t STR_ORDERS_LIST_TOOLTIP :{BLACK}Order list - click on an order to highlight it. Ctrl+Click to scroll to the order's destination STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - End of Orders - - STR_ORDERS_END_OF_SHARED_ORDERS :- - End of Shared Orders - - @@ -4559,11 +4551,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Select w STR_ORDER_DROP_REFIT_AUTO :Fixed cargo STR_ORDER_DROP_REFIT_AUTO_ANY :Available cargo -STR_ORDER_SERVICE :{BLACK}Maintenance STR_ORDER_DROP_GO_ALWAYS_DEPOT :Always go STR_ORDER_DROP_SERVICE_DEPOT :Repair if needed STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Skip this order unless maintenance is needed STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vehicle data to base jumping on @@ -4632,6 +4622,7 @@ STR_ORDER_REFIT_ORDER :(Refit to {STRI STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRING} and stop) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4834,6 +4825,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -5099,6 +5092,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Unable t STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot type +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index d0566da897..28b4e51391 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1744,13 +1744,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Se tiu ĉi agor STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Malebligu ŝipojn por la komputilo: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Se tiu ĉi agordo estas aktiva, komputila ludanto ne povas konstrui ŝipojn -STR_CONFIG_SETTING_AI_PROFILE :Defaŭlta agorda profilo: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Elektu kiun agordaron uzi por hazardaj AIoj aŭ por komencaj valoroj dum aldonado de nova AI aŭ ludoskripto -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Facila -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mezfacila -STR_CONFIG_SETTING_AI_PROFILE_HARD :Malfacila - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permesu ArtefaritajnIntelektojn en pluropaj ludoj: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permesu ke Artefarit-Inteligentaj (AI) komputilaj ludantoj partoprenu en pluropaj ludoj @@ -1862,7 +1855,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Elektu la jaron STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Iteraciu tra signaltipoj: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Nur vojrezervaj semaforoj STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :ĉiuj videblaj STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Montru semaforajn tipojn: {STRING} @@ -4260,7 +4252,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Montri h STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordonlisto - klaku ordonon por elekti. Ctrl+Klak rulumas al la celstacio STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fino de Ordonoj - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fino de Kunhavitaj Ordonoj - - @@ -4294,11 +4285,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elektu a STR_ORDER_DROP_REFIT_AUTO :Malŝanĝa ŝarĝo STR_ORDER_DROP_REFIT_AUTO_ANY :Haveblaj ŝarĝoj -STR_ORDER_SERVICE :{BLACK}Priservo STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ĉiam iru. STR_ORDER_DROP_SERVICE_DEPOT :Prizorgu se necesas. STR_ORDER_DROP_HALT_DEPOT :Haltu. -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Transsaltu tiun ĉi ordonon krom se priservo necesas # Conditional order variables, must follow order of OrderConditionVariable enum @@ -4365,6 +4354,7 @@ STR_ORDER_REFIT_ORDER :(Readaptu por p STR_ORDER_REFIT_STOP_ORDER :(Readaptu por porti {STRING.n} kaj haltu) STR_ORDER_STOP_ORDER :(Haltu) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Ne eblas uzi la stacion){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4809,6 +4799,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ne povas STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Malĝusta garaĝtipo +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} tro longas post anstataŭado STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Neniuj aŭtoanstataŭo/renovigo reguloj aplikitaj. diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 29d04458f2..553e3a9332 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1725,13 +1725,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Selle seade sis STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Laevakeeld arvutile: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Selle seade sisse lülitamise korral ei ole arvuti juhitud mängijal lubatud laevade ehitamine -STR_CONFIG_SETTING_AI_PROFILE :Vaikeseadistus: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vali seadistus, mida kasutada suvalistes AI-des või uue AI/GameScripti lisamisel -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lihtne -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Keskmine -STR_CONFIG_SETTING_AI_PROFILE_HARD :Keeruline - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :AI mitmikmängus: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Võimaldab arvutil osaleda mitmikmängudes @@ -1850,7 +1843,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Määra aasta a STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Vaheta signaalide liike: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Muuda valitavaid signaaliliike, kui «Ctrl»+klõpsu abil muudetakse ehitatud signaali liiki ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Ainult täiustatud STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kõik nähtavad STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Näita signaali tüüpe: {STRING} @@ -4312,7 +4304,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näita g STR_ORDERS_LIST_TOOLTIP :{BLACK}Korralduste register - korraldus valitakse klõpsamisega. Ctrl+klõps keskendab vaate korralduse sihtpunktile STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Korralduste lõpp - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Jagatud korralduste lõpp - - @@ -4346,11 +4337,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vali, mi STR_ORDER_DROP_REFIT_AUTO :Fikseeritud kaubatüüp STR_ORDER_DROP_REFIT_AUTO_ANY :Võimalikud kaubad -STR_ORDER_SERVICE :{BLACK}Hooldus STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alati STR_ORDER_DROP_SERVICE_DEPOT :Vajadusel STR_ORDER_DROP_HALT_DEPOT :Peatu -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Jäta see käsk vahele, kui hooldust ei vajata STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Sõiduki andmed, millel korralduse vahelejätmine põhineb @@ -4419,6 +4408,7 @@ STR_ORDER_REFIT_ORDER :(Ümberseadista STR_ORDER_REFIT_STOP_ORDER :(Ümberseadista: {STRING}, peatu) STR_ORDER_STOP_ORDER :(Peatu) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Ei saa jaama kasutada){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4866,6 +4856,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ei leia STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Vale depootüüp +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on pärast asendamist liiga pikk STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Automaatse asendamise/uuendamise reegleid ei ole rakendatud diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 41c2cb54b9..86c4646d74 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1489,13 +1489,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Gildan av hesi STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Ógilda skip fyri telduna: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Gildan av hesi ásetan ger tað ógjørligt hjá einum telduspælara at byggja skip -STR_CONFIG_SETTING_AI_PROFILE :Vanligur innstillings profilur: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vel hvønn innstillings profil at nýta fyri tilvildarlig AI ella fyri byrjunar virði tá tú leggur nýtt AI ella spæl skript til -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lætt -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Miðal -STR_CONFIG_SETTING_AI_PROFILE_HARD :Torført - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Loyv AI í hópspæli: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Loyv AI telduspælarum at taka lut í hópspølum @@ -1599,7 +1592,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Áset hvat ár STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Blaða gjøgnum tekn sløg: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Leið tekin einans STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Øll ###length 2 @@ -3401,7 +3393,6 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Tíðarætlan STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Endi á boðum - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Endi á deildum boðum - - @@ -3432,7 +3423,6 @@ STR_ORDER_REFIT_AUTO :{BLACK}Sjálvum STR_ORDER_DROP_REFIT_AUTO :Ávisur farmur STR_ORDER_DROP_REFIT_AUTO_ANY :Tøkur farmur -STR_ORDER_SERVICE :{BLACK}Eftirlit STR_ORDER_DROP_GO_ALWAYS_DEPOT :Far altíð STR_ORDER_DROP_SERVICE_DEPOT :Eftirlit um neyðugt STR_ORDER_DROP_HALT_DEPOT :Steðga @@ -3500,6 +3490,7 @@ STR_ORDER_REFIT_ORDER :(Bygg um til {S STR_ORDER_REFIT_STOP_ORDER :(Bygg um til {STRING} og steðga) STR_ORDER_STOP_ORDER :(Steðga) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Undirskilt) @@ -3888,6 +3879,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ikki fø STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Skeivt goymslu slag +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er ov langt aftaná umbýting STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ongar sjálvumbýting/endurnýggja reglur virknar diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 991f1b4628..ea13022bd2 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1791,13 +1791,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Mikäli käytö STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Tietokoneella ei ole laivoja: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Mikäli käytössä, laivojen rakentaminen ei ole mahdollista tietokonepelaajille -STR_CONFIG_SETTING_AI_PROFILE :Oletusarvoinen asetusprofiili: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Valitse, mitä asetusprofiilia käytetään sattumanvaraisille tekoälyille tai alkuarvoille lisättäessä uutta tekoälyä tai peliskriptiä -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Helppo -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Keskitaso -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 @@ -1918,7 +1911,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Valitse vuosi j STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Vaihda opastintyyppien välillä: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Valitse, mitkä opastintyypit ovat käytössä painettaessa Ctrl-näppäintä opastimia rakennettaessa ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Vain reittiopastimet STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Näytä kaikki STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Näytä opastintyypit: {STRING} @@ -4489,7 +4481,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näytä STR_ORDERS_LIST_TOOLTIP :{BLACK}Käskyt – napsauta käskyä korostaaksesi sen. Ctrl+napsautus siirtää näkymän käskyn kohteeseen. STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Käskyjen loppu - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Jaettujen käskyjen loppu - - @@ -4523,11 +4514,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Valitse, STR_ORDER_DROP_REFIT_AUTO :Määrätty rahti STR_ORDER_DROP_REFIT_AUTO_ANY :Saatavilla oleva rahti -STR_ORDER_SERVICE :{BLACK}Huolto STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mene aina STR_ORDER_DROP_SERVICE_DEPOT :Huolto, jos tarpeen STR_ORDER_DROP_HALT_DEPOT :Pysähdy -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ohita tämä käsky, ellei huoltoa tarvita STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Kulkuneuvon tiedot, joiden perusteella hypätään @@ -4596,6 +4585,7 @@ STR_ORDER_REFIT_ORDER :(Sovita {STRING STR_ORDER_REFIT_STOP_ORDER :(Sovita rahtityypille {STRING} ja pysähdy) STR_ORDER_STOP_ORDER :(Pysähdy) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Asema ei käytettävissä){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5063,6 +5053,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Paikalli STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Väärä varikkotyyppi +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on liian pitkä korvaamisen jälkeen STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ei käytössä olevia itsekorvaus- tai itseuudistussääntöjä diff --git a/src/lang/french.txt b/src/lang/french.txt index 5c6590e83f..92bd790fda 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1804,13 +1804,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :En activant ce STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Désactiver les navires pour l'ordinateur{NBSP}: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :En activant ce paramètre, il sera impossible de construire des navires pour l'ordinateur -STR_CONFIG_SETTING_AI_PROFILE :Profil de réglage par défaut{NBSP}: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Définir le profil des réglages à utiliser pour les IAs aléatoires ou pour les valeurs initiales lors de l'ajout d'une nouvelle IA ou d'un script de jeu -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Facile -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Moyen -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difficile - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permettre les IA en multi-joueurs{NBSP}: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Autorise les Intelligences Artificielles à participer aux parties multijoueurs @@ -1931,7 +1924,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Définit l'ann STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Sélectionner les signaux parmi{NBSP}: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Choisir quels types de signaux sont proposés lors de leur construction avec Ctrl ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :les signaux de chemin uniquement STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :tous les signaux visibles STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Afficher les signaux parmi{NBSP}: {STRING} @@ -4518,7 +4510,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Basculer STR_ORDERS_LIST_TOOLTIP :{BLACK}Liste d'ordres - Cliquer sur un ordre pour le sélectionner. Ctrl-clic pour déplacer la vue sur la destination de l'ordre. STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :−− Fin des ordres −− STR_ORDERS_END_OF_SHARED_ORDERS :−− Fin des ordres partagés −− @@ -4552,11 +4543,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Sélecti STR_ORDER_DROP_REFIT_AUTO :Cargaison fixée STR_ORDER_DROP_REFIT_AUTO_ANY :Cargaison disponible -STR_ORDER_SERVICE :{BLACK}Entretien STR_ORDER_DROP_GO_ALWAYS_DEPOT :Toujours aller STR_ORDER_DROP_SERVICE_DEPOT :Entretien si nécessaire STR_ORDER_DROP_HALT_DEPOT :Arrêt -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Sauter cet ordre tant qu'aucun entretien n'est requis STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Données du véhicule servant de base au saut @@ -4625,6 +4614,7 @@ STR_ORDER_REFIT_ORDER :(Réaménager p STR_ORDER_REFIT_STOP_ORDER :(Réaménager pour {STRING} et arrêt) STR_ORDER_STOP_ORDER :(Arrêt) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station inutilisable){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5092,6 +5082,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Impossib STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Dépôt incompatible +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} est trop long après remplacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Aucune règle de remplacement/renouvellement automatique appliquée diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 884b41f266..51e1c92dd3 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1559,13 +1559,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :By ynskeakeljen STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Ferbied skippen foar kompjûterspilers: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :By ynskeakeljen is it ûnmooglik foar kompjûterspilers om skippen te bouwen -STR_CONFIG_SETTING_AI_PROFILE :Standerd ynstellingsprofyl: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Kies hokker ynstellingsprofyl brûkt wurde moat foar ien of oare AI of foar begjinweardes by it tafoegjen fan in nije AI of Spulskript -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Maklik -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Middel -STR_CONFIG_SETTING_AI_PROFILE_HARD :Dreech - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Stea AIs ta yn multiplayer: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Kompjûterspilers tastean mei te spylje yn multyspyler spullen @@ -1662,7 +1655,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Bou semafoor se STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Gea langs alle sein soarten: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :route seinen allinech STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Allegear ###length 2 @@ -3596,7 +3588,6 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Tjinstregeling STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :--Ein fan de Oarders-- @@ -3624,10 +3615,8 @@ STR_ORDER_REFIT_AUTO :{BLACK}Ombouwe STR_ORDER_DROP_REFIT_AUTO :Fêste fracht STR_ORDER_DROP_REFIT_AUTO_ANY :Beskikbere fracht -STR_ORDER_SERVICE :{BLACK}Tsjinst STR_ORDER_DROP_GO_ALWAYS_DEPOT :Gean altyd STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Sla dizze opdracht oer of it moar wêze dat ûnderhâld nedich is. # Conditional order variables, must follow order of OrderConditionVariable enum @@ -3687,6 +3676,7 @@ STR_ORDER_REFIT_ORDER :(Ombouwe nij {S STR_ORDER_REFIT_STOP_ORDER :(Ombouwe nei {STRING} en stopje) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Ymplisyt) @@ -4061,6 +4051,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kin loka STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Ferkeard depottype +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is te lang nei ferfanging STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Gjin autoferfang- of fernijregels tapast diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 9b609e8d94..5a09cdbea7 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1755,13 +1755,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Ma tha seo air, STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Cuir longan à comas airson a' choimpiutair: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Ma tha seo air, chan urrainn dha chluicheadairean coimpiutair longan a thogail -STR_CONFIG_SETTING_AI_PROFILE :Pròifil nan roghainnean bunaiteach: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Tagh pròifil nan roghainnean a thèid a chleachdadh airson IFan air thuaiream no airson luachan tòiseachaidh nuair a thèid IF no sgriobt geama ùr a chur ris -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Furasta -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Meadhanach -STR_CONFIG_SETTING_AI_PROFILE_HARD :Doirbh - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Ceadaich IFan sa mhodh ioma-chluicheadair: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Ceadaich gun gabh cluicheadairean coimpiutair IF pàirt an an geamannan ioma-chluicheadair @@ -1866,7 +1859,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Tagh am bliadhn STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cuairtich tro na seòrsaichean comharra: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Tagh dè na seòrsaichean dhe chomharra a thèid a chuairteachadh tromhpa nuair a thèid briogadh le Ctrl air togail comharra leis an inneal togail chomharran ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Comharran slighe a-mhàin STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Na h-uile ###length 2 @@ -4087,7 +4079,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Gearr le STR_ORDERS_LIST_TOOLTIP :{BLACK}Liosta nan òrduighean - briog air òrdugh gus a thaghadh. Sgrolaichidh Ctrl+briogadh gu ceann-uidhe an òrduigh STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Deireadh nan òrduighean - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Deireadh nan òrduighean co-roinnte - - @@ -4121,11 +4112,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Tagh an STR_ORDER_DROP_REFIT_AUTO :Carago stèidhichte STR_ORDER_DROP_REFIT_AUTO_ANY :Carago ri làimh -STR_ORDER_SERVICE :{BLACK}Obair-ghlèidhidh STR_ORDER_DROP_GO_ALWAYS_DEPOT :Rach ann an-còmhnaidh STR_ORDER_DROP_SERVICE_DEPOT :Obair-ghlèidhidh ma tha i a dhìth STR_ORDER_DROP_HALT_DEPOT :Stad -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Leum thairis air an òrdugh seo mura h-eil feum air obair-ghlèidhidh STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dàta a' charbaid air a bheil an leum stèidhichte @@ -4193,6 +4182,7 @@ STR_ORDER_REFIT_ORDER :(Mùth airson { STR_ORDER_REFIT_STOP_ORDER :(Mùth airson {STRING} is stad) STR_ORDER_STOP_ORDER :(Stad) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Fillte a-staigh) @@ -4620,6 +4610,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Cha ghab STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Seòrsa dhe gharaids / trèan-lann / cala / hangar cearr +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Tha {VEHICLE} ro fhada an dèidh cur an àite STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Cha deach riaghailt fèin-leasachaidh/fèin-nuadhachaidh sam bith a chur an sàs diff --git a/src/lang/galician.txt b/src/lang/galician.txt index dea7fed799..8f743e57a3 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1731,13 +1731,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activando esta STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Deshabilita-los navíos para a computadora: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activando esta opción, o xogador controlado pola computadora non pode construir navíos -STR_CONFIG_SETTING_AI_PROFILE :Configuración por defecto: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolle a configuración para usar en IAs aleatorias ou para valores iniciais ao engadir unha nova IA ou un novo script do xogo -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medio -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA en multixogador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permitir aos xogadores controlados pola computadora participar en partidas multixogador @@ -1856,7 +1849,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Selecciona o an STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Circular polos tipos de sinais: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecciona os tipos de sinal polos que rodará o cursor ao facer Ctrl+clic nunha construción coa ferramenta de sinal. ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Só sinais de ruta STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas visibles STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Amosar os tipos de sinais: {STRING} @@ -4365,7 +4357,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambiar STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordes - Pincha nunha orde para seleccionala. Ctrl+click para desprazarse á estación da orde STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fin das ordes - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fin das ordes compartidas - - @@ -4399,11 +4390,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Seleccio STR_ORDER_DROP_REFIT_AUTO :Carga fixada STR_ORDER_DROP_REFIT_AUTO_ANY :Carga dispoñíbel -STR_ORDER_SERVICE :{BLACK}Servizo STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir sempre STR_ORDER_DROP_SERVICE_DEPOT :Facer servizo se é necesario STR_ORDER_DROP_HALT_DEPOT :Parar -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Saltar esta orde a non ser que sexa necesario un servizo STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Datos do vehículo para saltarse @@ -4472,6 +4461,7 @@ STR_ORDER_REFIT_ORDER :(Reaxustar a {S STR_ORDER_REFIT_STOP_ORDER :(Reaxustar a {STRING} e parar) STR_ORDER_STOP_ORDER :(Parar) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Non pode usar a estación){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4933,6 +4923,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}No se po STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito erróneo +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} é demasiado longo despois do reemprazo STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Non se aplicaron as regras de autosubstitución/renovación diff --git a/src/lang/german.txt b/src/lang/german.txt index 764d149c1d..28afbc977a 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1728,13 +1728,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Verbiete Comput STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Schiffe für den Computer abschalten: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Verbiete Computerspielern, Schiffe zu kaufen -STR_CONFIG_SETTING_AI_PROFILE :Standardeinstellungen: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Auswählen, welcher Schwierigkeitsgrad in den KI-Optionen von zufällig startenden Computerspielern eingestellt werden soll. Wird auch als Standardwert für einzeln ausgewählte KIs oder für Spielskripte verwendet -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Leicht -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mittel -STR_CONFIG_SETTING_AI_PROFILE_HARD :Schwierig - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :KI im Mehrspielermodus erlauben: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaube die Teilnahme von Computerspielern im Mehrspielermodus @@ -1853,7 +1846,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Lege das Jahr f STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Durchlaufen der Signalarten: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Lege fest, durch welche Signaltypen mittels Strg-Klick auf vorhandene Signale rotiert wird ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Nur Pfadsignale STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle Sichtbaren STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Signaltypen zeigen: {STRING} @@ -4355,7 +4347,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Zur Fahr STR_ORDERS_LIST_TOOLTIP :{BLACK}Auftragsliste – Auftrag anklicken, um ihn zu markieren. Strg+Klick springt zum Auftragsziel STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Ende der Aufträge - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Ende des gemeinsam genutzten Fahrplans - - @@ -4389,11 +4380,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Auswähl STR_ORDER_DROP_REFIT_AUTO :Vorgegebene Fracht STR_ORDER_DROP_REFIT_AUTO_ANY :Verfügbare Fracht -STR_ORDER_SERVICE :{BLACK}Wartung STR_ORDER_DROP_GO_ALWAYS_DEPOT :Fahre immer STR_ORDER_DROP_SERVICE_DEPOT :Wartung, wenn nötig STR_ORDER_DROP_HALT_DEPOT :Stopp -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Überspringe diesen Auftrag, sofern keine Wartung benötigt wird STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Fahrzeuginformation, welche für den Sprung ausgewertet wird @@ -4462,6 +4451,7 @@ STR_ORDER_REFIT_ORDER :(auf {STRING} u STR_ORDER_REFIT_STOP_ORDER :(auf {STRING} umrüsten und stoppen) STR_ORDER_STOP_ORDER :(Stopp) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station unbenutzbar){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4920,6 +4910,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Fahrzeug STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Falscher Depottyp +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} ist nach Ersetzung zu lang STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Es treffen keine Ersetzungs-/Erneuerungsregeln zu diff --git a/src/lang/greek.txt b/src/lang/greek.txt index e3b232a378..4b290ae79e 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1758,13 +1758,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Ενεργοπ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Απενεργοποίηση πλοίων υπολογιστή: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση κάνει αδύνατη την κατασκευή πλοίων από παίκτη του υπολογιστή -STR_CONFIG_SETTING_AI_PROFILE :Προκαθορισμένο προφίλ ρυθμίσεων: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Επιλέξτε το προφίλ ρυθμίσεων για χρήση με τυχαία ΑΙ ή για τις αρχικές τιμές όταν προστίθεται νέο AI ή δέσμη ενεργειών -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Εύκολο -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Μεσαίο -STR_CONFIG_SETTING_AI_PROFILE_HARD :Δύσκολο - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Επιτρέπονται AI σε παιχνίδια πολλών παικτών: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Επιτρέπεται η συμμετοχή παικτών υπολογιστή AI σε παιχνίδια πολλαπλών παικτών @@ -1883,7 +1876,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Ορίζετα STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Περιήγηση στους τύπους σηματοδότησης: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Επιλέξτε τους τύπους σημάτων μεταξύ των οποίων θα γίνονται οι αλλαγές όταν πατάτε σε ένα τοποθετημένο σήμα κρατώντας πατημένο το Ctrl ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Μόνο σηματοδότες τροχιάς STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Όλα ορατά STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Εμφάνιση τύπων σημάτων: {STRING} @@ -4345,7 +4337,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Αλλα STR_ORDERS_LIST_TOOLTIP :{BLACK}Λίστα εντολών - πατήστε σε μια εντολή για να την επιλέξετε. Με Ctrl+Κλικ γίνεται μετακίνηση στον προορισμό της οδηγίας STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Τέλος Εντολών - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Τέλος Μοιρασμένων Οδηγιών - - @@ -4379,11 +4370,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Επιλ STR_ORDER_DROP_REFIT_AUTO :Προκαθορισμένο φορτίο STR_ORDER_DROP_REFIT_AUTO_ANY :Διαθέσιμο φορτίο -STR_ORDER_SERVICE :{BLACK}Επισκευή STR_ORDER_DROP_GO_ALWAYS_DEPOT :Πάντα πήγαινε STR_ORDER_DROP_SERVICE_DEPOT :Επισκευή εάν χρειάζεται STR_ORDER_DROP_HALT_DEPOT :Στάση -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Παράλειψη αυτής της εντολής εκτός αν χρειάζεται επισκευή STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Δεδομένα οχήματος για να βασιστεί το άλμα @@ -4452,6 +4441,7 @@ STR_ORDER_REFIT_ORDER :(Μετατρο STR_ORDER_REFIT_STOP_ORDER :(Μετατροπή σε {STRING} και στάση) 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} @@ -4895,6 +4885,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Αδύν STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Λάθος τύπος αμαξοστάσιου +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Το {VEHICLE} είναι πολύ μεγάλο μετά την ανανέωση STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Χωρίς εφαρμογή κανόνων αυτόματης ανανέωσης/αντικατάστασης diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 603e38521c..27eca245fa 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1594,13 +1594,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :אפשור הג STR_CONFIG_SETTING_AI_BUILDS_SHIPS :{STRING} :מנע הפעלת כלי שייט ע”י שחקני המחשב STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :אפשור הגדרה זו הופך בניית אוניות לבלתי אפשרית עבור שחקן מחשב -STR_CONFIG_SETTING_AI_PROFILE :פרופיל הגדרות ברירת מחדל: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :בחר באיזה פרופיל הגדרות להשתמש עבור שחקני מחשב אקראיים או עבור ערכים ראשוניים בעת הוספת שחקן מחשב חדש או סקריפט משחק -###length 3 -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_AI_IN_MULTIPLAYER_HELPTEXT :אפשר לשחקני מחשב להשתתף במשחקים מרובי משתתפים @@ -1709,7 +1702,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :קבע את ה STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :{STRING} :הצג חלופות עבור רמזורים STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :בחר בין אילו סוגי רמזורים לעבור כאשר מקליקים על "בנה רמזור" תוך לחיצה על מקש Ctrl ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :רמזורי נתיב בלבד STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :הכל ###length 2 @@ -3982,7 +3974,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}עבור STR_ORDERS_LIST_TOOLTIP :{BLACK}רשימת יעדים - לחץ על יעד על מנת להדגישו. Ctrl+לחיצה מתמקד ביעד STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - סוף רשימת היעדים - - STR_ORDERS_END_OF_SHARED_ORDERS :- - סוף של הוראות משותפות - - @@ -4016,11 +4007,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}בחרל STR_ORDER_DROP_REFIT_AUTO :מטען קבוע STR_ORDER_DROP_REFIT_AUTO_ANY :מטען זמין -STR_ORDER_SERVICE :{BLACK}טיפול STR_ORDER_DROP_GO_ALWAYS_DEPOT :עבור תמיד דרך STR_ORDER_DROP_SERVICE_DEPOT :טפל במידת הצורך STR_ORDER_DROP_HALT_DEPOT :עצור -STR_ORDER_SERVICE_TOOLTIP :{BLACK}דלג על היעד שנבחר אלא אם הכלי זקוק לטיפול STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}נתוני כלי הרכב עליהם יתבסס הדילוג @@ -4089,6 +4078,7 @@ STR_ORDER_REFIT_ORDER :({STRING} הת STR_ORDER_REFIT_STOP_ORDER :(ועצור {STRING} התאם לנשיאת) STR_ORDER_STOP_ORDER :(עצור) + STR_ORDER_GO_TO_STATION :{2:STRING} {1:STATION} {0:STRING} STR_ORDER_IMPLICIT :(משתמע) @@ -4525,6 +4515,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}לא נ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :סוג מוסך שגוי +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}ארוכה מידי לאחר ביצוע ההחלפה {VEHICLE} STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}לא יושמו כללים להחלפה/חידוש אוטומטיים diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 0168f7b14f..377ea9564c 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -559,8 +559,6 @@ STR_CONFIG_SETTING_AI_BUILDS_TRAINS :कंप्य STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :कंप्यूटर के लिए विमान अक्षम करें: {STRING} -###length 3 - @@ -599,7 +597,6 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :केवल पथ संकेत ###length 2 @@ -1276,7 +1273,6 @@ STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}क् # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -1313,6 +1309,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + 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} @@ -1440,6 +1437,8 @@ STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}यह STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE} स्थानीय डिपो के लिए मार्ग खोजने में असमर्थ +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}स्वतः नवीनीकरण/बदलाव का कोई भी नियम लागू नहीं किया गया STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(धन सीमा) diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 16428f9b8b..69cb6f3c09 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1790,13 +1790,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Bekapcsolva a s STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Hajók tiltása a gépi ellenfeleknek: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Bekapcsolva a számítógép által irányított ellenfelek nem építhetnek hajókat -STR_CONFIG_SETTING_AI_PROFILE :Alapértelmezett beállítás: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Válaszd ki, hogy melyik beállítási mintát használja a 'véletlen' MI a belső beállításainak, amikor új MI-t vagy szkriptet adsz hozzá -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Könnyű -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Közepes -STR_CONFIG_SETTING_AI_PROFILE_HARD :Nehéz - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Számítógépes ellenfelek a hálózati játékokban: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Számítógép által irányított játékosok részvételének engedélyezése többjátékos játékokban @@ -1915,7 +1908,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Az év beállí STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Jelzők típusa átalakításkor: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Jelzőtípusok kiválasztása, hogy melyek legyenek elérhetőek a jelzőépítés eszközzel Ctrl+kattintás hatására. ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Csak irányjelzők STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Minden jelző STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Vasúti jelzők mutatása: {STRING} @@ -4417,7 +4409,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Átkapcs STR_ORDERS_LIST_TOOLTIP :{BLACK}Utasításlista - kattints egy célpontra a kijelöléséhez. Ctrl+kattintással az utasítás helyszínére görget STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Utasítások vége - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Megosztott utasításlista vége - - @@ -4451,11 +4442,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Az utas STR_ORDER_DROP_REFIT_AUTO :Fix rakomány STR_ORDER_DROP_REFIT_AUTO_ANY :Elérhető rakomány -STR_ORDER_SERVICE :{BLACK}Javítás STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mindig menj javítani STR_ORDER_DROP_SERVICE_DEPOT :Ha javításra szorul STR_ORDER_DROP_HALT_DEPOT :Maradj ott -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Utasítás kihagyása, ha javítás szükséges STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}A jármű adata ami alapján ugrani szeretnénk a parancssorban @@ -4524,6 +4513,7 @@ STR_ORDER_REFIT_ORDER :(Átalakít err STR_ORDER_REFIT_STOP_ORDER :(átalakít erre: {STRING}, és megáll) STR_ORDER_STOP_ORDER :(megáll) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Az állomás nem használható){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4979,6 +4969,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nem tal STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Rossz járműteleptípus +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} túl hosszú a csere után STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nincsenek automatikus járműfelújítási szabályok alkalmazva diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 8d8ae1a5d4..1ddd95441c 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1488,13 +1488,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Ef þessi still STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Útiloka skip frá tölvu: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Ef þessi stilling er virk er ómögulegt fyrir gervigreindar leikmenn að vera með skip -STR_CONFIG_SETTING_AI_PROFILE :Erfiðleikastig: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Veldu hvaða erfiðleikastig á að nota fyrir gervigreind eða leikja breytingar (Game Script) -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Auðvelt -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Miðlungs -STR_CONFIG_SETTING_AI_PROFILE_HARD :Erfitt - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Leyfa gervigreind í fjölspilun: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Leyfir gervigreindar leikmönnum að taka þátt í fjölspilunar leikjum @@ -1599,7 +1592,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stilltu árið STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Skipta milli tegunda umferðarmerkja: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Veldu tegund umferðarljósa sem á að skipta á milli með því að Ctrl+smella ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Aðeins Leiðarmerki STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Allt ###length 2 @@ -3594,7 +3586,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skipta y STR_ORDERS_LIST_TOOLTIP :{BLACK}Listi yfir skipanir - smelltu á skipun til að velja hana. Ctrl+smella færir sjónarhorn að áfangastað skipunar STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Endi skipana - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Endi sameiginlegra skipana - - @@ -3628,11 +3619,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Veldu í STR_ORDER_DROP_REFIT_AUTO :Ákveðinn farmur STR_ORDER_DROP_REFIT_AUTO_ANY :Tiltækur farmur -STR_ORDER_SERVICE :{BLACK}Skoðun STR_ORDER_DROP_GO_ALWAYS_DEPOT :Fara alltaf STR_ORDER_DROP_SERVICE_DEPOT :Þjónusta ef þarf STR_ORDER_DROP_HALT_DEPOT :Stoppa -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Sleppa þessarri skipun nema þörf sé á viðgerð STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Gögn farartækis sem skilyrði byggja á @@ -3700,6 +3689,7 @@ STR_ORDER_REFIT_ORDER :(Breyta í {STR STR_ORDER_REFIT_STOP_ORDER :(Breyta í {STRING} og stöðva) STR_ORDER_STOP_ORDER :(Stopp) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Undanskilin) @@ -4118,6 +4108,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Finnur e STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Röng tegund skýlis +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er of löng eftir uppfærslu STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Engar reglur um sjálfvirk umskipti/endurnýjun virkar diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 65cf1d1328..44a73b3a3f 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -731,8 +731,6 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora -###length 3 - @@ -1400,7 +1398,6 @@ STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapacesi # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -1430,6 +1427,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -1548,6 +1546,8 @@ STR_ERROR_TRAIN_TOO_LONG :{WHITE}Treno tr +# Depot unbunching related errors + # Autoreplace related errors # Rail construction errors diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 3f47d404a4..494547390f 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1727,13 +1727,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Mengaktifkan pe STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Non-aktifkan kapal bagi pemain komputer: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Mengaktifkan pengaturan ini membuat pemain komputer (AI) tidak dapat membangun kapal -STR_CONFIG_SETTING_AI_PROFILE :Profil pengaturan standar: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Pilih profil yang digunakan untuk pengaturan AI acak atau nilai awal saat menambahkan AI atau Game Script baru -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Gampang -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Sedang -STR_CONFIG_SETTING_AI_PROFILE_HARD :Susah - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Ijinkan kecerdasan pada modus banyak pemain: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Bolehkan pemain komputer AI untuk ikut permainan multiplayer @@ -1852,7 +1845,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Setel tahun saa STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Pergantian jenis sinyal: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Pilih jenis sinyal mana yang akan digilir saat Ctrl+klik pada sinyal yang dibangun dengan alat sinyal ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Hanya sinyal jalur STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Semua STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Tampilkan jenis sinyal: {STRING} @@ -4354,7 +4346,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Tampilka STR_ORDERS_LIST_TOOLTIP :{BLACK}Daftar perintah - klik pada perintah untuk menandainya. CTRL + klik untuk mengunjungi tujuan STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Akhir Perintah - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Akhir Perintah Bersama - - @@ -4388,11 +4379,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Pilih au STR_ORDER_DROP_REFIT_AUTO :Kargo tetap STR_ORDER_DROP_REFIT_AUTO_ANY :Kargo yang tersedia -STR_ORDER_SERVICE :{BLACK}Perbaikan STR_ORDER_DROP_GO_ALWAYS_DEPOT :Selalu masuk STR_ORDER_DROP_SERVICE_DEPOT :Perbaikan jika diperlukan STR_ORDER_DROP_HALT_DEPOT :Berhenti -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Lewati pemberhentian ini kecuali jika dibutuhkan perbaikan STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Kondisi yang diperiksa @@ -4461,6 +4450,7 @@ STR_ORDER_REFIT_ORDER :(Pasang ulang m STR_ORDER_REFIT_STOP_ORDER :(Pasang {STRING} dan berhenti) STR_ORDER_STOP_ORDER :(Berhenti) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Tidak dapat menggunakan stasiun){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4916,6 +4906,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Tidak da STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Jenis bengkel salah +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} jadi terlalu panjang setelah diganti STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Tidak ada aturan peremajaan otomatis yang berlaku diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 4d50c2bb24..888d803780 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1631,13 +1631,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Má dhéantar a STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Díchumasaigh longa don ríomhare: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Má dhéantar an socrú seo a chumasú ní bheidh ríomhimreoir in ann longa a thógáil -STR_CONFIG_SETTING_AI_PROFILE :Próifíl socruithe réamhshocraithe: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Roghnaigh cén próifíl socruithe a úsáidfear do AInna fánacha nó na luachanna tosaigh nuair a chuirfear AI nó Script Cluiche nua leis -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Éasca -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Méanach -STR_CONFIG_SETTING_AI_PROFILE_HARD :Deacair - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Ceadaigh AIanna i gcluiche ilimreora: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Ceadaigh do ríomhimreoirí AI a bheith páirteach i gcluichí ilimreora @@ -1753,7 +1746,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Socraigh an bli STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Téigh trí na cineálacha comharthaí in ord: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Roghnaigh cad iad na cineálacha comharthaí a rachfar tríd, nuair a dhéánfar Ctrl+cliceáil ar chomhartha atá tógtha le huirlis na gcomharthaí ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Comharthaí cosán amháin STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Gach ceann infheicthe STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Taispeáin cineálacha comharthaí: {STRING} @@ -4171,7 +4163,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Athraigh STR_ORDERS_LIST_TOOLTIP :{BLACK}Liosta na n-orduithe - cliceáil ar ordú chun é a aibhisiú. Is féidir scrollú chuig an stáisiún le Ctrl+Cliceáil STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Deireadh na nOrduithe - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Deireadh na nOrduithe Comhroinnte - - @@ -4205,11 +4196,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Roghnaig STR_ORDER_DROP_REFIT_AUTO :Lastas seasta STR_ORDER_DROP_REFIT_AUTO_ANY :Lastas atá ar fáil -STR_ORDER_SERVICE :{BLACK}Seirbhísigh STR_ORDER_DROP_GO_ALWAYS_DEPOT :Téigh i gcónaí STR_ORDER_DROP_SERVICE_DEPOT :Seirbhísigh más gá STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Téigh thar an t-ordú seo ach amháin má theastaíonn seirbhísiú STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Sonraí feithicle a bhunófar an léim air @@ -4278,6 +4267,7 @@ STR_ORDER_REFIT_ORDER :(Athfheistigh g STR_ORDER_REFIT_STOP_ORDER :(Athfheistigh go {STRING} agus stop) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Ní féidir an stáisiún a úsáid){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4716,6 +4706,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ní féi STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Cineál iosta mícheart +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Tá {VEHICLE} rófhada tar éis athsholáthair STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Níor cuireadh aon riail uathionadú/athnuachan i bhfeidhm. diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 54597049d7..aa056b67ea 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1772,13 +1772,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Abilitando ques STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Disabilita navi delle IA: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Abilitando questa impostazione si rende impossibile la costruzione di navi da parte di un giocatore controllato dal computer. -STR_CONFIG_SETTING_AI_PROFILE :Profilo impostazioni predefinito: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Seleziona quale profilo di impostazioni utilizzare per le IA casuali o da usare come predefinito quando si aggiunge una nuova IA o Script. -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Facile -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medio -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difficile - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Consenti le IA nelle partite multigiocatore: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Consente ai giocatori controllati dal computer di partecipare alle partite multigiocatore. @@ -1897,7 +1890,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Imposta l'anno STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Tipi di segnale fra cui alternare: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Seleziona fra quali tipi di segnale alternare quando si usa CTRL+clic su un segnale costruito ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo segnali di percorso STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Tutti visibili STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostra tipi di segnale: {STRING} @@ -4415,7 +4407,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Passa al STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista degli ordini - fare clic su un ordine per selezionarlo e CTRL+clic per portarsi sulla destinazione corrispondente STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fine degli ordini - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fine degli ordini condivisi - - @@ -4449,11 +4440,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selezion STR_ORDER_DROP_REFIT_AUTO :Carico prefissato STR_ORDER_DROP_REFIT_AUTO_ANY :Carico in attesa -STR_ORDER_SERVICE :{BLACK}Manutieni STR_ORDER_DROP_GO_ALWAYS_DEPOT :Sempre STR_ORDER_DROP_SERVICE_DEPOT :Solo se necessario STR_ORDER_DROP_HALT_DEPOT :Ferma in deposito -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ignora quest'ordine a meno che non sia necessaria una manutenzione STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dato del veicolo sul quale basare il salto @@ -4522,6 +4511,7 @@ STR_ORDER_REFIT_ORDER :(Riadatta per { STR_ORDER_REFIT_STOP_ORDER :(Riadatta per {STRING} e ferma) STR_ORDER_STOP_ORDER :(Ferma) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Impossibile usare la stazione){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4989,6 +4979,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Impossib STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo di deposito errato +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} è diventato troppo lungo dopo la sostituzione STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nessuna regola di rimpiazzo/rinnovo automatico applicata diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 7cd7c334ae..c0cb01d65e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1688,13 +1688,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :コンピュー STR_CONFIG_SETTING_AI_BUILDS_SHIPS :AI企業の船舶輸送を不許可: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :コンピュータが設立するライバル企業が船舶輸送を使えないようにします -STR_CONFIG_SETTING_AI_PROFILE :規定の設定プロファイル: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :新たなAIやゲームスクリプトを追加するときに、どの設定プロファイルを使ってランダムAIや初期値を与えるかを決定します -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :初級 -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :中級 -STR_CONFIG_SETTING_AI_PROFILE_HARD :上級 - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :マルチプレイヤーゲームでもAIを使用: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :マルチプレイヤーゲームでもAIのライバル企業が登場するかを設定します @@ -1813,7 +1806,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :色灯式信号 STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :信号種類のサイクル範囲: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Ctrl+クリックで信号種類を切り替える際に使う、サイクル種類を決定します ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :パス・一方通行パス STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :すべて表示 STR_CONFIG_SETTING_SIGNAL_GUI_MODE :信号の種類: {STRING} @@ -4282,7 +4274,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}ダイ STR_ORDERS_LIST_TOOLTIP :{BLACK}指令リスト - 指令を選択するにはクリックします。Ctrl+クリックで指令先に飛びます STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - 指令終了 - - STR_ORDERS_END_OF_SHARED_ORDERS :- - 共有指令終了- - @@ -4316,11 +4307,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}改造 STR_ORDER_DROP_REFIT_AUTO :改造不能な車両 STR_ORDER_DROP_REFIT_AUTO_ANY :改造可能な車両 -STR_ORDER_SERVICE :{BLACK}点検 STR_ORDER_DROP_GO_ALWAYS_DEPOT :常に行く STR_ORDER_DROP_SERVICE_DEPOT :必要であれば点検 STR_ORDER_DROP_HALT_DEPOT :運用停止 -STR_ORDER_SERVICE_TOOLTIP :{BLACK}点検が必要ない時にはこの指令はスキップされます STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}輸送機器データに基づく条件分岐 @@ -4389,6 +4378,7 @@ STR_ORDER_REFIT_ORDER :({STRING}に改 STR_ORDER_REFIT_STOP_ORDER :({STRING}に改造して、運用停止) STR_ORDER_STOP_ORDER :(運用停止) + STR_ORDER_GO_TO_STATION :{1:STATION}へ{0:STRING} {2:STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(駅を使用できません){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4837,6 +4827,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}付近 STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :車庫の種類が一致しません +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE}は置換後では長すぎます STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}この輸送機器の自動置換/更新は行われませんでした diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 5ea677b5b8..c3464d3d02 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -635,6 +635,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}특정 # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}회사 성취도 순위 STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :{G=f}기사 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :{G=f}교통망 관리자 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :{G=f}수송 조정자 @@ -1812,13 +1813,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :이 설정을 STR_CONFIG_SETTING_AI_BUILDS_SHIPS :컴퓨터의 선박 사용을 허가하지 않음: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :이 설정을 켜면, 컴퓨터 플레이어가 선박을 사용할 수 없게 됩니다 -STR_CONFIG_SETTING_AI_PROFILE :기본 설정 난이도: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :무작위 인공지능이 사용할 난이도 설정이나 인공지능 또는 게임 스크립트를 추가할 때 사용할 난이도 초기값을 고르십시오 -###length 3 -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_AI_IN_MULTIPLAYER_HELPTEXT :멀티 플레이 게임에서 인공지능 컴퓨터 플레이어가 참여하는 것을 허용합니다 @@ -1939,7 +1933,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신 STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :신호기를 CTRL 클릭할 때 바뀌는 신호기의 종류: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :신호기 건설에서 CTRL+클릭할 때 바뀌는 신호기의 종류를 선택합니다 ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :경로 신호기만 STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :모두 보여주기 STR_CONFIG_SETTING_SIGNAL_GUI_MODE :보여줄 신호기 종류: {STRING} @@ -2123,7 +2116,7 @@ STR_CONFIG_SETTING_COMPANY :회사 STR_CONFIG_SETTING_ACCOUNTING :회계 STR_CONFIG_SETTING_VEHICLES :차량 STR_CONFIG_SETTING_VEHICLES_PHYSICS :물리 -STR_CONFIG_SETTING_VEHICLES_ROUTING :경로 +STR_CONFIG_SETTING_VEHICLES_ROUTING :경로 탐색 STR_CONFIG_SETTING_VEHICLES_ORDERS :경로 STR_CONFIG_SETTING_LIMITATIONS :제한 STR_CONFIG_SETTING_ACCIDENTS :재앙 / 사고 @@ -4526,7 +4519,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}시간 STR_ORDERS_LIST_TOOLTIP :{BLACK}이 열차의 경로 - 선택하려면 클릭하세요. CTRL+클릭하시면 그 역이 있는 장소로 이동합니다 STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - 경로의 끝 - - STR_ORDERS_END_OF_SHARED_ORDERS :- - 공유된 경로의 끝 - - @@ -4560,11 +4552,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}이 경 STR_ORDER_DROP_REFIT_AUTO :특정 화물로 STR_ORDER_DROP_REFIT_AUTO_ANY :이용 가능한 화물로 -STR_ORDER_SERVICE :{BLACK}점검 STR_ORDER_DROP_GO_ALWAYS_DEPOT :항상 감 STR_ORDER_DROP_SERVICE_DEPOT :필요하면 점검 STR_ORDER_DROP_HALT_DEPOT :멈춤 -STR_ORDER_SERVICE_TOOLTIP :{BLACK}점검이 필요하지 않으면 이 경로를 건너뜁니다 STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}경로를 건너뛰기 위한 비교 조건을 선택합니다 @@ -4633,6 +4623,7 @@ STR_ORDER_REFIT_ORDER :({STRING}{G 0 " STR_ORDER_REFIT_STOP_ORDER :({STRING}에서 수리 후 멈춤) 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} @@ -4835,6 +4826,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :게임 스크 STR_AI_SETTINGS_CLOSE :{BLACK}닫기 STR_AI_SETTINGS_RESET :{BLACK}초기화 STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -5100,6 +5093,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}근처 STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :잘못된 차량기지 종류입니다 +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} : 교체된지 너무 오래되었습니다 STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}자동 교체/갱신 규칙이 적용되지 않았습니다 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 3ade99bf8a..7fadd4109e 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1753,13 +1753,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Electa, non lic STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Vetare IA naves habere: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Electa, non licet lusori IA naves tenere -STR_CONFIG_SETTING_AI_PROFILE :Ratio optionum solita: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Eligere quae ratio optionum adhibenda est ad fortuitam IA, sive valores initiales cum nova IA seu Ludi Scriptum legitur -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Facilis -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mediocris -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difficilis - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Sinere IA in ludis cum pluribus lusoribus: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sinere lusores IA asesse in ludis cum pluribus lusoribus @@ -1864,7 +1857,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Eligere annum i STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Mutare inter typus signalium: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Eligere typos signalium mutandos cum premitur Ctrl pressa in signale structum ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Modo signalia itineris STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Omnes ###length 2 @@ -4077,7 +4069,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mutare a STR_ORDERS_LIST_TOOLTIP :{BLACK}Index iussorum - preme in iussum ut eligatur. Ctrl+Preme vagatur ad destinatum STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Finis Iussorum - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Finis Iussorum Communium - - @@ -4111,11 +4102,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Eligere STR_ORDER_DROP_REFIT_AUTO :Oneri fixo STR_ORDER_DROP_REFIT_AUTO_ANY :Oneri parabili -STR_ORDER_SERVICE :{BLACK}Ministratio STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ire semper STR_ORDER_DROP_SERVICE_DEPOT :Ministrari si necesse est STR_ORDER_DROP_HALT_DEPOT :Consiste -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Transilire huic iusso nisi necesse est ministrari STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Indicia vehiculi ad quae spectat ordines conditionales @@ -4184,6 +4173,7 @@ STR_ORDER_REFIT_ORDER :(Reficere {STRI STR_ORDER_REFIT_STOP_ORDER :(Reficere {STRING.dat} consisteque) STR_ORDER_STOP_ORDER :(Consiste) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implicitum) @@ -4611,6 +4601,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Non pote STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Typus receptaculi impar +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} nimis long(G us a um) est post commutationem STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nullae regulae automutandi/autoredimendi diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 2d6e581449..511a3e711b 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -216,6 +216,7 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Tāds, ka prim STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}jūdzes stundā STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}lauciņi/s STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}mezgli STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}ZS @@ -261,7 +262,11 @@ STR_UNITS_DAYS :{COMMA}{NBSP}di STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P e s ''''} STR_UNITS_TICKS :{COMMA}{NBSP}tick{P šķi šķi s} +STR_UNITS_MONTHS :{NUM}{NBSP}mēne{P is is ši} +STR_UNITS_MINUTES :{NUM}{NBSP}minūte{P e es es} +STR_UNITS_YEARS :{NUM}{NBSP}gad{P s s i} +STR_UNITS_PERIODS :{NUM}{NBSP}period{P s s di} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filters: @@ -329,6 +334,7 @@ STR_SORT_BY_TRANSPORTED :pārvadājuma STR_SORT_BY_NUMBER :numura STR_SORT_BY_PROFIT_LAST_YEAR :peļņas pērn STR_SORT_BY_PROFIT_THIS_YEAR :peļņas šogad +STR_SORT_BY_PROFIT_THIS_PERIOD :Peļņa šajā periodā STR_SORT_BY_AGE :vecuma STR_SORT_BY_RELIABILITY :uzticamības STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :kravu veidu kopējās ietilpības @@ -356,9 +362,12 @@ STR_SORT_BY_POPULATION :iedzīvotāju s STR_SORT_BY_RATING :vērtējuma STR_SORT_BY_NUM_VEHICLES :Autotransporta līdzekļu skaits STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kopējā peļņa pagājušajā gadā +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Kopējā peļņa pagājušajā periodā STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Kopējā peļņa šogad +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Kopējā peļņa šajā periodā STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Vidējā peļņa iepriekšējā gadā STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Vidējā peļņa šajā gadā +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Vidējā peļņa šajā periodā # Group by options for vehicle list STR_GROUP_BY_NONE :Nav @@ -436,6 +445,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Iestatījumi STR_SETTINGS_MENU_AI_SETTINGS :AI iestatījumi STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Spēles skripta iestatījumi STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF iestatījumi +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Smilškastes iespējas STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Caurspīdības opcijas STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Rādīt pilsētu nosaukumus STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Rādīt staciju nosaukumus @@ -603,6 +613,7 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Uzņēmu STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kravas apmaksas cenas +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Sekundes tranzītā STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Izmaksas par 10 vienību (vai 10,000 litru) kravas pārvadāšanu par 20 lauciņiem STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Iespējot visu STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Atspējot visu @@ -620,6 +631,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klikšķ # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Uzņēmumu rangu saraksts STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Inženieris STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Satiksmes vadītājs STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Pārvadājumu koordinators @@ -651,7 +663,10 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Aizdevum STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Kopā: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}To transportlīdzekļu skaits, kas pagājušajā gadā guva peļņu. Tas ietver autotransporta līdzekļus, vilcienus, kuģus un lidmašīnas +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Transportlīdzekļu skaits, kas pagājušajā periodā guva peļņu. Tas ietver autotransporta līdzekļus, vilcienus, kuģus un lidmašīnas STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Nesen apkalpoto staciju skaits. Dzelzceļa stacijas, autoostas, lidostas un tamlīdzīgas tiek skaitītas kā atsevišķas, pat ja tās ir savienotas kā viena stacija +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Transportlīdzekļa peļņa ar viszemākajiem ienākumiem (tiek ņemti vērā tikai transportlīdzekļi, kas vecāki par diviem gadiem) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Nopelnītās naudas daudzums ceturksnī ar vismazāko peļņu pēdējos 12 ceturkšņos STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Nopelnītās naudas daudzums ceturksnī ar vislielāko peļņu pēdējos 12 ceturkšņos STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Kravu vienības , kas piegādātas pēdējos četros ceturkšņos @@ -799,6 +814,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOMĀTIS STR_STATUSBAR_SAVING_GAME :{RED}* * SPĒLE TIEK SAGLABĀTA * * STR_STATUSBAR_SPECTATOR :{WHITE}(skatītājs) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(bezgalīga nauda) # News message history STR_MESSAGE_HISTORY :{WHITE}Ziņojumu vēsture @@ -883,6 +899,7 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} ir kļuvis ļoti vecs un tam steidzami nepieciešama nomaiņa STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} nevar atrast ceļu, lai turpinātu STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} ir apmaldījies +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} peļņa pagājušajā periodā bija {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} nevar doties uz nākamo galamērķi, jo tas ir ārpus apgabala STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} ir apstājies, jo neizdevās pasūtītā pielāgošana @@ -902,7 +919,9 @@ STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Pakalpojuma subsīdijas piedāvājums:{}{}Pirmais {STRING} no {STRING} līdz {STRING} saņems {UNITS_YEARS_OR_MINUTES} subsīdiju no vietējās pašvaldības! ###length 4 +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Satiksmes haoss pilsētā {TOWN}!{}{} Dēļ {STRING} finansētā ceļu atjaunošanas programmas, tuprmākos 6 mēnešus STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Pārvadājumu monopols! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}{TOWN} vietējā pašvaldība paraksta līgumu ar {STRING} par ekskluzīvām transporta tiesībām uz 12 mēnešiem! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Skatvieta {COMMA} @@ -1021,6 +1040,8 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Atzīmē STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Mēroga slīpumi STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Atzīmējiet šo izvēlni, lai mērogotu slīpumu pēc saskarnes lieluma +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Izmantot radicionālo sprite fontu +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Atzīmējiet šo izvēli, ja vēlaties izmantot tradicionālo fiksētā izmēra sprite fontu. STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x @@ -1056,7 +1077,11 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Atlasīt STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata mūzikas kopu +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Spraudņa stāvoklis: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Neizdevās instalēt +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Dublēts spraudnis STR_BASESET_STATUS :{STRING} {RED}({NUM} trūkst/bojāts fail{P s i ""}) @@ -1224,6 +1249,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :pa labi STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}sekund{P 0 i es ""} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Atļaut neierobežotus tēriņus un izslēgt uzņēmumu bankrotu STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimālais sākotnējais aizdevums: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais aizdevuma daudzums, ko uzņēmums var izsniegt (neskaitot inflāciju) @@ -1249,6 +1275,7 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Iestatīt, cik STR_CONFIG_SETTING_SUBSIDY_DURATION :Subsīdiju ilgums: {STRING} ###length 2 STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Nosakiet gadu skaitu, par kuru tiek piešķirta subsīdija +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Iestatiet periodu skaitu, par kuriem tiek piešķirta subsīdija ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Bez subsīdijām @@ -1350,6 +1377,7 @@ STR_CONFIG_SETTING_SHOWFINANCES :Gada beigās r ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Ja ieslēgts, katra gada beigās uznirst finanšu logs, lai varētu viegli pārbaudīt uzņēmuma finansiālo stāvokli +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Ja iespējots, finanšu logs tiek parādīts katra perioda beigās, lai varētu viegli pārbaudīt uzņēmuma finansiālo stāvokli STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Jaunie rīkojumi noklusējumā ir 'bez pieturām': {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Transportlīdzeklis parasti pietur pie katras caurbraucamās stacijas. Ieslēdzot šo iestatījumu, tas dosies cauri visām ceļa stacijām uz savu galamērķi bez pieturām. Ņemiet vērā, ka šis iestatījums nosaka noklusējuma vērtību tikai jaunajiem rīkojumiem. Tomēr ir iespējams katru rīkojumu iestatīt arī atsevišķi @@ -1376,6 +1404,7 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :Lauj uzņēmumi STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Atļaut pirkt pārvadājumu izņēmuma tiesības: {STRING} ###length 2 STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ja uzņēmums pērk pārvadājumu izņēmuma tiesības pilsētā, pretinieku stacijas (pasažieru un kravas) veselu gadu nesaņems nekādu kravu +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Ja uzņēmums pērk ekskluzīvas pilsētas transporta tiesības, pretinieku stacijas (pasažieru un kravas) nesaņems nevienu kravu 12 minūtes. STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Atļaut ēku finansēšanu: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Atļauj uzņēmumiem dot naudu apdzīvotām vietām jaunu ēku finansēšanai @@ -1434,15 +1463,22 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :visiem transpor STR_CONFIG_SETTING_WARN_INCOME_LESS :Brīdināt, ja transportlīdzekļa ienākumi ir negatīvi: {STRING} ###length 2 STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ja ieslēgts, tiks sūtīts ziņojums gadījumā kad transportlīdzeklis negūst nekādu peļņu kalendārā gada laikā +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ja iespējots, tik nosūtīts ziņojums, ja transportlīdzeklis noteiktā periodā nav guvis peļņu STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Transportlīdzekļi nekad "nemirst": {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kad ieslēgts, visi transportlīdzekļu modeļi pēc to ieviešanas vienmēr ir pieejami +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Laika uzskaite: {STRING} ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendārs +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Izvēlieties minūšu skaitu kalendārajā gadā. Noklusējums ir 12 minūtes. Iestatiet uz 0, lai apturētu kalendāra laika izmaiņas. Šis iestatījums neietekmē spēles ekonomisko simulāciju un ir pieejams tikai tad, ja tiek izmantots sienas pulksteņa laika mērijums ###setting-zero-is-special +STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Mērogot pilsētas kravu ražošana: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Mērogojiet pilsētu kravu ražošanu par šo procentu. +STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automātiski atjaunot transportlīdzekļus, kad tie ir kļuvuši veci: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ja ieslēgts, kad ir atbilstoši atjaunošanas apstākļi, automātiski tiek nomainīti transportlīdzekļi kuru kalpošanas laiks tuvojas beigām @@ -1698,6 +1734,7 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Atskaņot skaņ ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Gada beigas: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Perioda beigas: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Atskaņot skaņu gada beigās, apkopojot uzņēmuma darbības sasniegumus gada laikā salīdzinājumā ar iepriekšējo gadu @@ -1741,13 +1778,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Šā iestatīju STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Atspējot datoram kuģus: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Šā iestatījuma ieslēgšana padara neiespējamu kuģu būvēšanu datoram -STR_CONFIG_SETTING_AI_PROFILE :Noklusējuma iestatījumu profils: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Izvēlieties, kuru iestatījumu profilu izmantot nejaušam MI, vai sākotnējās vērtības, kad pievieno jaunu MI vai spēles skriptu -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :viegls -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :vidējs -STR_CONFIG_SETTING_AI_PROFILE_HARD :smags - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Atļaut MI vairākspēlētāju spēlēs: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Atļaut MI (mākslīgā intelekta) nespēlētāju tēliem (datora vadītiem) piedalīties vairākspēlētāju spēlēs @@ -1868,7 +1898,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Izvēlēties ga STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Braukt garām signālu veidiem: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Atlasiet, kādus signālu veidus izmantot, izmantojot Ctrl+noklikšķinot uz izveidotā signāla, izmantojot signāla rīku ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :tikai ceļa signāliem STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Redzami visi STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Rādīt signāla tipus: {STRING} @@ -2329,6 +2358,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Servera STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Uzaicinājuma kods: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Sākuma datums: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Šībrīža datums: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Spēles laiks: {WHITE}{NUM} h {NUM} min STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Spēles Skripts: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Aizsargāts ar paroli! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVERIS NAV TIEŠSAISTĒ @@ -2684,6 +2714,8 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}pārslogots # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG}, kas jāpārvadā mēnesī no {STATION} uz {STATION} ({COMMA}% no jaudas){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG}, kas jāpārvadā minūtē no {STATION} uz {STATION} ({COMMA}% no jaudas){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} jātransportē atpakaļ ({COMMA}% no pārvadājuma) # Base for station construction window(s) @@ -2694,6 +2726,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Neiezīm STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Iezīmēt jaunceļamā objekta pārklājumu STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Pieņem: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Piegādā: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Uzturēšanas izmaksas: {GOLD}{CURRENCY_SHORT}/gadā +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Uzturēšanas izmaksas: {GOLD}{CURRENCY_SHORT}/periodā # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Pievienot staciju @@ -3545,6 +3579,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (pilsēta) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Iedzīvotāji: {ORANGE}{COMMA}{BLACK} Mājas: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} iepriekšējā mēnesī: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} pēdējā minūtē: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Krava nepieciešama pilsētas attīstībai: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} nepieciešams STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} nepieciešams ziemā @@ -3592,6 +3627,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Sāciet lielu vietējo reklāmas kampaņu lai piesaistītu vairāk pasažieru un kravas saviem transporta pakalpojumiem.{}Nodrošina īslaicīgu staciju vērtējuma palielinājumu lielā rādiusā ap pilsētas centru.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Uzceliet statuju par godu savam uzņēmumam.{}Nodrošina pastāvīgu staciju vērtējuma palielinājumu šajā pilsētā.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finansējiet jaunu ēku celtniecību pilsētā.{}Nodrošina īslaicīgu stimulu pilsētas izaugsmei šajā pilsētā.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Iegādājieties ekskluzīvas transporta tiesības pilsētā uz 12 minūtēm.{}Pilsētas pārvalde neļaus pasažieriem un kravai izmantot jūsu konkurentu stacijas. Veiksmīgs kukulis no konkurenta atcels šo līgumu.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Piekukuļot vietējo pašvaldību, lai paaugstinātu savu vērtējumu un atceltu konkurenta ekskluzīvās transporta tiesības, riskējot ar bargu sodu, ja tiksiet pieķerts.{}{POP_COLOUR}Izmaksas: {CURRENCY_LONG} # Goal window @@ -3644,6 +3680,8 @@ STR_SUBSIDIES_NONE :{ORANGE}- Nevie STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Pašlaik subsidētie pakalpojumi: STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikšķināt uz servisa, lai iecentrētu skatu uz rūpnīcu/pilsētu. Ctrl+klikšķis atvērs jaunu skatu lauku uz pilsētu/rūpnīcu STR_SUBSIDIES_OFFERED_EXPIRY_DATE :līdz {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} laikā +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :{UNITS_MONTHS_OR_MINUTES} atlikušais kalpošanas laiks # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Stāstu grāmata @@ -3683,6 +3721,8 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Vērtējumi STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Rādīt stacijas vērtējumus +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Piegāde mēnesī un vietējais vērtējums: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Piegāde minūtē un vietējais vērtējums: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Grupēt pēc @@ -3743,6 +3783,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}Labot pi # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY} finanses {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_YEAR_CAPTION :{WHITE}Gads +STR_FINANCES_PERIOD_CAPTION :{WHITE}Periods ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Ieņēmumi @@ -3844,6 +3886,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanāli STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stacijas: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Staciju lauciņi STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Lidostas +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/gads +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/periods # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Ražotnes @@ -3950,7 +3994,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Novākt visus t STR_GROUP_RENAME_CAPTION :{BLACK}Pārdēvēt grupu STR_GROUP_PROFIT_THIS_YEAR :Ienākumi šajā gadā: +STR_GROUP_PROFIT_THIS_PERIOD :Peļņa šajā periodā: STR_GROUP_PROFIT_LAST_YEAR :Peļņa pērn: +STR_GROUP_PROFIT_LAST_PERIOD :Peļņa pēdējā periodā: STR_GROUP_OCCUPANCY :Pašreizējais lietojums: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3977,6 +4023,7 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Ātrums: STR_PURCHASE_INFO_SPEED :{BLACK}Ātrums: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Ātrums okeānā: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Ātrums kanālā/upē: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Darbības izmaksas: {GOLD}{CURRENCY_LONG}/gadā STR_PURCHASE_INFO_CAPACITY :{BLACK}Ietilpība: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(pielāgojams) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Projektēts: {GOLD}{NUM}{BLACK} Kalpošanas laiks: {GOLD}{COMMA} gad{P s i u} @@ -4169,6 +4216,10 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramvajs STR_ENGINE_PREVIEW_AIRCRAFT :lidaparāts STR_ENGINE_PREVIEW_SHIP :kuģis +STR_ENGINE_PREVIEW_SPEED_POWER :Ātrums: {VELOCITY} Jauda: {POWER} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Ātrums: {VELOCITY} Jauda: {POWER} Maks. V.S.: {FORCE} +STR_ENGINE_PREVIEW_TYPE :Lidaparāta veids: {STRING} +STR_ENGINE_PREVIEW_CAPACITY :Ietilpība: {CARGO_LONG} # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Nomainīt {STRING} - {STRING} @@ -4323,6 +4374,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Svars: { STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Peļņa šogad: {LTBLUE}{CURRENCY_LONG} (pagājušajā gadā: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Peļņa šogad: {LTBLUE}{CURRENCY_LONG} (pagājušajā gadā: {CURRENCY_LONG}) {BLACK}Min. veiktspēja: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Peļņa šajā periodā: {LTBLUE}{CURRENCY_LONG} (pēdējais periods: {CURRENCY_LONG}) {BLACK}Min. veiktspēja: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Drošums: {LTBLUE}{COMMA}% {BLACK}Ķibeles kopš pēdējās apkopes: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Uzbūvēts: {LTBLUE}{NUM}{BLACK} Vērtība: {LTBLUE}{CURRENCY_LONG} @@ -4333,9 +4385,12 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Ietilpī STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Pārvadājumu ieņēmumi: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Palieliniet apkopes intervālu par 5 minūtēm. Ctrl+klikšķis, lai palielinātu apkopes intervālu par 1 minūti +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Samaziniet apkopes intervālu par 10 dienām. Ctrl+klikšķis, lai samazinātu apkopes intervālu par 5 dienām STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Mainīt apkopes starplaiku veidu STR_VEHICLE_DETAILS_DEFAULT :Noklusējuma +STR_VEHICLE_DETAILS_MINUTES :Minūtes STR_VEHICLE_DETAILS_PERCENT :Procenti ###length VEHICLE_TYPES @@ -4401,7 +4456,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Pārslē STR_ORDERS_LIST_TOOLTIP :{BLACK}Rīkojumu saraksts - klikšķināt uz rīkojuma, lai to atzīmētu. Ctrl+klikšķis ritina uz rīkojuma galamērķi STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Rīkojumu beigas - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Koplietojamo rīkojumu beigas - - @@ -4435,11 +4489,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Izvēlē STR_ORDER_DROP_REFIT_AUTO :Pastāvīga krava STR_ORDER_DROP_REFIT_AUTO_ANY :Pieejamā krava -STR_ORDER_SERVICE :{BLACK}Apkope STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vienmēr doties STR_ORDER_DROP_SERVICE_DEPOT :Apkope, ja nepieciešama STR_ORDER_DROP_HALT_DEPOT :Apstādināt -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Izlaist šo rīkojumu, izņemot ja vajadzīga apkope STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vehicle data to base jumping on @@ -4508,6 +4560,7 @@ STR_ORDER_REFIT_ORDER :(Pielāgot uz { STR_ORDER_REFIT_STOP_ORDER :(Pielāgot uz {STRING} un apstāties) STR_ORDER_STOP_ORDER :(Apstādināt) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nevar izmantot staciju){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4710,6 +4763,7 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spēles skripts STR_AI_SETTINGS_CLOSE :{BLACK}Aizvērt STR_AI_SETTINGS_RESET :{BLACK}Atiestatīt STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -4975,6 +5029,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nevar at STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nepareizs depo veids +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} pēc aizstāšanas ir pārāk garš STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Automātiskā aizstāšana/atjaunošana nav pielietota @@ -5667,6 +5723,9 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}tk. +STR_CURRENCY_SHORT_MEGA :{NBSP}m +STR_CURRENCY_SHORT_GIGA :{NBSP}mljrd. STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5ad78d15f3..23953206f3 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1856,13 +1856,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Įjungus šį n STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Uždrausti kompiuteriui laivus: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Įjungus šį nustatymą, statyti laivų kompiuterio žaidėjui bus neįmanoma -STR_CONFIG_SETTING_AI_PROFILE :Numatytasis nuostatų rinkinys: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Pasirinkti pradinį nuostatų profilį naujai pradedančiam veikti DI -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lengvas -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Vidutinis -STR_CONFIG_SETTING_AI_PROFILE_HARD :Sunkus - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Leisti DI Interneto režime: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Leisti DI kompiuterio žaidėjus dalyvauti Interneto režime @@ -1980,7 +1973,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Metai, kuriais STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Pereiti tam tikrus signalų tipus: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Pasirinkite, kurie signalų tipai vykdys ciklą, kai Ctrl+paspaudę statyti signalą signalų įrankiuose ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kelio signalų STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Visus matomus STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Rodyti signalus: {STRING} @@ -4444,7 +4436,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Pereiti STR_ORDERS_LIST_TOOLTIP :{BLACK}Užduočių sąrašas — užduotis pažymima ant jos spragtelėjus. Spragtelėjus laikant nuspaustą Ctrl klavišą, užduoties tikslo vieta bus centruojama pagrindiniame ekrane STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Užduočių pabaiga- - STR_ORDERS_END_OF_SHARED_ORDERS :- - Bendrų užduočių pabaiga - - @@ -4478,11 +4469,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Automati STR_ORDER_DROP_REFIT_AUTO :Nustatytam kroviniui STR_ORDER_DROP_REFIT_AUTO_ANY :Galimam kroviniui -STR_ORDER_SERVICE :{BLACK}Techninė apžiūra STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vykti visuomet STR_ORDER_DROP_SERVICE_DEPOT :Vykti, jei reikia STR_ORDER_DROP_HALT_DEPOT :Nuvykti ir sustoti -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Keisti techninės apžiūros nuostatas STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Transporto priemonės parametras, kuriuo bus remiamasi vykdant sąlyginę užduotį @@ -4561,6 +4550,7 @@ STR_ORDER_REFIT_ORDER :(pertvarkyti {S STR_ORDER_REFIT_STOP_ORDER :(pertvarkyti {STRING.kam} ir sustoti) STR_ORDER_STOP_ORDER :(sustoti) + STR_ORDER_GO_TO_STATION :{STRING} „{STATION}“ {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Negalima naudotis stotimi){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5004,6 +4994,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Negalima STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Netinkamas depo tipas +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} yra per ilgas po pakeitimo STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nėra automatinio taisyklių pakeitimo/atnaujinimo pritaikymo diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f4c96f15cd..95bbf7c997 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1669,13 +1669,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Wann des Astell STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Schëffer fir de Computer ausschalten: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Wann des Astellung ugeschalt ass, kann e Computergéigner keng Schëffer bauen -STR_CONFIG_SETTING_AI_PROFILE :Standard Astellungsprofil: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Wielt aus wellechen Astellungsprofil benotzt gëtt fir d'zoufälleg KI oder fir Ufankswäerter wann eng nei KI oder Spillscript ugeschalt ginn -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Einfach -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Normal -STR_CONFIG_SETTING_AI_PROFILE_HARD :Schwéier - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Erlaabt KI am Multiplayer: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaabt Computergéigner a Multiplayer Spiller matzeman @@ -1794,7 +1787,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Definéiert d'J STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Wiessel duerch Signaltypen: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Wielt Signaltypen déi durchgewielt ginn, wann ee mat Ctrl op e gebaute Signal dréckt ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Nëmmen Wee-Signaler STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alleguerte sichtbar STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Signalltypen uweisen: {STRING} @@ -4255,7 +4247,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Wiesselt STR_ORDERS_LIST_TOOLTIP :{BLACK}Optragslëscht - Klick op en Optrag fir en ze wielen. Ctrl+Klick scrollt op d'Optragdestinatioun STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Enn vun den Opträg - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Enn vun der Optragslëscht - - @@ -4289,11 +4280,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Wiel wel STR_ORDER_DROP_REFIT_AUTO :Festgelueten Wuer STR_ORDER_DROP_REFIT_AUTO_ANY :Verfügbar Wueren -STR_ORDER_SERVICE :{BLACK}Revisioun STR_ORDER_DROP_GO_ALWAYS_DEPOT :Géi ëmmer STR_ORDER_DROP_SERVICE_DEPOT :Revisioun falls néideg STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Iwwersprang dësen Optrag wann keng Revisioun néideg ass STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Gefierdaten als Basis fir den Optragssprong @@ -4362,6 +4351,7 @@ STR_ORDER_REFIT_ORDER :(Ëmbau op {STR STR_ORDER_REFIT_STOP_ORDER :(Ëmbau op {STRING} an stoppen) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Statioun kann net benotzt ginn){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4808,6 +4798,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kann de STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Falschen Schapp-Typ +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} ass ze laang nom Auswiesselen STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Keng Autoerneierungsregel festgeluet. diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index e2a206bb31..3932ed0e08 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1017,8 +1017,6 @@ STR_CONFIG_SETTING_SOUND_VEHICLE :Возила: { -###length 3 - STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#ОПкодови пред скрипти се суспендирани: {STRING} @@ -1871,7 +1869,6 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Прен # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -1901,6 +1898,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -2048,6 +2046,8 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... мо +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Не авто замени / обнови правила се применуваат STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(лимит на пари) diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 57bf438eb0..a8f9f83b40 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1430,13 +1430,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Nafikan pesawat STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Nafikan kapal untuk komputer: {STRING} -STR_CONFIG_SETTING_AI_PROFILE :Tetapan profil lalai: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Pilih tetapan profil untuk rawak menggunakan AI atau nilai awal apabila menggunakan AI baru atau skrip permainan -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Mudah -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Sederhana -STR_CONFIG_SETTING_AI_PROFILE_HARD :Sukar - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Benarkan Kepintaran Tiruan dalam permainan pemain berbilang: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Benarkan AI komputer menyertai permainan berbilang pemain @@ -1511,7 +1504,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Tetapkan tahun STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Kitar semua jenis isyarat: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Isyarat laluan sahaja STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Semua ###length 2 @@ -3506,7 +3498,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Tukar ke STR_ORDERS_LIST_TOOLTIP :{BLACK}Senarai Arahan - klik pada satu arahan untuk menekannya. Ctrl+Klik untuk skrol ke destinasi STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Penghujung Arahan- - STR_ORDERS_END_OF_SHARED_ORDERS :- - Penghujung Arahan Berkongsi - - @@ -3540,11 +3531,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Pilih je STR_ORDER_DROP_REFIT_AUTO :Kargo tetap STR_ORDER_DROP_REFIT_AUTO_ANY :Kargo sedia ada -STR_ORDER_SERVICE :{BLACK}Perkhidmatan STR_ORDER_DROP_GO_ALWAYS_DEPOT :Sentiasa pergi STR_ORDER_DROP_SERVICE_DEPOT :Selenggara sekiranya perlu STR_ORDER_DROP_HALT_DEPOT :Berhenti -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Langkau susunan kecuali selenggara diperlukan STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Lompatan data kenderaan ke pengkalan diaktifkan @@ -3612,6 +3601,7 @@ STR_ORDER_REFIT_ORDER :(Ubahsuai ke {S STR_ORDER_REFIT_STOP_ORDER :(Ubahsuai ke {STRING} dan berhenti) STR_ORDER_STOP_ORDER :(Berhenti) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Tersirat) @@ -4024,6 +4014,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Depoh te STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Jenis depoh salah +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} terlalu panjang selepas diganti STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Peraturan penggantian/pembaharuan automatik tidak ditetapkan. diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 9aa7c269a6..39c9af3805 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -662,8 +662,6 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz -###length 3 - @@ -1261,7 +1259,6 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -1292,6 +1289,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Awtomatiku) @@ -1409,6 +1407,8 @@ STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Ma tista +# Depot unbunching related errors + # Autoreplace related errors # Rail construction errors diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index ad20d4f57a..4f94543e75 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -950,8 +950,6 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :सर्व -###length 3 - @@ -1671,7 +1669,6 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -1702,6 +1699,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(आपोआप) @@ -1819,6 +1817,8 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE} स् +# Depot unbunching related errors + # Autoreplace related errors # Rail construction errors diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index bd874dd0b9..8cec9e0327 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1647,13 +1647,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Aktivering av d STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Hindre datamaskinen i å bygge skip: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Aktivering av denne innstillingen gjør bygging av skip umulig for en datamaskin-spiller -STR_CONFIG_SETTING_AI_PROFILE :Profil for standardinnstillinger: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Velg hvilken innstillingsprofil som skal brukes for tilfeldige data-spillere eller for startverdier når du legger til nye data-spillere eller spill-skript -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lett -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Middels -STR_CONFIG_SETTING_AI_PROFILE_HARD :Vanskelig - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillat AI-er i flerspiller: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillat datamaskin-spillere å delta i flerspiller-spill @@ -1772,7 +1765,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Angi året når STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Bla gjennom signaltyper: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Velg hvilke signaltyper å gå gjennom når Ctrl+klikke på et bygd signal med signalverktøyet ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun avanserte signaler STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle synlige STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Vis signaltyper: {STRING} @@ -4202,7 +4194,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skift ti STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordreliste - klikk på en ordre for å markere den. Ctrl+klikk viser ordrens endestasjon STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Slutt på ordre - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Slutt på delte ordre - - @@ -4236,11 +4227,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Velg hvi STR_ORDER_DROP_REFIT_AUTO :Fast varetype STR_ORDER_DROP_REFIT_AUTO_ANY :Tilgjengelig varetype -STR_ORDER_SERVICE :{BLACK}Vedlikehold STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alltid gå STR_ORDER_DROP_SERVICE_DEPOT :Vedlikehold ved behov STR_ORDER_DROP_HALT_DEPOT :Stopp -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Hopp over ordren med mindre vedlikehold er nødvendig STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Kjøretøydata å basere hopp på @@ -4309,6 +4298,7 @@ STR_ORDER_REFIT_ORDER :(Bygg om til {S STR_ORDER_REFIT_STOP_ORDER :(Bygg om til {STRING} og stopp) STR_ORDER_STOP_ORDER :(Stopp) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruke stasjon){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4747,6 +4737,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan ikke STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Feil type garasje/stall/hangar/dokk +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er for langt etter utskiftning STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ingen autoerstatt/fornyelseregler satt. diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 0d10d51380..b553b83763 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1504,12 +1504,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Hindre datamask STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Hindre datamaskina i å byggje skip: {STRING} -STR_CONFIG_SETTING_AI_PROFILE :Standard innstillingsprofil: {STRING} -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lett -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medium -STR_CONFIG_SETTING_AI_PROFILE_HARD :Hard - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillet AI-spelarar i fleirspelarmodus: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillat AI datamaskinspelarar å delta i fleirspelar-modus @@ -1598,7 +1592,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Bygg vingesigna STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Bla gjennom signaltypar: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun avanserte signaler STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle ###length 2 @@ -3724,7 +3717,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Byt til STR_ORDERS_LIST_TOOLTIP :{BLACK}Ordreliste - klikk på ein ordre for å velje han. Ctrl+klikk ruller til stasjonen STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Slutt på ordre - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Slutt på delte ordrar - - @@ -3758,11 +3750,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Velg kva STR_ORDER_DROP_REFIT_AUTO :Fast varetype STR_ORDER_DROP_REFIT_AUTO_ANY :Tilgjengeleg vare -STR_ORDER_SERVICE :{BLACK}Vedlikehald STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alltid gå STR_ORDER_DROP_SERVICE_DEPOT :Vedlikehald om naudsynt STR_ORDER_DROP_HALT_DEPOT :Stopp -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Hopp over ordren dersom ikkje vedlikehald trengst STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Køyretøy-data å basere hopp på @@ -3830,6 +3820,7 @@ STR_ORDER_REFIT_ORDER :(Bygg om til {S STR_ORDER_REFIT_STOP_ORDER :(Bygg om til {STRING} og stopp) STR_ORDER_STOP_ORDER :(Stopp) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(implisitt) @@ -4254,6 +4245,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan ikkj STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Gal type garasje/stall/hangar/dokk +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er for langt etter byte STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ingen autoutbyting-/fornyingsreglar lagt til diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 3da6cabb9c..25f79d2946 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1401,8 +1401,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :غیر‌فعا STR_CONFIG_SETTING_AI_BUILDS_SHIPS :غیر فعال بودن کشتی برای رایانه: {STRING} -###length 3 - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :امکان حضور هوش مصنوعی در بازی چندنفره: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING} @@ -1467,7 +1465,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :نصب علمک STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :]تغییر نوع نشانگرها: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :فقط نشانگرهای مسیر STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :همه ###length 2 @@ -3306,7 +3303,6 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_LIST_TOOLTIP :{BLACK}لیست دستورات - برای مشخص کردن دستور روی آن کلیک کنید. Ctrl+click به ایستگاه میرود STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - پایان دستورها - - @@ -3348,6 +3344,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(ضمنی) @@ -3582,6 +3579,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}مخزن STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :نوع تعمیرگاه اشتباه +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} بعد از تغییر بسیار طولانی شده است STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}هیچ قانون تعویض خودکار/بروزرسانی اعمال نشده است diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ba8ce1166d..8c18860fbe 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2122,13 +2122,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Włączona opcj STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Statki niedostępne dla komputera: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Włączona opcja nie pozwala na budowanie statków graczom komputerowym -STR_CONFIG_SETTING_AI_PROFILE :Domyślny profil ustawień: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Wybierz, którego profilu ustawień używać dla losowych SI lub dla wartości początkowych przy dodawaniu nowych SI lub Game Script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Łatwy -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Średni -STR_CONFIG_SETTING_AI_PROFILE_HARD :Trudny - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Pozwól na SI w grze wieloosobowej: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Pozwól komputerowym graczom SI na udział w grach dla wielu graczy @@ -2249,7 +2242,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Ustaw rok, w kt STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Przełączaj typy sygnalizatorów: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Wybierz, między jakimi typami sygnalizatorów przełączać po naciśnięciu Ctrl+klik przy budowaniu sygnalizatorów ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :tylko sygnalizatory trasy STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Wszystkie widoczne STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Pokazuj typy sygnalizatorów: {STRING} @@ -4782,7 +4774,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Otwórz STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista poleceń - kliknij na poleceniu, aby zaznaczyć. Ctrl+klik przenosi do stacji docelowej STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Koniec poleceń - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Koniec współdzielonych poleceń - - @@ -4816,11 +4807,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Wybierz STR_ORDER_DROP_REFIT_AUTO :Ustalony ładunek STR_ORDER_DROP_REFIT_AUTO_ANY :Dostępny ładunek -STR_ORDER_SERVICE :{BLACK}Serwis STR_ORDER_DROP_GO_ALWAYS_DEPOT :Zawsze do STR_ORDER_DROP_SERVICE_DEPOT :Serwisuj jeśli trzeba STR_ORDER_DROP_HALT_DEPOT :Zatrzymaj -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Pomiń to polecenie jesli serwis nie jest wymagany STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dane pojazdu wykorzystane w warunku @@ -4889,6 +4878,7 @@ STR_ORDER_REFIT_ORDER :(Przebuduj na { STR_ORDER_REFIT_STOP_ORDER :(Przebuduj na {STRING.b} i zatrzymaj) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nie może korzystać ze stacji){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5356,6 +5346,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nie moż STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Zły typ zajezdni +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} jest za długi po wymianie STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Brak reguł autozastępowania/odnawiania diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ffd6f77713..a9081a16f1 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -635,6 +635,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Clique a # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Classificação de Empresas STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Engenheiro STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Gestor de Tráfego STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordenador de Transportes @@ -1296,6 +1297,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION :Duração do su STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Define o número de anos de concessão de um subsídio STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :Define o número de períodos de concessão de um subsídio +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS} ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Sem subsídios @@ -1807,13 +1809,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Ativar esta pre STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desativar navios para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Ativar esta preferência impossibilita a construção de navios por um jogador controlado pelo computador -STR_CONFIG_SETTING_AI_PROFILE :Perfil de preferências por omissão: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolher o perfil de preferências a usar para IAs aleatórias ou para valores iniciais ao adicionar uma nova IA ou Script de Jogo -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Média -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permite IAs em multi-jogador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite a jogadores controlados pelo computador a participação em jogos multi-jogador @@ -1934,7 +1929,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Configurar o an STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Trocar tipos de faróis: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecione os tipos de sinais a percorrer ao usar Ctrl+clique num sinal com a ferramenta de sinais ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Apenas sinais de trajeto STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos visíveis STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostrar tipos de sinais: {STRING} @@ -4521,7 +4515,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar pa STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique numa ordem para a seleccionar. Ctrl+Clique mostra o destino da ordem STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fim de Ordens - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fim de Ordens Partilhadas - - @@ -4555,11 +4548,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selecion STR_ORDER_DROP_REFIT_AUTO :Mercadoria fixa STR_ORDER_DROP_REFIT_AUTO_ANY :Mercadoria disponível -STR_ORDER_SERVICE :{BLACK}Manutenção STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir sempre STR_ORDER_DROP_SERVICE_DEPOT :Manutenção, se necessária STR_ORDER_DROP_HALT_DEPOT :Parar -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Saltar esta ordem a menos que seja necessário manutenção STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dados de veículo para ida à base @@ -4628,6 +4619,7 @@ STR_ORDER_REFIT_ORDER :(Adaptar para { STR_ORDER_REFIT_STOP_ORDER :(Adaptar para {STRING} e parar) STR_ORDER_STOP_ORDER :(Parar) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Não pode usar a estação){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4830,6 +4822,7 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] # Textfile window @@ -5095,6 +5088,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Não é STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito errado +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} é muito longo depois de substituído STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Sem regras de substituição/renovação. diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 05c3c84db2..9466182fec 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1737,13 +1737,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Prin activarea STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Dezactivează navele pentru jucătorii controlați de calculator: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Prin activarea acestei opțiuni, jucătorul controlat de calculator nu poate construi nave -STR_CONFIG_SETTING_AI_PROFILE :Configurația implicită: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Alege o configurație care va fi folosită pentru AI aleator, sau care va fi furniza valori implicite când se adaugă un nou AI sau script -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Ușor -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mediu -STR_CONFIG_SETTING_AI_PROFILE_HARD :Dificil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permite Inteligență Artificială în multiplayer: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite ca jucătorii controlați de AI să participe în jocuri multiplayer @@ -1864,7 +1857,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Alege anul din STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Ciclu prin tipurile de semnal: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selectează între care tipuri de semnale să se cicleze când se apasă Ctrl+Click pe un semnal folosind unealta de construcție ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Doar avansat STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Toate vizibile STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Arată tipurile de semnal: {STRING} @@ -4387,7 +4379,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Comută STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de comenzi - clic pe o comandă pentru a o selecta. Ctrl+Click poziționează ecranul pe stația destinație STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Sfârșitul comenzilor - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Sfârșitul comenzilor sincronizate - - @@ -4421,11 +4412,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Alege ma STR_ORDER_DROP_REFIT_AUTO :Tip încărcătură nemodificabil STR_ORDER_DROP_REFIT_AUTO_ANY :Încărcătură disponibilă -STR_ORDER_SERVICE :{BLACK}Service STR_ORDER_DROP_GO_ALWAYS_DEPOT :Merge mereu STR_ORDER_DROP_SERVICE_DEPOT :Service dacă este nevoie STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Sari peste această comandă dacă nu este necesar un service STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Datele vehiculului pe care se bazează @@ -4494,6 +4483,7 @@ STR_ORDER_REFIT_ORDER :(Rearanjeaza in STR_ORDER_REFIT_STOP_ORDER :(Modifică pentru {STRING} și oprește) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Stație inutilizabilă){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4961,6 +4951,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nu pot g STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tip incorect de depou +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} este prea lung după înlocuire STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nicio regulă autoînlocuire/înnoire aplicată diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 2da9efb96d..697b17954f 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -550,7 +550,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Созд STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Создание городов STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Создание предприятий STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Строительство автомобильной инфраструктуры -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Строительство трамвайных путей +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Строительство трамвайной инфраструктуры STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Посадить деревья.{}При нажатом Ctrl - выбор диагональной области.{}При нажатом Shift - оценка стоимости высадки. STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Поставить метку STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Разместить объект. Ctrl+щелчок+перетаскивание - выбор диагональной области. При нажатом Shift - оценка стоимости строительства. @@ -753,6 +753,8 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Граф STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Последние 72 минуты STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Оплата за перевозку грузов +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Дней в пути +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Секунд в пути STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Оплата за перевозку 10{NBSP}единиц (10{NBSP}000 литров) груза на расстояние в 20 клеток STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Показать все STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Спрятать все @@ -770,6 +772,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Вклю # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Сравнительная таблица компаний STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} «{STRING}» +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Инженер STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Регулировщик STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Диспетчер @@ -805,6 +808,7 @@ STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Коли STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Количество транспортных средств, оказавшихся прибыльными в прошлом цикле. Это число включает в себя автомобили, поезда, водные и воздушные суда. STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Количество обслуживаемых станций. Если несколько типов станций связаны в одну, они все учитываются отдельно. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Наименьший доход среди транспортных средств возрастом более двух лет +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Наименьший доход среди транспортных средств возрастом более двух циклов STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Наименьший квартальный доход за последние 3 года STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Наибольший квартальный доход за последние 3 года STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Количество груза, доставленного за последние 4 квартала @@ -1542,9 +1546,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :справа ###length 2 STR_CONFIG_SETTING_SHOWFINANCES :Показывать финансовую статистику каждый год: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Показывать финансовую статистику каждый цикл: {STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Показывать окно с финансовой информацией в конце каждого года для упрощения контроля финансового состояния компании +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Показывать окно с финансовой информацией в конце каждого цикла для упрощения контроля финансового состояния компании STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Создавать задания с меткой «без остановок»: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Обычно транспортное средство останавливается на каждой станции, через которое проезжает. Если в задании стоит метка «без остановок», то ТС не останавливается на пути к станции назначения. Эта настройка влияет только на вновь создаваемые задания; после создания маршрута каждое задание можно настроить индивидуально. @@ -1635,6 +1641,7 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Включае STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспорт не будет выходить из эксплуатации: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включении все транспортные средства остаются доступными для покупки в любое время после начала их производства +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Игровое время: {STRING} STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31{NBSP}день.{}{}В режиме реального времени расчёты производства, движения транспорта и финансовых показателей основаны на интервалах длительностью в 1{NBSP}минуту, что примерно соответствует 30{NBSP}дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1{NBSP}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календарь @@ -1648,6 +1655,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (календарное время остановлено) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Множитель продуктивности городов: {STRING} +STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Умножить производительность городов на указанное значение. STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Множитель производительности предприятий: {STRING} STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Умножить производительность предприятий на указанное значение. STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% @@ -1951,13 +1959,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Запрет п STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Запретить покупку судов компьютером: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Запрет покупки водного транспорта для компаний, управляемых компьютером -STR_CONFIG_SETTING_AI_PROFILE :Исходный профиль настроек: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Выберите, какой профиль настроек использовать случайному ИИ или для начальных значений при добавлении нового ИИ или сценария игры -###length 3 -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_AI_IN_MULTIPLAYER_HELPTEXT :Разрешить игрокам, управляемым компьютером, участвовать в сетевых играх @@ -2070,7 +2071,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При пере STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Настройка периодичности расстановки сигналов методом перетаскивания. Сигналы будут устанавливаться до первого встреченного препятствия (пересечения или другого сигнала). STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} клет{P ку ки ок} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Равномерная расстановка сигналов при перетаскивании: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Настройка метода расстановки сигналов с помощью Ctrl+перетаскивания. Если равномерная расстановка отключена, то сигналы дополнительно ставятся перед мостами, туннелями и после них. Если включена, то сигналы ставятся ровно на каждой N-й клетке. +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Настройка расстановки сигналов с помощью перетаскивания. Если равномерная расстановка отключена, то сигналы дополнительно ставятся перед мостами, туннелями и после них. Если включена, то сигналы ставятся ровно на каждой N-й клетке. STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Строить семафоры старого стиля: до {STRING} года STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Год, начиная с которого на железных дорогах начинают использоваться светофоры. До этого строятся семафоры (которые функционируют точно так же, только выглядят по-другому). @@ -2078,7 +2079,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Год, нач STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Выбор сигналов (Ctrl+щелчок): {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Выбор предлагаемых типов сигналов при их модификации с помощью Ctrl+щелчка по установленному сигналу ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :только маршрутные STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :все отображаемые STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Типы сигналов в панели строительства: {STRING} @@ -2212,6 +2212,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :английс STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :метрическая (км/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :СИ (м/с) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Внутренние единицы (клеток/день) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Внутренние единицы (клеток/сек.) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :узлы STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Система единиц для мощности: {STRING} @@ -2909,6 +2910,7 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}перегруз # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG}/мес. к транспортировке от {STATION} до {STATION} ({COMMA}% ёмкости){STRING} STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG}/мин. к транспортировке от {STATION} до {STATION} ({COMMA}% ёмкости){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} к возврату ({COMMA}% ёмкости) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Среднее время в пути: {UNITS_DAYS_OR_SECONDS} @@ -3930,6 +3932,8 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинг STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Показать рейтинг станции +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Приход за месяц и рейтинг: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Приход за минуту и рейтинг: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Группировать @@ -4232,6 +4236,7 @@ STR_PURCHASE_INFO_SPEED :{BLACK}Скор STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Скорость в море: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Скорость в каналах и реках: {GOLD}{VELOCITY} STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Стоимость обслуживания: {GOLD}{CURRENCY_LONG}/год +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Стоимость обслуживания: {GOLD}{CURRENCY_LONG}/цикл STR_PURCHASE_INFO_CAPACITY :{BLACK}Ёмкость: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(переоб.) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Разработан в {GOLD}{NUM} г.{BLACK} Срок службы: {GOLD}{COMMA} {P год года лет} @@ -4441,6 +4446,7 @@ STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Скорост STR_ENGINE_PREVIEW_TYPE :Тип воздушного судна: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Возд. судно: {STRING} Дальность: {COMMA}{NBSP}клет{P ка ки ок} STR_ENGINE_PREVIEW_RUNCOST_YEAR :Стоимость обслуживания: {CURRENCY_LONG}/год +STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Стоимость обслуживания: {CURRENCY_LONG}/цикл STR_ENGINE_PREVIEW_CAPACITY :Ёмкость: {CARGO_LONG} STR_ENGINE_PREVIEW_CAPACITY_2 :Ёмкость: {CARGO_LONG}, {CARGO_LONG} @@ -4510,7 +4516,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Пока ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Отправить поезд в депо. Ctrl+щелчок - провести техническое обслуживание. -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Отправить автомобиль в гараж. Ctrl+щелчок - провести техническое обслуживание. +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Отправить автомобиль в гараж. Ctrl+щелчок - только провести техническое обслуживание. STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Отправить судно в док. Ctrl+щелчок - провести техническое обслуживание. STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Отправить воздушное судно в ангар. Ctrl+щелчок - провести техническое обслуживание. @@ -4695,7 +4701,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Пока STR_ORDERS_LIST_TOOLTIP :{BLACK}Список заданий - щёлкните задание для выделения. Ctrl+щелчок - обзор станции назначения. STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Конец заданий - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Конец общих заданий - - @@ -4729,11 +4734,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Выбе STR_ORDER_DROP_REFIT_AUTO :Определённый груз STR_ORDER_DROP_REFIT_AUTO_ANY :Доступный груз -STR_ORDER_SERVICE :{BLACK}Тех. обслуживание STR_ORDER_DROP_GO_ALWAYS_DEPOT :Всегда STR_ORDER_DROP_SERVICE_DEPOT :Если требуется STR_ORDER_DROP_HALT_DEPOT :Стоп -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Пропустить это задание, если техническое обслуживание не требуется STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Параметр транспорта для сравнения @@ -4802,6 +4805,7 @@ STR_ORDER_REFIT_ORDER :(Переобо STR_ORDER_REFIT_STOP_ORDER :(Переоборуд. под {STRING.acc} и стоп) 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} @@ -5004,6 +5008,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :игровых STR_AI_SETTINGS_CLOSE :{BLACK}Закрыть STR_AI_SETTINGS_RESET :{BLACK}Сброс STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}: {ORANGE}[{STRING}, {STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING}, {STRING}] # Textfile window @@ -5269,6 +5275,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Нево STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неверный тип депо +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}ТС «{VEHICLE}» слишком длинное после замены STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Правила автозамены/обновления не были применены diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 112de7fdaf..c9c85f1841 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1878,13 +1878,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Omogućavanje o STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Računar ne može da koristi vodni prevoz: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Omogućavanje ovog podešavanja znači da računar ne može da stvara brodove -STR_CONFIG_SETTING_AI_PROFILE :Podrazumevani profil podešavanja: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Odaberi koji profil podešavanja se koristi za proizvoljne VI ili za početne vrednosti kada se dodaje nova VI ili skripta -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lak -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Srednji -STR_CONFIG_SETTING_AI_PROFILE_HARD :Težak - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Dozvoljena VI u mrežnoj igri: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Dozvoljava računarskoj VI da učestvuje u mrežnoj igri @@ -2003,7 +1996,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Postavi godinu STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Ciklični odabir vrste signalizacije: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Ciklični odabir vrste signalizacije kada Ctrl+klik na izgradnju signala sa alatom signala ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Samo putna STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Sve vidljivo STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Prikaži vrste signala: {STRING} @@ -4491,7 +4483,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Prelazi STR_ORDERS_LIST_TOOLTIP :{BLACK}Spisak naredbi - klikom se obeležava naredba. Ctrl+klik pomera prikaz na lokaciju stanice STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Kraj Naredbi - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Kraj Zajedničkih Naredbi - - @@ -4525,11 +4516,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Odabir v STR_ORDER_DROP_REFIT_AUTO :Određen teret STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupan teret -STR_ORDER_SERVICE :{BLACK}Servis STR_ORDER_DROP_GO_ALWAYS_DEPOT :Uvek STR_ORDER_DROP_SERVICE_DEPOT :Servis po potrebi STR_ORDER_DROP_HALT_DEPOT :Zaustavljanje -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Preskače ovu naredbu ukoliko servis nije potreban STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Skok na osnovu podatka o vozilu @@ -4598,6 +4587,7 @@ STR_ORDER_REFIT_ORDER :(Prepravi za {S STR_ORDER_REFIT_STOP_ORDER :(Prepravi za {STRING} i stani) STR_ORDER_STOP_ORDER :(Stani) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Ne može koristiti stanicu){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5046,6 +5036,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Neuspeš STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Pogrešna vrsta depoa +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je predugačak posle zamene STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Automatska zamena/obnova nije primenjena diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 2a8656e0ef..dcfd3150b3 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -634,6 +634,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}点击 # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}公司评价排名 STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :车库主管 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :线路经理 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :运输代理 @@ -1811,13 +1812,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :“打开”本 STR_CONFIG_SETTING_AI_BUILDS_SHIPS :禁止电脑使用船只:{STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :“打开”本选项将禁止电脑使用船只 -STR_CONFIG_SETTING_AI_PROFILE :默认设置属性: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :设置随机添加AI或脚本时的AI初始属性。 -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :简单 -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :中等 -STR_CONFIG_SETTING_AI_PROFILE_HARD :困难 - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :联机游戏时允许电脑玩家(AI): {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :“打开”时联机游戏允许电脑玩家 @@ -1938,7 +1932,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :设置电子信 STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :在以下信号类型中循环: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :选择用Ctrl+点击的方式切换信号灯类型时的备选类型 ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :仅路径信号灯 STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :全部可见 STR_CONFIG_SETTING_SIGNAL_GUI_MODE :显示信号类型: {STRING} @@ -4525,7 +4518,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}切换 STR_ORDERS_LIST_TOOLTIP :{BLACK}调度列表{}单击一个调度指令以选定{}CTRL+左键{}将视点移动到相应的车站 STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :-- 调度计划结束 -- STR_ORDERS_END_OF_SHARED_ORDERS :- - 共享调度计划结束 - - @@ -4559,11 +4551,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}选择 STR_ORDER_DROP_REFIT_AUTO :固定货物 STR_ORDER_DROP_REFIT_AUTO_ANY :可用类型 -STR_ORDER_SERVICE :{BLACK}保养 STR_ORDER_DROP_GO_ALWAYS_DEPOT :一直前进 STR_ORDER_DROP_SERVICE_DEPOT :若需要则维护 STR_ORDER_DROP_HALT_DEPOT :停留 -STR_ORDER_SERVICE_TOOLTIP :{BLACK}除非需要在此处保养,否则跳过这一项目 STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}跳过所需的车辆数据值 @@ -4632,6 +4622,7 @@ STR_ORDER_REFIT_ORDER :(改装为 {STR STR_ORDER_REFIT_STOP_ORDER :(改装为{STRING}并停留) 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} @@ -4834,6 +4825,8 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :游戏脚本 STR_AI_SETTINGS_CLOSE :{BLACK}关闭 STR_AI_SETTINGS_RESET :{BLACK}重设 STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} +STR_AI_SETTINGS_SETTING_DEVIATION :{STRING}:{ORANGE}[{STRING},{STRING}] +STR_AI_SETTINGS_JUST_DEVIATION :[{STRING},{STRING}] # Textfile window @@ -5099,6 +5092,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}在附 STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :车库类型错误 +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE}在更新后总长会过长 STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}当前没有进行中的车辆更新计划. diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 15bd39452c..34a211b4d0 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1775,13 +1775,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Povolením nast STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Zakázať lode pre počítač: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Povolením nastavenia znemožní počítačovým hráčom budovať lode. -STR_CONFIG_SETTING_AI_PROFILE :Predvolený profil nastavení: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vyberte, ktorý profil nastavení sa má použiť pre náhodných počítačových hráčov alebo pre počiatočné hodnoty pri pridávaní nových počítačových hráčov alebo Herného skriptu -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Ľahký -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Stredný -STR_CONFIG_SETTING_AI_PROFILE_HARD :{G=m}Ťažký - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Povoliť AI v hre viacerých hráčov: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Povoliť AI počítačovým hráčom hrať "Hru viacerých hráčov". @@ -1900,7 +1893,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Zvoľte rok od STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Prepínanie medzi typmi návestidiel: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Výber návestidiel použitých v zámene pomocou Ctrl+kliku na návestidlo počas umiestňovania návestidiel ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Iba trasové návestidlá STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Všetky viditeľné STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Zobraziť typy návestidiel: {STRING} @@ -4371,7 +4363,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Prepnút STR_ORDERS_LIST_TOOLTIP :{BLACK}Zoznam príkazov - kliknúť na príkaz pre označenie. Ctrl+klik presunie pohľad na cieľ príkazu STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Koniec príkazov - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Koniec zdieľaných príkazov - - @@ -4405,11 +4396,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vyberte STR_ORDER_DROP_REFIT_AUTO :Fixný náklad STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupný náklad -STR_ORDER_SERVICE :{BLACK}Servis STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vždy choď STR_ORDER_DROP_SERVICE_DEPOT :Servis, ak je potrebný STR_ORDER_DROP_HALT_DEPOT :Zastav -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Preskočiť tento príkaz pokiaľ nie je potrebný servis STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Údaje vozidla na základe ktorých sa vykoná skok @@ -4478,6 +4467,7 @@ STR_ORDER_REFIT_ORDER :(Prestavba na { STR_ORDER_REFIT_STOP_ORDER :(Prestavba na {STRING} a zastav) STR_ORDER_STOP_ORDER :(Zastav) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemožno použiť stanicu){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4925,6 +4915,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Nemožno STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nesprávny typ depa +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je dlho po výmene STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Neboli využité žiadne pravidlá pre obnovu. diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index d57228153a..fd5e978eae 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1705,13 +1705,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Če je omogoče STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Onemogoči ladje za računalnik: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Če je omogočeno, računalniški tekmec ne more graditi ladij. -STR_CONFIG_SETTING_AI_PROFILE :Profil privzetih nastavitev: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Izberi profil nastavitev za naključne UI ali za začetne vrednosti ob dodajanju UI ali skripta -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lahko -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Srednje težko -STR_CONFIG_SETTING_AI_PROFILE_HARD :Težko - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Dovoli UI v večigralskem načinu: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Dovoli UI računalniškim tekmecem sodelovanje v večigralskem načinu. @@ -1816,7 +1809,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Nastavitev leta STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Krožni izbor tipa signalov: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Izbira tipa signalov za vrtilni-izbor. Ctrl+klik na signal z orodjem za signale. ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Samo napredni STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Vse ###length 2 @@ -3970,7 +3962,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Preklop STR_ORDERS_LIST_TOOLTIP :{BLACK}Seznam navodil - klikni na ukaz, da ga izbereš. CTRL+Klik premakne na destinacijo STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Konec ukazov - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Konec ukazov v skupni rabi - - @@ -4004,11 +3995,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Izberi k STR_ORDER_DROP_REFIT_AUTO :Določen tovor STR_ORDER_DROP_REFIT_AUTO_ANY :Tovor na voljo -STR_ORDER_SERVICE :{BLACK}Servis STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vedno pojdi STR_ORDER_DROP_SERVICE_DEPOT :Servisiraj po potrebi STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Preskoči ta ukaz, razen če je potreben servis STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Podatki vozila na osnovni preskok @@ -4077,6 +4066,7 @@ STR_ORDER_REFIT_ORDER :(Preuredi za {S STR_ORDER_REFIT_STOP_ORDER :(Preuredi v {STRING} in zaustavi) STR_ORDER_STOP_ORDER :(Stop) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implicitno) @@ -4504,6 +4494,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ni mogo STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Napačna vrsta garaže +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je predolgo po zamenjavi STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ni samoobnovitvenih pravil diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 5adcd13a00..e463f153c3 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1804,13 +1804,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activar esta op STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barcos para el ordenador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activa esta opción para deshabilitar la construcción de barcos para las IA -STR_CONFIG_SETTING_AI_PROFILE :Perfil por defecto: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Selecciona el perfil a usar para IA aleatorias o para los valores iniciales cuando se añade una nueva IA o un script de juego -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Intermedio -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA en multijugador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite a los jugadores controlados por el ordenador participar en partidas multijugador @@ -1931,7 +1924,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Fija el año a STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cambiar entre tipos de señales: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Permite seleccionar entre qué señales se debe cambiar al usar Ctrl+clic con la herramienta de señales ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo señales de ruta STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas las visibles STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostrar tipos de señales: {STRING} @@ -4515,7 +4507,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambia a STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de órdenes - Clica en una orden para resaltarla. Ctrl+clic para desplazarse a la estación de la orden STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fin de órdenes - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fin de órdenes compartidas - - @@ -4549,11 +4540,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Seleccio STR_ORDER_DROP_REFIT_AUTO :Carga fijada STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponible -STR_ORDER_SERVICE :{BLACK}Mantenimiento STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir siempre STR_ORDER_DROP_SERVICE_DEPOT :Mantenimiento si es necesario STR_ORDER_DROP_HALT_DEPOT :Detenerse -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Salta esta orden a menos que un mantenimiento sea necesario STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Datos del vehículo en los que se basará para realizar el salto de orden @@ -4622,6 +4611,7 @@ STR_ORDER_REFIT_ORDER :(Reformar a {ST STR_ORDER_REFIT_STOP_ORDER :(Reformar a {STRING} y detenerse) STR_ORDER_STOP_ORDER :(Detenerse) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No puede usar la estación){POP_COLOUR} {STRING} {STATION} {STRING} @@ -5089,6 +5079,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}No se pu STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito erróneo +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} es demasiado largo después del reemplazo STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No se han aplicado reglas de autorreemplazo/renovación diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 608eba07e0..b9a3de3ccf 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1670,13 +1670,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activar esta op STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barcos para la computadora: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activar esta opción deshabilita la construcción de barcos por jugadores no humanos -STR_CONFIG_SETTING_AI_PROFILE :Perfil por defecto: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Perfil para los jugadores no humanos aleatorios, o para los valores iniciales al añadir un nuevo jugador no humano o un script de juego -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Intermedio -STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir jugadores no humanos en modo multijugador: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Los jugadores controlados por la computadora podrán participar en partidas de varios jugadores @@ -1795,7 +1788,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Año a partir d STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cambiar entre tipos de señales: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Elegir la alternación entre señales al usar Ctrl+Clic con la herramienta de señales ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo señales de ruta STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Mostrar tipos de señales: {STRING} @@ -4255,7 +4247,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambiar STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de recorridos. Clic para resaltar. Ctrl+Clic para ir al destino del recorrido STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Fin de recorridos - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Fin de recorridos compartidos - - @@ -4289,11 +4280,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elegir l STR_ORDER_DROP_REFIT_AUTO :Carga fija STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponible -STR_ORDER_SERVICE :{BLACK}Mantenimiento STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir siempre STR_ORDER_DROP_SERVICE_DEPOT :Mantto. si es necesario STR_ORDER_DROP_HALT_DEPOT :Detenerse -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ignorar este recorrido a menos que el mantenimiento sea necesario STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Datos del vehículo para recorridos condicionales @@ -4362,6 +4351,7 @@ STR_ORDER_REFIT_ORDER :(Reformar a {ST STR_ORDER_REFIT_STOP_ORDER :(Reformar a {STRING} y detenerse) STR_ORDER_STOP_ORDER :(Detenerse) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No se puede usar la estación){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4806,6 +4796,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}No se pu STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito erróneo +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} es demasiado largo después del reemplazo STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No se han aplicado reglas de reemplazo o renovación diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 9368155420..a34cf3ffdf 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1722,13 +1722,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :När denna inst STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Förbjud skepp för datorn: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :När denna inställning aktiveras blir det omöjligt för datorspelare att bygga skepp -STR_CONFIG_SETTING_AI_PROFILE :Inställningsprofil som standard: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Välj vilken inställningsprofil som ska användas för slumpvis valda datorspelare, eller för startvärden när en ny datorspelare (AI) eller ett spelskript läggs till -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Lätt -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mellan -STR_CONFIG_SETTING_AI_PROFILE_HARD :Svår - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillåt datorspelare i flerspelarläge: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillåt datorstyrda spelare att delta i spel för flera spelare @@ -1847,7 +1840,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Välj vilket å STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Gå igenom signaltyper: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Välj vilka signaltyper som ska gås igenom vid Ctrl+klick med signalverktyget på en redan byggd signal ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Endast avancerade STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alla synliga STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Visa signaltyper: {STRING} @@ -4333,7 +4325,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Ändra t STR_ORDERS_LIST_TOOLTIP :{BLACK}Orderlista - klicka på order för att markera det. Ctrl+klick visar order-destinationen i huvudförstret STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Slut på order - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Slut på delade order - - @@ -4367,11 +4358,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Välj vi STR_ORDER_DROP_REFIT_AUTO :Fast lasttyp STR_ORDER_DROP_REFIT_AUTO_ANY :Tillgängliga lasttyper -STR_ORDER_SERVICE :{BLACK}Service STR_ORDER_DROP_GO_ALWAYS_DEPOT :Åk alltid STR_ORDER_DROP_SERVICE_DEPOT :Service vid behov STR_ORDER_DROP_HALT_DEPOT :Stanna -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Skippa den här ordern om service ej behövs STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Fordonsdata att basera hopp på @@ -4440,6 +4429,7 @@ STR_ORDER_REFIT_ORDER :(Anpassa för { STR_ORDER_REFIT_STOP_ORDER :(Anpassa för {STRING} och stanna) STR_ORDER_STOP_ORDER :(Stanna) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ej använda stationen){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4889,6 +4879,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan inte STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Felaktig depå-typ +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} är för långt efter utbyte STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Inga regler för automatisk förnyelse/utbyte av fordon är aktiverade diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 4fce7f9c95..a3129f5430 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1521,12 +1521,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :கணினி STR_CONFIG_SETTING_AI_BUILDS_SHIPS :கணினியிற்கு கப்பல்களை அனுமதிக்காதே: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :கணினியால் கப்பல்களை பயன்படுத்த இயலாது -STR_CONFIG_SETTING_AI_PROFILE :முதன்மை அமைப்புகள் profile: {STRING} -###length 3 -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_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB @@ -1620,7 +1614,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :தானாக STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :வெவேறு சிக்னல் வகைகளுள் மாற்றவும்: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :பாதை சிக்னல்கள் மட்டும் STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :தெரிகிர அனைத்தும் STR_CONFIG_SETTING_SIGNAL_GUI_MODE :சிக்னல் வகைகளை காட்டு: {STRING} @@ -3806,7 +3799,6 @@ STR_ORDERS_TIMETABLE_VIEW :{BLACK}நே STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}கால அட்டவணை பார்வைக்கு மாறு STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - கட்டளைகளின் பட்டியல் முடிகிறது - - STR_ORDERS_END_OF_SHARED_ORDERS :- - பகிரப்பட்ட கட்டளைகளின் பட்டியல் முடிகிறது - - @@ -3835,11 +3827,9 @@ STR_ORDER_REFIT_AUTO :{BLACK}தா STR_ORDER_DROP_REFIT_AUTO :குறிப்பிட்ட சரக்கு STR_ORDER_DROP_REFIT_AUTO_ANY :கிடைக்கும் சரக்கு -STR_ORDER_SERVICE :{BLACK}பராமரிப்பு STR_ORDER_DROP_GO_ALWAYS_DEPOT :எப்போதும் செல் STR_ORDER_DROP_SERVICE_DEPOT :தேவைப்பட்டால் பராமரிப்பிற்கு செல் STR_ORDER_DROP_HALT_DEPOT :நிறுத்து -STR_ORDER_SERVICE_TOOLTIP :{BLACK}பழுது சரிபார்த்தல் இல்லையெனில் இந்தக் கட்டளையினை தவிற்கவும் STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}அடிப்படை ஜம்பிங் செய்ய வாகனத் தரவு @@ -3906,6 +3896,7 @@ STR_ORDER_REFIT_ORDER :({STRING}-இ STR_ORDER_REFIT_STOP_ORDER :({STRING}-இற்கு மாற்றிவிட்டு நின்றுவிடு) STR_ORDER_STOP_ORDER :(நிறுத்து) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(தானியங்கி) @@ -4334,6 +4325,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}பண STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :தவறான பணிமனை வகை +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} மாற்றியமைக்கப்பட்ட பின் இரயில் மிக நீளமாக உள்ளது STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}எந்த தானியங்கிமாற்றல்/புதுப்பித்தல் விதிமுறைகளும் செயல்படுத்தப்படவில்லை diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 3cd74c48a9..1f8e184d20 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1559,13 +1559,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :เมื่อ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :ไม่ยอมให้มีเรือสำหรับคอมพิวเตอร์: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :เมื่อเปิดใช้งาน จะทำให้ AI สามารถสร้างยานพาหนะทางน้ำได้ -STR_CONFIG_SETTING_AI_PROFILE :รูปแบบการตั้งค่าพื้นฐาน: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :เลือกที่ตั้งค่าโปรไฟล์ที่จะใช้สำหรับเอไอเอสแบบสุ่มหรือค่าเริ่มต้นสำหรับการเพิ่มสคริปต์ AI หรือเกมใหม่ -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :ง่าย -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :ปานกลาง -STR_CONFIG_SETTING_AI_PROFILE_HARD :ยาก - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :อนุญาตให้ใช้ปัญญาประดิษฐ์ (AI) สำหรับหลายผู้เล่น: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :อนุญาตให้มี AI ในโหมดผู้เล่นหลายคน @@ -1678,7 +1671,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :เลือก STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :วนชนิดเสาอาณัติสัญญาณ: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :เลือกประเภทเสาอาณัติสัญญาณในทิศทางที่ต้องการ หากกด Ctrl+คลิ๊กซ้าย จะเป็นการสร้างเสาสัญญาณด้วยเครื่องมือสร้างเสาสัญญาณ ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :เสาอาณัติสัญญาณตอนอัตโนมัติ แบบทางเดียว STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :แสดงทั้งหมด STR_CONFIG_SETTING_SIGNAL_GUI_MODE :แสดงประเภทขของเสาอาณัติสัญญาณ: {STRING} @@ -3926,7 +3918,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}สล STR_ORDERS_LIST_TOOLTIP :{BLACK}รายการต้นทางปลายทาง STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - สิ้นสุดรายการ - - STR_ORDERS_END_OF_SHARED_ORDERS :- - สิ้นสุดคำสั่งที่ใช้ร่วมกัน - - @@ -3960,11 +3951,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}ดั STR_ORDER_DROP_REFIT_AUTO :เลือกประเภทตามกำหนด STR_ORDER_DROP_REFIT_AUTO_ANY :ตามสินค้าที่ต้องการการขนส่ง -STR_ORDER_SERVICE :{BLACK}ซ่อมบำรุง STR_ORDER_DROP_GO_ALWAYS_DEPOT :ไปทุกครั้ง STR_ORDER_DROP_SERVICE_DEPOT :เข้าซ่อมบำรุงหากต้องการ STR_ORDER_DROP_HALT_DEPOT :หยุด -STR_ORDER_SERVICE_TOOLTIP :{BLACK}จะข้ามรายการนี้ไปเมื่อยังไม่มีความต้องการซ่อมบำรุง STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}ข้อมูลยานพาหนะที่จะข้ามไป @@ -4033,6 +4022,7 @@ STR_ORDER_REFIT_ORDER :(ดัดแ STR_ORDER_REFIT_STOP_ORDER :(ดัดแปลงเป็น {STRING} และหยุด) STR_ORDER_STOP_ORDER :(หยุด) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(อัตโนมัติ) @@ -4461,6 +4451,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}ไม STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :อู่ผิดประเภท +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} จะยาวเกินไปหลังจากแทนที่ใหม่ STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}ไม่มีกฏเกี่ยวกับการแทนที่ครอบคลุม diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 9ff26af849..537d032aff 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1715,13 +1715,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :如啟用此選 STR_CONFIG_SETTING_AI_BUILDS_SHIPS :不允許電腦使用船舶:{STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :如啟用此選項,電腦玩家將無法建造船舶。 -STR_CONFIG_SETTING_AI_PROFILE :預設設定檔:{STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :選擇隨機 AI 與新 AI 或遊戲腳本使用的預設設定檔。 -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :容易 -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :中等 -STR_CONFIG_SETTING_AI_PROFILE_HARD :困難 - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :多人遊戲中允許電腦 AI 加入:{STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :容許 AI 電腦玩家參與多人遊戲。 @@ -1840,7 +1833,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :設定使用燈 STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :按住 Ctrl 點選號誌時要切換的號誌種類:{STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :選擇可以用Ctrl+點擊以替換的號誌類型。 ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :僅限路徑號誌 STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :所有可見的號誌 STR_CONFIG_SETTING_SIGNAL_GUI_MODE :顯示號誌類型:{STRING} @@ -4326,7 +4318,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}切換 STR_ORDERS_LIST_TOOLTIP :{BLACK}指令清單 - 點選可選擇該指令,按住 CTRL 點選可跳到車站位置 STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - 指令結束 - - STR_ORDERS_END_OF_SHARED_ORDERS :- - 共享指令結束 - - @@ -4360,11 +4351,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}選擇 STR_ORDER_DROP_REFIT_AUTO :固定貨物種類 STR_ORDER_DROP_REFIT_AUTO_ANY :可用貨物 -STR_ORDER_SERVICE :{BLACK}維護 STR_ORDER_DROP_GO_ALWAYS_DEPOT :總是進行 STR_ORDER_DROP_SERVICE_DEPOT :若需要則維護 STR_ORDER_DROP_HALT_DEPOT :停留 -STR_ORDER_SERVICE_TOOLTIP :{BLACK}跳過這個指令,除非需要維護 STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}跳躍指令依據 @@ -4433,6 +4422,7 @@ STR_ORDER_REFIT_ORDER :(改裝成 {STR STR_ORDER_REFIT_STOP_ORDER :(裝載 {STRING} 並停止) 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} @@ -4883,6 +4873,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}找不 STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :錯誤的機廠種類 +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} 將在替換後過長 STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}無自動替換/翻新的規則可套用 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 41aa5a5191..fff9c88647 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1737,13 +1737,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Etkinleştirild STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Bilgisayar gemi kullanmasın: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Etkinleştirildiğinde bilgisayarın kontrol ettiği şirket gemi yapamaz -STR_CONFIG_SETTING_AI_PROFILE :Varsayılan ayar profili: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Rastgele YZ'ler (yapay zekalar) için veya yeni bir YZ ya da Oyun Senaryosu eklerken hangi ayar profilinin kullanılacağını seçin -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Kolay -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Orta zorluk -STR_CONFIG_SETTING_AI_PROFILE_HARD :Zor - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Çok oyunculuda yapay zekâ olsun: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :YZ (yapay zeka) bilgisayar oyuncularının çok oyunculu oyunlara katılmasına izin ver @@ -1862,7 +1855,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Raylar için el STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Sinyal türleri arasında dön: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Sinyal aracı ile inşa edilmiş bir sinyalin üzerine CTRL+tıklarken hangi sinyal türlerinin kullanılacağını seç ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Yalnızca yol sinyalleri STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Hepsi görünür STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Sinyal türlerini göster: {STRING} @@ -4364,7 +4356,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Zaman ta STR_ORDERS_LIST_TOOLTIP :{BLACK}Talimat listesi - seçmek için komutu tıklayın. CTRL + tıklama istasyona kaydırır STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Talimatların Sonu - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Paylaşılmış talimat sonu - - @@ -4398,11 +4389,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Bu talim STR_ORDER_DROP_REFIT_AUTO :Sabit kargo STR_ORDER_DROP_REFIT_AUTO_ANY :Kullanılabilir kargo -STR_ORDER_SERVICE :{BLACK}Bakım STR_ORDER_DROP_GO_ALWAYS_DEPOT :Her zaman git STR_ORDER_DROP_SERVICE_DEPOT :Gerekiyorsa bakıma gir STR_ORDER_DROP_HALT_DEPOT :Dur -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Bakım gerekmiyorsa bunu atla STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dallanmanın temel alacağı araç verisi @@ -4471,6 +4460,7 @@ STR_ORDER_REFIT_ORDER :(Moifiye ile > STR_ORDER_REFIT_STOP_ORDER :(Kargo türünü {STRING} yap ve dur) STR_ORDER_STOP_ORDER :(Dur) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(İstasyon kullanılamıyor){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4938,6 +4928,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Yerel ga STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Yanlış gar türü +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} değiştirmeden sonra çok uzun oldu STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Hiçbir otomatik değiştirme/yenileme kuralı uygulanmadı diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 17ee6bb046..269ad8cf9a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1817,13 +1817,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Заборон STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Заборонити комп'ютеру використання кораблів: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Забороняє віртуальним гравцям використання водного транспорту. -STR_CONFIG_SETTING_AI_PROFILE :Параметри профілю за умовчанням: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Виберіть, який профіль налаштувань використовувати випадковому ШІ або для початкових значень при додаванні нового ШІ або скрипту гри -###length 3 -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_AI_IN_MULTIPLAYER_HELPTEXT :Дозволяє участь віртуальних гравців у колективній грі @@ -1942,7 +1935,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Налашту STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Сигнали, доступні при циклічному переборі: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Налаштування типу сигналів, що доступні при зміні типу за допомогою Ctrl+клац мишею ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :тільки маршрутні STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :всі видимі STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Показувати типи сигналів: {STRING} @@ -4415,7 +4407,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Пере STR_ORDERS_LIST_TOOLTIP :{BLACK}Маршрутний лист - клацніть на завданні для його вибору. Ctrl+клац мишою показує станцію призначення STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Кінець наказів - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Кінець спільних наказів - - @@ -4449,11 +4440,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Обра STR_ORDER_DROP_REFIT_AUTO :Зазначений вантаж STR_ORDER_DROP_REFIT_AUTO_ANY :Доступний вантаж -STR_ORDER_SERVICE :{BLACK}Техогляд STR_ORDER_DROP_GO_ALWAYS_DEPOT :Завжди прямувати STR_ORDER_DROP_SERVICE_DEPOT :Прямувати при потребі в техогляді STR_ORDER_DROP_HALT_DEPOT :Прямувати і зупинитись -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Пропустити це завдання, якщо техогляд не потрібен STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Дані транспорту для базування наказу @@ -4522,6 +4511,7 @@ STR_ORDER_REFIT_ORDER :(Переобл STR_ORDER_REFIT_STOP_ORDER :(Переобладнати на {STRING} і зупинити) 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} @@ -4970,6 +4960,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Немо STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неправильний тип депо +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} дуже довгий після оновлення STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Правила автозаміни/оновлення не застосовувалися diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 903fe5cfd8..50248b0f26 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1326,8 +1326,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :کمپیوٹر STR_CONFIG_SETTING_AI_BUILDS_SHIPS :کمپیوٹر کے لئے بحری جہاز غیر فعال کریں: {STRING} -###length 3 - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :زیادہ کھلاڑیوں والے کھیل میں AI کی اجازت دیں: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :اسکرپٹس کے معطل ہونے سے پہلے #opcodes: {STRING} @@ -1391,7 +1389,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :پہلے خود STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :اشعاروں کی اقسام میں سے گزریں: {STRING} ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :صرف راستے کے اشارے STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :تمام ###length 2 @@ -2622,7 +2619,6 @@ STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}ساما # Order view STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} # Order bottom buttons @@ -2652,6 +2648,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -2790,6 +2787,8 @@ STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE} ڈیپ +# Depot unbunching related errors + # Autoreplace related errors # Rail construction errors diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index b4d25660f2..937aa977bd 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1750,13 +1750,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Bật tùy ch STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Nhân vật máy không được mua tàu thủy: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Bật tùy chọn này thì người chơi là AI sẽ không xây đường thủy -STR_CONFIG_SETTING_AI_PROFILE :Giá trị thiết lập mặc định: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Lực chọn mức độ khó đối với AI ngẫu nhiên hoặc giá trị mặc định khi thêm AI mới hay kịch bản trò trơi -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Dễ -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Trung bình -STR_CONFIG_SETTING_AI_PROFILE_HARD :Khó - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Cho phép AI ở chế độ nhiều người chơi: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Cho phép người chơi AI (máy tính) được tham gia trong ván chơi nhiều người @@ -1875,7 +1868,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Thiết lập t STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Đổi tuần hoàn các kiểu đèn báo: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Chọn kiểu đèn báo để tuần hoàn khi Ctrl+click vào một đèn báo đã được xây bằng công cụ đèn báo ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Đèn hiệu giành đường STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Tất cả có thể thấy STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Hiển thị các kiểu đèn báo: {STRING} @@ -4392,7 +4384,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Lịch t STR_ORDERS_LIST_TOOLTIP :{BLACK}Lịch trình - click để tô sáng một thứ tự nào đó. Ctr+Click để nhảy đến nhà ga tương ứng STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Kết thúc lộ trình - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Kết thúc lộ trình chia sẻ - - @@ -4426,11 +4417,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Chọn l STR_ORDER_DROP_REFIT_AUTO :Loại hàng cố định STR_ORDER_DROP_REFIT_AUTO_ANY :Loại hàng sẵn có -STR_ORDER_SERVICE :{BLACK}Bảo trì STR_ORDER_DROP_GO_ALWAYS_DEPOT :Chạy suốt STR_ORDER_DROP_SERVICE_DEPOT :Bảo trì nếu cần STR_ORDER_DROP_HALT_DEPOT :Dừng -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Bỏ điểm lộ trình này trừ khi cần bảo trì STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dữ kiện của phương tiện để xác định @@ -4499,6 +4488,7 @@ STR_ORDER_REFIT_ORDER :(Cải biến t STR_ORDER_REFIT_STOP_ORDER :(Cải biến thành {STRING} và dừng) STR_ORDER_STOP_ORDER :(Dừng) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4965,6 +4955,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Không t STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Xưởng không hợp kiểu +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} quá dài sau khi thay thế STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Không thể áp dụng cơ chế tự thay, tự làm đổi mới. diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 30babc61f3..fed34c0368 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1591,13 +1591,6 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Mae galluogi'r STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Analluogi llongau ar gyfer y cyfrifiadur: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Mae galluogi'r gosodiad yma'n ei gwneud yn amhosib i chwaraewr cyfrifiadur adeiladu llongau -STR_CONFIG_SETTING_AI_PROFILE :Proffil gosodiadau rhagosodedig: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Dewis pa broffil gosodiadau i'w ddefnyddio ar gyfer AIau a gyflwynir ar hap, neu fel gwerthoedd rhagosodedig pan yn ychwanegu AI neu Sgript Gêm newydd -###length 3 -STR_CONFIG_SETTING_AI_PROFILE_EASY :Hawdd -STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Cymhedrol -STR_CONFIG_SETTING_AI_PROFILE_HARD :Anodd - STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Caniatáu AIau mewn gemau amlchwaraewr: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Caniatáu i chwaraewyr AI gymeryd rhan mewn gemau amlchwaraewr @@ -1704,7 +1697,6 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Gosod y flwyddy STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cylchu trwy mathau signal: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Dewis pa fathau o signalau i gylchu drwyddynt pan yn Ctrl+clicio ar signal gyda'r offer signal ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Signalau llwybr yn unig STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Pob math gweledol STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Dangos mathau signal: {STRING} @@ -3950,7 +3942,6 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Newid i' STR_ORDERS_LIST_TOOLTIP :{BLACK}Rhestr orchmynion - cliciwch orchymyn i'w amlygu. Mae Ctrl+Clic yn sgrolio i gyrchfan yr orchymyn STR_ORDER_INDEX :{COMMA}:{NBSP} -STR_ORDER_TEXT :{STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Diwedd Gorchmynion - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Diwedd y Gorchmynion sydd wedi'u Rhannu - - @@ -3984,11 +3975,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Dewis y STR_ORDER_DROP_REFIT_AUTO :Llwyth gosodedig STR_ORDER_DROP_REFIT_AUTO_ANY :Llwythi ar gael -STR_ORDER_SERVICE :{BLACK}Gwasanaeth STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mynd bob tro STR_ORDER_DROP_SERVICE_DEPOT :Gwasanaethu os oes angen STR_ORDER_DROP_HALT_DEPOT :Stopio -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Hepgor y gorchymyn hwn os nad oes angen gwasanaeth STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Data cerbyd i seilio'r naid arno @@ -4057,6 +4046,7 @@ STR_ORDER_REFIT_ORDER :(Ailffitio i {S STR_ORDER_REFIT_STOP_ORDER :(Ailfitio i {STRING} a stopio) STR_ORDER_STOP_ORDER :(Stopio) + STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Methu defnyddio gorsaf){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4492,6 +4482,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Methu do STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :math depo anghywir +# Depot unbunching related errors + # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Aeth gormod o amser heibio i allu adnewyddu {VEHICLE} STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ni weithredwyd unrhyw reolau awtogyfnewid/adnewyddu From 22eed9616efebf65a19bdb25e2c4bd968f719665 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 3 Feb 2024 20:48:10 +0100 Subject: [PATCH 21/21] Doc: Prepare for 14.0-beta1 release (#11964) --- changelog.txt | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) diff --git a/changelog.txt b/changelog.txt index b4eba4995e..93f314b3df 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,285 @@ +14.0-beta1 (2023-02-03) +------------------------------------------------------------------------ +Feature: Order option to unbunch vehicles at depot (#11945) +Feature: Infinite money mode (#11902) +Feature: Setting to disable the loading speed penalty for trains longer than the station (#11682) +Feature: Plugin framework for Social Integration with Steam, Discord, GOG, etc (#11628) +Feature: Scalable OpenTTD TrueType font made by Zephyris (#11593) +Feature: Toyland-specific river graphics (#11523) +Feature: Add zoom level buttons to sprite aligner (#11518) +Feature: Add shading to river slopes (#11491) +Feature: Place cargo icon on cargo filter dropdowns (#11487) +Feature: Mode to display timetable in seconds (#11435) +Feature: Setting to influence how many minutes a calendar year takes (#11428) +Feature: Base graphics can offer parameters for additional settings (#11347) +Feature: Sandbox option to lock station ratings at 100% (#11346) +Feature: Setting to use real-time "wallclock" as timekeeping units (#11341) +Feature: Setting to automatically restart server based on hours played (#11142) +Feature: Add config option to set default company secondary colour for new games (#11068) +Feature: Transparency option for cost and income indicators (#11001) +Feature: Create group of vehicles from manage vehicle list button (#10890) +Feature: Show coverage highlight the same as stations when adding waypoints (#10875) +Feature: Show the number of industries already built in the Fund New Industry window (#10806) +Feature: Add search filter and name text to build waypoint window (#10786) +Feature: Setting to disallow level crossings with competitors (#10755) +Feature: Opt-in survey when leaving a game (#10719) +Feature: Replace buying/selling company shares with hostile takeovers of AI companies (#10709, #10914) +Feature: Settings to scale cargo production of towns and industries (#10606) +Feature: Separate rail/road and sea/air velocity units, and add knots (#10594) +Feature: Region-based pathfinder for ships (#10543) +Feature: Filter engine build menu by name and NewGRF extra text (#10519) +Feature: Industry directory text filter (#10518) +Feature: Ctrl+Click to reset late counter for the entire vehicle group (#10464) +Feature: Orientation of rail and road depots can be changed (#9642) +Feature: Display help and manuals in-game (#7786) +Feature: [NewGRF] Town production effect and multiplier (#11947) +Feature: [NewGRF] Randomize direction of rail vehicle on build based on probability callback (#11489) +Feature: [NewGRF] Related Act2 objects for airports and airport tiles (#11282) +Feature: [NewGRF] Allow higher max speeds for ships (#10734) +Feature: [NewGRF] Increase limit of objects/stations/roadstops per NewGRF (#10672) +Feature: [NewGRF] Road stops (#10144) +Feature: [Script] Goal destination can be updated (#10817) +Add: Argument for console command "restart" to use either current or newgame settings (#11962, #11963) +Add: {CURRENCY_SHORT} only did k / m suffix. Add bn / tn and make translatable (#11921) +Add: Show in multiplayer the amount of hours a game has been unpaused (#11886) +Add: Allow loading heightmaps from command-line (#11870) +Add: List_[scenario|heightmap] and load_[scenario|height] console commands (#11867) +Add: Latvian Lats currency (#11691) +Add: Horizontal scroll for script debug log (#11597) +Add: GUI options to select sprite font and AA mode for all fonts (#11593) +Add: Website button for basesets in Game Options window, the Game Script settings window and AI settings window (#11512) +Add: [Emscripten] Support for bootstrapping (#11109) +Add: Hotkey to focus town / industry directory filter box (#11030) +Add: Maximum number of companies allowed to the client list (#10523) +Add: Use specific error message when vehicle cannot go to station/waypoint (#10494) +Add: Show NewGRF name in NewGRF-created errors (#10457) +Add: Alternative setting for right-click close window option to exclude pinned windows (#10204) +Add: Allow autoreplace with same model vehicle (#7729) +Add: [NewGRF] Allow inspection of road tiles and airports (#11282, #11323) +Add: [NewGRF] Station variable 6B to get extended station id of nearby tiles (#10953) +Add: [NewGRF] String code "9A 21" to display force from textstack (#10782) +Add: [NewGRF] Station property 1C/1D to set name/classname (#10672) +Add: [Script] Optional filter parameter to ScriptXXXList constructors (#11698,#11663) +Add: [Script] AI/GS Time Mode to choose between economy (default) and calendar time (#11603) +Add: [Script] Allow to set max loan for each company separately (#11224) +Add: [Script] GSIndustry.GetConstructionDate() method (#11145) +Add: [Script] Game script control of industry production level and news messages (#11141) +Add: [Script] GSAsyncMode to set async mode of gamescript commands (#10913) +Add: [Script] GSCompanyMode::IsValid and IsDeity, and enforce valid company/deity mode where applicable (#10536, #10529) +Add: [Script] Allow GS to found town with random road layout (#10442) +Add: [Script] Create own Randomizer per instance (#10349) +Change: Better handle different GUI sizes for most windows, and squash inconsistencies between windows +Change: Allow configuring AI slots above the current maximum number of competitors (#11961) +Change: Forcefully enable prefixing logs with date (#11930) +Change: Position error window closer to cursor on large screens (#11923) +Change: Only open story-book in center when a GS does it (#11916) +Change: Rebrand Cheats as Sandbox Options (#11874) +Change: Make smooth-scrolling based on actual time (#11865) +Change: Set smooth-scrolling on by default (#11860) +Change: Disable building rail infrastructure if train build limit is zero (#11847) +Change: Invalidate music volume when restarting music playback on Windows (#11836) +Change: Make street lights transparent with houses (#11828) +Change: Redesign script debug window (#11782) +Change: Reorganize Settings menu items (#11683) +Change: Set amount of smoke/sparks to "realistic" by default (#11624) +Change: Show a message in livery window if vehicle type has no groups (#11617) +Change: Add distinct tooltips for vehicle group colour schemes (#11617) +Change: Move colour selection dropdowns to bottom of window (#11617) +Change: Support custom transparency remaps with 32bpp blitters (#11616) +Change: Make "middle" the default stopping location for trains in platforms (#11605) +Change: Scale sprites to requested highest resolution level (#11600) +Change: Allow opening multiple script debug windows by holding Ctrl (#11592) +Change: Don't show scoring year in high score table (#11546) +Change: Revert pressed-button content shifting introduced in r2161 (#11542) +Change: Show rating in station list even with no cargo waiting (#11540) +Change: Hide unused cargos from vehicle cargo filter (#11533) +Change: Don't restart playback when toggling playlist shuffle (#11504) +Change: Increase finance window lines (and underlines) with interface scale (#11459) +Change: Move baseset missing/corrupted files label to list item (#11455) +Change: Add horizontal scrollbar to Industry Directory window (#11434) +Change: Improve layout of airport, dock, object, road/tram stop, train station pickers (#11430) +Change: Display cargo lists in sorted cargo order (#11383) +Change: Link houses production on industry chain graph by TPE_PASSENGERS or TPE_MAIL cargo (#11378) +Change: Passenger subsidies are generated for any TPE_PASSENGER cargo type (#11378) +Change: Towns generate cargo based on town production effect (#11378) +Change: Always allow expanding towns in Scenario Editor to build new roads (#11377) +Change: Don't set vehicle on time if timetable not started (#11359) +Change: Store station blocked/wires/pylons flags in map (#11337) +Change: Recover when possible from crashes during a crash (#11238) +Change: Store crash logs in JSON format (#11232) +Change: Remove autosave from settings window; it is already in the Game Options (#11218) +Change: Enable "Forbid 90 degree turns" setting by default (#11160) +Change: Do not allow mixing road/tram types in powered road type list (#11148) +Change: Only show platform stopping location in orders when other than default (#11102) +Change: Autorail / autoroad tools can start dragging from invalid tiles (#11089) +Change: Only allow buying Exclusive Transport Rights when no one has them (#11076) +Change: Remove currency code/symbol suffix from language files (#11061) +Change: Add separate setting for server sent commands per frame limit (#11023) +Change: Cargo flow legend only shows defined cargo (#10872) +Change: Use "Via-Destination-Source" as default station cargodist display (#10851) +Change: Preserve orders and related settings where possible when moving engines around in a train (#10799) +Change: Standardise unit conversions and allow decimal places (#10795) +Change: Use separate names for default stations/roadstops (#10786) +Change: [MacOS] Require at least 10.15 to run the game (#10745) +Change: Hide all variants from UI when (display) parent is hidden (#10708) +Change: Split Game options into General, Graphics and Sound tabs (#10674) +Change: Extend entity override manager and station spec lists to support 16 bit IDs (#10672) +Change: Base autosaves intervals on real time (instead of game time) (#10655) +Change: Allow overbuilding station and waypoint tiles (#10618) +Change: Use realtime for Linkgraph update settings (#10610) +Change: Make tick length 27 milliseconds (#10607) +Change: Increase max cargo age and let min cargo payment approach zero (#10596) +Change: Show buy company dialog window even when playing in the AI company (#10459) +Change: Use HTTPS for content-service connections (#10448) +Change: Big UFO disaster targets current location of a random train (#10290) +Change: Remove land generator setting from World Generation GUI (#10093) +Change: Build signals to the next junction when dragging regardless of the Ctrl state (#9637) +Change: Allow dedicated server to use threaded saves (#10787) +Change: [NewGRF] Increase vehicle random data from 8 to 16 bits (#10701) +Change: [NewGRF] Read Action 3 IDs as extended-bytes for all features (#10672) +Change: [NewGRF] Make Action 3 debug messages more consistent (#10672) +Change: [NewGRF] Extend callback 161 (engine name) with bit 0x22 for context 'Autoreplace - Vehicles in use' (#10666) +Change: [Script] Replace easy/medium/hard values with default value (#11959) +Change: [Script] Limit total script ops that can be consumed by a list valuate (#11670) +Change: [Script] Allow GS access to ScriptGroup, ScriptGameSettings.IsDisabledVehicleType, more ScriptCompany and more ScriptOrder functions (#10642) +Change: [Script] Improve ScriptText validation error messages (#10545) +Change: [Script] Restore support of {RAW_STRING} in ScriptText (#10492) +Change: [Script] Validate ScriptText parameters type and amount (#10492) +Change: [Script] Automate the ScriptObject reference counting (#10492) +Change: [Script] Extract params info from GS strings (#10492) +Change: [Script] A ScriptText with too many parameters is now a fatal error (#10483) +Change: [Script] Log AI/GS Squirrel crashes in white text for readability (#10375) +Fix #11918: Houses should only build next to road stops, not any station type (#11919) +Fix #11827: Make text layouter aware of ligatures (#11831) +Fix #11752: Characters could be repeated when wrapping multi-line text (#11761) +Fix #11748: Decreasing service interval value sufficiently would result in it wrapping around (#11749) +Fix #11629: Crash when getting the nearest town for rotated airports (#11631) +Fix #11516: Adjust window size by interface scale during ReInit (#11517) +Fix #11515: Changing interface scale could have unintended effects on zoom level (#11615) +Fix #11442: "Default" colour in group colour window is not updated when changing master colour (#11614) +Fix #11437: Flipped shorter rail vehicles disappear in windows (#11446) +Fix #11413: Incorrect sorting by industry production (#11414) +Fix #11407: Don't steal focus from dropdown menus (#11484) +Fix #11402: Make string filter locale-aware (#11426) +Fix #11329: Don't assert vehicle list length is non-zero when only asked to set string parameter (#11330) +Fix #11315: Sort industries and cargoes by name in industry chain window (#11317) +Fix #11307: Incorrect GroupStatistics after selling leading wagon (#11311) +Fix #11261: Airport menu selectability after closing window on a class with no available airports (#11344) +Fix #11230: Sort by button in group list window could be misaligned (#11231) +Fix #11215: Assert in NewGRF parameters window (manual parameter mode) (#11217) +Fix #11203: [Linux] Crash when editing CJK characters in edit box (#11204) +Fix #11180: Aircraft crashes could point to the wrong tile (#11184) +Fix #11164: Don't create duplicate town names when using 'Many random towns' in the scenario editor (#11165) +Fix #11162: Second company colour was not consistently applied to articulated vehicles (#11163) +Fix #11115: Focus the abandon game/exit game windows (#11125) +Fix #11096: Increase priority of error and confirmation windows (#11104) +Fix #11087: Disable base graphics/sound dropdown outside main menu (#11091) +Fix #11054: Prevent translation of currency codes (#11061) +Fix #11026: Use real engine name instead of default name for filtering (#11033) +Fix #10982: No help text for gamelog command (#10984) +Fix #10880: Crash in object window due to incorrect parameter order (#10881) +Fix #10868: Crash when Script tries to load large savegame data (#11029) +Fix #10811: Allow dragging vehicle in depot to any free row (#11508) +Fix #10660: Sprite Font scale affected by viewport zoom level limits (#10668) +Fix #10619: Crash loading linkgraph for older savegames (#10620) +Fix #10600: 'Replace Vehicles' didn't show numbers >999 (#10680) +Fix #10578: Allow to select any version of AI/GS from GUI (#10604) +Fix #10522: Link graph tooltip vertical lines were not handled correctly (#10524) +Fix #10511: Don't search for depot every tick if one cannot be found (#11548) +Fix #10478: Clarify airport noise control setting texts (#11169) +Fix #10452: Prevent long stalls during river generation (#11544) +Fix #10430: Display chain window causing assert (#10431) +Fix #10343: Don't extend town-disallowed roadtypes (#10347) +Fix #10251: [MacOS] Screen looks blue-ish when using newer SDKs (#11207) +Fix #10222: Adjust line drawing algorithm (#10491) +Fix #10131: Actually cancel downloads when pressing cancel (#10485) +Fix #10118: Cycle through current signal group, not just path signals (#11798) +Fix #10439: [Script] Validate story page button colour, flags, cursor and vehicle type (#11892) +Fix #10438: [Script] Validate story page element type for ScriptStoryPage::NewElement (#11888) +Fix #9865: Removing files with the console always failed +Fix #9810: Rebuilding a through road stop costs money (#9852) +Fix #9722: Crash when pressing hotkeys early in world generation (#11858) +Fix #9697: Limit the default width of the Online Players window (#11936) +Fix #9642: Keep infrastructure totals when overbuilding road depots (#11229) +Fix #9545: Crash when all cargo types are disabled (#11432) +Fix #8846: When upgrading NewGRF presets, copy NewGRF parameters only if the NewGRF are compatible (#11348) +Fix #8253: Improve profit graph when having lots of money (#11915) +Fix #6377: Two tarballs with the same folder in them were considered as one (#11855) +Fix #5713: Ships could be sent to unreachable depots (#11768) +Fix #4575: Use Latin 'l' in English translation of zloty (#11090) +Fix #4415: Land info build date is also renovation date (#11759) +Fix: Display rank correctly with more than 15 companies in a league table (#11940) +Fix: Extra refit button when train/RV is in a depot (#11904) +Fix: Update server listing as offline when unexpected disconnect during refresh (#11891) +Fix: Horizontal scale of framerate window switched excessively (#11813) +Fix: [Linux] Various issues with resolutions and fullscreen in multi-display setups (#11778, #11779) +Fix: Build button text when train purchase window using "Engines" filter (#11755) +Fix: One-way state remained after removing road from road and tram tile (#11745) +Fix: Draw video driver info at the correct size and text wrap (#10716) +Fix: Language genders could not be applied to SCC_INDUSTRY_NAME (#11697) +Fix: Spurious cancellations of HTTP content downloads (#11668) +Fix: Calculation of initial engine age was inaccurate (#11660) +Fix: Prevent underflow if engine base life is less than 8 years (#11635) +Fix: Changing default livery did not propagate to group liveries (#11633) +Fix: Window width/height was doubly-scaled with automatic DPI switch (#11598) +Fix: Don't crash when saving a crashlog save with no main window open (#11586) +Fix: Prevent overflow when calculating max town noise (#11564) +Fix: Deleting towns did not check for waypoints referencing the town (#11513) +Fix: Invalidate playlist window when (un)shuffling playlist (#11504) +Fix: Restore original cargo legend 'blob' dimensions (#11480) +Fix: Extmidi did not move on to next song after playing ends (#11469) +Fix: Server password length in the UI was unnecessarily limited (#11408) +Fix: OpenTTD can fail to exit on an error due to mutex locks in threads (#11398) +Fix: Scale minimum width for server name by interface scale (#11381) +Fix: Server connection was not closed when relay window was closed (#11366) +Fix: Upgrading NewGRF presets could result in incomplete display of NewGRF parameters until restart (#11348) +Fix: Check for engine variant loops during NewGRF initialization (#11343) +Fix: Don't allow industries to produce invalid cargo (#11314) +Fix: Also apply cargo filters on shared groups in vehicle listing (#11294) +Fix: Only count distance traveled in vehicles for cargo payment (#11283) +Fix: Base cargo payment on load/unload tile, instead of station sign location (#11281) +Fix: Crash when opening a damaged base-graphics (#11275) +Fix: Trivial autoreplace of mixed cargo articulated engines (#11253) +Fix: [Emscripten] Config not saved on exit (#11248) +Fix: Inaccurate waiting cargo total in station window when using cargodist (#11213) +Fix: No fast forward in network was ensured only from GUI side (#11206) +Fix: Crash when not passing command-line parameter for -n (#11153) +Fix: [Bootstrap] Don't crash when failing to connect to content server (#11122) +Fix: Crash when failing to load a game into a dedicated server at startup (#11021) +Fix: Don't allow changing settings over the network that are marked as local settings (#11009) +Fix: Move no_http_content_downloads and use_relay_service to private settings (#10762) +Fix: Extra viewport could not be scrolled with right-click-close (#10644) +Fix: Specify units for value of share trading age setting (#10612) +Fix: Road type is not available before its introduction date (#10585) +Fix: Do not update a RV's Z-position when stationary while turning (#10570) +Fix: Don't (briefly) switch from title-only playlist on menu screen (#10553) +Fix: Reset content download progress to zero if falling back to TCP (#10485) +Fix: Make script goals work with the whole range of ClientIDs (#10435) +Fix: [NewGRF] Tile slope missing from road stops varact2 variable 0x42 (#11373) +Fix: [NewGRF] House class mappings were not reset between games (#11279) +Fix: [NewGRF] Profile didn't stop if there were no events yet (#10816) +Fix: [NewGRF] Support more than 256 stations/waypoints/roadstops per class (#10793) +Fix: [NewGRF] Var68 for station and roadstop was broken (#10784) +Fix: [NewGRF] Object and road stop ignore property handlers (#10525) +Fix: [Script] Apply random deviation to settings only at script start (#11944) +Fix: [Script] Improve ScriptText validation (#11721) +Fix: [Script] GSAdmin.Send() could generate invalid JSON (#11250) +Fix: [Script] Crash if squirrel compatibility scripts cannot be parsed (#11589) +Fix: [Script] Don't list unavailable road types for game scripts (#10585) +Fix: [Script] Game scripts were able to build with non-existing road types (#10539) +Fix: [Script] Inconsistent precondition failure return values (#10533) +Fix: [Script] Crash when companies disappear (#10529) +Fix: [Script] ScriptBase::Rand() return value could return negative values (#10443) +Fix: [Script] Incorrect value for GOAL_INVALID (#10436) +Fix: [Script] Extend Script::IsValidVehicle to check for primary vehicles (#10386) +Remove: "generation_seed" from config, as it was a write-only value (#11927) +Remove: Debug redirect over network (#11776) +Remove: Officially mark Vista as no longer supported (#11531) +Remove: OS/2 and SunOS ports (#11018, #11210) +Remove: Obsolete NewGRF text unprinting (#10884) +Remove: [Script] CONFIG_RANDOM from AddSetting flags (#11942) + + 13.4 (2023-07-29) ------------------------------------------------------------------------ Fix: Setting tree lines drawn incorrectly for RTL languages (#11070)