diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake index e4096bc9de380..5116a4c9d50d3 100644 --- a/cmake/scripts/SquirrelExport.cmake +++ b/cmake/scripts/SquirrelExport.cmake @@ -71,13 +71,23 @@ reset_reader() file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES) +set(NUM_LINE 0) +macro(doxygen_check) + if(NOT "${DOXYGEN_SKIP}" STREQUAL "") + message(FATAL_ERROR "${SCRIPT_API_FILE}:${NUM_LINE}: a DOXYGEN_API block was not properly closed") + endif() +endmacro() + foreach(LINE IN LISTS SOURCE_LINES) + math(EXPR NUM_LINE "${NUM_LINE} + 1") # Ignore special doxygen blocks if("${LINE}" MATCHES "^#ifndef DOXYGEN_API") + doxygen_check() set(DOXYGEN_SKIP "next") continue() endif() if("${LINE}" MATCHES "^#ifdef DOXYGEN_API") + doxygen_check() set(DOXYGEN_SKIP "true") continue() endif() @@ -86,10 +96,10 @@ foreach(LINE IN LISTS SOURCE_LINES) continue() endif() if("${LINE}" MATCHES "^#else") - if("${DOXYGEN_SKIP}" STREQUAL "next") + if(DOXYGEN_SKIP STREQUAL "next") set(DOXYGEN_SKIP "true") - else() - unset(DOXYGEN_SKIP) + elseif(DOXYGEN_SKIP STREQUAL "true") + set(DOXYGEN_SKIP "false") endif() continue() endif() @@ -668,4 +678,6 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() endforeach() +doxygen_check() + configure_file(${SCRIPT_API_SOURCE_FILE} ${SCRIPT_API_BINARY_FILE}) diff --git a/docs/eints.md b/docs/eints.md index 1fbdbf1d45754..0e49d56a222f6 100644 --- a/docs/eints.md +++ b/docs/eints.md @@ -25,6 +25,10 @@ The translators will decide whether, where and how to apply your suggestion. Sorry, we don't offer this option. +Only when there is a consistency problem that needs addressing, this can be done via a PR. +We are very strict about this, and in general all PRs making translation changes will be closed. +But if it is really needed, and the change is not a revert of any older change, a PR can be created to do mass changes to a translation. + ### I want to change the language definition (plural form, genders, cases) of a translation. Please [create an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose) for this. diff --git a/src/3rdparty/squirrel/include/squirrel.h b/src/3rdparty/squirrel/include/squirrel.h index 5b649bbcdc62c..8979a8d355f43 100644 --- a/src/3rdparty/squirrel/include/squirrel.h +++ b/src/3rdparty/squirrel/include/squirrel.h @@ -238,7 +238,7 @@ void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars); SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask); SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx); void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len); -static inline void sq_pushstring(HSQUIRRELVM v, const std::string &str, SQInteger len = -1) { sq_pushstring(v, str.data(), len == -1 ? str.size() : len); } +inline void sq_pushstring(HSQUIRRELVM v, const std::string &str, SQInteger len = -1) { sq_pushstring(v, str.data(), len == -1 ? str.size() : len); } void sq_pushfloat(HSQUIRRELVM v,SQFloat f); void sq_pushinteger(HSQUIRRELVM v,SQInteger n); void sq_pushbool(HSQUIRRELVM v,SQBool b); @@ -308,7 +308,7 @@ SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror); const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx); const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval); SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err, SQInteger len = -1); -static inline SQRESULT sq_throwerror(HSQUIRRELVM v, const std::string_view err) { return sq_throwerror(v, err.data(), err.size()); } +inline SQRESULT sq_throwerror(HSQUIRRELVM v, const std::string_view err) { return sq_throwerror(v, err.data(), err.size()); } void sq_reseterror(HSQUIRRELVM v); void sq_getlasterror(HSQUIRRELVM v); diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp index 977e9fa25c69e..56f8868c76fbd 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.cpp +++ b/src/3rdparty/squirrel/squirrel/sqvm.cpp @@ -116,6 +116,8 @@ SQVM::SQVM(SQSharedState *ss) _can_suspend = false; _in_stackoverflow = false; _ops_till_suspend = 0; + _ops_till_suspend_error_threshold = INT64_MIN; + _ops_till_suspend_error_label = nullptr; _callsstack = nullptr; _callsstacksize = 0; _alloccallsstacksize = 0; @@ -744,6 +746,10 @@ bool SQVM::Execute(SQObjectPtr &closure, SQInteger target, SQInteger nargs, SQIn { DecreaseOps(1); if (ShouldSuspend()) { _suspended = SQTrue; _suspended_traps = traps; return true; } + if (IsOpsTillSuspendError()) { + Raise_Error(fmt::format("excessive CPU usage in {}", _ops_till_suspend_error_label)); + SQ_THROW(); + } const SQInstruction &_i_ = *ci->_ip++; #ifdef _DEBUG_DUMP diff --git a/src/3rdparty/squirrel/squirrel/sqvm.h b/src/3rdparty/squirrel/squirrel/sqvm.h index 577300a237e46..b083cf3bdd1c1 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.h +++ b/src/3rdparty/squirrel/squirrel/sqvm.h @@ -168,6 +168,8 @@ typedef sqvector CallInfoVec; SQBool _can_suspend; SQInteger _ops_till_suspend; + SQInteger _ops_till_suspend_error_threshold; + const char *_ops_till_suspend_error_label; SQBool _in_stackoverflow; bool ShouldSuspend() @@ -175,6 +177,11 @@ typedef sqvector CallInfoVec; return _can_suspend && _ops_till_suspend <= 0; } + bool IsOpsTillSuspendError() + { + return _ops_till_suspend < _ops_till_suspend_error_threshold; + } + void DecreaseOps(SQInteger amount) { if (_ops_till_suspend - amount < _ops_till_suspend) _ops_till_suspend -= amount; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dc1e696a53785..05689fe5c5472 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -510,6 +510,7 @@ add_files( vehiclelist.cpp vehiclelist.h vehiclelist_cmd.h + vehiclelist_func.h viewport.cpp viewport_cmd.h viewport_func.h diff --git a/src/autoreplace_func.h b/src/autoreplace_func.h index 72b551436f5e5..0943985e7d2aa 100644 --- a/src/autoreplace_func.h +++ b/src/autoreplace_func.h @@ -22,7 +22,7 @@ CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, Group * Remove all engine replacement settings for the given company. * @param c the company. */ -static inline void RemoveAllEngineReplacementForCompany(Company *c) +inline void RemoveAllEngineReplacementForCompany(Company *c) { RemoveAllEngineReplacement(&c->engine_renew_list); } @@ -36,7 +36,7 @@ static inline void RemoveAllEngineReplacementForCompany(Company *c) * @return The engine type to replace with, or INVALID_ENGINE if no * replacement is in the list. */ -static inline EngineID EngineReplacementForCompany(const Company *c, EngineID engine, GroupID group, bool *replace_when_old = nullptr) +inline EngineID EngineReplacementForCompany(const Company *c, EngineID engine, GroupID group, bool *replace_when_old = nullptr) { return EngineReplacement(c->engine_renew_list, engine, group, replace_when_old); } @@ -48,7 +48,7 @@ static inline EngineID EngineReplacementForCompany(const Company *c, EngineID en * @param group The group related to this replacement. * @return true if a replacement was set up, false otherwise. */ -static inline bool EngineHasReplacementForCompany(const Company *c, EngineID engine, GroupID group) +inline bool EngineHasReplacementForCompany(const Company *c, EngineID engine, GroupID group) { return EngineReplacementForCompany(c, engine, group) != INVALID_ENGINE; } @@ -60,7 +60,7 @@ static inline bool EngineHasReplacementForCompany(const Company *c, EngineID eng * @param group The group related to this replacement. * @return True if a replacement when old was set up, false otherwise. */ -static inline bool EngineHasReplacementWhenOldForCompany(const Company *c, EngineID engine, GroupID group) +inline bool EngineHasReplacementWhenOldForCompany(const Company *c, EngineID engine, GroupID group) { bool replace_when_old; EngineReplacement(c->engine_renew_list, engine, group, &replace_when_old); @@ -77,7 +77,7 @@ static inline bool EngineHasReplacementWhenOldForCompany(const Company *c, Engin * @param flags The calling command flags. * @return 0 on success, CMD_ERROR on failure. */ -static inline CommandCost AddEngineReplacementForCompany(Company *c, EngineID old_engine, EngineID new_engine, GroupID group, bool replace_when_old, DoCommandFlag flags) +inline CommandCost AddEngineReplacementForCompany(Company *c, EngineID old_engine, EngineID new_engine, GroupID group, bool replace_when_old, DoCommandFlag flags) { return AddEngineReplacement(&c->engine_renew_list, old_engine, new_engine, group, replace_when_old, flags); } @@ -90,7 +90,7 @@ static inline CommandCost AddEngineReplacementForCompany(Company *c, EngineID ol * @param flags The calling command flags. * @return 0 on success, CMD_ERROR on failure. */ -static inline CommandCost RemoveEngineReplacementForCompany(Company *c, EngineID engine, GroupID group, DoCommandFlag flags) +inline CommandCost RemoveEngineReplacementForCompany(Company *c, EngineID engine, GroupID group, DoCommandFlag flags) { return RemoveEngineReplacement(&c->engine_renew_list, engine, group, flags); } diff --git a/src/autoslope.h b/src/autoslope.h index 83d775b1fb7a4..4e054d85c4b86 100644 --- a/src/autoslope.h +++ b/src/autoslope.h @@ -28,7 +28,7 @@ * @param entrance Entrance edge. * @return true iff terraforming is allowed. */ -static inline bool AutoslopeCheckForEntranceEdge(TileIndex tile, int z_new, Slope tileh_new, DiagDirection entrance) +inline bool AutoslopeCheckForEntranceEdge(TileIndex tile, int z_new, Slope tileh_new, DiagDirection entrance) { if (GetTileMaxZ(tile) != z_new + GetSlopeMaxZ(tileh_new)) return false; return ((tileh_new == SLOPE_FLAT) || CanBuildDepotByTileh(entrance, tileh_new)); @@ -41,7 +41,7 @@ static inline bool AutoslopeCheckForEntranceEdge(TileIndex tile, int z_new, Slop * * @return true iff autoslope is enabled. */ -static inline bool AutoslopeEnabled() +inline bool AutoslopeEnabled() { return (_settings_game.construction.autoslope && (_current_company < MAX_COMPANIES || diff --git a/src/blitter/32bpp_sse_func.hpp b/src/blitter/32bpp_sse_func.hpp index 62cb705fefeca..93ec415dda4ce 100644 --- a/src/blitter/32bpp_sse_func.hpp +++ b/src/blitter/32bpp_sse_func.hpp @@ -13,7 +13,7 @@ #ifdef WITH_SSE GNU_TARGET(SSE_TARGET) -static inline void InsertFirstUint32(const uint32_t value, __m128i &into) +inline void InsertFirstUint32(const uint32_t value, __m128i &into) { #if (SSE_VERSION >= 4) into = _mm_insert_epi32(into, value, 0); @@ -24,7 +24,7 @@ static inline void InsertFirstUint32(const uint32_t value, __m128i &into) } GNU_TARGET(SSE_TARGET) -static inline void InsertSecondUint32(const uint32_t value, __m128i &into) +inline void InsertSecondUint32(const uint32_t value, __m128i &into) { #if (SSE_VERSION >= 4) into = _mm_insert_epi32(into, value, 1); @@ -35,7 +35,7 @@ static inline void InsertSecondUint32(const uint32_t value, __m128i &into) } GNU_TARGET(SSE_TARGET) -static inline void LoadUint64(const uint64_t value, __m128i &into) +inline void LoadUint64(const uint64_t value, __m128i &into) { #ifdef POINTER_IS_64BIT into = _mm_cvtsi64_si128(value); @@ -50,7 +50,7 @@ static inline void LoadUint64(const uint64_t value, __m128i &into) } GNU_TARGET(SSE_TARGET) -static inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) +inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) { #if (SSE_VERSION == 2) from = _mm_and_si128(from, mask); // PAND, wipe high bytes to keep low bytes when packing @@ -61,7 +61,7 @@ static inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) } GNU_TARGET(SSE_TARGET) -static inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) +inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) { #if (SSE_VERSION == 2) __m128i alphaAB = _mm_shufflelo_epi16(from, 0x3F); // PSHUFLW, put alpha1 in front of each rgb1 @@ -73,7 +73,7 @@ static inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) } GNU_TARGET(SSE_TARGET) -static inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &pack_mask, const __m128i &alpha_mask) +inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &pack_mask, const __m128i &alpha_mask) { __m128i srcAB = _mm_unpacklo_epi8(src, _mm_setzero_si128()); // PUNPCKLBW, expand each uint8_t into uint16 __m128i dstAB = _mm_unpacklo_epi8(dst, _mm_setzero_si128()); @@ -97,7 +97,7 @@ static inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128 * rgb = rgb * ((256/4) * 4 - (alpha/4)) / ((256/4) * 4) */ GNU_TARGET(SSE_TARGET) -static inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &tr_nom_base) +inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &tr_nom_base) { __m128i srcAB = _mm_unpacklo_epi8(src, _mm_setzero_si128()); __m128i dstAB = _mm_unpacklo_epi8(dst, _mm_setzero_si128()); @@ -145,7 +145,7 @@ IGNORE_UNINITIALIZED_WARNING_STOP /** ReallyAdjustBrightness() is not called that often. * Inlining this function implies a far jump, which has a huge latency. */ -static inline Colour AdjustBrightneSSE(Colour colour, uint8_t brightness) +inline Colour AdjustBrightneSSE(Colour colour, uint8_t brightness) { /* Shortcut for normal brightness. */ if (brightness == Blitter_32bppBase::DEFAULT_BRIGHTNESS) return colour; @@ -154,7 +154,7 @@ static inline Colour AdjustBrightneSSE(Colour colour, uint8_t brightness) } GNU_TARGET(SSE_TARGET) -static inline __m128i AdjustBrightnessOfTwoPixels([[maybe_unused]] __m128i from, [[maybe_unused]] uint32_t brightness) +inline __m128i AdjustBrightnessOfTwoPixels([[maybe_unused]] __m128i from, [[maybe_unused]] uint32_t brightness) { #if (SSE_VERSION < 3) NOT_REACHED(); diff --git a/src/bridge.h b/src/bridge.h index bec4a522e06d2..b9d08de46f70a 100644 --- a/src/bridge.h +++ b/src/bridge.h @@ -63,7 +63,7 @@ bool HasBridgeFlatRamp(Slope tileh, Axis axis); * @param i The type of bridge to get the specification for. * @return The specification. */ -static inline const BridgeSpec *GetBridgeSpec(BridgeType i) +inline const BridgeSpec *GetBridgeSpec(BridgeType i) { assert(i < lengthof(_bridge)); return &_bridge[i]; diff --git a/src/bridge_map.h b/src/bridge_map.h index 317ebdd6f02f2..ea14d41039cbd 100644 --- a/src/bridge_map.h +++ b/src/bridge_map.h @@ -21,7 +21,7 @@ * @pre IsTileType(t, MP_TUNNELBRIDGE) * @return true if the structure is a bridge one */ -static inline bool IsBridge(Tile t) +inline bool IsBridge(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); return HasBit(t.m5(), 7); @@ -32,7 +32,7 @@ static inline bool IsBridge(Tile t) * @param t The tile to analyze * @return true if a bridge is present */ -static inline bool IsBridgeTile(Tile t) +inline bool IsBridgeTile(Tile t) { return IsTileType(t, MP_TUNNELBRIDGE) && IsBridge(t); } @@ -42,7 +42,7 @@ static inline bool IsBridgeTile(Tile t) * @param t The tile to analyze * @return true if a bridge is detected above */ -static inline bool IsBridgeAbove(Tile t) +inline bool IsBridgeAbove(Tile t) { return GB(t.type(), 2, 2) != 0; } @@ -53,7 +53,7 @@ static inline bool IsBridgeAbove(Tile t) * @pre IsBridgeTile(t) * @return The bridge type */ -static inline BridgeType GetBridgeType(Tile t) +inline BridgeType GetBridgeType(Tile t) { assert(IsBridgeTile(t)); return GB(t.m6(), 2, 4); @@ -65,7 +65,7 @@ static inline BridgeType GetBridgeType(Tile t) * @pre IsBridgeAbove(t) * @return the above mentioned axis */ -static inline Axis GetBridgeAxis(Tile t) +inline Axis GetBridgeAxis(Tile t) { assert(IsBridgeAbove(t)); return (Axis)(GB(t.type(), 2, 2) - 1); @@ -81,7 +81,7 @@ int GetBridgeHeight(TileIndex tile); * @param tile the bridge ramp tile to get the bridge height from * @return the height of the bridge in pixels */ -static inline int GetBridgePixelHeight(TileIndex tile) +inline int GetBridgePixelHeight(TileIndex tile) { return GetBridgeHeight(tile) * TILE_HEIGHT; } @@ -91,7 +91,7 @@ static inline int GetBridgePixelHeight(TileIndex tile) * @param t the tile to remove the bridge from * @param a the axis of the bridge to remove */ -static inline void ClearSingleBridgeMiddle(Tile t, Axis a) +inline void ClearSingleBridgeMiddle(Tile t, Axis a) { ClrBit(t.type(), 2 + a); } @@ -100,7 +100,7 @@ static inline void ClearSingleBridgeMiddle(Tile t, Axis a) * Removes bridges from the given, that is bridges along the X and Y axis. * @param t the tile to remove the bridge from */ -static inline void ClearBridgeMiddle(Tile t) +inline void ClearBridgeMiddle(Tile t) { ClearSingleBridgeMiddle(t, AXIS_X); ClearSingleBridgeMiddle(t, AXIS_Y); @@ -111,7 +111,7 @@ static inline void ClearBridgeMiddle(Tile t) * @param t the tile to add the bridge to * @param a the axis of the bridge to add */ -static inline void SetBridgeMiddle(Tile t, Axis a) +inline void SetBridgeMiddle(Tile t, Axis a) { SetBit(t.type(), 2 + a); } @@ -125,7 +125,7 @@ static inline void SetBridgeMiddle(Tile t, Axis a) * @param tt the transport type of the bridge * @note this function should not be called directly. */ -static inline void MakeBridgeRamp(Tile t, Owner o, BridgeType bridgetype, DiagDirection d, TransportType tt) +inline void MakeBridgeRamp(Tile t, Owner o, BridgeType bridgetype, DiagDirection d, TransportType tt) { SetTileType(t, MP_TUNNELBRIDGE); SetTileOwner(t, o); @@ -150,7 +150,7 @@ static inline void MakeBridgeRamp(Tile t, Owner o, BridgeType bridgetype, DiagDi * @param road_rt the road type of the bridge * @param tram_rt the tram type of the bridge */ -static inline void MakeRoadBridgeRamp(Tile t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadType road_rt, RoadType tram_rt) +inline void MakeRoadBridgeRamp(Tile t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadType road_rt, RoadType tram_rt) { MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD); SetRoadOwner(t, RTT_ROAD, owner_road); @@ -166,7 +166,7 @@ static inline void MakeRoadBridgeRamp(Tile t, Owner o, Owner owner_road, Owner o * @param d the direction this ramp must be facing * @param rt the rail type of the bridge */ -static inline void MakeRailBridgeRamp(Tile t, Owner o, BridgeType bridgetype, DiagDirection d, RailType rt) +inline void MakeRailBridgeRamp(Tile t, Owner o, BridgeType bridgetype, DiagDirection d, RailType rt) { MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL); SetRailType(t, rt); @@ -178,7 +178,7 @@ static inline void MakeRailBridgeRamp(Tile t, Owner o, BridgeType bridgetype, Di * @param o the new owner of the bridge ramp * @param d the direction this ramp must be facing */ -static inline void MakeAqueductBridgeRamp(Tile t, Owner o, DiagDirection d) +inline void MakeAqueductBridgeRamp(Tile t, Owner o, DiagDirection d) { MakeBridgeRamp(t, o, 0, d, TRANSPORT_WATER); } diff --git a/src/cargomonitor.h b/src/cargomonitor.h index ad38a1593fc9b..614f10002ee82 100644 --- a/src/cargomonitor.h +++ b/src/cargomonitor.h @@ -58,7 +58,7 @@ static_assert(MAX_COMPANIES <= (1 << CCB_COMPANY_LENGTH)); * @param ind %Industry providing or accepting the cargo. * @return The encoded cargo/company/industry number. */ -static inline CargoMonitorID EncodeCargoIndustryMonitor(CompanyID company, CargoID ctype, IndustryID ind) +inline CargoMonitorID EncodeCargoIndustryMonitor(CompanyID company, CargoID ctype, IndustryID ind) { assert(ctype < (1 << CCB_CARGO_TYPE_LENGTH)); assert(company < (1 << CCB_COMPANY_LENGTH)); @@ -78,7 +78,7 @@ static inline CargoMonitorID EncodeCargoIndustryMonitor(CompanyID company, Cargo * @param town %Town providing or accepting the cargo. * @return The encoded cargo/company/town number. */ -static inline CargoMonitorID EncodeCargoTownMonitor(CompanyID company, CargoID ctype, TownID town) +inline CargoMonitorID EncodeCargoTownMonitor(CompanyID company, CargoID ctype, TownID town) { assert(ctype < (1 << CCB_CARGO_TYPE_LENGTH)); assert(company < (1 << CCB_COMPANY_LENGTH)); @@ -95,7 +95,7 @@ static inline CargoMonitorID EncodeCargoTownMonitor(CompanyID company, CargoID c * @param num Cargo monitoring number to decode. * @return The extracted company id. */ -static inline CompanyID DecodeMonitorCompany(CargoMonitorID num) +inline CompanyID DecodeMonitorCompany(CargoMonitorID num) { return static_cast(GB(num, CCB_COMPANY_START, CCB_COMPANY_LENGTH)); } @@ -105,7 +105,7 @@ static inline CompanyID DecodeMonitorCompany(CargoMonitorID num) * @param num Cargo monitoring number to decode. * @return The extracted cargo type. */ -static inline CargoID DecodeMonitorCargoType(CargoMonitorID num) +inline CargoID DecodeMonitorCargoType(CargoMonitorID num) { return GB(num, CCB_CARGO_TYPE_START, CCB_CARGO_TYPE_LENGTH); } @@ -115,7 +115,7 @@ static inline CargoID DecodeMonitorCargoType(CargoMonitorID num) * @param num Cargo monitoring number to decode. * @return true if monitoring an industry, false if monitoring a town. */ -static inline bool MonitorMonitorsIndustry(CargoMonitorID num) +inline bool MonitorMonitorsIndustry(CargoMonitorID num) { return HasBit(num, CCB_IS_INDUSTRY_BIT); } @@ -125,7 +125,7 @@ static inline bool MonitorMonitorsIndustry(CargoMonitorID num) * @param num Cargo monitoring number to decode. * @return The extracted industry id, or #INVALID_INDUSTRY if the number does not monitor an industry. */ -static inline IndustryID DecodeMonitorIndustry(CargoMonitorID num) +inline IndustryID DecodeMonitorIndustry(CargoMonitorID num) { if (!MonitorMonitorsIndustry(num)) return INVALID_INDUSTRY; return GB(num, CCB_TOWN_IND_NUMBER_START, CCB_TOWN_IND_NUMBER_LENGTH); @@ -136,7 +136,7 @@ static inline IndustryID DecodeMonitorIndustry(CargoMonitorID num) * @param num Cargo monitoring number to decode. * @return The extracted town id, or #INVALID_TOWN if the number does not monitor a town. */ -static inline TownID DecodeMonitorTown(CargoMonitorID num) +inline TownID DecodeMonitorTown(CargoMonitorID num) { if (MonitorMonitorsIndustry(num)) return INVALID_TOWN; return GB(num, CCB_TOWN_IND_NUMBER_START, CCB_TOWN_IND_NUMBER_LENGTH); diff --git a/src/cargotype.h b/src/cargotype.h index 0e786011a2ca3..bc8f6f4043441 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -198,7 +198,7 @@ extern span _sorted_standard_cargo_specs; * @param cc Cargo class. * @return The type fits in the class. */ -static inline bool IsCargoInClass(CargoID c, CargoClass cc) +inline bool IsCargoInClass(CargoID c, CargoClass cc) { return (CargoSpec::Get(c)->classes & cc) != 0; } diff --git a/src/clear_map.h b/src/clear_map.h index cf2fb9ad6075c..64eb640d12bce 100644 --- a/src/clear_map.h +++ b/src/clear_map.h @@ -32,7 +32,7 @@ enum ClearGround { * @pre IsTileType(t, MP_CLEAR) * @return whether the tile is covered with snow. */ -static inline bool IsSnowTile(Tile t) +inline bool IsSnowTile(Tile t) { assert(IsTileType(t, MP_CLEAR)); return HasBit(t.m3(), 4); @@ -44,7 +44,7 @@ static inline bool IsSnowTile(Tile t) * @pre IsTileType(t, MP_CLEAR) * @return the ground type */ -static inline ClearGround GetRawClearGround(Tile t) +inline ClearGround GetRawClearGround(Tile t) { assert(IsTileType(t, MP_CLEAR)); return (ClearGround)GB(t.m5(), 2, 3); @@ -56,7 +56,7 @@ static inline ClearGround GetRawClearGround(Tile t) * @pre IsTileType(t, MP_CLEAR) * @return the ground type */ -static inline ClearGround GetClearGround(Tile t) +inline ClearGround GetClearGround(Tile t) { if (IsSnowTile(t)) return CLEAR_SNOW; return GetRawClearGround(t); @@ -68,7 +68,7 @@ static inline ClearGround GetClearGround(Tile t) * @param ct the ground type * @pre IsTileType(t, MP_CLEAR) */ -static inline bool IsClearGround(Tile t, ClearGround ct) +inline bool IsClearGround(Tile t, ClearGround ct) { return GetClearGround(t) == ct; } @@ -80,7 +80,7 @@ static inline bool IsClearGround(Tile t, ClearGround ct) * @pre IsTileType(t, MP_CLEAR) * @return the density */ -static inline uint GetClearDensity(Tile t) +inline uint GetClearDensity(Tile t) { assert(IsTileType(t, MP_CLEAR)); return GB(t.m5(), 0, 2); @@ -92,7 +92,7 @@ static inline uint GetClearDensity(Tile t) * @param d the amount to increment the density with * @pre IsTileType(t, MP_CLEAR) */ -static inline void AddClearDensity(Tile t, int d) +inline void AddClearDensity(Tile t, int d) { assert(IsTileType(t, MP_CLEAR)); // XXX incomplete t.m5() += d; @@ -104,7 +104,7 @@ static inline void AddClearDensity(Tile t, int d) * @param d the new density * @pre IsTileType(t, MP_CLEAR) */ -static inline void SetClearDensity(Tile t, uint d) +inline void SetClearDensity(Tile t, uint d) { assert(IsTileType(t, MP_CLEAR)); SB(t.m5(), 0, 2, d); @@ -117,7 +117,7 @@ static inline void SetClearDensity(Tile t, uint d) * @pre IsTileType(t, MP_CLEAR) * @return the value of the counter */ -static inline uint GetClearCounter(Tile t) +inline uint GetClearCounter(Tile t) { assert(IsTileType(t, MP_CLEAR)); return GB(t.m5(), 5, 3); @@ -129,7 +129,7 @@ static inline uint GetClearCounter(Tile t) * @param c the amount to increment the counter with * @pre IsTileType(t, MP_CLEAR) */ -static inline void AddClearCounter(Tile t, int c) +inline void AddClearCounter(Tile t, int c) { assert(IsTileType(t, MP_CLEAR)); // XXX incomplete t.m5() += c << 5; @@ -141,7 +141,7 @@ static inline void AddClearCounter(Tile t, int c) * @param c the amount to set the counter to * @pre IsTileType(t, MP_CLEAR) */ -static inline void SetClearCounter(Tile t, uint c) +inline void SetClearCounter(Tile t, uint c) { assert(IsTileType(t, MP_CLEAR)); // XXX incomplete SB(t.m5(), 5, 3, c); @@ -155,7 +155,7 @@ static inline void SetClearCounter(Tile t, uint c) * @param density the density of the ground tile * @pre IsTileType(t, MP_CLEAR) */ -static inline void SetClearGroundDensity(Tile t, ClearGround type, uint density) +inline void SetClearGroundDensity(Tile t, ClearGround type, uint density) { assert(IsTileType(t, MP_CLEAR)); // XXX incomplete t.m5() = 0 << 5 | type << 2 | density; @@ -168,7 +168,7 @@ static inline void SetClearGroundDensity(Tile t, ClearGround type, uint density) * @pre GetClearGround(t) == CLEAR_FIELDS * @return the field type */ -static inline uint GetFieldType(Tile t) +inline uint GetFieldType(Tile t) { assert(GetClearGround(t) == CLEAR_FIELDS); return GB(t.m3(), 0, 4); @@ -180,7 +180,7 @@ static inline uint GetFieldType(Tile t) * @param f the field type * @pre GetClearGround(t) == CLEAR_FIELDS */ -static inline void SetFieldType(Tile t, uint f) +inline void SetFieldType(Tile t, uint f) { assert(GetClearGround(t) == CLEAR_FIELDS); // XXX incomplete SB(t.m3(), 0, 4, f); @@ -192,7 +192,7 @@ static inline void SetFieldType(Tile t, uint f) * @pre GetClearGround(t) == CLEAR_FIELDS * @return the industry that made the field */ -static inline IndustryID GetIndustryIndexOfField(Tile t) +inline IndustryID GetIndustryIndexOfField(Tile t) { assert(GetClearGround(t) == CLEAR_FIELDS); return(IndustryID) t.m2(); @@ -204,7 +204,7 @@ static inline IndustryID GetIndustryIndexOfField(Tile t) * @param i the industry that made the field * @pre GetClearGround(t) == CLEAR_FIELDS */ -static inline void SetIndustryIndexOfField(Tile t, IndustryID i) +inline void SetIndustryIndexOfField(Tile t, IndustryID i) { assert(GetClearGround(t) == CLEAR_FIELDS); t.m2() = i; @@ -218,7 +218,7 @@ static inline void SetIndustryIndexOfField(Tile t, IndustryID i) * @pre IsClearGround(t, CLEAR_FIELDS) * @return 0 if there is no fence, otherwise the fence type */ -static inline uint GetFence(Tile t, DiagDirection side) +inline uint GetFence(Tile t, DiagDirection side) { assert(IsClearGround(t, CLEAR_FIELDS)); switch (side) { @@ -237,7 +237,7 @@ static inline uint GetFence(Tile t, DiagDirection side) * @param h 0 if there is no fence, otherwise the fence type * @pre IsClearGround(t, CLEAR_FIELDS) */ -static inline void SetFence(Tile t, DiagDirection side, uint h) +inline void SetFence(Tile t, DiagDirection side, uint h) { assert(IsClearGround(t, CLEAR_FIELDS)); switch (side) { @@ -256,7 +256,7 @@ static inline void SetFence(Tile t, DiagDirection side, uint h) * @param g the type of ground * @param density the density of the grass/snow/desert etc */ -static inline void MakeClear(Tile t, ClearGround g, uint density) +inline void MakeClear(Tile t, ClearGround g, uint density) { SetTileType(t, MP_CLEAR); t.m1() = 0; @@ -277,7 +277,7 @@ static inline void MakeClear(Tile t, ClearGround g, uint density) * @param field_type the 'growth' level of the field * @param industry the industry this tile belongs to */ -static inline void MakeField(Tile t, uint field_type, IndustryID industry) +inline void MakeField(Tile t, uint field_type, IndustryID industry) { SetTileType(t, MP_CLEAR); t.m1() = 0; @@ -297,7 +297,7 @@ static inline void MakeField(Tile t, uint field_type, IndustryID industry) * @param density The density of snowiness. * @pre GetClearGround(t) != CLEAR_SNOW */ -static inline void MakeSnow(Tile t, uint density = 0) +inline void MakeSnow(Tile t, uint density = 0) { assert(GetClearGround(t) != CLEAR_SNOW); SetBit(t.m3(), 4); @@ -313,7 +313,7 @@ static inline void MakeSnow(Tile t, uint density = 0) * @param t the tile to clear of snow * @pre GetClearGround(t) == CLEAR_SNOW */ -static inline void ClearSnow(Tile t) +inline void ClearSnow(Tile t) { assert(GetClearGround(t) == CLEAR_SNOW); ClrBit(t.m3(), 4); diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 5413ba437c57d..7d14fafbd1d13 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -374,6 +374,7 @@ verify_name:; if (cc->name_1 == str && cc->name_2 == strp) goto bad_town_name; } + SetDParam(0, strp); name = GetString(str); if (Utf8StringLength(name) >= MAX_LENGTH_COMPANY_NAME_CHARS) goto bad_town_name; diff --git a/src/company_func.h b/src/company_func.h index 3f43e7530e5bd..47adc24870754 100644 --- a/src/company_func.h +++ b/src/company_func.h @@ -27,8 +27,8 @@ void UpdateLandscapingLimits(); void UpdateCompanyLiveries(Company *c); bool CheckCompanyHasMoney(CommandCost &cost); -void SubtractMoneyFromCompany(const CommandCost& cost); -void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost& cost); +void SubtractMoneyFromCompany(const CommandCost &cost); +void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cost); CommandCost CheckOwnership(Owner owner, TileIndex tile = 0U); CommandCost CheckTileOwnership(TileIndex tile); @@ -42,7 +42,7 @@ extern CompanyManagerFace _company_manager_face; * Is the current company the local company? * @return \c true of the current company is the local company, \c false otherwise. */ -static inline bool IsLocalCompany() +inline bool IsLocalCompany() { return _local_company == _current_company; } @@ -52,7 +52,7 @@ static inline bool IsLocalCompany() * @param company Company where interaction is needed with. * @return Gives \c true if the user can answer questions interactively as representative of \a company, else \c false */ -static inline bool IsInteractiveCompany(CompanyID company) +inline bool IsInteractiveCompany(CompanyID company) { return company == _local_company; } diff --git a/src/company_manager_face.h b/src/company_manager_face.h index 0cd4805974122..0d8cc68da655f 100644 --- a/src/company_manager_face.h +++ b/src/company_manager_face.h @@ -93,7 +93,7 @@ static_assert(lengthof(_cmf_info) == CMFV_END); * @pre _cmf_info[cmfv].valid_values[ge] != 0 * @return the requested bits */ -static inline uint GetCompanyManagerFaceBits(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, [[maybe_unused]] GenderEthnicity ge) +inline uint GetCompanyManagerFaceBits(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, [[maybe_unused]] GenderEthnicity ge) { assert(_cmf_info[cmfv].valid_values[ge] != 0); @@ -108,7 +108,7 @@ static inline uint GetCompanyManagerFaceBits(CompanyManagerFace cmf, CompanyMana * @param val the new value * @pre val < _cmf_info[cmfv].valid_values[ge] */ -static inline void SetCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, [[maybe_unused]] GenderEthnicity ge, uint val) +inline void SetCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, [[maybe_unused]] GenderEthnicity ge, uint val) { assert(val < _cmf_info[cmfv].valid_values[ge]); @@ -127,7 +127,7 @@ static inline void SetCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyMan * * @pre 0 <= val < _cmf_info[cmfv].valid_values[ge] */ -static inline void IncreaseCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge, int8_t amount) +inline void IncreaseCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge, int8_t amount) { int8_t val = GetCompanyManagerFaceBits(cmf, cmfv, ge) + amount; // the new value for the cmfv @@ -148,7 +148,7 @@ static inline void IncreaseCompanyManagerFaceBits(CompanyManagerFace &cmf, Compa * @param ge the gender and ethnicity of the face * @return true if and only if the bits are valid */ -static inline bool AreCompanyManagerFaceBitsValid(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge) +inline bool AreCompanyManagerFaceBitsValid(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge) { return GB(cmf, _cmf_info[cmfv].offset, _cmf_info[cmfv].length) < _cmf_info[cmfv].valid_values[ge]; } @@ -161,7 +161,7 @@ static inline bool AreCompanyManagerFaceBitsValid(CompanyManagerFace cmf, Compan * @pre val < (1U << _cmf_info[cmfv].length), i.e. val has a value of 0..2^(bits used for this variable)-1 * @return the scaled value */ -static inline uint ScaleCompanyManagerFaceValue(CompanyManagerFaceVariable cmfv, GenderEthnicity ge, uint val) +inline uint ScaleCompanyManagerFaceValue(CompanyManagerFaceVariable cmfv, GenderEthnicity ge, uint val) { assert(val < (1U << _cmf_info[cmfv].length)); @@ -173,7 +173,7 @@ static inline uint ScaleCompanyManagerFaceValue(CompanyManagerFaceVariable cmfv, * * @param cmf the company manager's face to write the bits to */ -static inline void ScaleAllCompanyManagerFaceBits(CompanyManagerFace &cmf) +inline void ScaleAllCompanyManagerFaceBits(CompanyManagerFace &cmf) { IncreaseCompanyManagerFaceBits(cmf, CMFV_ETHNICITY, GE_WM, 0); // scales the ethnicity @@ -203,7 +203,7 @@ static inline void ScaleAllCompanyManagerFaceBits(CompanyManagerFace &cmf) * * @pre scale 'ge' to a valid gender/ethnicity combination */ -static inline void RandomCompanyManagerFaceBits(CompanyManagerFace &cmf, GenderEthnicity ge, bool adv, Randomizer &randomizer) +inline void RandomCompanyManagerFaceBits(CompanyManagerFace &cmf, GenderEthnicity ge, bool adv, Randomizer &randomizer) { cmf = randomizer.Next(); // random all company manager's face bits @@ -229,7 +229,7 @@ static inline void RandomCompanyManagerFaceBits(CompanyManagerFace &cmf, GenderE * @pre _cmf_info[cmfv].valid_values[ge] != 0 * @return sprite to draw */ -static inline SpriteID GetCompanyManagerFaceSprite(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge) +inline SpriteID GetCompanyManagerFaceSprite(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge) { assert(_cmf_info[cmfv].valid_values[ge] != 0); diff --git a/src/console_func.h b/src/console_func.h index 09f1e19ebb0c2..d0fc3b3ec776e 100644 --- a/src/console_func.h +++ b/src/console_func.h @@ -39,7 +39,7 @@ void IConsolePrint(TextColour colour_code, const std::string &string); * @tparam Args The types of the other arguments. */ template -static inline void IConsolePrint(TextColour colour_code, const T &format, A first_arg, Args&&... other_args) +inline void IConsolePrint(TextColour colour_code, const T &format, A first_arg, Args&&... other_args) { /* The separate first_arg argument is added to aid overloading. * Otherwise the calls that do no need formatting will still use this function. */ diff --git a/src/core/alloc_func.hpp b/src/core/alloc_func.hpp index dc3ed483eb058..0e3920a18461f 100644 --- a/src/core/alloc_func.hpp +++ b/src/core/alloc_func.hpp @@ -26,7 +26,7 @@ void NORETURN ReallocError(size_t size); * @param element_size Size of the structure to allocate. * @param num_elements Number of elements to allocate. */ -static inline void CheckAllocationConstraints(size_t element_size, size_t num_elements) +inline void CheckAllocationConstraints(size_t element_size, size_t num_elements) { if (num_elements > SIZE_MAX / element_size) MallocError(SIZE_MAX); } @@ -38,7 +38,7 @@ static inline void CheckAllocationConstraints(size_t element_size, size_t num_el * @param num_elements Number of elements to allocate. */ template -static inline void CheckAllocationConstraints(size_t num_elements) +inline void CheckAllocationConstraints(size_t num_elements) { CheckAllocationConstraints(sizeof(T), num_elements); } @@ -54,7 +54,7 @@ static inline void CheckAllocationConstraints(size_t num_elements) * @return nullptr when num_elements == 0, non-nullptr otherwise. */ template -static inline T *MallocT(size_t num_elements) +inline T *MallocT(size_t num_elements) { /* * MorphOS cannot handle 0 elements allocations, or rather that always @@ -82,7 +82,7 @@ static inline T *MallocT(size_t num_elements) * @return nullptr when num_elements == 0, non-nullptr otherwise. */ template -static inline T *CallocT(size_t num_elements) +inline T *CallocT(size_t num_elements) { /* * MorphOS cannot handle 0 elements allocations, or rather that always @@ -108,7 +108,7 @@ static inline T *CallocT(size_t num_elements) * @return nullptr when num_elements == 0, non-nullptr otherwise. */ template -static inline T *ReallocT(T *t_ptr, size_t num_elements) +inline T *ReallocT(T *t_ptr, size_t num_elements) { /* * MorphOS cannot handle 0 elements allocations, or rather that always diff --git a/src/core/bitmath_func.hpp b/src/core/bitmath_func.hpp index 1e55c1b88ebd9..51b7e139673d7 100644 --- a/src/core/bitmath_func.hpp +++ b/src/core/bitmath_func.hpp @@ -55,7 +55,7 @@ debug_inline constexpr static uint GB(const T x, const uint8_t s, const uint8_t * @return The new value of \a x */ template -static inline T SB(T &x, const uint8_t s, const uint8_t n, const U d) +inline T SB(T &x, const uint8_t s, const uint8_t n, const U d) { x &= (T)(~((((T)1U << n) - 1) << s)); x |= (T)(d << s); @@ -80,7 +80,7 @@ static inline T SB(T &x, const uint8_t s, const uint8_t n, const U d) * @return The new value of \a x */ template -static inline T AB(T &x, const uint8_t s, const uint8_t n, const U i) +inline T AB(T &x, const uint8_t s, const uint8_t n, const U i) { const T mask = ((((T)1U << n) - 1) << s); x = (T)((x & ~mask) | ((x + (i << s)) & mask)); @@ -118,7 +118,7 @@ debug_inline static bool HasBit(const T x, const uint8_t y) * @return The new value of the old value with the bit set */ template -static inline T SetBit(T &x, const uint8_t y) +inline T SetBit(T &x, const uint8_t y) { return x = (T)(x | ((T)1U << y)); } @@ -148,7 +148,7 @@ static inline T SetBit(T &x, const uint8_t y) * @return The new value of the old value with the bit cleared */ template -static inline T ClrBit(T &x, const uint8_t y) +inline T ClrBit(T &x, const uint8_t y) { return x = (T)(x & ~((T)1U << y)); } @@ -178,7 +178,7 @@ static inline T ClrBit(T &x, const uint8_t y) * @return The new value of the old value with the bit toggled */ template -static inline T ToggleBit(T &x, const uint8_t y) +inline T ToggleBit(T &x, const uint8_t y) { return x = (T)(x ^ ((T)1U << y)); } @@ -213,7 +213,7 @@ extern const uint8_t _ffb_64[64]; * @return The position of the first bit which is set * @see FIND_FIRST_BIT */ -static inline uint8_t FindFirstBit2x64(const int value) +inline uint8_t FindFirstBit2x64(const int value) { if ((value & 0xFF) == 0) { return FIND_FIRST_BIT((value >> 8) & 0x3F) + 8; @@ -236,7 +236,7 @@ uint8_t FindLastBit(uint64_t x); * @return The new value with the first bit cleared */ template -static inline T KillFirstBit(T value) +inline T KillFirstBit(T value) { return value &= (T)(value - 1); } @@ -248,7 +248,7 @@ static inline T KillFirstBit(T value) * @return the number of bits. */ template -static inline uint CountBits(T value) +inline uint CountBits(T value) { uint num; @@ -271,7 +271,7 @@ static inline uint CountBits(T value) * @return does \a value have exactly 1 bit set? */ template -static inline bool HasExactlyOneBit(T value) +inline bool HasExactlyOneBit(T value) { return value != 0 && (value & (value - 1)) == 0; } @@ -283,7 +283,7 @@ static inline bool HasExactlyOneBit(T value) * @return does \a value have at most 1 bit set? */ template -static inline bool HasAtMostOneBit(T value) +inline bool HasAtMostOneBit(T value) { return (value & (value - 1)) == 0; } @@ -298,7 +298,7 @@ static inline bool HasAtMostOneBit(T value) * @return A bit rotated number */ template -static inline T ROL(const T x, const uint8_t n) +inline T ROL(const T x, const uint8_t n) { if (n == 0) return x; return (T)(x << n | x >> (sizeof(x) * 8 - n)); @@ -314,7 +314,7 @@ static inline T ROL(const T x, const uint8_t n) * @return A bit rotated number */ template -static inline T ROR(const T x, const uint8_t n) +inline T ROR(const T x, const uint8_t n) { if (n == 0) return x; return (T)(x >> n | x << (sizeof(x) * 8 - n)); diff --git a/src/core/endian_func.hpp b/src/core/endian_func.hpp index 21d992b556708..1c8b8083da5bc 100644 --- a/src/core/endian_func.hpp +++ b/src/core/endian_func.hpp @@ -38,12 +38,12 @@ # define TO_LE32X(x) (x) #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ -static inline uint16_t ReadLE16Aligned(const void *x) +inline uint16_t ReadLE16Aligned(const void *x) { return FROM_LE16(*(const uint16_t*)x); } -static inline uint16_t ReadLE16Unaligned(const void *x) +inline uint16_t ReadLE16Unaligned(const void *x) { #if OTTD_ALIGNMENT == 1 return ((const byte*)x)[0] | ((const byte*)x)[1] << 8; diff --git a/src/core/geometry_func.hpp b/src/core/geometry_func.hpp index 41df359454275..175a8a2ba7120 100644 --- a/src/core/geometry_func.hpp +++ b/src/core/geometry_func.hpp @@ -19,7 +19,7 @@ Dimension maxdim(const Dimension &d1, const Dimension &d2); * @param r Rectangle to check. * @return True if and only if the rectangle doesn't define space. */ -static inline bool IsEmptyRect(const Rect &r) +inline bool IsEmptyRect(const Rect &r) { return (r.left | r.top | r.right | r.bottom) == 0; } diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index 6c5aeb39b0751..6cf056701514a 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -20,7 +20,7 @@ * @return The unsigned value */ template -static inline T abs(const T a) +inline T abs(const T a) { return (a < (T)0) ? -a : a; } @@ -34,7 +34,7 @@ static inline T abs(const T a) * @return The smallest multiple of n equal or greater than x */ template -static inline T Align(const T x, uint n) +inline T Align(const T x, uint n) { assert((n & (n - 1)) == 0 && n != 0); n--; @@ -52,7 +52,7 @@ static inline T Align(const T x, uint n) * @see Align() */ template -static inline T *AlignPtr(T *x, uint n) +inline T *AlignPtr(T *x, uint n) { static_assert(sizeof(size_t) == sizeof(void *)); return reinterpret_cast(Align((size_t)x, n)); @@ -76,7 +76,7 @@ static inline T *AlignPtr(T *x, uint n) * @see Clamp(int, int, int) */ template -static inline T Clamp(const T a, const T min, const T max) +inline T Clamp(const T a, const T min, const T max) { assert(min <= max); if (a <= min) return min; @@ -99,7 +99,7 @@ static inline T Clamp(const T a, const T min, const T max) * @returns A value between min and max which is closest to a. */ template -static inline T SoftClamp(const T a, const T min, const T max) +inline T SoftClamp(const T a, const T min, const T max) { if (min > max) { using U = std::make_unsigned_t; @@ -126,7 +126,7 @@ static inline T SoftClamp(const T a, const T min, const T max) * @returns A value between min and max which is closest to a. * @see ClampU(uint, uint, uint) */ -static inline int Clamp(const int a, const int min, const int max) +inline int Clamp(const int a, const int min, const int max) { return Clamp(a, min, max); } @@ -147,7 +147,7 @@ static inline int Clamp(const int a, const int min, const int max) * @returns A value between min and max which is closest to a. * @see Clamp(int, int, int) */ -static inline uint ClampU(const uint a, const uint min, const uint max) +inline uint ClampU(const uint a, const uint min, const uint max) { return Clamp(a, min, max); } @@ -231,7 +231,7 @@ constexpr To ClampTo(From value) * @return The absolute difference between the given scalars */ template -static inline T Delta(const T a, const T b) +inline T Delta(const T a, const T b) { return (a < b) ? b - a : a - b; } @@ -249,7 +249,7 @@ static inline T Delta(const T a, const T b) * @return True if the value is in the interval, false else. */ template -static inline bool IsInsideBS(const T x, const size_t base, const size_t size) +inline bool IsInsideBS(const T x, const size_t base, const size_t size) { return (size_t)(x - base) < size; } @@ -280,7 +280,7 @@ static constexpr inline bool IsInsideMM(const T x, const size_t min, const size_ * @param b variable to swap with a */ template -static inline void Swap(T &a, T &b) +inline void Swap(T &a, T &b) { T t = a; a = b; @@ -292,7 +292,7 @@ static inline void Swap(T &a, T &b) * @param i value to convert, range 0..255 * @return value in range 0..100 */ -static inline uint ToPercent8(uint i) +inline uint ToPercent8(uint i) { assert(i < 256); return i * 101 >> 8; @@ -303,7 +303,7 @@ static inline uint ToPercent8(uint i) * @param i value to convert, range 0..65535 * @return value in range 0..100 */ -static inline uint ToPercent16(uint i) +inline uint ToPercent16(uint i) { assert(i < 65536); return i * 101 >> 16; @@ -319,7 +319,7 @@ int DivideApprox(int a, int b); * @param b Denominator * @return Quotient, rounded up */ -static inline uint CeilDiv(uint a, uint b) +inline uint CeilDiv(uint a, uint b) { return (a + b - 1) / b; } @@ -330,7 +330,7 @@ static inline uint CeilDiv(uint a, uint b) * @param b Denominator * @return a rounded up to the nearest multiple of b. */ -static inline uint Ceil(uint a, uint b) +inline uint Ceil(uint a, uint b) { return CeilDiv(a, b) * b; } @@ -341,7 +341,7 @@ static inline uint Ceil(uint a, uint b) * @param b Denominator * @return Quotient, rounded to nearest */ -static inline int RoundDivSU(int a, uint b) +inline int RoundDivSU(int a, uint b) { if (a > 0) { /* 0.5 is rounded to 1 */ @@ -358,7 +358,7 @@ static inline int RoundDivSU(int a, uint b) * @param b Denominator * @return Quotient, rounded away from zero */ -static inline int DivAwayFromZero(int a, uint b) +inline int DivAwayFromZero(int a, uint b) { const int _b = static_cast(b); if (a > 0) { diff --git a/src/core/mem_func.hpp b/src/core/mem_func.hpp index 81bf903feadf1..26bd7c6b7cd00 100644 --- a/src/core/mem_func.hpp +++ b/src/core/mem_func.hpp @@ -20,7 +20,7 @@ * @param num number of items to be copied. (!not number of bytes!) */ template -static inline void MemCpyT(T *destination, const T *source, size_t num = 1) +inline void MemCpyT(T *destination, const T *source, size_t num = 1) { memcpy(destination, source, num * sizeof(T)); } @@ -33,7 +33,7 @@ static inline void MemCpyT(T *destination, const T *source, size_t num = 1) * @param num number of items to be copied. (!not number of bytes!) */ template -static inline void MemMoveT(T *destination, const T *source, size_t num = 1) +inline void MemMoveT(T *destination, const T *source, size_t num = 1) { memmove(destination, source, num * sizeof(T)); } @@ -46,7 +46,7 @@ static inline void MemMoveT(T *destination, const T *source, size_t num = 1) * @param num number of items to be set (!not number of bytes!) */ template -static inline void MemSetT(T *ptr, byte value, size_t num = 1) +inline void MemSetT(T *ptr, byte value, size_t num = 1) { memset(ptr, value, num * sizeof(T)); } @@ -60,7 +60,7 @@ static inline void MemSetT(T *ptr, byte value, size_t num = 1) * @return an int value indicating the relationship between the content of the two buffers */ template -static inline int MemCmpT(const T *ptr1, const T *ptr2, size_t num = 1) +inline int MemCmpT(const T *ptr1, const T *ptr2, size_t num = 1) { return memcmp(ptr1, ptr2, num * sizeof(T)); } diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index ca7b7ad5e0613..8e409731920c7 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -37,7 +37,7 @@ class OverflowSafeInt public: constexpr OverflowSafeInt() : m_value(0) { } - constexpr OverflowSafeInt(const OverflowSafeInt& other) : m_value(other.m_value) { } + constexpr OverflowSafeInt(const OverflowSafeInt &other) : m_value(other.m_value) { } constexpr OverflowSafeInt(const T int_) : m_value(int_) { } inline constexpr OverflowSafeInt& operator = (const OverflowSafeInt& other) { this->m_value = other.m_value; return *this; } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 32eb364f2cbf8..00547cf7c1b5a 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -142,8 +142,8 @@ struct Pool : PoolBase { template struct PoolIterator { typedef T value_type; - typedef T* pointer; - typedef T& reference; + typedef T *pointer; + typedef T &reference; typedef size_t difference_type; typedef std::forward_iterator_tag iterator_category; @@ -186,8 +186,8 @@ struct Pool : PoolBase { template struct PoolIteratorFiltered { typedef T value_type; - typedef T* pointer; - typedef T& reference; + typedef T *pointer; + typedef T &reference; typedef size_t difference_type; typedef std::forward_iterator_tag iterator_category; diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp index 3e617387372ce..65f13f3bc159b 100644 --- a/src/core/random_func.hpp +++ b/src/core/random_func.hpp @@ -39,7 +39,7 @@ struct SavedRandomSeeds { * Saves the current seeds * @param storage Storage for saving */ -static inline void SaveRandomSeeds(SavedRandomSeeds *storage) +inline void SaveRandomSeeds(SavedRandomSeeds *storage) { storage->random = _random; storage->interactive_random = _interactive_random; @@ -49,7 +49,7 @@ static inline void SaveRandomSeeds(SavedRandomSeeds *storage) * Restores previously saved seeds * @param storage Storage where SaveRandomSeeds() stored th seeds */ -static inline void RestoreRandomSeeds(const SavedRandomSeeds &storage) +inline void RestoreRandomSeeds(const SavedRandomSeeds &storage) { _random = storage.random; _interactive_random = storage.interactive_random; @@ -84,12 +84,12 @@ void SetRandomSeed(uint32_t seed); } #endif -static inline uint32_t InteractiveRandom() +inline uint32_t InteractiveRandom() { return _interactive_random.Next(); } -static inline uint32_t InteractiveRandomRange(uint32_t limit) +inline uint32_t InteractiveRandomRange(uint32_t limit) { return _interactive_random.Next(limit); } @@ -109,7 +109,7 @@ static inline uint32_t InteractiveRandomRange(uint32_t limit) * @param r The given randomize-number * @return True if the probability given by r is less or equal to (a/b) */ -static inline bool Chance16I(const uint a, const uint b, const uint32_t r) +inline bool Chance16I(const uint a, const uint b, const uint32_t r) { assert(b != 0); return (((uint16_t)r * b + b / 2) >> 16) < a; @@ -128,7 +128,7 @@ static inline bool Chance16I(const uint a, const uint b, const uint32_t r) #ifdef RANDOM_DEBUG # define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__)) #else -static inline bool Chance16(const uint a, const uint b) +inline bool Chance16(const uint a, const uint b) { return Chance16I(a, b, Random()); } @@ -152,7 +152,7 @@ static inline bool Chance16(const uint a, const uint b) #ifdef RANDOM_DEBUG # define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r)) #else -static inline bool Chance16R(const uint a, const uint b, uint32_t &r) +inline bool Chance16R(const uint a, const uint b, uint32_t &r) { r = Random(); return Chance16I(a, b, r); diff --git a/src/core/span_type.hpp b/src/core/span_type.hpp index 626a4b7b78137..9a39bdb529e3a 100644 --- a/src/core/span_type.hpp +++ b/src/core/span_type.hpp @@ -39,7 +39,7 @@ template struct is_compatible_container : std::bool_constant < has_size_and_data::value - && is_compatible_element::value + && is_compatible_element::value >{}; /** diff --git a/src/depot_func.h b/src/depot_func.h index bf0bdb3d93388..208e02110c9f3 100644 --- a/src/depot_func.h +++ b/src/depot_func.h @@ -24,7 +24,7 @@ void DeleteDepotHighlightOfVehicle(const Vehicle *v); * @param tileh The slope of the tile in question * @return true if the construction is possible */ -static inline bool CanBuildDepotByTileh(DiagDirection direction, Slope tileh) +inline bool CanBuildDepotByTileh(DiagDirection direction, Slope tileh) { assert(tileh != SLOPE_FLAT); Slope entrance_corners = InclinedSlope(direction); diff --git a/src/depot_map.h b/src/depot_map.h index 939569bd8546f..87bd91543145c 100644 --- a/src/depot_map.h +++ b/src/depot_map.h @@ -15,7 +15,7 @@ /** * Check if a tile is a depot and it is a depot of the given type. */ -static inline bool IsDepotTypeTile(Tile tile, TransportType type) +inline bool IsDepotTypeTile(Tile tile, TransportType type) { switch (type) { default: NOT_REACHED(); @@ -38,7 +38,7 @@ static inline bool IsDepotTypeTile(Tile tile, TransportType type) * @param tile the tile to check * @return true if and only if there is a depot on the tile. */ -static inline bool IsDepotTile(Tile tile) +inline bool IsDepotTile(Tile tile) { return IsRailDepotTile(tile) || IsRoadDepotTile(tile) || IsShipDepotTile(tile) || IsHangarTile(tile); } @@ -49,7 +49,7 @@ static inline bool IsDepotTile(Tile tile) * @pre IsRailDepotTile(t) || IsRoadDepotTile(t) || IsShipDepotTile(t) * @return DepotID */ -static inline DepotID GetDepotIndex(Tile t) +inline DepotID GetDepotIndex(Tile t) { /* Hangars don't have a Depot class, thus store no DepotID. */ assert(IsRailDepotTile(t) || IsRoadDepotTile(t) || IsShipDepotTile(t)); @@ -62,7 +62,7 @@ static inline DepotID GetDepotIndex(Tile t) * @pre IsDepotTile(t) * @return the type of vehicles that can use the depot */ -static inline VehicleType GetDepotVehicleType(Tile t) +inline VehicleType GetDepotVehicleType(Tile t) { switch (GetTileType(t)) { default: NOT_REACHED(); diff --git a/src/direction_func.h b/src/direction_func.h index e1bad998aa1c4..b35133530a370 100644 --- a/src/direction_func.h +++ b/src/direction_func.h @@ -18,7 +18,7 @@ * @param d The value to check * @return True if the value belongs to a DiagDirection, else false */ -static inline bool IsValidDiagDirection(DiagDirection d) +inline bool IsValidDiagDirection(DiagDirection d) { return d < DIAGDIR_END; } @@ -29,7 +29,7 @@ static inline bool IsValidDiagDirection(DiagDirection d) * @param d The value to check * @return True if the value belongs to a Direction, else false */ -static inline bool IsValidDirection(Direction d) +inline bool IsValidDirection(Direction d) { return d < DIR_END; } @@ -40,7 +40,7 @@ static inline bool IsValidDirection(Direction d) * @param d The value to check * @return True if the value belongs to an Axis, else false */ -static inline bool IsValidAxis(Axis d) +inline bool IsValidAxis(Axis d) { return d < AXIS_END; } @@ -51,7 +51,7 @@ static inline bool IsValidAxis(Axis d) * @param d The direction to get the reverse from * @return The reverse Direction */ -static inline Direction ReverseDir(Direction d) +inline Direction ReverseDir(Direction d) { assert(IsValidDirection(d)); return (Direction)(4 ^ d); @@ -65,7 +65,7 @@ static inline Direction ReverseDir(Direction d) * @param d1 The second direction as the offset from the base * @return The difference how the second direction drifts of the first one. */ -static inline DirDiff DirDifference(Direction d0, Direction d1) +inline DirDiff DirDifference(Direction d0, Direction d1) { assert(IsValidDirection(d0)); assert(IsValidDirection(d1)); @@ -85,7 +85,7 @@ static inline DirDiff DirDifference(Direction d0, Direction d1) * @param delta The second difference to add on * @return The resulting difference */ -static inline DirDiff ChangeDirDiff(DirDiff d, DirDiff delta) +inline DirDiff ChangeDirDiff(DirDiff d, DirDiff delta) { /* Cast to uint so compiler can use bitmask. Result can never be negative. */ return (DirDiff)((uint)(d + delta) % 8); @@ -101,7 +101,7 @@ static inline DirDiff ChangeDirDiff(DirDiff d, DirDiff delta) * @param delta The offset/drift applied to the direction * @return The new direction */ -static inline Direction ChangeDir(Direction d, DirDiff delta) +inline Direction ChangeDir(Direction d, DirDiff delta) { assert(IsValidDirection(d)); /* Cast to uint so compiler can use bitmask. Result can never be negative. */ @@ -115,7 +115,7 @@ static inline Direction ChangeDir(Direction d, DirDiff delta) * @param d The DiagDirection to get the reverse from * @return The reverse direction */ -static inline DiagDirection ReverseDiagDir(DiagDirection d) +inline DiagDirection ReverseDiagDir(DiagDirection d) { assert(IsValidDiagDirection(d)); return (DiagDirection)(2 ^ d); @@ -128,7 +128,7 @@ static inline DiagDirection ReverseDiagDir(DiagDirection d) * @param d1 The second direction as the offset from the base * @return The difference how the second direction drifts of the first one. */ -static inline DiagDirDiff DiagDirDifference(DiagDirection d0, DiagDirection d1) +inline DiagDirDiff DiagDirDifference(DiagDirection d0, DiagDirection d1) { assert(IsValidDiagDirection(d0)); assert(IsValidDiagDirection(d1)); @@ -146,7 +146,7 @@ static inline DiagDirDiff DiagDirDifference(DiagDirection d0, DiagDirection d1) * @param delta The difference to apply on * @return The new direction which was calculated */ -static inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta) +inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta) { assert(IsValidDiagDirection(d)); /* Cast to uint so compiler can use bitmask. Result can never be negative. */ @@ -163,7 +163,7 @@ static inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta) * @param dir The direction to convert * @return The resulting DiagDirection, maybe "rounded clockwise". */ -static inline DiagDirection DirToDiagDir(Direction dir) +inline DiagDirection DirToDiagDir(Direction dir) { assert(IsValidDirection(dir)); return (DiagDirection)(dir >> 1); @@ -179,7 +179,7 @@ static inline DiagDirection DirToDiagDir(Direction dir) * @param dir The direction to convert * @return The resulting Direction */ -static inline Direction DiagDirToDir(DiagDirection dir) +inline Direction DiagDirToDir(DiagDirection dir) { assert(IsValidDiagDirection(dir)); return (Direction)(dir * 2 + 1); @@ -194,7 +194,7 @@ static inline Direction DiagDirToDir(DiagDirection dir) * @param a The given axis * @return The other axis */ -static inline Axis OtherAxis(Axis a) +inline Axis OtherAxis(Axis a) { assert(IsValidAxis(a)); return (Axis)(a ^ 1); @@ -211,7 +211,7 @@ static inline Axis OtherAxis(Axis a) * @param d The DiagDirection * @return The axis which belongs to the direction */ -static inline Axis DiagDirToAxis(DiagDirection d) +inline Axis DiagDirToAxis(DiagDirection d) { assert(IsValidDiagDirection(d)); return (Axis)(d & 1); @@ -229,7 +229,7 @@ static inline Axis DiagDirToAxis(DiagDirection d) * @param a The axis * @return The direction pointed to south */ -static inline DiagDirection AxisToDiagDir(Axis a) +inline DiagDirection AxisToDiagDir(Axis a) { assert(IsValidAxis(a)); return (DiagDirection)(2 - a); @@ -246,7 +246,7 @@ static inline DiagDirection AxisToDiagDir(Axis a) * @param a The axis * @return The direction pointed to south */ -static inline Direction AxisToDirection(Axis a) +inline Direction AxisToDirection(Axis a) { assert(IsValidAxis(a)); return (Direction)(5 - 2 * a); @@ -258,7 +258,7 @@ static inline Direction AxisToDirection(Axis a) * @param ns north -> 0, south -> 1 * @return the desired DiagDirection */ -static inline DiagDirection XYNSToDiagDir(Axis xy, uint ns) +inline DiagDirection XYNSToDiagDir(Axis xy, uint ns) { assert(IsValidAxis(xy)); return (DiagDirection)(xy * 3 ^ ns * 2); @@ -270,7 +270,7 @@ static inline DiagDirection XYNSToDiagDir(Axis xy, uint ns) * @param dir The given direction. * @return True if the direction is diagonal. */ -static inline bool IsDiagonalDirection(Direction dir) +inline bool IsDiagonalDirection(Direction dir) { assert(IsValidDirection(dir)); return (dir & 1) != 0; diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 6d3ffc9e7588b..bfc4c58ebd073 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -334,8 +334,8 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) v->state = 1; uint n = 0; // Total number of targetable road vehicles. - for (const RoadVehicle *u : RoadVehicle::Iterate()) { - if (u->IsFrontEngine()) n++; + for (const Company *c : Company::Iterate()) { + n += c->group_all[VEH_ROAD].num_vehicle; } if (n == 0) { diff --git a/src/economy.cpp b/src/economy.cpp index ddd2cf9e4c569..75c7905d24ede 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1612,7 +1612,7 @@ static void ReserveConsist(Station *st, Vehicle *u, CargoArray *consist_capleft, */ static void UpdateLoadUnloadTicks(Vehicle *front, const Station *st, int ticks) { - if (front->type == VEH_TRAIN) { + if (front->type == VEH_TRAIN && _settings_game.order.station_length_loading_penalty) { /* Each platform tile is worth 2 rail vehicles. */ int overhang = front->GetGroundVehicleCache()->cached_total_length - st->GetPlatformLength(front->tile) * TILE_SIZE; if (overhang > 0) { diff --git a/src/economy_func.h b/src/economy_func.h index 83c6565346752..da6ac090ffc62 100644 --- a/src/economy_func.h +++ b/src/economy_func.h @@ -44,7 +44,7 @@ bool AddInflation(bool check_year = true); * Is the economy in recession? * @return \c True if economy is in recession, \c false otherwise. */ -static inline bool EconomyIsInRecession() +inline bool EconomyIsInRecession() { return _economy.fluct <= 0; } diff --git a/src/elrail_func.h b/src/elrail_func.h index d9441f4a70d39..4de7292228f01 100644 --- a/src/elrail_func.h +++ b/src/elrail_func.h @@ -18,7 +18,7 @@ * Test if a rail type has catenary * @param rt Rail type to test */ -static inline bool HasRailCatenary(RailType rt) +inline bool HasRailCatenary(RailType rt) { return HasBit(GetRailTypeInfo(rt)->flags, RTF_CATENARY); } @@ -27,7 +27,7 @@ static inline bool HasRailCatenary(RailType rt) * Test if we should draw rail catenary * @param rt Rail type to test */ -static inline bool HasRailCatenaryDrawn(RailType rt) +inline bool HasRailCatenaryDrawn(RailType rt) { return HasRailCatenary(rt) && !IsInvisibilitySet(TO_CATENARY) && !_settings_game.vehicle.disable_elrails; } diff --git a/src/engine.cpp b/src/engine.cpp index 4f9b3b5da2887..417a52b087f20 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -1081,7 +1081,7 @@ static void NewVehicleAvailable(Engine *e) } else if (e->type == VEH_ROAD) { /* maybe make another road type available */ assert(e->u.road.roadtype < ROADTYPE_END); - for (Company* c : Company::Iterate()) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, TimerGameCalendar::date); + for (Company *c : Company::Iterate()) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, TimerGameCalendar::date); } /* Only broadcast event if AIs are able to build this vehicle type. */ diff --git a/src/engine_base.h b/src/engine_base.h index 80b6e508f1533..b578eb854eb0c 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -211,27 +211,27 @@ struct EngineOverrideManager : std::vector { extern EngineOverrideManager _engine_mngr; -static inline const EngineInfo *EngInfo(EngineID e) +inline const EngineInfo *EngInfo(EngineID e) { return &Engine::Get(e)->info; } -static inline const RailVehicleInfo *RailVehInfo(EngineID e) +inline const RailVehicleInfo *RailVehInfo(EngineID e) { return &Engine::Get(e)->u.rail; } -static inline const RoadVehicleInfo *RoadVehInfo(EngineID e) +inline const RoadVehicleInfo *RoadVehInfo(EngineID e) { return &Engine::Get(e)->u.road; } -static inline const ShipVehicleInfo *ShipVehInfo(EngineID e) +inline const ShipVehicleInfo *ShipVehInfo(EngineID e) { return &Engine::Get(e)->u.ship; } -static inline const AircraftVehicleInfo *AircraftVehInfo(EngineID e) +inline const AircraftVehicleInfo *AircraftVehInfo(EngineID e) { return &Engine::Get(e)->u.air; } diff --git a/src/fileio_func.h b/src/fileio_func.h index 0ec0ab640cb15..6f9bd65442c9d 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -108,7 +108,7 @@ int closedir(DIR *d); * @param path string to open directory of * @return DIR pointer */ -static inline DIR *ttd_opendir(const char *path) +inline DIR *ttd_opendir(const char *path) { return opendir(OTTD2FS(path).c_str()); } diff --git a/src/fontcache.cpp b/src/fontcache.cpp index ce5dffe6a4ec9..0f94fd2c822f1 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -98,7 +98,7 @@ bool GetFontAAState(FontSize size, bool check_blitter) return GetFontCacheSubSetting(size)->aa; } -void SetFont(FontSize fontsize, const std::string& font, uint size, bool aa) +void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa) { FontCacheSubSetting *setting = GetFontCacheSubSetting(fontsize); bool changed = false; diff --git a/src/fontcache.h b/src/fontcache.h index f52df8d8b1728..3123c8f59f92b 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -163,20 +163,20 @@ class FontCache { }; /** Map a SpriteID to the font size and key */ -static inline void SetUnicodeGlyph(FontSize size, char32_t key, SpriteID sprite) +inline void SetUnicodeGlyph(FontSize size, char32_t key, SpriteID sprite) { FontCache::Get(size)->SetUnicodeGlyph(key, sprite); } /** Initialize the glyph map */ -static inline void InitializeUnicodeGlyphMap() +inline void InitializeUnicodeGlyphMap() { for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) { FontCache::Get(fs)->InitializeUnicodeGlyphMap(); } } -static inline void ClearFontCache() +inline void ClearFontCache() { for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) { FontCache::Get(fs)->ClearFontCache(); @@ -184,20 +184,20 @@ static inline void ClearFontCache() } /** Get the Sprite for a glyph */ -static inline const Sprite *GetGlyph(FontSize size, char32_t key) +inline const Sprite *GetGlyph(FontSize size, char32_t key) { FontCache *fc = FontCache::Get(size); return fc->GetGlyph(fc->MapCharToGlyph(key)); } /** Get the width of a glyph */ -static inline uint GetGlyphWidth(FontSize size, char32_t key) +inline uint GetGlyphWidth(FontSize size, char32_t key) { FontCache *fc = FontCache::Get(size); return fc->GetGlyphWidth(fc->MapCharToGlyph(key)); } -static inline bool GetDrawGlyphShadow(FontSize size) +inline bool GetDrawGlyphShadow(FontSize size) { return FontCache::Get(size)->GetDrawGlyphShadow(); } @@ -226,7 +226,7 @@ extern FontCacheSettings _fcsettings; * @param fs The font size to look up. * @return The settings. */ -static inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs) +inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs) { switch (fs) { default: NOT_REACHED(); diff --git a/src/gfx_func.h b/src/gfx_func.h index e12e8d4153fd4..96811587680f3 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -106,27 +106,27 @@ void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3) void DrawRectOutline(const Rect &r, int colour, int width = 1, int dash = 0); /* Versions of DrawString/DrawStringMultiLine that accept a Rect instead of separate left, right, top and bottom parameters. */ -static inline int DrawString(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL) +inline int DrawString(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL) { return DrawString(r.left, r.right, r.top, str, colour, align, underline, fontsize); } -static inline int DrawString(const Rect &r, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL) +inline int DrawString(const Rect &r, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL) { return DrawString(r.left, r.right, r.top, str, colour, align, underline, fontsize); } -static inline int DrawStringMultiLine(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL) +inline int DrawStringMultiLine(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL) { return DrawStringMultiLine(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize); } -static inline int DrawStringMultiLine(const Rect &r, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL) +inline int DrawStringMultiLine(const Rect &r, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL) { return DrawStringMultiLine(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize); } -static inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FILLRECT_OPAQUE) +inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FILLRECT_OPAQUE) { GfxFillRect(r.left, r.top, r.right, r.bottom, colour, mode); } @@ -151,7 +151,7 @@ void CheckBlitter(); bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height); -static inline bool FillDrawPixelInfo(DrawPixelInfo *n, const Rect &r) +inline bool FillDrawPixelInfo(DrawPixelInfo *n, const Rect &r) { return FillDrawPixelInfo(n, r.left, r.top, r.Width(), r.Height()); } @@ -163,7 +163,7 @@ static inline bool FillDrawPixelInfo(DrawPixelInfo *n, const Rect &r) * @param size The height or width of the object to draw. * @return Offset of where to start drawing the object. */ -static inline int CenterBounds(int min, int max, int size) +inline int CenterBounds(int min, int max, int size) { return (min + max - size + 1) / 2; } diff --git a/src/gfx_type.h b/src/gfx_type.h index af7df61d380cc..c14316001b0e0 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -210,7 +210,7 @@ enum FontSize { }; DECLARE_POSTFIX_INCREMENT(FontSize) -static inline const char *FontSizeToName(FontSize fs) +inline const char *FontSizeToName(FontSize fs) { static const char *SIZE_TO_NAME[] = { "medium", "small", "large", "mono" }; assert(fs < FS_END); diff --git a/src/group.h b/src/group.h index e664d22e4d834..a6c46d84ae975 100644 --- a/src/group.h +++ b/src/group.h @@ -87,7 +87,7 @@ struct Group : GroupPool::PoolItem<&_group_pool> { }; -static inline bool IsDefaultGroupID(GroupID index) +inline bool IsDefaultGroupID(GroupID index) { return index == DEFAULT_GROUP; } @@ -97,7 +97,7 @@ static inline bool IsDefaultGroupID(GroupID index) * @param id_g The GroupID to check * @return true is id_g is identical to ALL_GROUP */ -static inline bool IsAllGroupID(GroupID id_g) +inline bool IsAllGroupID(GroupID id_g) { return id_g == ALL_GROUP; } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index f4ad3a032ebe5..7da213c0d7075 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -901,7 +901,7 @@ class VehicleGroupWindow : public BaseVehicleListWindow { case GB_SHARED_ORDERS: { if (!VehicleClicked(vehgroup)) { - const Vehicle* v = vehgroup.vehicles_begin[0]; + const Vehicle *v = vehgroup.vehicles_begin[0]; if (vindex == v->index) { if (vehgroup.NumVehicles() == 1) { ShowVehicleViewWindow(v); diff --git a/src/house.h b/src/house.h index 25e0753787bbe..2724506686011 100644 --- a/src/house.h +++ b/src/house.h @@ -137,7 +137,7 @@ struct HouseSpec { * @param hid the HouseID to get the override for. * @return the HouseID to actually work with. */ -static inline HouseID GetTranslatedHouseID(HouseID hid) +inline HouseID GetTranslatedHouseID(HouseID hid) { const HouseSpec *hs = HouseSpec::Get(hid); return hs->grf_prop.override == INVALID_HOUSE_ID ? hid : hs->grf_prop.override; diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index ebbc316dbaed1..59a726d7ff3c4 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1663,7 +1663,7 @@ static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int t /* On a large map with many industries, it may be faster to check an area. */ static const int dmax = 14; if (Industry::GetNumItems() > (size_t) (dmax * dmax * 2)) { - const Industry* i = nullptr; + const Industry *i = nullptr; TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax); for (TileIndex atile : tile_area) { if (GetTileType(atile) == MP_INDUSTRY) { diff --git a/src/industry_map.h b/src/industry_map.h index 8d680b5a10ef7..bf664b24b0484 100644 --- a/src/industry_map.h +++ b/src/industry_map.h @@ -60,7 +60,7 @@ enum IndustryGraphics { * @pre IsTileType(t, MP_INDUSTRY) * @return the industry ID */ -static inline IndustryID GetIndustryIndex(Tile t) +inline IndustryID GetIndustryIndex(Tile t) { assert(IsTileType(t, MP_INDUSTRY)); return t.m2(); @@ -72,7 +72,7 @@ static inline IndustryID GetIndustryIndex(Tile t) * @pre IsTileType(t, MP_INDUSTRY) * @return true if and only if the industry tile is fully built */ -static inline bool IsIndustryCompleted(Tile t) +inline bool IsIndustryCompleted(Tile t) { assert(IsTileType(t, MP_INDUSTRY)); return HasBit(t.m1(), 7); @@ -85,7 +85,7 @@ IndustryType GetIndustryType(Tile tile); * @param tile the tile to query * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void SetIndustryCompleted(Tile tile) +inline void SetIndustryCompleted(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m1(), 7, 1, 1); @@ -97,7 +97,7 @@ static inline void SetIndustryCompleted(Tile tile) * @pre IsTileType(tile, MP_INDUSTRY) * @return the construction stage */ -static inline byte GetIndustryConstructionStage(Tile tile) +inline byte GetIndustryConstructionStage(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return IsIndustryCompleted(tile) ? (byte)INDUSTRY_COMPLETED : GB(tile.m1(), 0, 2); @@ -109,7 +109,7 @@ static inline byte GetIndustryConstructionStage(Tile tile) * @param value the new construction stage * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void SetIndustryConstructionStage(Tile tile, byte value) +inline void SetIndustryConstructionStage(Tile tile, byte value) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m1(), 0, 2, value); @@ -122,7 +122,7 @@ static inline void SetIndustryConstructionStage(Tile tile, byte value) * @pre IsTileType(t, MP_INDUSTRY) * @return the gfx ID */ -static inline IndustryGfx GetCleanIndustryGfx(Tile t) +inline IndustryGfx GetCleanIndustryGfx(Tile t) { assert(IsTileType(t, MP_INDUSTRY)); return t.m5() | (GB(t.m6(), 2, 1) << 8); @@ -134,7 +134,7 @@ static inline IndustryGfx GetCleanIndustryGfx(Tile t) * @pre IsTileType(t, MP_INDUSTRY) * @return the gfx ID */ -static inline IndustryGfx GetIndustryGfx(Tile t) +inline IndustryGfx GetIndustryGfx(Tile t) { assert(IsTileType(t, MP_INDUSTRY)); return GetTranslatedIndustryTileID(GetCleanIndustryGfx(t)); @@ -146,7 +146,7 @@ static inline IndustryGfx GetIndustryGfx(Tile t) * @pre IsTileType(t, MP_INDUSTRY) * @param gfx the graphics ID */ -static inline void SetIndustryGfx(Tile t, IndustryGfx gfx) +inline void SetIndustryGfx(Tile t, IndustryGfx gfx) { assert(IsTileType(t, MP_INDUSTRY)); t.m5() = GB(gfx, 0, 8); @@ -159,7 +159,7 @@ static inline void SetIndustryGfx(Tile t, IndustryGfx gfx) * @pre IsTileType(tile, MP_INDUSTRY) * @return the construction counter */ -static inline byte GetIndustryConstructionCounter(Tile tile) +inline byte GetIndustryConstructionCounter(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return GB(tile.m1(), 2, 2); @@ -171,7 +171,7 @@ static inline byte GetIndustryConstructionCounter(Tile tile) * @param value the new value for the construction counter * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void SetIndustryConstructionCounter(Tile tile, byte value) +inline void SetIndustryConstructionCounter(Tile tile, byte value) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m1(), 2, 2, value); @@ -184,7 +184,7 @@ static inline void SetIndustryConstructionCounter(Tile tile, byte value) * @param tile the tile to query * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void ResetIndustryConstructionStage(Tile tile) +inline void ResetIndustryConstructionStage(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m1(), 0, 4, 0); @@ -196,7 +196,7 @@ static inline void ResetIndustryConstructionStage(Tile tile) * @param tile the tile to get the animation loop number of * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline byte GetIndustryAnimationLoop(Tile tile) +inline byte GetIndustryAnimationLoop(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return tile.m4(); @@ -208,7 +208,7 @@ static inline byte GetIndustryAnimationLoop(Tile tile) * @param count the new animation frame number * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void SetIndustryAnimationLoop(Tile tile, byte count) +inline void SetIndustryAnimationLoop(Tile tile, byte count) { assert(IsTileType(tile, MP_INDUSTRY)); tile.m4() = count; @@ -221,7 +221,7 @@ static inline void SetIndustryAnimationLoop(Tile tile, byte count) * @pre IsTileType(tile, MP_INDUSTRY) * @return requested bits */ -static inline byte GetIndustryRandomBits(Tile tile) +inline byte GetIndustryRandomBits(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return tile.m3(); @@ -234,7 +234,7 @@ static inline byte GetIndustryRandomBits(Tile tile) * @param bits the random bits * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void SetIndustryRandomBits(Tile tile, byte bits) +inline void SetIndustryRandomBits(Tile tile, byte bits) { assert(IsTileType(tile, MP_INDUSTRY)); tile.m3() = bits; @@ -247,7 +247,7 @@ static inline void SetIndustryRandomBits(Tile tile, byte bits) * @pre IsTileType(tile, MP_INDUSTRY) * @return requested triggers */ -static inline byte GetIndustryTriggers(Tile tile) +inline byte GetIndustryTriggers(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); return GB(tile.m6(), 3, 3); @@ -261,7 +261,7 @@ static inline byte GetIndustryTriggers(Tile tile) * @param triggers the triggers to set * @pre IsTileType(tile, MP_INDUSTRY) */ -static inline void SetIndustryTriggers(Tile tile, byte triggers) +inline void SetIndustryTriggers(Tile tile, byte triggers) { assert(IsTileType(tile, MP_INDUSTRY)); SB(tile.m6(), 3, 3, triggers); @@ -275,7 +275,7 @@ static inline void SetIndustryTriggers(Tile tile, byte triggers) * @param random the random value * @param wc the water class for this industry; only useful when build on water */ -static inline void MakeIndustry(Tile t, IndustryID index, IndustryGfx gfx, uint8_t random, WaterClass wc) +inline void MakeIndustry(Tile t, IndustryID index, IndustryGfx gfx, uint8_t random, WaterClass wc) { SetTileType(t, MP_INDUSTRY); t.m1() = 0; diff --git a/src/industrytype.h b/src/industrytype.h index df2b5e6e51ad4..07a3d36bb70cf 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -189,7 +189,7 @@ extern std::array _sorted_industry_types; * @param gfx the type to get the override for. * @return the gfx to actually work with. */ -static inline IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx) +inline IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx) { /* the 0xFF should be GFX_WATERTILE_SPECIALCHECK but for reasons of include mess, * we'll simplify the writing. diff --git a/src/landscape.h b/src/landscape.h index f9b831d31343e..e6e00a8e4388f 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -50,7 +50,7 @@ void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2); * @param corner The corner. * @return Z position of corner relative to TileZ. */ -static inline int GetSlopePixelZInCorner(Slope tileh, Corner corner) +inline int GetSlopePixelZInCorner(Slope tileh, Corner corner) { return GetSlopeZInCorner(tileh, corner) * TILE_HEIGHT; } @@ -63,7 +63,7 @@ static inline int GetSlopePixelZInCorner(Slope tileh, Corner corner) * @param z returns the z of the foundation slope. (Can be nullptr, if not needed) * @return The slope on top of the foundation. */ -static inline Slope GetFoundationPixelSlope(TileIndex tile, int *z) +inline Slope GetFoundationPixelSlope(TileIndex tile, int *z) { assert(z != nullptr); Slope s = GetFoundationSlope(tile, z); @@ -79,7 +79,7 @@ static inline Slope GetFoundationPixelSlope(TileIndex tile, int *z) * @return Equivalent coordinate in the 2D view. * @see RemapCoords2 */ -static inline Point RemapCoords(int x, int y, int z) +inline Point RemapCoords(int x, int y, int z) { Point pt; pt.x = (y - x) * 2 * ZOOM_LVL_BASE; @@ -95,7 +95,7 @@ static inline Point RemapCoords(int x, int y, int z) * @return Equivalent coordinate in the 2D view. * @see RemapCoords */ -static inline Point RemapCoords2(int x, int y) +inline Point RemapCoords2(int x, int y) { return RemapCoords(x, y, GetSlopePixelZ(x, y, false)); } @@ -109,7 +109,7 @@ static inline Point RemapCoords2(int x, int y) * @note Inverse of #RemapCoords function. Smaller values may get rounded. * @see InverseRemapCoords2 */ -static inline Point InverseRemapCoords(int x, int y) +inline Point InverseRemapCoords(int x, int y) { Point pt = {(y * 2 - x) >> (2 + ZOOM_LVL_SHIFT), (y * 2 + x) >> (2 + ZOOM_LVL_SHIFT)}; return pt; @@ -126,7 +126,7 @@ uint ApplyFoundationToSlope(Foundation f, Slope *s); * @param s The #Slope to modify. * @return Increment to the tile Z coordinate. */ -static inline uint ApplyPixelFoundationToSlope(Foundation f, Slope *s) +inline uint ApplyPixelFoundationToSlope(Foundation f, Slope *s) { return ApplyFoundationToSlope(f, s) * TILE_HEIGHT; } diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index e73af9446dba3..a40e74a38b0bc 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1606,6 +1606,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Gedeaktiveer STR_CONFIG_SETTING_NOSERVICE :Sper diens wanneer komplikasies is na geen gestel: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :As dit geaktiveerd is, word voertuie nie gediens as hulle nie kan onklaar raak nie + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Laat wa spoed beperkings toe: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :As dit geaktiveer is bepaal die spoedbeperking van treinwaens ook die maksimum spoed van die hele trein diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index c6bb6d2ffa01d..3634effa6ce34 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1485,6 +1485,7 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT ::مدة فحص STR_CONFIG_SETTING_NOSERVICE :الغاء الصيانة عندما يكون التعطيل للمركبات غير مفعل: {STRING} + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :السماح بتحديد سرعة العربات: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :تعطيل سكة القطار الكهربائي: {STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 8b22e53b74d01..9068607591203 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1538,6 +1538,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desgaitua STR_CONFIG_SETTING_NOSERVICE :Mantenimendua desgaitu ibilgailuen matxurak kenduta daudenean: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Gaitua dagoenean, ibilgailuek ez dute mantenimendurik jasoko ezin badira matxuratu + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Bagoiaren abiadura mugak aktibatu: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Gaitua dagoenean, bagoien gehienezko abiadura erabili trenen geheienezko abiadura zehazteko diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 740fedb542d9f..7e7673d499d8e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1925,6 +1925,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :адключа STR_CONFIG_SETTING_NOSERVICE :Адключыць абслугоўваньне, калі скасаваны паломкі: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Калі ўключана, транспарт не абслугоўваецца ўвогуле, калі адключаны паломкі. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Уключыць абмежаваньне хуткасьці ваґонаў: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Калі ўключана, выкарыстоўваць таксама й ліміты хуткасьці ў асобных ваґонаў для вызначэньня максымальнай хуткасьці ўсяго цягніка. diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 10e5f90af3e1c..3fc97066556e0 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -904,7 +904,7 @@ STR_NEWS_VEHICLE_IS_UNPROFITABLE :O lucro de {WHI STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} não pode chegar ao próximo destino porque está fora de alcance STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque uma readaptação ordenada falhou -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autorenovação falhou no {VEHICLE}{}{STRING} +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autorenovação falhou para {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Nov{G o a} {STRING} já está disponível! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -1778,6 +1778,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado STR_CONFIG_SETTING_NOSERVICE :Desativar manutenção quando as quebras estão desativadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativado, veículos não sofrem manutenção se não puderem quebrar +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para trens que são mais longos que a estação: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativado, os trens que são muito longos para a estação carregam mais lentamente do que um trem que cabe na estação. Esta configuração não afeta o itinerário. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limite de velocidade dos vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ativado, usa limites de velocidade para vagões para decidir a velocidade máxima de um trem diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index d92af425113e6..55fcc51ffe41e 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1570,6 +1570,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Изключе STR_CONFIG_SETTING_NOSERVICE :Без сервиз когато повредите са изключени: {STRING.n} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази опция бъде активирана, превозните средсва няма да бъдат обслужвани, ако не могат да се повредят + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Вагоните имат ограничение на скоростта: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ако тази опция бъде активирана, максималната скорост на вагоните ще се взима впредвид при изчисляването на максималната скорост на влака diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 6ea013392b001..8bdd1b8712835 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1778,6 +1778,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivat STR_CONFIG_SETTING_NOSERVICE :Desactiva les revisions quan les avaries s'estableixen a cap: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quan està activat, els vehicles no són revisats si no es poden espatllar + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activa límits de velocitat per als vagons: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quan està activat, també utilitza els límits de velocitat dels vagons per decidir la velocitat màxima del tren diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 6447e31e9fd2b..fd5d776dc1cb8 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -767,6 +767,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31 + STR_CONFIG_SETTING_NEWS_SUBSIDIES :Грантсем: {STRING} ###length 3 diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index e21092b4aab4d..4779595bf5801 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1721,6 +1721,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Isključeno STR_CONFIG_SETTING_NOSERVICE :Isključi servisiranje kada su kvarovi postavljeni na nula: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kada je uključeno, vozila se ne servisiraju kada se ne mogu pokvariti + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Omogući ograničenje brzine za vagone: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kada je uključeno, koristiti će se i limit brzine vagona kod određivanja najveće brzine nekog vlaka diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 24dd12f1fdb95..6562313f20f24 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1816,6 +1816,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Vypnuto STR_CONFIG_SETTING_NOSERVICE :Vypnout servisy, když jsou vypnuty poruchy: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Pokud je zapnuto a zároveň jsou vypnuty poruchy, vozidla nebudou vůbec jezdit do servisu, protože se nemohou nikdy porouchat + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Zapnout omezení rychlosti vagonů: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Pokud zapnuto, použije rychlostní omezení vagónů při stanovení maximální rychlosti vlaku diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 0cfccb6724953..f446c72fe75ac 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1777,6 +1777,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiveret STR_CONFIG_SETTING_NOSERVICE :Slå service fra, når nedbrud er sat til ingen: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Når tilladt, bliver køretøjer ikke serviceret, hvis de ikke kan bryde ned +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Læsningshastighedsstraf for tog, der er længere end stationen: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når den er aktiveret, læsser et tog, der er for lange til stationen, langsommere end et tog, der passer til stationen. Denne indstilling påvirker ikke stifinding. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver hastighedsbegrænsning for vogne: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når tilladt, brug også fartgrænse på vogne, for at bestemme makshastigheden på tog diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 7a485a9b3707f..587135fedca8e 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1777,6 +1777,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_NOSERVICE :Onderhoud uitschakelen wanneer defecten uit staan: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld worden voertuigen niet onderhouden als ze niet kapot kunnen gaan. +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Verminderde laadsnelheid voor treinen langer dan het station: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Indien ingeschakeld worden treinen die te lang zijn voor het station langzamer geladen dan treinen die in het station passen. Deze instelling is niet van invloed op het zoeken van de route. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Snelheidslimieten voor wagons inschakelen: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wanneer ingeschakeld, ook gebruik maken van snelheidsbeperkingen van wagons voor het bepalen van de maximale snelheid van een trein @@ -1968,7 +1971,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gemiddelde groo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Distributiegrafiek elke {STRING} bijwerken STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :De tijd tussen opeenvolgende herberekeningen van de koppeling-grafiek. Elke berekening berekent de plannen voor één component van de grafiek. Dat betekent dat een waarde X voor deze instelling niet betekent dat de hele grafiek elke X seconden wordt bijgewerkt. Dat geldt alleen voor één component. Hoe korter je deze waarde instelt, hoe meer CPU-tijd er nodig is voor de berekening. Hoe langer je deze waarde instelt, hoe langer het duurt voordat de vrachtdistributie start op nieuwe routes. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :{STRING} per herberekening van de distributiegrafiek besteden -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :De benodigde tijd voor een herbereking van een koppeling-grafiekcomponent. Wanneer een herberekening wordt gestart, start een draad die dit aantal seconden mag lopen. Hoe korter je deze waarde maakt, hoe groter de kans dat de draad is niet op tijd is afgelopen. Het spel stopt dan totdat dit alsnog gebeurt (het 'hikt'). Hoe langer je deze waarde maakt, hoe langer het duurt voor de distributie wordt bijgewerkt wanneer een route wijzigt. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :De benodigde tijd voor een herbereking van een koppeling-grafiekcomponent. Wanneer een herberekening wordt gestart, start een draad die dit aantal seconden mag lopen. Hoe korter je deze waarde maakt, hoe groter de kans dat de draad niet op tijd is afgelopen. Het spel stopt dan totdat dit alsnog gebeurt (het 'hikt'). Hoe langer je deze waarde maakt, hoe langer het duurt voor de distributie wordt bijgewerkt wanneer een route wijzigt. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributiemodus voor passagiers: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :'Symmetrisch' betekent dat ongeveer hetzelfde aantal passagiers van station A naar station B gaat als van B naar A. 'Asymmetrisch' betekent dat willekeurige aantallen passagiers reizen in beide richtingen. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor passagiers. @@ -1989,7 +1992,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Hoe hoger de in STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect van afstand op de vraag: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Als je dit op een waarde hoger dan 0 zet, dan zal de afstand tussen het station van herkomst A met enige vracht en een mogelijke bestemming B effect hebben op de hoeveelheid lading verzonden van A naar B. Hoe verder weg B is van A, des te minder lading wordt verzonden. Hoe hoger je deze instelt, hoe minder lading wordt verzonden naar verder geleden stations en meer lading zal worden verzonden naar dichtbij gelegen stations. STR_CONFIG_SETTING_DEMAND_SIZE :Hoeveelheid terugkerende vracht voor symmetrische modus: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Door dit op minder dan 100% te zetten lijkt de symmetrische verdeling meer op de asymmetrische verdeling. Minder vracht zal geforceerd worden om zich terug te sturen als er een bepaalde hoeveelheid wordt verzonden naar een station. Op 0% van de symmetrische verdeling gedraagt deze zicht als de asymmetrische verdeling. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Door dit op minder dan 100% te zetten lijkt de symmetrische verdeling meer op de asymmetrische verdeling. Minder vracht zal geforceerd worden om zich terug te sturen als er een bepaalde hoeveelheid wordt verzonden naar een station. Op 0% van de symmetrische verdeling gedraagt deze zich als de asymmetrische verdeling. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van korte routes voordat routes met hoge capaciteit worden gebruikt: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. De vrachtdistributie verzadigt eerst de kortste route, gebruikt dan de op één na kortste route tot die verzadigd is enzovoort. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Wanneer alle routes verzadigd zijn, maar er is meer vraag, raken alle wegen overbelast, die met hoge capaciteit als eerste. In veel gevallen schat het algoritme helaas de capaciteit niet nauwkeurig in. Met deze instelling kun je aangeven tot welk percentage een korter pad moet worden verzadigd voordat de eerstvolgende, langere route wordt gekozen. Stel dit in op minder dan 100% om overvolle stations in geval van overschatte capaciteit te voorkomen. @@ -4475,9 +4478,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Bepaalt STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is gelijk aan STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :is niet gelijk aan STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :is minder dan -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is minder of gelijk aan +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is minder dan of gelijk aan STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :is meer dan -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is meer of gelijk aan +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is meer dan of gelijk aan STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :is waar STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :is niet waar diff --git a/src/lang/english.txt b/src/lang/english.txt index 05a5884905e32..1f3de32aec149 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -903,7 +903,7 @@ STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} can't get to the next destination because it is out of range STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} stopped because an ordered refit failed -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autorenew failed on {VEHICLE}{}{STRING} +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autorenew failed on {VEHICLE}{}{STRING2} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}New {STRING} now available! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -1777,6 +1777,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled STR_CONFIG_SETTING_NOSERVICE :Disable servicing when breakdowns set to none: {STRING2} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :When enabled, vehicles do not get serviced if they cannot break down +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Loading speed penalty for trains that are longer than the station: {STRING2} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Enable wagon speed limits: {STRING2} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :When enabled, also use speed limits of wagons for deciding the maximum speed of a train @@ -2052,14 +2055,17 @@ STR_CONFIG_SETTING_ACCOUNTING :Accounting STR_CONFIG_SETTING_VEHICLES :Vehicles STR_CONFIG_SETTING_VEHICLES_PHYSICS :Physics STR_CONFIG_SETTING_VEHICLES_ROUTING :Routing +STR_CONFIG_SETTING_VEHICLES_ORDERS :Orders STR_CONFIG_SETTING_LIMITATIONS :Limitations STR_CONFIG_SETTING_ACCIDENTS :Disasters / Accidents STR_CONFIG_SETTING_GENWORLD :World generation STR_CONFIG_SETTING_ENVIRONMENT :Environment +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Time STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Authorities STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Towns STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industries STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Cargo distribution +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Trees STR_CONFIG_SETTING_AI :Competitors STR_CONFIG_SETTING_AI_NPC :Computer players STR_CONFIG_SETTING_NETWORK :Network @@ -4475,9 +4481,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}How to c STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is equal to STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :is not equal to STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :is less than -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is less or equal to +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is less than or equal to STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :is more than -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is more or equal to +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is more than or equal to STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :is true STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :is false diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index eb94bd140d927..d10ebe1f1cd40 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1777,6 +1777,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled STR_CONFIG_SETTING_NOSERVICE :Disable servicing when breakdowns set to none: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :When enabled, vehicles do not get serviced if they cannot break down +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Loading speed penalty for trains that are longer than the station: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Enable wagon speed limits: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :When enabled, also use speed limits of wagons for deciding the maximum speed of a train diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index d22d9b13a1969..f004835eba0b3 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1777,6 +1777,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Disabled STR_CONFIG_SETTING_NOSERVICE :Disable maintenance when breakdowns are set to none: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :When enabled, vehicles do not get maintained if they cannot break down +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Loading speed penalty for trains that are longer than the station: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :When enabled, trains which are too long for the station load more slowly than a train which fits the station. This setting does not affect pathfinding. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Enable railroad car speed limits: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :When enabled, also use speed limits of wagons for deciding the maximum speed of a train @@ -4475,9 +4478,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}How to c STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is equal to STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :is not equal to STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :is less than -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is less or equal to +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is less than or equal to STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :is more than -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is more or equal to +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is more than or equal to STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :is true STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :is false diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 8ecbd2b36fe61..d0102ce46e0d9 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1784,6 +1784,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Malaktiva STR_CONFIG_SETTING_NOSERVICE :Malŝaltu prizorgadon se rompiĝoj ne okazas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, veturiloj kiuj ne povas panei ne estos priservataj + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktivigu vagonajn rapideclimojn: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kiam ebligita, ankaŭ uzu rapideco-limigojn de vagonoj por decidi la maksimuman rapidecon de trajno diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index ebc583b3eacc7..ba9ab0b61ca51 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1765,6 +1765,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Väljas STR_CONFIG_SETTING_NOSERVICE :Hoolduse keelamine rikete väljalülitamisel: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kui on aktiveeritud, siis ei teostata hooldust sõidukitele mille tõrkumine ei ole võimalik + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Vagunite kiiruspiirangud: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kui on aktiveeritud siis kasutatakse rongi maksimaalse kiiruse arvutamiseks ka vagunite kiiruse piirangut diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 160492fa9debc..ac67a9797f435 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1519,6 +1519,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Ikki sligi til STR_CONFIG_SETTING_NOSERVICE :Ógilda eftirlit tá maskinskaðar eru ásettir til eingir: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Um gilda fáa flutningstól einki eftirlit um tey ikki kunnu fáa maskinskaða + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Gilda hámarksferð fyri vognar: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Um gilda, verður hámarksferðin hjá vognum eisini nýtt fyri at avgerða mest loydu ferðina á tokum diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 72aff10a6bbda..b1521cfe9359d 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1777,6 +1777,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Pois käytöst STR_CONFIG_SETTING_NOSERVICE :Poista huollot käytöstä kun kulkuneuvojen rikkoutuminen on poistettu käytöstä: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Mikäli käytössä, kulkuneuvoja ei huolleta, jos ne eivät voi rikkoutua +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Alennettu lastausnopeus asemaa pitemmille junille: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Mikäli käytössä, rautatieasemaa pitemmät junat kuormataan asemalle kokonaan mahtuvia hitaammin. Tämä asetus ei vaikuta reittien laskentaan. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ota käyttöön vaunujen nopeusrajoitukset: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Mikäli käytössä, vaunujen nopeusrajoitusta käytetään junan maksiminopeuden määrittämisessä diff --git a/src/lang/french.txt b/src/lang/french.txt index 19dded592e16b..cb5aaecec3e14 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1778,6 +1778,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Désactivé STR_CONFIG_SETTING_NOSERVICE :Désactiver l'entretien quand les pannes sont inactives{NBSP}: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Lorsqu'il est activé, les véhicules ne sont pas entretenus s'ils ne peuvent pas tomber en panne + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activer la vitesse limite des wagons{NBSP}: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Lorsqu'il est activé, utiliser la vitesse limite des wagons pour déterminer la vitesse maximum d'un train diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 65dff9170c3d9..4125619292005 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1592,6 +1592,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Útskeakele STR_CONFIG_SETTING_NOSERVICE :Gjin ûnderhald as stikken gean út steat: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :By ynskeakeljen sille fiertugen gjin ûnderhâld krije at sy net kapot gean kinne + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Wagon snelheids limiet: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :By ynskeakeljen sille de faasjelimyten fan de weinen meinaam wurde by it bepalen fan de maksimale faasje foar in trein diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index ae306ddbb62ab..f34f62f31450a 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1785,6 +1785,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :À comas STR_CONFIG_SETTING_NOSERVICE :Cuir obair-chàraidh à comas ma chaidh briseadh a chur gu “Cha tachair seo idir”: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ma tha seo air, chan fhaigh carbadan obair-chàraidh mur urrainn dhaibh briseadh + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Cuir crìochan-luaiths nan carbadan-rèile an comas: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ma tha seo air, cleachd crìochan-luaiths nan carbadan cuideachd gus an luaths as motha aig trèan a shuidheachadh diff --git a/src/lang/galician.txt b/src/lang/galician.txt index a3e5aa123f5fc..db14242498b88 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1771,6 +1771,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivado STR_CONFIG_SETTING_NOSERVICE :Deshabilita-lo mantemento cando as avarías están desactivadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Cando estea activado, os vehículos non teñen mantemento no caso de que non poidan ter avarías + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activa-los límites de velocidade dos vagóns: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Cando estea activado, usar tamén os límites de velocidade dos vagóns para decidir a máxima velocidade do tren diff --git a/src/lang/german.txt b/src/lang/german.txt index 2bab17f3fd1f0..8a2d526e599e6 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1768,6 +1768,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktiviert STR_CONFIG_SETTING_NOSERVICE :Wartung deaktivieren, wenn Pannen abgeschaltet: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Schicke Fahrzeuge nicht zur Wartung, wenn Pannen ausgeschaltet sind + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Berücksichtige Waggonhöchstgeschwindigkeit: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Begrenze die Höchstgeschwindigkeit eines Zuges durch die jeweiligen Höchstgeschwindigkeiten der mitgeführten Waggons diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 95c0e1b74bfc8..bb929eb169379 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1813,6 +1813,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργ STR_CONFIG_SETTING_NOSERVICE :Απενεργοποίηση επισκευών όταν οι καταρρεύσεις είναι απενεργοποιημένες: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα δεν συντηρούνται όταν δεν είναι δυνατό να χαλάσουν + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ενεργοποίηση ορίων ταχύτητας βαγονιών: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Όταν είναι ενεργοποιημένο, χρησιμοποιούνται και τα όρια ταχύτητας των βαγονιών όταν αποφασίζεται η μέγιστη ταχύτητα ενός τρένου diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 2c55687f70d85..134cccbe51d3e 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1624,6 +1624,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :מבוטל STR_CONFIG_SETTING_NOSERVICE :{STRING} :בטל טיפולים כאשר האפשרות לביטול תקלות נבחרה STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :כאשר מאופשר, כלי רכב אינם מתוחזקים אם הם אינם יכולים להתקלקל + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :{STRING} :אפשר הגבלת מהירות עבור קרונות רכבת STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :כאשר מאופשר, השתמש גם במגבלות מהירות של קרונות לצורך קביעות המהירות המירבית של רכבת diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 6e926b758f99f..d81895bd71b02 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -551,6 +551,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :कंप्य + STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :दुर्घटनायें / आपदायें : {STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 79bf30e8eee0e..71f3ad3d87c75 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1830,6 +1830,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :kikapcsolva STR_CONFIG_SETTING_NOSERVICE :Ne legyen javítás ha lerobbanások sincsenek: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Bekapcsolva a járművek nem kerülnek javításra, ha nem tudnak lerobbanni + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :A vagonok sebessége korlátozható: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Bekapcsolva a szerelvényben lévő vasúti kocsik maximális sebessége is korlátozza a vonat maximális sebességét diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index e29370908b4f4..e18f17161624c 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1518,6 +1518,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Óvirkt STR_CONFIG_SETTING_NOSERVICE :Sleppa viðhaldi þegar bilanir eru óvirkar: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ef þessi stilling er virk eru farartæki ekki þjónustuð ef þau geta ekki bilað + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Leyfa hraðatakmarkanir vagna: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ef þessi stilling er virk er hámarkshraði á vögnum einnig notaður til að ákvarða hámarks hraða á járnbrautalestum diff --git a/src/lang/ido.txt b/src/lang/ido.txt index b69b47d0e63a9..589f3223aaaf7 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -734,6 +734,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora + ###length 3 diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 6498f2bfe7dd3..c1b0371f5ee0c 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1767,6 +1767,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Di non-aktifkan STR_CONFIG_SETTING_NOSERVICE :Tidak perlu perbaikan jika tidak pernah mogok: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Jika diaktifkan, kendaraan tidak akan diperbaiki jika tidak pernah mogok + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktifkan batas kecepatan gerbong: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Jika diaktifkan, batas kecepatan gerbong juga digunakan untuk menentukan kecepatan maksimum kereta diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 7dbd840afac9c..96ac944b6638e 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1671,6 +1671,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Díchumasaithe STR_CONFIG_SETTING_NOSERVICE :Díchumasaigh seirbhísiú nuair nach mbíonn aon bhriseadh síos: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Má tá sé cumasaithe, ní dhéantar feithiclí a sheirbhísí má rud é nach féidir leo briseadh síos + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Cumasaigh teorainneacha luais vaigíní: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Má tá sé cumasaithe, úsáid teorainneacha luais na vaigíní freisin chun luas uasta traenacha a shocrú diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 6d300ac3635a2..b8d49fb313f50 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1812,6 +1812,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Disabilitato STR_CONFIG_SETTING_NOSERVICE :Disabilita manutenzione con i guasti veicoli disattivati: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Se abilitata, non vengono manutenuti i veicoli che non possono guastarsi. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Abilita limiti di velocità dei vagoni: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando abilitata, tiene conto anche dei limiti di velocità dei vagoni per determinare la velocità massima di un treno. diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 6cd76eec69001..bcb1ad78ca21e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1728,6 +1728,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :点検なし STR_CONFIG_SETTING_NOSERVICE :故障切ならば点検無効化: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :有効にすると、故障が起こらない設定の時には点検も行わなくなります + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :貨車の上限速度: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :有効にすると、上限速度が設定されている貨車を使用した場合、列車はその速度以上出せなくなります diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 3f74dd1e38708..9466e662dddc1 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1778,6 +1778,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :사용 안 함 STR_CONFIG_SETTING_NOSERVICE :차량 고장 설정을 껐으면 점검을 하지 않음: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :이 설정을 켜면, 차량이 고장나지 않도록 설정되어 있는 경우 차량이 자동으로 점검을 하러 가지 않습니다 +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :역 길이보다 열차 길이가 긴 경우 적재 속도 감소: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :이 설정을 켜면, 역 길이보다 길이가 긴 열차는 역 길이에 맞는 열차보다 적재/하차 속도가 느려지게 됩니다. 이 설정은 경로 탐색에는 영향을 미치지 않습니다. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :화물차 속력 제한 적용: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :이 설정을 켜면, 화물차의 속력 제한값에 따라 열차의 최대 속력을 제한합니다. diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 5ded827f24d0f..fc74f1569730d 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1783,6 +1783,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Neglectum STR_CONFIG_SETTING_NOSERVICE :Neglegere ministrationem cum nullae sunt defectiones vehiculorum: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Electa, vehicula non ministrantur defectionibus vetatis + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Annuere currus ferriviarios habere velocitates maximas: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Electa, velocitates maximae curruum afficiunt velocitatem maximam traminis diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 9d58818a3e8e4..792e6e0e57126 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -905,7 +905,7 @@ STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE 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 -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automātiskās atjaunošanas kļūda {VEHICLE}{}{STRING} +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automātiskā atjaunošana neizdevās transportlīdzeklī {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Tagad ir pieejams jauns {STRING}! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -918,7 +918,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsīdijas piedāvājums beidzies:{}{}{STRING} no {STRING} uz {STRING} subsidēšana ir atcelta STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidēšana atcelta:{}{}{STRING} pārvadājumi no {STRING} uz {STRING} turpmāk vairs netiek subsidēti -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Līnijas subsīdijas piedāvājums:{}{}Sākot no {STRING} līdz {STRING} uz {STRING} piesaistīs {NUM} gadu subsīdijas no vietējās pašvaldības! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Līnijas subsīdijas piedāvājums:{}{}Krava: {STRING} no{STRING} uz {STRING} piesaistīs {NUM} gadu subsīdijas no vietējās pašvaldības! ###length 4 STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Līnijas subsīdija tiek piešķirta {STRING}!{}{}{STRING} no {STRING} uz {STRING} tiks maksāts 50% vairāk nākamos {NUM} gad{P u us us}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Līnijas subsīdija tiek piešķrita {STRING}!{}{}{STRING} no {STRING} uz {STRING} tiks maksātas dubultās likmes nākamos {NUM} gad{P u us us}! @@ -1120,11 +1120,11 @@ STR_NUM_CUSTOM :Pielāgots STR_NUM_CUSTOM_NUMBER :Pielāgots ({NUM}) STR_VARIETY_NONE :Nav -STR_VARIETY_VERY_LOW :Ļoti zema -STR_VARIETY_LOW :Zema -STR_VARIETY_MEDIUM :Vidēja -STR_VARIETY_HIGH :Augsta -STR_VARIETY_VERY_HIGH :Ļoti augsta +STR_VARIETY_VERY_LOW :Ļoti zems +STR_VARIETY_LOW :Zems +STR_VARIETY_MEDIUM :Vidējs +STR_VARIETY_HIGH :Augsts +STR_VARIETY_VERY_HIGH :Ļoti augsts ###length 5 STR_AI_SPEED_VERY_SLOW :Ļoti lēns @@ -1779,6 +1779,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :izslēgts STR_CONFIG_SETTING_NOSERVICE :Aizliegt apkopi, kad bojāšanās ir izslēgta: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ja ieslēgts, transportlīdzekļiem netiek veikta apkope. Jo tie nebojājas +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Iekraušanas ātruma sods vilcieniem, kas ir garāki par staciju: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Ja aktīs, vilcieni, kas ir pārāk gari stacijai, iekraujas lēnāk nekā vilcieni, kas atbilst stacijai. Šis iestatījums neietekmē ceļa meklēšanu. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ieslēgt vagonu ātruma ierobežojumus: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ja ieslēgts, var izmantot vagonu ātruma ierobežojumus, lai lemtu par vilcienu maksimālo ātrumu @@ -2432,7 +2435,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Jauna kompāni STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Izveidot jaunu kompāniju un pievienoties tai STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tas esat jūs STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Šis ir spēles īpašnieks -STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}Klientu: {NUM}; uzņēmumu: {NUM}/{NUM} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}klientu: {NUM}; kompāniju: {NUM}/{NUM} STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Pašlaik savienoto klientu skaits, uzņēmumu skaits un maksimālais servera administratora atļautais uzņēmumu skaits # Matches ConnectionType @@ -2506,8 +2509,8 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Tīkla s STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Nevar ielādēt saglabāto spēli STR_NETWORK_ERROR_SERVER_START :{WHITE}Nevar uzsākt servera darbību STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Tika pielaista protokola kļūda un savienojums tika slēgts -STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE} Jūsu spēlētāja vārds nav iestatīts. Nosaukumu var iestatīt vMultiplayer loga augšdaļā -STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE} Jūsu servera nosaukums nav iestatīts. Nosaukumu var iestatīt Multiplayer loga augšdaļā +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE} Jūsu spēlētāja vārds nav iestatīts. Nosaukumu var iestatīt šī loga augšdaļā +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE} Jūsu servera nosaukums nav iestatīts. Nosaukumu var iestatīt vairākspēlētāju loga augšdaļā STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Klienta pārskats neatbilst servera pārskatam STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nepareiza parole STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveris ir pilns diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 0a0f383213645..03d1b45f7a637 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1896,6 +1896,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Išjungta STR_CONFIG_SETTING_NOSERVICE :Atjungti techninę apžiūrą, jei gedimai nenaudojami: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Jeigu įjungta, tada automobiliams nebus atliekama techninė apžiūra, jeigu jie negalės sugesti + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktyvinti vagonų greičio apribojimą: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Įgalinus šią nuostatą, vagonų didžiausias leistinas greitis įtakos viso traukinio greitį diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 75bd422bab641..ffb6784765fb9 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1709,6 +1709,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Ausgeschalt STR_CONFIG_SETTING_NOSERVICE :Revisiounen ausschalten wann Pannen op "Keng" gestallt sinn: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Wann ugeschalt, ginn Gefierer net an d'Revisioun geschéckt, wann se keng Pann kënne kréien + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Geschwindegkeetsbegrenzungen fir Waggonen: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wann ugeschalt, benotz och Geschwindegkeetslimitatiounen fir Waggonen fir d'maximal Geschwindegkeet vun engem Zuch ze definéiren diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 0fb16f81bf193..997f282c7be68 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1024,6 +1024,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#ОПкодов + STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Пристигнување на првото возило на станицата на играчот: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Пристигнување на прво возило на конкурентска станица: {STRING} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index fd0ce2af4b16b..7937c49f0c1c5 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1452,6 +1452,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Dilumpuhkan STR_CONFIG_SETTING_NOSERVICE :Servis tidak diperlukan apabila kerosakan kenderaan ditetapkan kepada tiada: {STRING} + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Benarkan had kelajuan untuk gerabak: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :Tiada landasan elektrik: {STRING} diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 7ffdb59539eb1..ac991bd2ed627 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -665,6 +665,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz + ###length 3 diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index b48c25162e723..dd33138a51396 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -971,6 +971,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :सर्व + ###length 3 diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index faddec45758ca..358a7355cbe24 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1682,6 +1682,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert STR_CONFIG_SETTING_NOSERVICE :Deaktiver vedlikehold når havarier er slått av: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Når aktivert, vil kjøretøy ikke bli vedlikeholdt hvis de ikke kan bryte sammen + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver fartsgrenser for vogner: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når aktivert, brukes også fartsgrenser til vogner for å avgjøre den maksimale hastigheten til et tog diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 46353cb2792dd..b8d4a7d35aa9a 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1526,6 +1526,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deaktivert STR_CONFIG_SETTING_NOSERVICE :Deaktiver vedlikehald når havari er slått av: {STRING} + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver fartsgrenser for vogner: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :Deaktiver elektriske tog: {STRING} diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 674f798758aca..5dc92ee66c3d7 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1412,6 +1412,7 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :درصد زما STR_CONFIG_SETTING_NOSERVICE :غیرفعال کردن تعمیر/بازنگری کلیه وسایل نقلیه وقتی که طبق تنظیمات بازی خودرو ها خراب نشوند : {STRING} + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :فعال کردن حد برای سرعت واگن: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :غیر فعال کردن ریل برقی: {STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ef7375962113c..cb35ccc3b184d 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -634,6 +634,9 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}d{P zień ni ni} +STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P a y ""} +STR_UNITS_TICKS :{COMMA}{NBSP}tyknię{P cie cia ć} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtr: @@ -1098,6 +1101,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknij STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknij na ścieżce muzycznej aby usunąć ją z wybranego programu (Wlasny1 lub Wlasny2) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Najlepsze firmy STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Biznesmen STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Przedsiębiorca @@ -1915,6 +1919,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Jazda po lewej STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Jazda po prawej STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Obrót mapy wysokości: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Wybierz kierunek obrotu mapy wysokości, aby dopasować ją do świata gry ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Przeciwnie do wsk. zegara STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Zgodnie ze wsk. zegara @@ -2035,7 +2040,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Wlącz obsług STR_CONFIG_SETTING_LOADING_INDICATORS :Pokazuj wskaźniki załadunku: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wybierz, czy wskaźnik załadunku pokazuje się nad ładowanym/rozładowywanym pojazdem +STR_CONFIG_SETTING_TIMETABLE_MODE :Jednostki czasu w rozkładach jazdy: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Wybierz jednostki czasu używane w rozkładach jazdy pojazdów ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dni +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekundy +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tyknięcia STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjazdy i odjazdy w rozkładach: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach @@ -2147,6 +2157,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Wyłączone STR_CONFIG_SETTING_NOSERVICE :Wyłącz serwisowanie jeśli awarie pojazdów są wyłączone: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kiedy włączone, pojazdy nie są serwisowane, jeśli nie mogą się popsuć +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Obniżenie prędkości załadunku pociągów dłuższych niż stacja: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Gdy opcja ta jest włączona, pociągi dłuższe od stacji ładują się wolniej niż pociągi, które mieszczą się na stacji. To ustawienie nie wpływa na znajdowanie tras. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Włącz limity prędkości wagonów: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kiedy włączone, użyj także ograniczenia prędkości dla wagonów do obliczenia maksymalnej prędkości pociągu @@ -2724,7 +2737,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nazwa gr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Ustaw hasło STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zabezpiecz grę hasłem jeśli nie chcesz, by była publicznie dostępna -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Widoczność +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Widoczność: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Czy inni ludzie mogą zobaczyć twój serwer na publicznej liście STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" ów ów} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Dopuszczalna liczba klientów: @@ -3579,11 +3592,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Rozmiar STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Wybierz rozmiar mapy w kwadratach. Liczba dostępnych kwadratów będzie nieco mniejsza STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Liczba miast: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Wybierz gęstość rozmieszczenia miast lub podaj ich określoną liczbę STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nazwy miast: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Wybierz styl nazw miast STR_MAPGEN_DATE :{BLACK}Data: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Wybierz datę początkową STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Liczba przedsiębiorstw: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Wybierz gęstość rozmieszczenia przedsiębiorstw lub podaj ich określoną liczbę STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Najwyższy szczyt: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Wybierz najwyższy szczyt, który gra spróbuje utworzyć, mierzony wysokością nad poziomem wody STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Zwiększ wysokość najwyższego szczytu na mapie o jeden poziom STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Zmniejsz wysokość najwyższego szczytu na mapie o jeden poziom STR_MAPGEN_SNOW_COVERAGE :{BLACK}Pokrycie śniegiem: @@ -3596,10 +3613,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Zmniejsz STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Typ terenu: STR_MAPGEN_SEA_LEVEL :{BLACK}Poziom wody: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Określ wysokość poziomu wody STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Liczba rzek: STR_MAPGEN_SMOOTHNESS :{BLACK}Gładkość: STR_MAPGEN_VARIETY :{BLACK}Różnorodność: STR_MAPGEN_GENERATE :{WHITE}Stwórz +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Stwórz świat i graj w OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Ustawienia NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Wyświetl ustawienia NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Ustawienia SI @@ -3632,6 +3651,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Katalońskie # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Krańce mapy: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Wybierz obrzeża świata gry STR_MAPGEN_NORTHWEST :{BLACK}Płn.-zach. STR_MAPGEN_NORTHEAST :{BLACK}Płn.-wsch. STR_MAPGEN_SOUTHEAST :{BLACK}Płd.-wsch. @@ -3644,7 +3664,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Użytkow STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Obrót mapy wysokości: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nazwa mapy wysokosci: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Nazwa pliku obrazu mapy wysokości STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Rozmiar: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Rozmiar źródłowego obrazu mapy wysokości. Aby uzyskać najlepsze wyniki, każda krawędź powinna odpowiadać dostępnej długości krawędzi mapy w OpenTTD, takiej jak 256, 512, 1024 itd. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Żądana wysokość najwyższego szczytu @@ -3659,6 +3681,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Płaski STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Stwórz płaski świat STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Losowy teren STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Wysokość płaskiego świata: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Wybierz wysokość terenu nad poziomem morza STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Obniż wysokość terenu o jeden w dół STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Podnieś wysokość terenu o jeden w górę @@ -4958,8 +4981,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ten poja STR_TIMETABLE_STATUS_LATE :{BLACK}Ten pojazd jest teraz spóźniony o {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Ten pojazd spieszy się teraz o {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ten rozkład jazdy jeszcze się nie rozpoczął +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Ten rozkład jazdy rozpocznie się {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Ten rozkład jazdy rozpocznie się za {COMMA} sekund{P ę y ""} +STR_TIMETABLE_START :{BLACK}Początek rozkładu +STR_TIMETABLE_START_TOOLTIP :{BLACK}Wybierz moment rozpoczęcia tego rozkładu jazdy. Ctrl+klik rozłoży równomiernie momenty startu wszystkich pojazdów współdzielących te polecenia w oparciu o ich względną kolejność, o ile rozkład jest w pełni zaplanowany +STR_TIMETABLE_START_SECONDS_QUERY :Sekundy do uruchomienia rozkładu jazdy STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmień czas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmień ilość czasu, jaką powinno zająć zaznaczone polecenie. Ctrl+klik ustala czas dla wszystkich poleceń @@ -4983,6 +5011,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Wymagany STR_TIMETABLE_SCHEDULED :{BLACK}Zaplanowany STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Przełącz między spodziewanymi i zaplanowanymi +STR_TIMETABLE_ARRIVAL_DATE :P: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :O: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :P: {COLOUR}{COMMA} s +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :O: {COLOUR}{COMMA} s # Date window (for timetable) @@ -5010,9 +5042,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Uwzględ STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Przełącz uwzględnianie wielkości liter przy porównywaniu wyrazu przerywającego STR_AI_DEBUG_CONTINUE :{BLACK}Kontynuuj STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Odpauzowanie i kontynuuowanie SI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Pokaż okno debugowania tej SI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Pokaż okno debugowania tej SI. Ctrl+klik otworzy w nowym oknie STR_AI_GAME_SCRIPT :{BLACK}Game Script -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sprawdź log Game Script +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sprawdź log Game Script. Ctrl+klik otworzy w nowym oknie STR_ERROR_AI_NO_AI_FOUND :Nie znaleziono SI do wczytania.{}SI jest nieaktywne i nic nie robi.{}Możesz pobrać kilka SI z przeglądarki „Dodatków Online” STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Jeden z uruchomionych skryptów przestał działać. Prosimy o zgłoszenie tego autorowi skryptu dołączając zrzut ekranu okna debugowania SI / GameScript diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 936f9e80d94fa..3c2fe30e35ba5 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -904,7 +904,7 @@ STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} não consegue chegar ao próximo destino pois está fora de alcance STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} parou porque a ordem de adaptação falhou -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}{VEHICLE} falhou na Auto-renovação{}{STRING} +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Auto-renovação falhou para {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Novo modelo de {STRING} agora disponível! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -1778,6 +1778,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado STR_CONFIG_SETTING_NOSERVICE :Não fazer manutenção quando não há avarias: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativo, os veículos não farão manutenção se não puderem avariar +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Penalidade de velocidade de carregamento para comboios mais compridos do que a estação: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Quando ativo, os comboios que são muito compridos para a estação demoram mais tempo a carregar/encher do que um comboio que caiba na estação. Esta definição não afeta a procura de itinerários. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites de velocidade para vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando ativo, aplica também os limites de velocidade dos vagões para decidir a velocidade máxima do comboio @@ -4476,9 +4479,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como com STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :é diferente de STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :é menos que -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :é menos que ou igual a +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :é menor que ou igual a STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :é mais que -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :é mais que ou igual a +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :é maior que ou igual a STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :é verdadeiro STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :é falso diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 0c99dab235a93..03663b1d6d084 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -308,7 +308,7 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|Q STR_MEASURE_LENGTH :{BLACK}Lungime: {NUM} STR_MEASURE_AREA :{BLACK}Suprafața: {NUM} x {NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Lungime: {NUM}{}Diferența de înălțime: {HEIGHT} -STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Suprafaţa: {NUM} x {NUM}{}Diferenţa de înălţime: {HEIGHT} +STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Suprafața: {NUM} x {NUM}{}Diferența de înălțime: {HEIGHT} # These are used in buttons @@ -316,24 +316,24 @@ STR_SORT_BY_CAPTION_NAME :{BLACK}Nume STR_SORT_BY_CAPTION_DATE :{BLACK}Dată # These are used in dropdowns STR_SORT_BY_NAME :Nume -STR_SORT_BY_PRODUCTION :Producţie +STR_SORT_BY_PRODUCTION :Producție STR_SORT_BY_TYPE :Tip STR_SORT_BY_TRANSPORTED :Transportat STR_SORT_BY_NUMBER :Număr STR_SORT_BY_PROFIT_LAST_YEAR :Profit anul trecut STR_SORT_BY_PROFIT_THIS_YEAR :Profit anul acesta STR_SORT_BY_AGE :Vechime -STR_SORT_BY_RELIABILITY :Eficienţă -STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capacitatea totală în funcţie de încărcătură +STR_SORT_BY_RELIABILITY :Eficiență +STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capacitatea totală în funcție de încărcătură STR_SORT_BY_MAX_SPEED :Viteza maximă STR_SORT_BY_MODEL :Model STR_SORT_BY_VALUE :Valoare STR_SORT_BY_LENGTH :Lungime -STR_SORT_BY_LIFE_TIME :Durată de viaţă rămasă +STR_SORT_BY_LIFE_TIME :Durată de viață rămasă STR_SORT_BY_TIMETABLE_DELAY :Întârzieri -STR_SORT_BY_FACILITY :Tipul staţiei -STR_SORT_BY_WAITING_TOTAL :Încărcătură totală în aşteptare -STR_SORT_BY_WAITING_AVAILABLE :Încărcătură disponibilă în aşteptare +STR_SORT_BY_FACILITY :Tipul stației +STR_SORT_BY_WAITING_TOTAL :Încărcătură totală în așteptare +STR_SORT_BY_WAITING_AVAILABLE :Încărcătură disponibilă în așteptare STR_SORT_BY_RATING_MAX :Cel mai mare rating STR_SORT_BY_RATING_MIN :Cel mai mic rating STR_SORT_BY_ENGINE_ID :IDMotor (model clasic) @@ -345,8 +345,8 @@ STR_SORT_BY_RUNNING_COST :Cost exploatare STR_SORT_BY_POWER_VS_RUNNING_COST :Putere/Cost exploatare STR_SORT_BY_CARGO_CAPACITY :Capacitate încărcătură STR_SORT_BY_RANGE :Raza de acțiune -STR_SORT_BY_POPULATION :Populaţia -STR_SORT_BY_RATING :Cotaţie +STR_SORT_BY_POPULATION :Populația +STR_SORT_BY_RATING :Cotație STR_SORT_BY_NUM_VEHICLES :Număr de vehicule STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Profit total în anul trecut STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Profit total în acest an @@ -364,51 +364,51 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Deschide # Tooltips for the main toolbar ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauză joc -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Măreşte viteza de trecere a timpului +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Mărește viteza de trecere a timpului STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opțiuni și setări STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvare, încărcare sau abandon joc, ieșire program STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Afișează harta, vizor adițional, flux de marfă sau lista de semne -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Afişează lista cu oraşele de pe hartă -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Afişează subvenţiile -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Afişează lista cu staţiile companiei -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Afişează informaţiile financiare ale companiei -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Afişează date generale despre companie -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Afişează cartea de poveste -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Afişează lista de scopuri +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Afișează lista cu orașele de pe hartă +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Afișează subvențiile +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Afișează lista cu stațiile companiei +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Afișează informațiile financiare ale companiei +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Afișează date generale despre companie +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Afișează cartea de poveste +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Afișează lista de scopuri STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Afișează graficele și ratele plăților pentru marfă ale companiei -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Afişează clasamentul companiilor +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Afișează clasamentul companiilor STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Examinează industriile sau fondează construcția unei noi industrii STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Afișează lista cu trenurile companiei. Ctrl+clic comută afișarea listei cu grupuri/vehicule STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Afișează lista cu autovehiculele companiei. Ctrl+clic comută afișarea listei cu grupuri/vehicule STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Afișează lista cu navele companiei. Ctrl+clic comută afișarea listei cu grupuri/vehicule STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Afișează lista cu aeronavele companiei. Ctrl+clic comută afișarea listei cu grupuri/vehicule -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Măreşte imaginea -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Micşorează imaginea -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construieşte căi ferate -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construieşte drumuri +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Mărește imaginea +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Micșorează imaginea +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construiește căi ferate +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construiește drumuri STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construiește linii de tramvai -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construieşte porturi -STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construieşte aeroporturi -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Afişează instrumentele pentru modelarea terenului, plantarea copacilor, etc. -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Afişează fereastra pentru configurarea sunetului/muzicii +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construiește porturi +STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construiește aeroporturi +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Afișează instrumentele pentru modelarea terenului, plantarea copacilor, etc. +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Afișează fereastra pentru configurarea sunetului/muzicii STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Afișează ultimul mesaj (ultima știre), istoricul de mesaje sau șterge toate mesajele STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informații despre teren, captură de ecran, despre OpenTTD și unelte de dezvoltare STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Comută bara de unelte # Extra tooltips for the scenario editor toolbar -STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Salvează/încarcă scenariu, abandonează editorul, ieşire +STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Salvează/încarcă scenariu, abandonează editorul, ieșire STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor de scenarii STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Schimbă data de start cu un an înapoi STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Schimbă data de start cu un an înainte STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Click pentru a introduce anul de pornire -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Afişează harta, lista cu oraşe +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Afișează harta, lista cu orașe STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generare peisaj -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generare oraş +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generare oraș STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generare industrii -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcţii rutiere +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcții rutiere STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcție tramvai -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantează arbori. Ctrl selectează zona în diagonală. Shift comută între plantare/afişare cost estimat +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantează arbori. Ctrl selectează zona în diagonală. Shift comută între plantare/afișare cost estimat STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plasează semn STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plasați obiectul. Ctrl selectează zona în diagonală. Shift comută construirea/afișarea estimării costurilor @@ -416,35 +416,35 @@ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plasați ###length 7 STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Salvează scenariul STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Încarcă scenariu -STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Salvează harta înălţimilor -STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Încarcă harta de înălţimi +STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Salvează harta înălțimilor +STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Încarcă harta de înălțimi STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Ieșire din editorul de scenarii STR_SCENEDIT_FILE_MENU_SEPARATOR : -STR_SCENEDIT_FILE_MENU_QUIT :Ieşire din joc +STR_SCENEDIT_FILE_MENU_QUIT :Ieșire din joc # Settings menu ###length 15 -STR_SETTINGS_MENU_GAME_OPTIONS :Opţiunile jocului +STR_SETTINGS_MENU_GAME_OPTIONS :Opțiunile jocului STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Setări STR_SETTINGS_MENU_AI_SETTINGS :Setările AI STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Setări pentru scriptul jocului STR_SETTINGS_MENU_NEWGRF_SETTINGS :Setări NewGRF -STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opţiuni transparenţă -STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Afişează numele oraşelor -STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Afişează numele staţiilor -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Afişează numele punctelor de tranzit -STR_SETTINGS_MENU_SIGNS_DISPLAYED :Afişează semnele de pe hartă -STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Afişează numele și semnele competitorilor -STR_SETTINGS_MENU_FULL_ANIMATION :Animaţie completă +STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opțiuni transparență +STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Afișează numele orașelor +STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Afișează numele stațiilor +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Afișează numele punctelor de tranzit +STR_SETTINGS_MENU_SIGNS_DISPLAYED :Afișează semnele de pe hartă +STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Afișează numele și semnele competitorilor +STR_SETTINGS_MENU_FULL_ANIMATION :Animație completă STR_SETTINGS_MENU_FULL_DETAIL :Detalii grafice complete STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Peisaj transparent -STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Nume staţii/semne transparente +STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Nume stații/semne transparente # File menu STR_FILE_MENU_SAVE_GAME :Salvează jocul STR_FILE_MENU_LOAD_GAME :Încarcă joc STR_FILE_MENU_QUIT_GAME :Ieșire în meniul principal -STR_FILE_MENU_EXIT :Ieşire din joc +STR_FILE_MENU_EXIT :Ieșire din joc # Map menu STR_MAP_MENU_MAP_OF_WORLD :Harta lumii @@ -453,23 +453,23 @@ STR_MAP_MENU_LINGRAPH_LEGEND :Legenda flux î STR_MAP_MENU_SIGN_LIST :Lista de semne # Town menu -STR_TOWN_MENU_TOWN_DIRECTORY :Lista oraşelor -STR_TOWN_MENU_FOUND_TOWN :Fondează oraş +STR_TOWN_MENU_TOWN_DIRECTORY :Lista orașelor +STR_TOWN_MENU_FOUND_TOWN :Fondează oraș # Subsidies menu -STR_SUBSIDIES_MENU_SUBSIDIES :Subvenţii +STR_SUBSIDIES_MENU_SUBSIDIES :Subvenții # Graph menu -STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Profitul operaţional +STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Profitul operațional STR_GRAPH_MENU_INCOME_GRAPH :Venituri STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Număr încărcături livrate -STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Evoluţia performanţei +STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Evoluția performanței STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Valoarea companiei STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Valorile plăților pe mărfuri # Company league menu STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Clasamentul companiilor -STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Rating de performanţă detaliat +STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Rating de performanță detaliat STR_GRAPH_MENU_HIGHSCORE :Tabela cu scoruri maxime # Industry menu @@ -478,17 +478,17 @@ STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Lanțuri indust STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Obiectiv industrial nou # URailway construction menu -STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcţie cale ferată -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcţie cale ferată electrificată -STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcţie monoşină -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcţie pernă magnetică +STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcție cale ferată +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcție cale ferată electrificată +STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcție monoșină +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcție pernă magnetică # Road construction menu -STR_ROAD_MENU_ROAD_CONSTRUCTION :Construcţii rutiere +STR_ROAD_MENU_ROAD_CONSTRUCTION :Construcții rutiere STR_ROAD_MENU_TRAM_CONSTRUCTION :Construcție tramvai # Waterways construction menu -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construcţie rute acvatice +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construcție rute acvatice # Aairport construction menu STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construire aeroport @@ -507,15 +507,15 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Lista ultimelor STR_NEWS_MENU_DELETE_ALL_MESSAGES :Șterge toate mesajele # About menu -STR_ABOUT_MENU_LAND_BLOCK_INFO :Informaţii despre teren +STR_ABOUT_MENU_LAND_BLOCK_INFO :Informații despre teren STR_ABOUT_MENU_HELP :Ajutor și manuale STR_ABOUT_MENU_TOGGLE_CONSOLE :Consolă pornit/oprit -STR_ABOUT_MENU_AI_DEBUG :Depanare Inteligenţă Artificială / Script Joc +STR_ABOUT_MENU_AI_DEBUG :Depanare Inteligență Artificială / Script Joc STR_ABOUT_MENU_SCREENSHOT :Capturează ecranul STR_ABOUT_MENU_SHOW_FRAMERATE :Arată FPS STR_ABOUT_MENU_ABOUT_OPENTTD :Despre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Aliniere imagini -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Afişează/ascunde casetele de încadrare +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Afișează/ascunde casetele de încadrare STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Comutator pentru colorarea secțiunilor murdare STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Comutați contururile widgetului @@ -600,7 +600,7 @@ STR_MONTH_DEC :decembrie # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Legendă -STR_GRAPH_KEY_TOOLTIP :{BLACK}Afişează legenda graficelor +STR_GRAPH_KEY_TOOLTIP :{BLACK}Afișează legenda graficelor STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} @@ -608,8 +608,8 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Graficul profitului din operare STR_GRAPH_INCOME_CAPTION :{WHITE}Graficul veniturilor -STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unităţi de marfă livrate -STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Evaluarea performanţelor companiilor (maxim=1000) +STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unități de marfă livrate +STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Evaluarea performanțelor companiilor (maxim=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graficul valorii companiilor STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Prețurile transportului de mărfuri @@ -622,11 +622,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Nu afiș STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Comută ascunderea/afișarea graficului de marfă STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} -STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Afişează detaliile ratingului performanţei +STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Afișează detaliile ratingului performanței # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Legenda graficelor -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Click aici pentru a comuta afişarea informaţiilor despre companie +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Click aici pentru a comuta afișarea informațiilor despre companie # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Clasamentul companiilor @@ -638,11 +638,11 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervizor STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Director STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Director executiv STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director general -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Preşedinte +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Președinte STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnat # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Rating de performanţă detaliat +STR_PERFORMANCE_DETAIL :{WHITE}Rating de performanță detaliat STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detalii STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -651,7 +651,7 @@ STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Vizualiz ###length 10 STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Vehicule: -STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Staţii: +STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stații: STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Profit minim: STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Venit minim: STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Venit maxim: @@ -662,14 +662,14 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Credite: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total: ###length 10 -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Numărul de vehicule profitabile pe anul precedent. Include autovehicule, trenuri, nave şi aeronave -STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Numărul staţiilor. Se numără fiecare componentă în cazul unor staţii compuse simultan din gări, aeroporturi, porturi, staţii de autobuz, etc. +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Numărul de vehicule profitabile pe anul precedent. Include autovehicule, trenuri, nave și aeronave +STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Numărul stațiilor. Se numără fiecare componentă în cazul unor stații compuse simultan din gări, aeroporturi, porturi, stații de autobuz, etc. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Profitul vehiculului cu cele mai mici încasări (doar vehiculele mai vechi de 2 ani sunt listate) -STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Suma de bani obţinută în trimestrul cu cel mai mic profit din ultimele 12 trimestre. -STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Suma de bani obţinută în trimestrul cu cel mai mare profit din ultimele 12 trimestre. +STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Suma de bani obținută în trimestrul cu cel mai mic profit din ultimele 12 trimestre. +STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Suma de bani obținută în trimestrul cu cel mai mare profit din ultimele 12 trimestre. STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Numărul de încărcături transportate în ultimele 12 luni. STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Tipuri de mărfuri transportate în ultimele 3 luni. -STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Balanţa curentă +STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Balanța curentă STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Ponderea creditelor STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Punctajul total din numărul maxim posibil @@ -694,9 +694,9 @@ STR_MUSIC_SHUFFLE :{TINY_FONT}{BLA STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Program STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Sari la piesa precedentă din selecție STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Sari la următoarea piesă din selecție -STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Opreşte muzica -STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Porneşte muzica -STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Foloseşte aceste indicatoare pentru a regla volumul muzicii şi al efectelor sonore +STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Oprește muzica +STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Pornește muzica +STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Folosește aceste indicatoare pentru a regla volumul muzicii și al efectelor sonore STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selectează programul 'toate melodiile' STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selectează programul 'oldies' STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selectează programul 'modern' @@ -711,9 +711,9 @@ STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Program STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Lista melodiilor STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' -STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Şterge +STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}șterge STR_PLAYLIST_CHANGE_SET :{BLACK}Schimbă setul -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Şterge programul curent (doar pentru cele personale) +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}șterge programul curent (doar pentru cele personale) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Schimbă selecția muzicală pe un alt set instalat STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click pe o melodie pentru a o adăuga în programul personal curent STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Apasă pe melodie pentru a o elimina din programul actual (doar Custom1 sau Custom2) @@ -723,7 +723,7 @@ STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLAC STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Om de afaceri STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Întreprinzător -STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industriaş +STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industriaș STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalist STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnat STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mogul @@ -731,7 +731,7 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Magnatul Secolu STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} a dobândit titlul de '{STRING}'! -STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} al {COMPANY} dobândeşte titlul de '{STRING}'! +STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} al {COMPANY} dobândește titlul de '{STRING}'! # Smallmap window STR_SMALLMAP_CAPTION :{WHITE}Harta - {STRING} @@ -742,7 +742,7 @@ STR_SMALLMAP_TYPE_VEHICLES :Vehicule STR_SMALLMAP_TYPE_INDUSTRIES :Industrii STR_SMALLMAP_TYPE_ROUTEMAP :Fluxul încărcăturilor STR_SMALLMAP_TYPE_ROUTES :Rute -STR_SMALLMAP_TYPE_VEGETATION :Vegetaţie +STR_SMALLMAP_TYPE_VEGETATION :Vegetație STR_SMALLMAP_TYPE_OWNERS :Proprietari STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Arată relieful pe hartă @@ -750,7 +750,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Arată v STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Arată industriile pe hartă STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Arată fluxul încărcăturilor pe hartă STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Arată rutele de transport pe hartă -STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Arată vegetaţia pe hartă +STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Arată vegetația pe hartă STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Arată proprietarii de teren pe hartă STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Click pe tipul de industrie pentru a comuta afișarea acestuia. Ctrl+clic dezactivează toate tipurile cu excepția celui selectat. Ctrl+clic din nou pentru a reactiva toate tipurile de industrii STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Click pe o companie pentru a comuta afișarea proprietăților acesteia. Ctrl-Click dezactivează toate companiile cu excepția celei selectate. Ctrl-Click din nou pentru a activa toate companiile @@ -758,7 +758,7 @@ STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Dă clic STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Drumuri STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Căi ferate -STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Staţii/Aeroporturi/Porturi +STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Stații/Aeroporturi/Porturi STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES :{TINY_FONT}{BLACK}Clădiri/Industrii STR_SMALLMAP_LEGENDA_VEHICLES :{TINY_FONT}{BLACK}Vehicule STR_SMALLMAP_LEGENDA_TRAINS :{TINY_FONT}{BLACK}Trenuri @@ -769,11 +769,11 @@ STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Pădure STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Gară STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Loc încărcare camioane -STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Staţie de autobuz +STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Stație de autobuz STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Aeroport/Heliport STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Port STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Teren pietros -STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Pajişte +STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Pajiște STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Teren viran STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Pădure tropicală STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Teren agricol @@ -781,23 +781,23 @@ STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Pietre STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Apă STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Fără proprietar -STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Oraşe +STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Orașe STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Industrii -STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Deşert +STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Deșert STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Zăpadă -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Comutator pentru afișarea numele oraşelor pe hartă -STR_SMALLMAP_CENTER :{BLACK}Centrează harta mică la poziţia actuală +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Comutator pentru afișarea numele orașelor pe hartă +STR_SMALLMAP_CENTER :{BLACK}Centrează harta mică la poziția actuală STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} STR_SMALLMAP_DISABLE_ALL :{BLACK}Dezactivează toate STR_SMALLMAP_ENABLE_ALL :{BLACK}Activează toate -STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Afişează înălţimea -STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Nu afişa nicio industrie pe hartă -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Afişează toate industriile pe hartă -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Comută afişarea hărţii de înălţimi +STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Afișează înălțimea +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Nu afișa nicio industrie pe hartă +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Afișează toate industriile pe hartă +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Comută afișarea hărții de înălțimi STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nu se afisează proprietățile companiilor pe hartă STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Afișează toate proprietățile companiei pe hartă STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Nu afișa tipuri de încărcături pe hartă @@ -821,67 +821,67 @@ STR_MESSAGE_NEWS_FORMAT :{STRING} - {S STR_NEWS_MESSAGE_CAPTION :{WHITE}Mesaj STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING} -STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte primul tren la {STATION}! -STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte primul autobuz la {STATION}! -STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte primul camion la {STATION}! -STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte primul tramvai pentru călători la {STATION}! -STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte primul tramvai pentru marfă la {STATION}! -STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte prima navă la {STATION}! -STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cetăţenii sărbătoresc . . .{}Soseşte prima aeronavă la {STATION}! +STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește primul tren la {STATION}! +STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește primul autobuz la {STATION}! +STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește primul camion la {STATION}! +STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește primul tramvai pentru călători la {STATION}! +STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește primul tramvai pentru marfă la {STATION}! +STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește prima navă la {STATION}! +STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cetățenii sărbătoresc . . .{}Sosește prima aeronavă la {STATION}! STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Accident feroviar!{}{COMMA} victime în urma coliziunii STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Accident rutier!{}Șoferul a decedat în urma coliziunii cu un tren STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Accident rutier!{}{COMMA} victime în urma coliziunii cu un tren -STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Accident aviatic!{}{COMMA} victime în urma prăbuşirii de la {STATION} +STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Accident aviatic!{}{COMMA} victime în urma prăbușirii de la {STATION} STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Accident aviatic!{}Aeronava a rămas fără combustibil, {COMMA} victime în urma dezastrului STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Accident de zepelin la {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Autovehicul distrus în urma coliziunii cu un OZN! STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Explozie la o rafinărie de lângă {TOWN}! -STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fabrică distrusă în condiţii misterioase lângă {TOWN}! +STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fabrică distrusă în condiții misterioase lângă {TOWN}! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}Un OZN a aterizat lângă {TOWN}! -STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Prăbuşirea unei mine de cărbune lângă {TOWN} provoacă daune majore! -STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundaţii!{}Se estimează cel puţin {COMMA} victime! +STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Prăbușirea unei mine de cărbune lângă {TOWN} provoacă daune majore! +STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundații!{}Se estimează cel puțin {COMMA} victime! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Companie de transport cu probleme! -STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} va fi vândută sau declarată în faliment dacă situaţia financiară nu se va îmbunătăţi curând! +STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} va fi vândută sau declarată în faliment dacă situația financiară nu se va îmbunătăți curând! STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Fuziune între companii de transport! -STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} a fost vândută companiei {STRING} la preţul de {CURRENCY_LONG}! +STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} a fost vândută companiei {STRING} la prețul de {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Faliment! -STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}Compania {STRING} a fost închisă şi toate activele au fost valorificate de creditori! +STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}Compania {STRING} a fost închisă și toate activele au fost valorificate de creditori! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}A apărut o nouă companie de transport! -STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} şi-a stabilit sediul lângă {TOWN}! +STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} și-a stabilit sediul lângă {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} a fost preluată de {STRING} pentru o sumă nedezvăluită! -STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Preşedinte) +STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Președinte) -STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} a sponsorizat construcţia unui nou oras {TOWN}! +STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} a sponsorizat construcția unui nou oras {TOWN}! STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Un nou oraș, numit {TOWN}, a fost construit! -STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Un nou obiectiv industrial ({STRING}) se construieşte lângă {TOWN}! +STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Un nou obiectiv industrial ({STRING}) se construiește lângă {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}O nouă {STRING} se plantează lângă {TOWN}! -STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anunţă închiderea iminentă! +STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anunță închiderea iminentă! STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemele de aprovizionare provoacă închiderea iminentă a {STRING}! STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Lipsa de teren împădurit provoacă închiderea {STRING}! -STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Uniunea Monetară Europeană!{}{}Euro este introdus în ţară ca monedă unică de folosinţă în tranzacţiile zilnice! -STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Recesiune mondială!{}{}Experţii financiari se tem de ceea ce e mai rău odată cu prăbuşirea economică! -STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Recesiunea s-a încheiat!{}{}Creşterea comerţului dă încredere industriei, iar economia se redresează! +STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Uniunea Monetară Europeană!{}{}Euro este introdus în țară ca monedă unică de folosință în tranzacțiile zilnice! +STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Recesiune mondială!{}{}Experții financiari se tem de ceea ce e mai rău odată cu prăbușirea economică! +STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Recesiunea s-a încheiat!{}{}Creșterea comerțului dă încredere industriei, iar economia se redresează! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} măreşte producţia! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Rezerve noi de cărbune la {INDUSTRY}!{}Se preconizează dublarea producţiei! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Rezerve noi de petrol la {INDUSTRY}!{}Se preconizează dublarea producţiei! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Noile tehnologii folosite la {INDUSTRY} vor aduce dublarea producţiei! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Producţia de {STRING} de la {INDUSTRY} crește cu {COMMA}%! -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} scade producţia cu 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insectele cauzează distrugeri masive la {INDUSTRY}!{}Producţia scade cu 50% -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Producţia de {STRING} de la {INDUSTRY} scade cu {COMMA}%! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} mărește producția! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Rezerve noi de cărbune la {INDUSTRY}!{}Se preconizează dublarea producției! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Rezerve noi de petrol la {INDUSTRY}!{}Se preconizează dublarea producției! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Noile tehnologii folosite la {INDUSTRY} vor aduce dublarea producției! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Producția de {STRING} de la {INDUSTRY} crește cu {COMMA}%! +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} scade producția cu 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insectele cauzează distrugeri masive la {INDUSTRY}!{}Producția scade cu 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Producția de {STRING} de la {INDUSTRY} scade cu {COMMA}%! ###length VEHICLE_TYPES -STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} aşteaptă în depou -STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} aşteaptă în depou -STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} aşteaptă în depou -STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} aşteaptă în hangar +STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} așteaptă în depou +STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} așteaptă în depou +STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} așteaptă în depou +STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} așteaptă în hangar ###next-name-looks-similar # Order review system / warnings @@ -893,14 +893,14 @@ STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} este vechi STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} este foarte vechi -STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} este foarte vechi şi trebuie înlocuit -STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} nu găseşte calea către destinaţie +STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} este foarte vechi și trebuie înlocuit +STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} nu găsește calea către destinație STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} s-a rătăcit STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}Profitul {VEHICLE} pe anul precedent a fost de {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} nu poate ajunge la următoarea destinație deoarece se află în afara razei de acțiune -STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} s-a oprit deoarece recondiţionarea programată a eşuat -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autoreînnoire eşuată pentru {VEHICLE}{}{STRING} +STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} s-a oprit deoarece recondiționarea programată a eșuat +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autoînnoire eșuată pentru {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Un nou tip de {STRING} este acum disponibil! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -911,28 +911,28 @@ STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Deschide STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} nu mai acceptă: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} acceptă acum: {CARGO_LIST} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ofertă expirată:{}{}Transportul de {STRING} de la {STRING} la {STRING} nu va mai fi subvenţionat -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Ofertă retrasă:{}{}Transportul de {STRING} de la {STRING} la {STRING} nu va mai fi subvenţionat -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvenţie oferită:{}{}Primul transport de {STRING} de la {STRING} la {STRING} va primi o subvenţie pe {NUM} {P an ani "de ani"} din partea autorităţilor locale! +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ofertă expirată:{}{}Transportul de {STRING} de la {STRING} la {STRING} nu va mai fi subvenționat +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Ofertă retrasă:{}{}Transportul de {STRING} de la {STRING} la {STRING} nu va mai fi subvenționat +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvenție oferită:{}{}Primul transport de {STRING} de la {STRING} la {STRING} va primi o subvenție pe {NUM} {P an ani "de ani"} din partea autorităților locale! ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări cu 50% mai mari în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări duble în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări triple în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări de patru ori mai mari în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenție acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări cu 50% mai mari în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvenție acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări duble în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvenție acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări triple în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvenție acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări de patru ori mai mari în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Haos pe străzile din {TOWN}!{}{}Programul finanțat de {STRING} pentru reconstrucția străzilor aduce 6 luni de haos participanților la trafic! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopol de transport! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Autoritatea locală a oraşului {TOWN} semnează un contract cu {STRING} pentru un an de drepturi exclusive de transport! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Autoritatea locală a orașului {TOWN} semnează un contract cu {STRING} pentru un an de drepturi exclusive de transport! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Ecran {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiază în ecran -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiază locaţia ecranului principal în acest ecran +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiază locația ecranului principal în acest ecran STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Importă din ecran -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiază locaţia acestui ecran în ecranul principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiază locația acestui ecran în ecranul principal # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Opţiuni +STR_GAME_OPTIONS_CAPTION :{WHITE}Opțiuni STR_GAME_OPTIONS_TAB_GENERAL :General STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Alege setările generale @@ -961,9 +961,9 @@ STR_GAME_OPTIONS_CURRENCY_GBP :Liră sterlină STR_GAME_OPTIONS_CURRENCY_USD :Dolar american STR_GAME_OPTIONS_CURRENCY_EUR :Euro STR_GAME_OPTIONS_CURRENCY_JPY :Yen japonez -STR_GAME_OPTIONS_CURRENCY_ATS :Şiling austriac +STR_GAME_OPTIONS_CURRENCY_ATS :șiling austriac STR_GAME_OPTIONS_CURRENCY_BEF :Franc belgian -STR_GAME_OPTIONS_CURRENCY_CHF :Franc elveţian +STR_GAME_OPTIONS_CURRENCY_CHF :Franc elvețian STR_GAME_OPTIONS_CURRENCY_CZK :Coroană cehă STR_GAME_OPTIONS_CURRENCY_DEM :Marcă germană STR_GAME_OPTIONS_CURRENCY_DKK :Coroană daneză @@ -1012,14 +1012,14 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :La fiecare 60 d STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :La fiecare 120 de minute STR_GAME_OPTIONS_LANGUAGE :{BLACK}Limba -STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Alege limba în care doreşti afişată interfaţa +STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Alege limba în care dorești afișată interfața STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% finalizat) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Ecran întreg -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Bifează această căsuţă pentru a juca pe tot ecranul +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Bifează această căsuță pentru a juca pe tot ecranul -STR_GAME_OPTIONS_RESOLUTION :{BLACK}Rezoluţia ecranului -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Alege rezoluţia dorită pentru joc +STR_GAME_OPTIONS_RESOLUTION :{BLACK}Rezoluția ecranului +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Alege rezoluția dorită pentru joc STR_GAME_OPTIONS_RESOLUTION_OTHER :(alta/nespecificată) STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} @@ -1032,10 +1032,10 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Bifați STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Driver curent: {STRING} -STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Dimensiune interfaţă +STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Dimensiune interfață STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Trageți glisorul pentru a seta dimensiunea interfeței. Țineți apăsat Ctrl pentru ajustare continuă STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detectează automat dimensiunea -STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Bifați această căsuţă pentru a detecta automat dimensiunea interfeței +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Bifați această căsuță pentru a detecta automat dimensiunea interfeței STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Scalează marginile STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Bifați această casetă pentru a scala marginile în funcție de dimensiunea interfeței @@ -1063,26 +1063,26 @@ STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Ratele d STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set grafic de bază STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selectați setul de grafică de bază pe care să îl utilizați (nu poate fi schimbat în joc, doar din meniul principal) -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul grafic de bază +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informații adiționale despre setul grafic de bază STR_GAME_OPTIONS_BASE_SFX :{BLACK}Set sunete de bază STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selectați sunetele de bază setate pentru a fi utilizate (nu pot fi modificate în joc, doar din meniul principal) -STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de sunete de bază +STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informații adiționale despre setul de sunete de bază STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Setul de muzică de bază -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selectaţi setul de muzică de bază -STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de muzică de bază +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selectați setul de muzică de bază +STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informații adiționale despre setul de muzică de bază STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nu s-a putut obține lista de rezoluții suportate -STR_ERROR_FULLSCREEN_FAILED :{WHITE}Comutarea pe întreg ecranul a eşuat +STR_ERROR_FULLSCREEN_FAILED :{WHITE}Comutarea pe întreg ecranul a eșuat # Custom currency window STR_CURRENCY_WINDOW :{WHITE}Monedă proprie STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Curs de schimb: {ORANGE}{CURRENCY_LONG} = £ {COMMA} STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Scade valoarea monedei tale pentru o liră sterlină (£) -STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Măreşte valoarea monedei tale pentru o liră sterlină (£) +STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Mărește valoarea monedei tale pentru o liră sterlină (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Setează rata de schimb pentru o liră sterlină (£) STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} @@ -1137,14 +1137,14 @@ STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Personalizat ({ ###length 4 STR_RIVERS_NONE :Deloc -STR_RIVERS_FEW :Puţine +STR_RIVERS_FEW :Puține STR_RIVERS_MODERATE :Mediu STR_RIVERS_LOT :Multe ###length 3 STR_DISASTER_NONE :Deloc STR_DISASTER_REDUCED :Redus -STR_DISASTER_NORMAL :Frecvenţă normală +STR_DISASTER_NORMAL :Frecvență normală ###length 4 STR_SUBSIDY_X1_5 :x1,5 @@ -1156,7 +1156,7 @@ STR_SUBSIDY_X4 :x4 STR_CLIMATE_TEMPERATE_LANDSCAPE :peisajul temperat STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :peisajul sub-arctic STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :peisajul sub-tropical -STR_CLIMATE_TOYLAND_LANDSCAPE :peisajul 'ţara jucăriilor' +STR_CLIMATE_TOYLAND_LANDSCAPE :peisajul 'țara jucăriilor' ###length 7 STR_TERRAIN_TYPE_VERY_FLAT :Foarte plat @@ -1173,7 +1173,7 @@ STR_CITY_APPROVAL_TOLERANT :Tolerantă STR_CITY_APPROVAL_HOSTILE :Ostilă STR_CITY_APPROVAL_PERMISSIVE :Permisivă (fara efect asupra actiunilor companiei) -STR_WARNING_NO_SUITABLE_AI :{WHITE}Nu este disponibil nici un modul de Inteligenţă Artificială...{}Puteţi descărca diferite module de Inteligenţă Artificială prin sistemul de 'Resurse Online' +STR_WARNING_NO_SUITABLE_AI :{WHITE}Nu este disponibil nici un modul de Inteligență Artificială...{}Puteți descărca diferite module de Inteligență Artificială prin sistemul de 'Resurse Online' # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Setări @@ -1186,19 +1186,19 @@ STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{O STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valoare implicită: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tip setare: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Setare client (nu se stochează în salvări; se aplică pentru toate jocurile) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Setări joc (stocate în fişierele de salvare; afectează doar jocurile noi) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Setări joc (stocate în fișierele de salvare; afectează doar jocurile noi) STR_CONFIG_SETTING_TYPE_GAME_INGAME :Setări joc (stocate în fișierul de salvare; afectează doar jocul curent) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Setări companie (stocate în fişierele de salvare; afectează doar jocurile noi) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Setări companie (stocate în fişierul de salvare; afectează doar compania curentă) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Setări companie (stocate în fișierele de salvare; afectează doar jocurile noi) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Setări companie (stocate în fișierul de salvare; afectează doar compania curentă) STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Atenție! STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Această acțiune va reface toate setările jocului la valorile implicite.{}Sigur vrei să continui? STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tip: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Limitează lista de mai jos doar la setările modificate -STR_CONFIG_SETTING_RESTRICT_BASIC :Setări de bază (afişează numai setări importante) -STR_CONFIG_SETTING_RESTRICT_ADVANCED :Setări avansate (afişează majoritatea setărilor) -STR_CONFIG_SETTING_RESTRICT_ALL :Setări expert (afişează toate setările) +STR_CONFIG_SETTING_RESTRICT_BASIC :Setări de bază (afișează numai setări importante) +STR_CONFIG_SETTING_RESTRICT_ADVANCED :Setări avansate (afișează majoritatea setărilor) +STR_CONFIG_SETTING_RESTRICT_ALL :Setări expert (afișează toate setările) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Setări cu altă valoare decît cea prestabilită STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Setări cu valori diferite față de cele setate de tine pentru joc nou @@ -1287,17 +1287,17 @@ STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Nu poți seta înălțimea maximă a hărții la această valoare. Cel puțin un munte de pe hartă este mai înalt de-atât. -STR_CONFIG_SETTING_AUTOSLOPE :Permite terra-formarea sub clădiri, şine, etc. (auto-pante): {STRING} -STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite terraformarea sub clădiri şi şine fără eliminarea acestora +STR_CONFIG_SETTING_AUTOSLOPE :Permite terra-formarea sub clădiri, șine, etc. (auto-pante): {STRING} +STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite terraformarea sub clădiri și șine fără eliminarea acestora STR_CONFIG_SETTING_CATCHMENT :Permite arii de cuprindere mai realiste: {STRING} -STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Permite zone diferite de captare pentru tipuri diferite de staţii şi aeroporturi +STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Permite zone diferite de captare pentru tipuri diferite de stații și aeroporturi STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stațiile companiei pot deservi industrii cu stații neutre atașate: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Când este activată, industriile cu stații atașate (cum ar fi platformele petroliere) pot fi deservite și de stații deținute de companie construite în apropiere. Când sunt dezactivate, aceste industrii pot fi deservite numai de stațiile atașate. Orice stație a companiei din apropiere nu le va putea deservi și nici stația atașată nu va deservi altceva decât industria STR_CONFIG_SETTING_EXTRADYNAMITE :Permite demolarea unui nr. mai mare de drumuri, poduri și tunele deținute de oraș: {STRING} -STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitează eliminarea de clădiri şi infrastructură deţinute de oraş +STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitează eliminarea de clădiri și infrastructură deținute de oraș STR_CONFIG_SETTING_TRAIN_LENGTH :Lungimea maximă a trenurilor: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Configurează lungimea maximă a trenurilor @@ -1306,59 +1306,59 @@ STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} {P 0 p STR_CONFIG_SETTING_SMOKE_AMOUNT :Cantitatea de fum/ scântei ale vehiculului: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Configurează cât de mult fum sau cât de multe scântei sunt emise de vehicule -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelul de acceleraţie al trenurilor: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selectează modelul fizic pentru accelerarea trenurilor. Modelul "original" penalizează pantele în mod egal pentru toate vehiculele. Modelul "realistic" penalizează pantele şi curbele în funcţie de mai mulţi parametrii, cum ar fi lungimea şi efortul tractor +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelul de accelerație al trenurilor: {STRING} +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selectează modelul fizic pentru accelerarea trenurilor. Modelul "original" penalizează pantele în mod egal pentru toate vehiculele. Modelul "realistic" penalizează pantele și curbele în funcție de mai mulți parametrii, cum ar fi lungimea și efortul tractor STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Modelul de accelerație al vehiculelor rutiere: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selectează modelul fizic pentru accelerarea autovehiculelor. Modelul "original" penalizează pantele în mod egal pentru toate autovehiculele. Modelul "realistic" penalizează pantele şi curbele în funcţie de mai mulţi parametrii ai motorului, cum ar fi efortul tractor +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selectează modelul fizic pentru accelerarea autovehiculelor. Modelul "original" penalizează pantele în mod egal pentru toate autovehiculele. Modelul "realistic" penalizează pantele și curbele în funcție de mai mulți parametrii ai motorului, cum ar fi efortul tractor STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Înclinarea pantelor pentru trenuri: {STRING} -STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Înclinarea unui pătrăţel de pantă pentru trenuri. O valoare mai mare face urcarea mai dificilă +STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Înclinarea unui pătrățel de pantă pentru trenuri. O valoare mai mare face urcarea mai dificilă STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Înclinarea pantelor pentru autovehicule: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Înclinarea unui pătrăţel de pantă pentru autovehicule. O valoare mai mare face urcarea mai dificilă +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Înclinarea unui pătrățel de pantă pentru autovehicule. O valoare mai mare face urcarea mai dificilă -STR_CONFIG_SETTING_FORBID_90_DEG :Interzice trenurilor şi navelor să facă întoarceri la 90°: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Întoarcerile la 90 de grade au loc atunci când o bucată orizontală de şină este urmată imediat de o bucată verticală, astfel făcând trenul să întoarcă la 90 de grade când traversează muchia unui pătrăţel faţă de întoarcerile obişnuite de la 45 de grade pentru alte combinaţii de şină. Aceasta se aplică şi unghiului de întoarcere al navelor +STR_CONFIG_SETTING_FORBID_90_DEG :Interzice trenurilor și navelor să facă întoarceri la 90°: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Întoarcerile la 90 de grade au loc atunci când o bucată orizontală de șină este urmată imediat de o bucată verticală, astfel făcând trenul să întoarcă la 90 de grade când traversează muchia unui pătrățel față de întoarcerile obișnuite de la 45 de grade pentru alte combinații de șină. Aceasta se aplică și unghiului de întoarcere al navelor -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permite unirea staţiilor neînvecinate: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adăugarea de elemente unei staţii fără a atinge direct elemente existente. Necesită Ctrl+Click pentru adăugărea elementelor noi +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permite unirea stațiilor neînvecinate: {STRING} +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adăugarea de elemente unei stații fără a atinge direct elemente existente. Necesită Ctrl+Click pentru adăugărea elementelor noi -STR_CONFIG_SETTING_INFLATION :Inflaţia: {STRING} -STR_CONFIG_SETTING_INFLATION_HELPTEXT :Activează inflaţia în economie, unde costurile cresc ceva mai rapid decât plăţile +STR_CONFIG_SETTING_INFLATION :Inflația: {STRING} +STR_CONFIG_SETTING_INFLATION_HELPTEXT :Activează inflația în economie, unde costurile cresc ceva mai rapid decât plățile STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Lungimea maximă a podurilor: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Lungimea maximă pentru construcţia de poduri +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Lungimea maximă pentru construcția de poduri STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Înălțimea maximă a podurilor: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Înălțimea maximă pentru construcția de poduri STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Lungimea maximă a tunelurilor: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Lungimea maximă pentru construcţia de tuneluri +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Lungimea maximă pentru construcția de tuneluri -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Metoda manuală de construcţie a industriilor primare: {STRING} +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Metoda manuală de construcție a industriilor primare: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Metoda de finanțare a industriilor primare. „niciuna” înseamnă că nu este posibil să se finanțeze niciuna, „prospectare” înseamnă că finanțarea este posibilă, dar construcția se realizează într-un loc aleator și poate eșua, „la fel ca celelalte industrii” înseamnă că industriile de materie primă pot fi construite de către companii la fel ca industriile procesatoare, în orice locație doresc ###length 3 STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :niciuna STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :ca alte industrii -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :de prospecţie +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :de prospecție STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Zonă plată în jurul industriilor: {STRING} -STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Suprafaţa zonei plate din jurul industriilor. Aceasta asigură că există spaţiu liber în jurul industriilor pentru construcţia de şine, etc +STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Suprafața zonei plate din jurul industriilor. Aceasta asigură că există spațiu liber în jurul industriilor pentru construcția de șine, etc -STR_CONFIG_SETTING_MULTIPINDTOWN :Permite mai multe industrii similare în acelaşi oras: {STRING} +STR_CONFIG_SETTING_MULTIPINDTOWN :Permite mai multe industrii similare în același oras: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :De obicei, un oraș nu dorește mai multe industrii de același tip. Cu această setare, se permit mai multe industrii de același tip în același oraș STR_CONFIG_SETTING_SIGNALSIDE :Arată semnalele: {STRING} -STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Selectează pe care parte a şinei să fie plasate semnalele +STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Selectează pe care parte a șinei să fie plasate semnalele ###length 3 STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Pe partea stângă -STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :În direcţia de mers +STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :În direcția de mers STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Pe partea dreaptă -STR_CONFIG_SETTING_SHOWFINANCES :Afişează finanţele la sfârşitul fiecărui an: {STRING} -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Dacă este activat, fereastra de finanţe apare automat la sfârşitul fiecărui an pentru a permite inspectarea facilă a stării financiale a companiei +STR_CONFIG_SETTING_SHOWFINANCES :Afișează finanțele la sfârșitul fiecărui an: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Dacă este activat, fereastra de finanțe apare automat la sfârșitul fiecărui an pentru a permite inspectarea facilă a stării financiale a companiei STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Comenzile noi sunt implicit „fără oprire”: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :În mod normal, un vehicul va opri în fiecare stație prin care trece. Prin activarea acestei setări, va trece fără oprire prin toate stațiile în drumul către destinația finală. Notă: această setare are efect doar asupra valorii implicite pentru comenzile noi. Comenzile individuale pot fi configurate explicit cu oricare din variante @@ -1378,13 +1378,13 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :ecranul princip STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :ecranul principal STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :fiecare ecran -STR_CONFIG_SETTING_BRIBE :Permite mituirea autorităţilor locale: {STRING} +STR_CONFIG_SETTING_BRIBE :Permite mituirea autorităților locale: {STRING} STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permite companiilor să încerce să mituiască autoritatea locală. Daca încercarea este descoperită de către un inspector, compania nu va mai putea executa nici o acțiune în oraș timp de șase luni STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permite cumpărarea de drepturi exclusive de transport: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Dacă o companie cumpără drepturi exclusive de transport într-un oraș, stațiile concurenței (de pasageri și mărfuri) nu vor primi niciun fel de marfă timp de un an -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permite finaţarea clădirilor noi: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permite finațarea clădirilor noi: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite companiilor să doneze bani orașelor pentru construcția de noi locuințe STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permite finanțarea reconstrucției străzilor locale: {STRING} @@ -1412,7 +1412,7 @@ STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permite constru STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permite construirea stațiilor pe drumurile deținute de orașe: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permite construirea de stații pe drumurile aflate în proprietatea orașelor -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permite construirea staţiilor pe drumurile competitorilor: {STRING} +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permite construirea stațiilor pe drumurile competitorilor: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Permite construcția stațiilor pe drumurile construite de altă companie STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Schimbarea acestei setări nu este permisă când există vehicule în joc @@ -1445,16 +1445,16 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehiculele nu e STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :După activare, toate modelele de vehicule rămân disponibile permanent după introducerea lor STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Înnoire automată pentru vehiculele învechite: {STRING} -STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :După activare, orice vehicul care este învechit va fi reînnoit automat când condițiile de înlocuire automată sunt îndeplinite +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :După activare, orice vehicul care este învechit va fi înnoit automat când condițiile de înlocuire automată sunt îndeplinite -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Autoreînnoire când vehiculul {STRING} vârsta maximă -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Vârsta aproximativă când un vehicul ar trebui autoreînnoit +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Autoînnoire când vehiculul {STRING} vârsta maximă +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Vârsta aproximativă când un vehicul ar trebui autoînnoit ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} {P 0 lună luni "de luni"} până la STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} {P 0 lună luni "de luni"} STR_CONFIG_SETTING_AUTORENEW_MONEY :Fonduri minime pentru înnoire automată: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Suma minimă care trebuie să rămână disponibilă atunci când se face autoreînnoirea +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Suma minimă care trebuie să rămână disponibilă atunci când se face autoînnoirea STR_CONFIG_SETTING_ERRMSG_DURATION :Durata de afișare a mesajelor de eroare: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata afișării mesajelor de eroare în fereastra roșie. Unele mesaje de eroare (cele critice) nu sunt închise automat după trecerea acestei perioade, și trebuie închise manual. @@ -1465,7 +1465,7 @@ STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Plutește {COMM ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Click dreapta -STR_CONFIG_SETTING_POPULATION_IN_LABEL :Afişează populaţia unui oras lângă nume: {STRING} +STR_CONFIG_SETTING_POPULATION_IN_LABEL :Afișează populația unui oras lângă nume: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Afișează populația orașelor în numele afișate pe hartă STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosimea liniilor din grafice: {STRING} @@ -1492,7 +1492,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitatea indu STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stabilește câte industrii ar trebui generate și ce nivel ar trebui întreținut pe durata jocului STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distanța maximă de la marginea hărții pentru rafinării: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinăriile de petrol vor fi construite doar la marginea hărţii, sau pe coastă, în cazul harţilor insulare +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinăriile de petrol vor fi construite doar la marginea hărții, sau pe coastă, în cazul harților insulare STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Grosimea stratului de zăpadă: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controlează înălțimea de la care zăpada apare în peisajul sub-arctic. Zăpada afectează și generarea industriilor și cerințele de creștere a orașelor. Se poate modifica doar prin Editorul de scenarii sau este calculat prin „acoperirea cu zăpadă” @@ -1524,7 +1524,7 @@ STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Alegeți distri ###length 3 STR_CONFIG_SETTING_TREE_PLACER_NONE :Niciunul STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original -STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Îmbunătăţit +STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Îmbunătățit STR_CONFIG_SETTING_ROAD_SIDE :Autovehicule: {STRING} STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Alege banda pentru condus @@ -1533,16 +1533,16 @@ STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Alege banda pen STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Pe partea stângă STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Pe partea dreaptă -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotaţie hartă înălţimi: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotație hartă înălțimi: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Alegeți modul în care imaginea hărții de înălțime este rotită pentru a se potrivi în lumea jocului ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Spre stânga STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Spre dreapta -STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Nivelul înălţimii pentru hărţile plane: {STRING} +STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Nivelul înălțimii pentru hărțile plane: {STRING} ###length 2 -STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Una sau mai multe suprafeţe din marginea nordică nu sunt goale -STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Una sau mai multe suprafeţe din marginea hărţii nu contin apă +STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Una sau mai multe suprafețe din marginea nordică nu sunt goale +STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Una sau mai multe suprafețe din marginea hărții nu contin apă STR_CONFIG_SETTING_STATION_SPREAD :Întinderea maximă a stațiilor: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Zona maximă în care o stație se poate întinde. Valorile mari vor încetini jocul @@ -1550,7 +1550,7 @@ STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Zona maximă î STR_CONFIG_SETTING_SERVICEATHELIPAD :Service automat pentru elicoptere la helipaduri: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Efectueaza service pentru elicoptere la fiecare aterizare, chiar dacă nu există hangar acolo -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Conectează bara de instrumente pentru peisaj cu cea de construcţii feroviare/auto/navale/aeriene: {STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Conectează bara de instrumente pentru peisaj cu cea de construcții feroviare/auto/navale/aeriene: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :La deschiderea unei bare de instrumente pentru construcția unor căi de transport, deschide și bara de instrumente pentru modificarea terenului STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Culoarea terenului folosită pentru harta mică: {STRING} @@ -1579,7 +1579,7 @@ STR_CONFIG_SETTING_SCROLLMODE_LMB :Mută harta cu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Derulare ușoară vizor: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controlează modul de deplasare a imaginii din ecranul principal când se face click pe harta mică sau când se execută o comandă de deplasare către un obiect anume de pe hartă. Dacă este activată, imaginea se deplasează în mod fluid, altfel imaginea sare direct la zona dorită -STR_CONFIG_SETTING_MEASURE_TOOLTIP :Arată o indicaţie de distanţă la folosirea uneltelor de construcţie: {STRING} +STR_CONFIG_SETTING_MEASURE_TOOLTIP :Arată o indicație de distanță la folosirea uneltelor de construcție: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Afișează distanțele în pătrățele și diferențele de înălțime la mișcarea mouse-ului în timpul operațiilor de construcție STR_CONFIG_SETTING_LIVERIES :Arată culorile companiilor: {STRING} @@ -1592,10 +1592,10 @@ STR_CONFIG_SETTING_LIVERIES_ALL :Toate companiil STR_CONFIG_SETTING_PREFER_TEAMCHAT :Chat între membrii echipei folosind tasta : {STRING} STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Schimbă modul de afisare a conversatiei publice și a conversației interne a companiei, folosind tasta sau -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Viteza de derulare a hărtii pt rotiţa mouse-ului: {STRING} +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Viteza de derulare a hărtii pt rotița mouse-ului: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlează senzitivitatea roatei de scroll a mouse-ului -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Funcţia roţii mouse-ului: {STRING} +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Funcția roții mouse-ului: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Activează deplasarea imaginii folosind mouse cu roată de scroll bi-dimensională ###length 3 STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Zoom hartă @@ -1631,7 +1631,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Nu STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Da STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Da, mai puțin cele lipite -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Foloseşte formatul datei {STRING} pentru numele salvărilor +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Folosește formatul datei {STRING} pentru numele salvărilor STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formatul datei in numele salvărilor ###length 3 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :lung (31 Dec 2008) @@ -1644,15 +1644,15 @@ STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Când este acti STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Când jocul este în pauză permite: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Alege ce acțiuni se pot efectua cât timp jocul este în pauză ###length 4 -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :nicio acţiune -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :toate acţiunile non-construcție +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :nicio acțiune +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :toate acțiunile non-construcție STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :toate exceptând modificarea peisajului STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :toate acțiunile -STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Foloseşte lista avansată de vehicule: {STRING} +STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Folosește lista avansată de vehicule: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activează folosirea listelor avansate de vehicule pentru a gruparea acestor vehicule -STR_CONFIG_SETTING_LOADING_INDICATORS :Foloseşte indicatorii de încărcare: {STRING} +STR_CONFIG_SETTING_LOADING_INDICATORS :Folosește indicatorii de încărcare: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Alege dacă indicatori de încărcare sunt afișați deasupra unor vehicule care sunt în proces de încărcare sau descărcare STR_CONFIG_SETTING_TIMETABLE_MODE :Unități de timp pentru orare: {STRING} @@ -1667,7 +1667,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Arată timpii e STR_CONFIG_SETTING_QUICKGOTO :Creare rapidă a comenzilor pentru vehicule: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Preselectează cursorul "mergi la" când se deschide fereastra de comenzi -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipul implicit de şină (după joc nou/încarcare joc): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipul implicit de șină (după joc nou/încarcare joc): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipul de cale feroviară care va fi ales la pornirea sau îmcărcarea jocului. 'Prima disponibilă' alege cel mai nou tip de cale feroviară și 'Cea mai folosită' alege tipul cel mai des folosit în acel moment. ###length 3 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Prima disponibilă @@ -1677,7 +1677,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Cea mai folosit STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Arată liniile rezervate: {STRING} STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Acordă căilor feroviare rezervate o culoare diferită pentru a depista mai ușor probleme cum ar fi trenuri refuzând intrarea în secțiuni bazate pe căi stabilite anterior -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pastrează active instrumentele de construcţie după utilizare: {STRING} +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pastrează active instrumentele de construcție după utilizare: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Menține barele de construcție pentru tunele, poduri șamd deschise după folosire STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Elimină automat semnalele pe durata construcției șinelor: {STRING} @@ -1725,16 +1725,16 @@ STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Numărul maxim STR_CONFIG_SETTING_MAX_SHIPS :Nr. max. de nave per companie: {STRING} STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Numărul maxim de nave pe care o companie le poate deține -STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Dezactivează trenurile pentru jucătorii controlaţi de calculator: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Dezactivează trenurile pentru jucătorii controlați de calculator: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Prin activarea acestei opțiuni, jucătorul controlat de calculator nu poate construi trenuri -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Dezactivează autovehiculele pentru jucătorii controlaţi de calculator: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Dezactivează autovehiculele pentru jucătorii controlați de calculator: {STRING} STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Prin activarea acestei opțiuni, jucătorul controlat de calculator nu poate construi vehicule rutiere -STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Dezactivează aeronavele pentru jucătorii controlaţi de calculator: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Dezactivează aeronavele pentru jucătorii controlați de calculator: {STRING} STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Prin activarea acestei opțiuni, jucătorul controlat de calculator nu poate construi aeronave -STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Dezactivează navele pentru jucătorii controlaţi de calculator: {STRING} +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} @@ -1744,7 +1744,7 @@ 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 :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 STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Număr opcodes înainte de suspendarea scripturilor: {STRING} @@ -1768,19 +1768,20 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} {P 0 zi ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Dezactivat -STR_CONFIG_SETTING_NOSERVICE :Deactivare service când defecţiunile nu sunt active: {STRING} +STR_CONFIG_SETTING_NOSERVICE :Deactivare service când defecțiunile nu sunt active: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Dacă este activată, vehiculele nu vor întreținute dacă nu se pot defecta + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activează limite de viteză pentru vagoane: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Dacă este activată, folosește și limita de viteză a vagoanelor pentru a stabili viteza maximă a trenului -STR_CONFIG_SETTING_DISABLE_ELRAILS :Dezactivează şinele electrice: {STRING} +STR_CONFIG_SETTING_DISABLE_ELRAILS :Dezactivează șinele electrice: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Prin activarea acestei opțiuni, se dezactivează cerința de a avea cale feroviară electrificată pentru a putea folosi locomotive electrice pe această cale feroviară -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Sosirea primului vehicul la una din staţiile tale: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Sosirea primului vehicul la una din stațiile tale: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Afișează un ziar când o stație nouă a companiei primește primul vehicul -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Sosirea primului vehicul la una din staţiile competitorilor: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Sosirea primului vehicul la una din stațiile competitorilor: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Afișează un ziar când o stație nouă a unui competitor primește primul vehicul STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Accidente / dezastre: {STRING} @@ -1789,7 +1790,7 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Afișează un z STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Accidente cu vehiculele concurenților: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Afișați un ziar despre vehiculele accidentate pentru concurenți -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informaţii despre companie: {STRING} +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informații despre companie: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Afișează un ziar când o nouă companie este înființată, sau când o companie este pe cale de a intra în faliment STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Inaugurare industrii: {STRING} @@ -1801,16 +1802,16 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Afișează un z STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Schimbări economice: {STRING} STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Afișează un ziar când apar schimbări globale ale economiei -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Schimbări de producţie ale industriilor partenere cu compania: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Schimbări de producție ale industriilor partenere cu compania: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Afișează un ziar când nivelul de producție al unei industrii, deservită de companie, se schimbă -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Schimbări de producţie ale industriilor partenere cu concurenţa: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Schimbări de producție ale industriilor partenere cu concurența: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Afișează un ziar când nivelul de producție al unei industrii, deservită de competitori, se schimbă -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Alte schimbări în producţia industrială: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Alte schimbări în producția industrială: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Afișează un ziar când nivelul de producție al unei industrii, neservită de companie sau competitori, se schimbă -STR_CONFIG_SETTING_NEWS_ADVICE :Sugestii / informaţii despre vehiculele companiei: {STRING} +STR_CONFIG_SETTING_NEWS_ADVICE :Sugestii / informații despre vehiculele companiei: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Afișează mesaje referitoare la vehicule care trebuie inspectate STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Vehicule noi: {STRING} @@ -1819,17 +1820,17 @@ STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Afișează un z STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Schimbări ale acceptării mărfurilor: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Afișează mesaje referitoare la modificarea tipurilor de cargo acceptate de către stații -STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subvenţii: {STRING} +STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subvenții: {STRING} STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Afișează ziarul evenimentelor legate de subvenții -STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Informaţii generale: {STRING} +STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Informații generale: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Afișează ziarul despre evenimentele generale, precum achizițiile de drepturi exclusive sau finanțările reconstrucțiilor de drumuri ###length 3 STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Oprit STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Pe scurt STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Pe larg -STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Ştirile color apar în: {STRING} +STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :știrile color apar în: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Anul începând cu care anunțurile din ziar sunt tipărite color. Înainte de acest an, anunturile sunt monocrome (alb/negru) STR_CONFIG_SETTING_STARTING_YEAR :Anul de început al jocului: {STRING} @@ -1846,20 +1847,20 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Lin STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Înghețată -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentul din profitul pe secţiune care să fie plătit pentru alimentare: {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentul din câştig care este oferit legăturilor intermediare pentru alimentare, oferind mai mult control asupra încasărilor +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentul din profitul pe secțiune care să fie plătit pentru alimentare: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentul din câștig care este oferit legăturilor intermediare pentru alimentare, oferind mai mult control asupra încasărilor STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Când se trage cu mouse-ul, plasează semnale la fiecare: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Configurează distanța la care se vor construi semnale pe șină până la următorul obstacol (semnal, intersecție), dacă se trage cu mausul STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} {P 0 pătrățel pătrățele "de pătrățele"} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :La plasarea mai multor semale, păstrează distanţa fixă între acestea: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :La plasarea mai multor semale, păstrează distanța fixă între acestea: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Alege modul plasării de semnale la Ctrl+tragerea semnalelor. Dacă este dezactivat, semnalele sunt plasate în jurul tunelelor sau podurilor, pentru evitarea segmentelor lungi fără semnale. Dacă este activat, semnalele sunt plasate la fiecare n dale, ușurând alinierea semnalelor pe linii paralele -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Construieşte automat semafoare înainte de: {STRING} +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Construiește automat semafoare înainte de: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Alege anul din care se vor folosi semnale electrice pe calea feroviară. Înainte de acest an, se vor folosi semnale non-electrice care au aceeasi funcționalitate dar arată diferit 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 +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 @@ -1870,8 +1871,8 @@ STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Alege ce tipuri STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Doar semnale de cale STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Toate semnalele -STR_CONFIG_SETTING_TOWN_LAYOUT :Modelul drumurilor pentru oraşele noi: {STRING} -STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Poziţionarea sistemului rutier în oraşe +STR_CONFIG_SETTING_TOWN_LAYOUT :Modelul drumurilor pentru orașele noi: {STRING} +STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Poziționarea sistemului rutier în orașe ###length 5 STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :original STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :drumuri mai bune @@ -1879,7 +1880,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :grilă 2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :grilă 3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :aleator -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Oraşele pot construi drumuri: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Orașele pot construi drumuri: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permite ca orașele să construiască șosele pentru a se dezvolta. Dezactivează pentru a nu permite orașelor să construiască independent șosele STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Orașele au voie să construiască treceri la nivel cu calea ferată: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Dacă este activată, orașele vor putea să construiască treceri la nivel cu calea ferată @@ -1887,12 +1888,12 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Dacă este acti STR_CONFIG_SETTING_NOISE_LEVEL :Limitează amplasarea aeroportului în funcție de nivelul de zgomot: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permiteți orașelor să blocheze construcția aeroportului pe baza nivelului de acceptare a zgomotului, care se bazează pe populația orașului și pe dimensiunea și distanța aeroportului. Dacă această setare este dezactivată, orașele permit doar două aeroporturi, cu excepția cazului în care atitudinea autorităților locale este setată la „Permisiv”. -STR_CONFIG_SETTING_TOWN_FOUNDING :Crearea oraşelor în joc: {STRING} +STR_CONFIG_SETTING_TOWN_FOUNDING :Crearea orașelor în joc: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Dacă este activată, jucătorii pot fonda noi orașe în joc ###length 3 STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :nepermis STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :permis -STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :permis, aspect particularizat al oraşului +STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :permis, aspect particularizat al orașului STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Modalitatea de generare a cargoului dintr-un oraș: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Câtă marfa este produsă de casele dintr-un oraș, relativ la populația totală a orașului.{}Creștere pătratică: Un oraș de 2 ori mai mare generează de 4 ori mai mulți pasageri.{}Creștere liniară: Un oraș de 2 ori mai mare generează de 4 ori mai mulți pasageri. @@ -1900,7 +1901,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Câtă marfa es STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Pătratică (originală) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Liniar -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Poziţionarea copacilor în joc: {STRING} +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Poziționarea copacilor în joc: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlează apariția aleatoare a copacilor în joc. Este posibil ca această opțiune să afecteze industrii care depind de creșterea copacilor, cum ar fi fabricile de cherestea ###length 4 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Cresc dar nu se extind {RED}(strică fabrica de cherestea) @@ -1908,10 +1909,10 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Cresc dar se ex STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Cresc și se extind peste tot STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Nu cresc, nu se extind {RED}(strică fabrica de cherestea) -STR_CONFIG_SETTING_TOOLBAR_POS :Poziţia barei principale de instrumente: {STRING} -STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Poziţia orizontală a barei principale în partea de sus a ecranului -STR_CONFIG_SETTING_STATUSBAR_POS :Poziţia barei de stare: {STRING} -STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Poziţia orizontală a barei principale în partea de jos a ecranului +STR_CONFIG_SETTING_TOOLBAR_POS :Poziția barei principale de instrumente: {STRING} +STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Poziția orizontală a barei principale în partea de sus a ecranului +STR_CONFIG_SETTING_STATUSBAR_POS :Poziția barei de stare: {STRING} +STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Poziția orizontală a barei principale în partea de jos a ecranului STR_CONFIG_SETTING_SNAP_RADIUS :Raza "magnetică" a ferestrelor: {STRING} STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Distanța dintre ferestre înainte ca fereastra mutată să fie alipită automat de ferestrele învecinate STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} {P 0 pixel pixeli "de pixeli"} @@ -1942,8 +1943,8 @@ STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x -STR_CONFIG_SETTING_TOWN_GROWTH :Viteza de dezvoltare a oraşului: {STRING} -STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Viteza creşterii oraşelor +STR_CONFIG_SETTING_TOWN_GROWTH :Viteza de dezvoltare a orașului: {STRING} +STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Viteza creșterii orașelor ###length 5 STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Deloc STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Lentă @@ -1951,12 +1952,12 @@ STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normală STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rapidă STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Foarte rapidă -STR_CONFIG_SETTING_LARGER_TOWNS :Proporţia oraşelor care vor deveni mari: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS :Proporția orașelor care vor deveni mari: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Numărul de orașe care devin mari, deci un oraș care pornește mai mare crește mai rapid STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 din {COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :deloc -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicator iniţial dimensiune oraş: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicator inițial dimensiune oraș: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Dimensiunea medie a orașelor mari față de orașele normale, la începutul jocului STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizează graficul de distribuție la fiecare {STRING} @@ -1966,7 +1967,7 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Durată de timp STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modalitatea de distribuire a pasagerilor: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetric" înseamnă că aproximativ același număr de pasageri va fi transportat din stația A spre stația B, precum de la B la A. "Asimetric" presupune transportul unui număr arbitrar de pasageri în fiecare direcție. "Manual" înseamnă că repartizarea pasagerilor nu va fi automatizată. -STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modalitatea de distribuire a poştei: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modalitatea de distribuire a poștei: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetric" înseamnă că aproximativ aceeași cantitate de poștă va fi expediată din stația A spre stația B, precum de la B la A. "Asimetric" presupune expedierea de cantități arbitrare de poștă în fiecare direcție. "Manual" înseamnă că repartizarea poștei nu va fi automatizată. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modalitatea de distribuire pentru clasa de cargo BLINDAT: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Clasa de marfă ARMORED conține obiecte de valoare în climat temperat, diamante în climat subtropical sau aur în climat subarctic. NewGRF-urile pot schimba asta. „Simetric” înseamnă că aproximativ aceeași cantitate din acea marfă va fi trimisă de la o stație A la o stație B ca de la B la A. „Asimetric” înseamnă că cantități arbitrare ale acelei mărfuri pot fi trimise în ambele direcții. „Manual” înseamnă că nu va avea loc nicio distribuție automată pentru acea marfă. Este recomandat să setați acest lucru la asimetric sau manual atunci când jucați subarctic sau subtropical, deoarece băncile doar primesc bunuri in aceste climate. Pentru climatul temperat, puteți alege și simetric, deoarece băncile vor trimite obiectele de valoare înapoi la banca de origine a unei încărcături. @@ -1977,20 +1978,20 @@ STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetric STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetric -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Acurateţea distribuţiei: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Acuratețea distribuției: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Cu cât setezi o valoare mai mare, cu atât mai mult timp va lua calcularea graficului de conexiuni. Dacă durează prea mult, vei sesiza întârzieri. Iar dacă setezi o valoare mică, distribuția va fi imprecisă și ai putea sesiza că anumite mărfuri nu sunt trimise unde te aștepți să ajungă. -STR_CONFIG_SETTING_DEMAND_DISTANCE :Efectul distanţei asupra cererii: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE :Efectul distanței asupra cererii: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Dacă setezi această valoare peste 0, distanța dintre stația origine A al mărfii și o posibilă stație B va afecta cantitatea de marfă trimisă din punctul A în B. Cu cât e mai departe B de A cu atât va fi mai mică cantitatea de marfă transportată. Cu cât mărești această valoare, cu atât mai puțină marfă se livrează spre destinațiile îndepărtate si cu atât mai multă la cele mai apropiate. STR_CONFIG_SETTING_DEMAND_SIZE :Cantitatea de cargo la întoarcere pentru modul simetric: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :O valoare sub 100% face distribuția simetrică să se comporte mai mult ca una asimetrică. Mai puțină marfă va fi trimisă forțat înapoi dacă o anumită cantitate este trimisă spre o stație. Dacă o setezi la 0%, distribuția simetrică se va comporta la fel ca cea asimetrică. -STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturaţia căilor de capacitate mică înainte de a utiliza căi de capacitate mare: {STRING} +STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturația căilor de capacitate mică înainte de a utiliza căi de capacitate mare: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Adesea, există mai multe căi între două stații date. Cargodist va satura mai întâi calea cea mai scurtă, apoi va folosi a doua cea mai scurtă cale până când aceasta este saturată și așa mai departe. Saturația este determinată de o estimare a capacității și a utilizării planificate. Odată ce a saturat toate căile, dacă mai rămâne cerere, va supraîncărca toate căile, preferându-le pe cele cu capacitate mare. Totuși, de cele mai multe ori algoritmul nu va estima capacitatea cu acuratețe. Această setare vă permite să specificați până la ce procent o cale mai scurtă trebuie să fie saturată în prima trecere înainte de a alege următoarea mai lungă. Setați-l la mai puțin de 100% pentru a evita stațiile supraaglomerate în caz de capacitate supraestimată. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unitate viteză (terestru): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unități de viteză (nautice): {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Afişează viteza în interfaţă folosind unităţile selectate +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Afișează viteza în interfață folosind unitățile selectate ###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) @@ -1999,35 +2000,35 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unități de jo STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Noduri STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unitate putere vehicule: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Afişează puterea vehiculelor în interfaţă folosind unităţile selectate +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Afișează puterea vehiculelor în interfață folosind unitățile selectate ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperial (cp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metric (cp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Unitate pentru greutate: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Afişează greutatea în interfaţă folosind unităţile selectate +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Afișează greutatea în interfață folosind unitățile selectate ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (t/tonă scurtă) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metric (t/tonă) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Unitate volum: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Afişează volumele în interfaţă folosind unităţile selectate +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Afișează volumele în interfață folosind unitățile selectate ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metric (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unitate efort de tracţiune: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Afişează efortul de tracţiune, denumit şi forţa de tracţiune, în interfaţă folosind unităţile selectate +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unitate efort de tracțiune: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Afișează efortul de tracțiune, denumit și forța de tracțiune, în interfață folosind unitățile selectate ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperial (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metric (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Unitate înălţime: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Afişează înălţimile în interfaţă folosind unităţile selectate +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Unitate înălțime: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Afișează înălțimile în interfață folosind unitățile selectate ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperial (ft) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metric (m) @@ -2036,25 +2037,25 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :Localizare STR_CONFIG_SETTING_GRAPHICS :Grafică STR_CONFIG_SETTING_SOUND :Efecte sonore -STR_CONFIG_SETTING_INTERFACE :Interfaţă +STR_CONFIG_SETTING_INTERFACE :Interfață STR_CONFIG_SETTING_INTERFACE_GENERAL :General STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Câmpuri vizuale -STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Construcţie +STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Construcție STR_CONFIG_SETTING_ADVISORS :Știri / Consilieri STR_CONFIG_SETTING_COMPANY :Companie STR_CONFIG_SETTING_ACCOUNTING :Contabilitate STR_CONFIG_SETTING_VEHICLES :Vehicule STR_CONFIG_SETTING_VEHICLES_PHYSICS :Fizică -STR_CONFIG_SETTING_VEHICLES_ROUTING :Direcţionare +STR_CONFIG_SETTING_VEHICLES_ROUTING :Direcționare STR_CONFIG_SETTING_LIMITATIONS :Limitări STR_CONFIG_SETTING_ACCIDENTS :Dezastre / Accidente STR_CONFIG_SETTING_GENWORLD :Generare lume STR_CONFIG_SETTING_ENVIRONMENT :Mediu STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Autorități -STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Oraşe +STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Orașe STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Industrii -STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Distribuţie cargo -STR_CONFIG_SETTING_AI :Concurenţi +STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Distribuție cargo +STR_CONFIG_SETTING_AI :Concurenți STR_CONFIG_SETTING_AI_NPC :Jucători virtuali STR_CONFIG_SETTING_NETWORK :Rețea @@ -2065,7 +2066,7 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Algoritmul de r STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Algoritm de rutare pentru nave: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Algoritmul de rutare folosit pentru nave STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Întoarcere automată la semafoare: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permite trenurilor să întoarcă la semafor, dacă aşteaptă de mult timp +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permite trenurilor să întoarcă la semafor, dacă așteaptă de mult timp ###length 2 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF :YAPF {BLUE}(Recomandat) @@ -2115,9 +2116,9 @@ STR_INTRO_NEWGRF_SETTINGS :{BLACK}Setări STR_INTRO_ONLINE_CONTENT :{BLACK}Resurse online STR_INTRO_AI_SETTINGS :{BLACK}Setări AI STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Setări pentru scriptul jocului -STR_INTRO_QUIT :{BLACK}Ieşire +STR_INTRO_QUIT :{BLACK}Ieșire -STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Începere joc nou. Ctrl+Click pentru a sări peste fereastra de configuraţie a harţii +STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Începere joc nou. Ctrl+Click pentru a sări peste fereastra de configurație a harții STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Încarcă un joc salvat STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Începe un joc nou folosind o hartă topografică pentru generarea terenului STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Începe un joc nou folosind un scenariu deja existent @@ -2127,23 +2128,23 @@ STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Începe STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Alege peisajul 'climă temperată' STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Alege peisajul 'climă sub-arctică' STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Alege peisajul 'climă sub-tropicală' -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Alege peisajul 'ţara jucăriilor' +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Alege peisajul 'țara jucăriilor' -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Afişează opţiunile jocului +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Afișează opțiunile jocului STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Afișează tabela cu scoruri maxime STR_INTRO_TOOLTIP_HELP :{BLACK}Obțineți acces la documentație și resurse online -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Setări afişare -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Afişează setările NewGRF +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Setări afișare +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Afișează setările NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verifică dacă există resurse noi sau actualizate pentru descărcare STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Afișează setările AI STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Afișează setările scriptului de joc STR_INTRO_TOOLTIP_QUIT :{BLACK}Ieși din 'OpenTTD' STR_INTRO_BASESET :{BLACK}Setul grafic actual are lipsă {NUM} {P sprite spriteuri "de spriteuri"}. Verificați actualizările pentru setul de bază. -STR_INTRO_TRANSLATION :{BLACK}Acestei traduceri îi lipse{P 0 "şte" "sc" "sc"} {NUM} {P text texte "de texte"}. Te rugăm să ajuti la îmbunătățirea OpenTTD înrolându-te ca traducător. Citește fișierul readme.txt pentru detalii. +STR_INTRO_TRANSLATION :{BLACK}Acestei traduceri îi lipse{P 0 "ște" "sc" "sc"} {NUM} {P text texte "de texte"}. Te rugăm să ajuti la îmbunătățirea OpenTTD înrolându-te ca traducător. Citește fișierul readme.txt pentru detalii. # Quit window -STR_QUIT_CAPTION :{WHITE}Ieşire din joc +STR_QUIT_CAPTION :{WHITE}Ieșire din joc STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Sigur vrei să abandonezi jocul curent? STR_QUIT_YES :{BLACK}Da STR_QUIT_NO :{BLACK}Nu @@ -2168,31 +2169,31 @@ STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunita # Cheat window STR_CHEATS :{WHITE}Cheat-uri -STR_CHEATS_TOOLTIP :{BLACK}Bifa vă indică dacă aţi folosit anterior acest cheat +STR_CHEATS_TOOLTIP :{BLACK}Bifa vă indică dacă ați folosit anterior acest cheat STR_CHEATS_NOTE :{BLACK}Notă: utilizarea acestor setări va fi memorată în salvarea jocului -STR_CHEAT_MONEY :{LTBLUE}Măreşte fondurile cu {CURRENCY_LONG} +STR_CHEAT_MONEY :{LTBLUE}Mărește fondurile cu {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Joacă drept compania: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Buldozer magic (demolează industrii și lucruri amovibile): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunelele se pot intersecta: {ORANGE}{STRING} -STR_CHEAT_NO_JETCRASH :{LTBLUE}Avioanele cu reacţie nu se vor prăbuşi (frecvent) pe aeroporturile mici: {ORANGE}{STRING} +STR_CHEAT_NO_JETCRASH :{LTBLUE}Avioanele cu reacție nu se vor prăbuși (frecvent) pe aeroporturile mici: {ORANGE}{STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Schimbă înălțimea maximă a hărții: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Schimbă înălțimea maximă a munților pe hartă STR_CHEAT_CHANGE_DATE :{LTBLUE}Schimbă data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Schimbă anul curent -STR_CHEAT_SETUP_PROD :{LTBLUE}Activează accesul la valorile de producţie: {ORANGE}{STRING} -STR_CHEAT_STATION_RATING :{LTBLUE}Remediați evaluările staţiei la 100%: {ORANGE}{STRING} +STR_CHEAT_SETUP_PROD :{LTBLUE}Activează accesul la valorile de producție: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Remediați evaluările stației la 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Schemă de culori -STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Afişează schemele generale de culori +STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Afișează schemele generale de culori STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Arată schemele de culori pentru trenuri STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Arată schemele de culori pentru autovehicule STR_LIVERY_SHIP_TOOLTIP :{BLACK}Arată schemele de culori pentru nave STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Arată schemele de culori pentru aeronave STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Alege culoarea principală pentru schema selectată. Ctrl+Click va seta această culoare pentru toate schemele STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Alege culoarea secundară pentru schema selectată. Ctrl+Click va seta această culoare pentru toate schemele -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Alege o schemă de culori pentru modificare sau mai multe scheme, folosind Ctrl+Click. Apasă pe căsuţă pentru a comuta schema +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Alege o schemă de culori pentru modificare sau mai multe scheme, folosind Ctrl+Click. Apasă pe căsuță pentru a comuta schema ###length 23 STR_LIVERY_DEFAULT :Uniforma standard @@ -2206,7 +2207,7 @@ STR_LIVERY_EMU :EMU STR_LIVERY_PASSENGER_WAGON_STEAM :Vagon călători (Aburi) STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagon călători (Diesel) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagon călători (Electric) -STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagon călători (Monoşină) +STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagon călători (Monoșină) STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagon călători (Pernă Mag.) STR_LIVERY_FREIGHT_WAGON :Vagon de marfă STR_LIVERY_BUS :Autobuz @@ -2232,27 +2233,27 @@ STR_FACE_FEMALE_TOOLTIP :{BLACK}Alege fi STR_FACE_NEW_FACE_BUTTON :{BLACK}Poză nouă STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Generează poză aleatoare STR_FACE_ADVANCED :{BLACK}Avansat -STR_FACE_ADVANCED_TOOLTIP :{BLACK}Selecţie avansată a feţei +STR_FACE_ADVANCED_TOOLTIP :{BLACK}Selecție avansată a feței STR_FACE_SIMPLE :{BLACK}Simplu -STR_FACE_SIMPLE_TOOLTIP :{BLACK}Selecţie simplă a feţei +STR_FACE_SIMPLE_TOOLTIP :{BLACK}Selecție simplă a feței STR_FACE_LOAD :{BLACK}Încărcare -STR_FACE_LOAD_TOOLTIP :{BLACK}Încarcă o faţă preferată -STR_FACE_LOAD_DONE :{WHITE}Faţa dvs. preferată a fost încărcată din fişierul de configurare al OpenTTD. -STR_FACE_FACECODE :{BLACK}Nr. faţă jucător -STR_FACE_FACECODE_TOOLTIP :{BLACK}Vizualizează şi/sau setează numărul feţei pentru președintele companiei -STR_FACE_FACECODE_CAPTION :{WHITE}Vizualizează şi/sau setează numărul feţei pentru președinte -STR_FACE_FACECODE_SET :{WHITE}Noul cod numeric pentru faţă a fost stabilit -STR_FACE_FACECODE_ERR :{WHITE}Nu am putut seta numărul de faţă al președintelui - trebuie să fie un număr între 0 şi 4.294.967.295! +STR_FACE_LOAD_TOOLTIP :{BLACK}Încarcă o față preferată +STR_FACE_LOAD_DONE :{WHITE}Fața dvs. preferată a fost încărcată din fișierul de configurare al OpenTTD. +STR_FACE_FACECODE :{BLACK}Nr. față jucător +STR_FACE_FACECODE_TOOLTIP :{BLACK}Vizualizează și/sau setează numărul feței pentru președintele companiei +STR_FACE_FACECODE_CAPTION :{WHITE}Vizualizează și/sau setează numărul feței pentru președinte +STR_FACE_FACECODE_SET :{WHITE}Noul cod numeric pentru față a fost stabilit +STR_FACE_FACECODE_ERR :{WHITE}Nu am putut seta numărul de față al președintelui - trebuie să fie un număr între 0 și 4.294.967.295! STR_FACE_SAVE :{BLACK}Salvează -STR_FACE_SAVE_TOOLTIP :{BLACK}Salvează faţa preferată -STR_FACE_SAVE_DONE :{WHITE}Această faţă va fi salvată ca faţa preferată în fişierul de configurare al OpenTTD. +STR_FACE_SAVE_TOOLTIP :{BLACK}Salvează fața preferată +STR_FACE_SAVE_DONE :{WHITE}Această față va fi salvată ca fața preferată în fișierul de configurare al OpenTTD. STR_FACE_EUROPEAN :{BLACK}European -STR_FACE_SELECT_EUROPEAN :{BLACK}Alege feţe europene +STR_FACE_SELECT_EUROPEAN :{BLACK}Alege fețe europene STR_FACE_AFRICAN :{BLACK}African -STR_FACE_SELECT_AFRICAN :{BLACK}Alege feţe africane +STR_FACE_SELECT_AFRICAN :{BLACK}Alege fețe africane STR_FACE_YES :Da STR_FACE_NO :Nu -STR_FACE_MOUSTACHE_EARRING_TOOLTIP :{BLACK}Permite mustaţă sau cercei +STR_FACE_MOUSTACHE_EARRING_TOOLTIP :{BLACK}Permite mustață sau cercei STR_FACE_HAIR :Păr: STR_FACE_HAIR_TOOLTIP :{BLACK}Schimbă părul STR_FACE_EYEBROWS :Sprâncene: @@ -2265,8 +2266,8 @@ STR_FACE_GLASSES_TOOLTIP_2 :{BLACK}Schimbă STR_FACE_NOSE :Nas: STR_FACE_NOSE_TOOLTIP :{BLACK}Schimbă nasul STR_FACE_LIPS :Buze: -STR_FACE_MOUSTACHE :Mustaţă: -STR_FACE_LIPS_MOUSTACHE_TOOLTIP :{BLACK}Schimbă buzele sau mustaţa +STR_FACE_MOUSTACHE :Mustață: +STR_FACE_LIPS_MOUSTACHE_TOOLTIP :{BLACK}Schimbă buzele sau mustața STR_FACE_CHIN :Bărbie: STR_FACE_CHIN_TOOLTIP :{BLACK}Schimbă bărbia STR_FACE_JACKET :Haină: @@ -2286,16 +2287,16 @@ STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Doar cu invita # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Numele jucătorului: -STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Acesta este numele prin care te vor identifica ceilalţi +STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Acesta este numele prin care te vor identifica ceilalți STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nume STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Numele jocului STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} -STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clienţi -STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clienţi online / Nr. max. clienţi{}Companii online / Nr. max. companii +STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clienți +STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clienți online / Nr. max. clienți{}Companii online / Nr. max. companii STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Dimensiune hartă -STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Dimensiunea hărţii jocului{}Click pentru sortarea după suprafaţă +STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Dimensiunea hărții jocului{}Click pentru sortarea după suprafață STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Data STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Data curentă STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Ani @@ -2303,13 +2304,13 @@ STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Numărul STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Limba, versiunea serverului, etc. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Click pe un joc din listă pentru a-l selecta -STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Server-ul la care v-aţi conectat data trecută: +STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Server-ul la care v-ați conectat data trecută: STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Click pentru a alege serverul de data trecută STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}INFO JOC -STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Clienţi: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} +STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Clienți: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Peisaj: {WHITE}{STRING} -STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Mărimea hărţii: {WHITE}{COMMA}x{COMMA} +STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Mărimea hărții: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Versiune server: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adresa serverului: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Cod de invitație: {WHITE}{STRING} @@ -2326,7 +2327,7 @@ STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEPOTRI STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Intră în joc STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualizează serverul -STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualizează informaţiile despre server +STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualizează informațiile despre server STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Caută pe internet STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Caută servere publice în internet @@ -2334,47 +2335,47 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Caută STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Caută servere în rețeaua locală STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adaugă un server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adaugă un server la listă. Poate să fie ori o adresă de server, ori un cod de invitație -STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Porneşte serverul -STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Porneşte un server propriu +STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Pornește serverul +STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Pornește un server propriu -STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Introduceţi numele dvs. +STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Introduceți numele dvs. STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Introdu adresa serverului sau codul invitației # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Începe un joc nou STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Nume joc: -STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Numele jocului va fi afişat celorlalţi jucători în meniul de selectare al jocurilor multiplayer +STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Numele jocului va fi afișat celorlalți jucători în meniul de selectare al jocurilor multiplayer STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Pune parolă -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protejează-ţi jocul cu o parolă dacă nu vrei să intre jucători neautorizaţi +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protejează-ți jocul cu o parolă dacă nu vrei să intre jucători neautorizați STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Vizibilitate STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Dacă alți oameni îți pot vedea serverul în lista publică -STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P client clienţi "de clienți"} -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Număr maxim de clienţi: -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Alege un număr maxim de clienţi. Nu trebuie ocupate toate locurile. +STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P client clienți "de clienți"} +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Număr maxim de clienți: +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Alege un număr maxim de clienți. Nu trebuie ocupate toate locurile. STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} {P companie companii "de companii"} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Companii maxim: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de companii -STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introduceţi un nume pentru joc +STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introduceți un nume pentru joc # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectare... STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} {P client clienți "de clienți"} înaintea ta STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} descărcat până acum -STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} descărcaţi până acum +STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} descărcați până acum ###length 8 STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Conectare... STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Autorizare... -STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Aşteptaţi... +STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Așteptați... STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Descărcare hartă... STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Prelucrare date... STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Înregistrare... -STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Preluare informaţii joc... -STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Preluare informaţii companie... +STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Preluare informații joc... +STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Preluare informații companie... STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Deconectare @@ -2462,36 +2463,36 @@ STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Foloseș STR_COMPANY_VIEW_JOIN :{BLACK}Intră STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Intră în joc ca membru al acestei companii STR_COMPANY_VIEW_PASSWORD :{BLACK}Parola -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Protejează-ţi compania cu o parolă pentru a preveni accesul neautorizat +STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Protejează-ți compania cu o parolă pentru a preveni accesul neautorizat STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Alege parola companiei # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Trimite STR_NETWORK_CHAT_COMPANY_CAPTION :[Echipă] : STR_NETWORK_CHAT_CLIENT_CAPTION :[Mesaj privat] {STRING}: -STR_NETWORK_CHAT_ALL_CAPTION :[Toţi] : +STR_NETWORK_CHAT_ALL_CAPTION :[Toți] : STR_NETWORK_CHAT_COMPANY :[Echipă] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_COMPANY :[Echipă] Către {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_CLIENT :[Mesaj privat] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Mesaj privat] Către {STRING}: {WHITE}{STRING} -STR_NETWORK_CHAT_ALL :[Toţi] {STRING}: {WHITE}{STRING} +STR_NETWORK_CHAT_ALL :[Toți] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Introdu textul pentru chat în retea # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nu am detectat o placă de reţea sau jocul a fost compilat fără ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nu am detectat o placă de rețea sau jocul a fost compilat fără ENABLE_NETWORK STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Conexiunea la server nu s-a efectuat în timp util sau a fost refuzată STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Nu m-am putut conecta din cauza unei nepotriviri NewGRF -STR_NETWORK_ERROR_DESYNC :{WHITE}Sincronizarea jocului în reţea a eşuat -STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Conexiunea jocului în reţea a fost întreruptă -STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Nu am reuşit să încarc jocul salvat +STR_NETWORK_ERROR_DESYNC :{WHITE}Sincronizarea jocului în rețea a eșuat +STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Conexiunea jocului în rețea a fost întreruptă +STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Nu am reușit să încarc jocul salvat STR_NETWORK_ERROR_SERVER_START :{WHITE}Serverul nu a putut fi pornit STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Eroare de protocol. Conexiunea a fost închisă STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Nu ți-ai setat numele în joc. Numele se setează din partea de sus a ferestrei Multiplayer STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Nu ai setat numele serverului. Numele se setează din partea de sus a ferestrei Multiplayer STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Versiunea acestui client este diferită de cea a serverului -STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Parolă greşită +STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Parolă greșită STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serverul este plin STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Accesul tău este interzis pe acest server STR_NETWORK_ERROR_KICKED :{WHITE}Ai fost dat afară din joc @@ -2500,7 +2501,7 @@ STR_NETWORK_ERROR_CHEATER :{WHITE}Cheat-ur STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Trimiteai prea multe comenzi către server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}A expirat timpul pentru introducerea unei parole STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Calculatorul dvs. este prea lent pentru a se sincroniza cu serverul -STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}A expirat timpul pentru descărcarea hărţii +STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}A expirat timpul pentru descărcarea hărții STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}A expirat timpul pentru conectarea la server STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Numele tău de jucător nu este valid @@ -2515,7 +2516,7 @@ STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :conexiune pierd STR_NETWORK_ERROR_CLIENT_PROTOCOL_ERROR :eroare de protocol STR_NETWORK_ERROR_CLIENT_NEWGRF_MISMATCH :Nepotrivire NewGRF STR_NETWORK_ERROR_CLIENT_NOT_AUTHORIZED :neautorizat -STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recepţionat pachet invalid sau neaşteptat +STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recepționat pachet invalid sau neașteptat STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :versiune incorectă STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nume folosit deja STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :parolă incorectă @@ -2526,8 +2527,8 @@ STR_NETWORK_ERROR_CLIENT_SERVER_FULL :server plin STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :trimitea prea multe comenzi STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :a expirat timpul alocat pentru transmiterea parolei STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :a expirat timpul alocat -STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :a expirat timpul alocat descărcării hărţii -STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :a expirat timpul alocat procesării hărţii +STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :a expirat timpul alocat descărcării hărții +STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :a expirat timpul alocat procesării hărții STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :numele clientului nu este valid # Network related errors @@ -2542,7 +2543,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Jocul încă es STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Jocul încă este în pauză ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Jocul continuă ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :număr de jucători -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :conectare clienţi +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :conectare clienți STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :script-ul jocului STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :se așteaptă pentru actualizarea graficului conexiunilor @@ -2553,11 +2554,11 @@ STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} a intrat în compania #{2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} a intrat ca spectator STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} a început o companie nouă (#{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} a ieşit din joc ({2:STRING}) +STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} a ieșit din joc ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} și-a schimbat numele în {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} a dat {2:CURRENCY_LONG} către {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serverul a închis conexiunea -STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serverul este repornit...{}Vă rugăm aşteptaţi... +STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serverul este repornit...{}Vă rugăm așteptați... STR_NETWORK_MESSAGE_KICKED :*** {STRING} a fost dat afară. Motiv: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Înregistrarea serverului a eșuat @@ -2593,9 +2594,9 @@ STR_CONTENT_DETAIL_TITLE :{SILVER}INFO RE ###length 5 STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Această resursă nu a fost selectată pentru descărcare STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Această resursă a fost selectată pentru descărcare -STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Aceasă dependinţă a fost selectată pentru descărcare +STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Aceasă dependință a fost selectată pentru descărcare STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Deja ai această resursă -STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Acestă resursă este necunoscută şi nu poate fi descărcată în OpenTTD +STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Acestă resursă este necunoscută și nu poate fi descărcată în OpenTTD STR_CONTENT_DETAIL_UPDATE :{SILVER}Acestă resursă este un înlocuitor pentru un/o {STRING} existent/ă STR_CONTENT_DETAIL_NAME :{SILVER}Nume: {WHITE}{STRING} @@ -2605,7 +2606,7 @@ STR_CONTENT_DETAIL_URL :{SILVER}URL: {W STR_CONTENT_DETAIL_TYPE :{SILVER}Tip: {WHITE}{STRING} STR_CONTENT_DETAIL_FILESIZE :{SILVER}Dimensiune: {WHITE}{BYTES} STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Selectat datorită: {WHITE}{STRING} -STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Dependinţe: {WHITE}{STRING} +STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Dependințe: {WHITE}{STRING} STR_CONTENT_DETAIL_TAGS :{SILVER}Etichete: {WHITE}{STRING} STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD a fost compilat fără suport "zlib"... STR_CONTENT_NO_ZLIB_SUB :{WHITE}... descărcarea resurselor nu este posibilă! @@ -2624,19 +2625,19 @@ STR_CONTENT_TYPE_GS_LIBRARY :Librărie scrip # Content downloading progress window STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Descarc resursele... -STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Solicit fişierele... +STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Solicit fișierele... STR_CONTENT_DOWNLOAD_FILE :{WHITE}Se descarcă {STRING} ({NUM} din {NUM}) STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Descărcare completă -STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} din {BYTES} descărcaţi ({NUM}%) +STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} din {BYTES} descărcați ({NUM}%) # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Conectarea la serverul de conținut a eșuat... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Descărcare eșuată -STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... fişierul nu poate fi scris -STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Fişierul descărcat nu a putut fi decompresat +STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... fișierul nu poate fi scris +STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Fișierul descărcat nu a putut fi decompresat STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Elemente grafice lipsă -STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD necesită elemente grafice pentru a funcționa, dar niciun pachet grafic nu a fost găsit. Permiteţi ca OpenTTD să descarce și să instaleze pachetele grafice necesare? +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD necesită elemente grafice pentru a funcționa, dar niciun pachet grafic nu a fost găsit. Permiteți ca OpenTTD să descarce și să instaleze pachetele grafice necesare? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Da, descarcă pachetele grafice STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nu, ieși din OpenTTD @@ -2645,15 +2646,15 @@ STR_MISSING_GRAPHICS_ERROR :{BLACK}Descărc STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Ieșire din OpenTTD # Transparency settings window -STR_TRANSPARENCY_CAPTION :{WHITE}Optiuni transparenţă -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Comută transparenţa pentru nume/semne. Ctrl+Click pentru blocare -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Comută transparenţa pentru arbori. Ctrl+Click pentru blocare -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Comută transparenţa pentru case. Ctrl+Click pentru blocare -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Comută transparenţa pentru industrii. Ctrl+Click pentru blocare -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Comută transparenţa pentru construcţii, precum staţii, depouri, indicatoare şi linii electrificate. Ctrl+Click pentru blocare -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Comută transparenţa pentru poduri. Ctrl+Click pentru blocare -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Comută transparenţa pentru structuri de tip faruri şi antene. Ctrl+Click pentru blocare -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Comută transparenţa pentru catenar. Ctrl+Click pentru blocare +STR_TRANSPARENCY_CAPTION :{WHITE}Optiuni transparență +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Comută transparența pentru nume/semne. Ctrl+Click pentru blocare +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Comută transparența pentru arbori. Ctrl+Click pentru blocare +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Comută transparența pentru case. Ctrl+Click pentru blocare +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Comută transparența pentru industrii. Ctrl+Click pentru blocare +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Comută transparența pentru construcții, precum stații, depouri, indicatoare și linii electrificate. Ctrl+Click pentru blocare +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Comută transparența pentru poduri. Ctrl+Click pentru blocare +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Comută transparența pentru structuri de tip faruri și antene. Ctrl+Click pentru blocare +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Comută transparența pentru catenar. Ctrl+Click pentru blocare STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Comută transparența textului pentru încărcare și cost/venit. Ctrl+Clic pentru a bloca STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Setează obiectele ca invizibile în loc de transparente @@ -2678,38 +2679,38 @@ STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Durată medie STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Aria de acoperire STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Inactiv STR_STATION_BUILD_COVERAGE_ON :{BLACK}Activ -STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Nu arăta aria de acoperire a locaţiei propuse -STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Arată aria de acoperire a locaţiei propuse +STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Nu arăta aria de acoperire a locației propuse +STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Arată aria de acoperire a locației propuse STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Acceptă: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Furnizează: {GOLD}{CARGO_LIST} STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Cost întreținere: {GOLD}{CURRENCY_SHORT}/an # Join station window -STR_JOIN_STATION_CAPTION :{WHITE}Uneşte staţia -STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Construieşte o staţie separată +STR_JOIN_STATION_CAPTION :{WHITE}Unește stația +STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Construiește o stație separată -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Uneşte punctul de tranzit -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construieşte un punct de tranzit separat +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unește punctul de tranzit +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construiește un punct de tranzit separat # Generic toolbar STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Dezactivat, deoarece momentan nu sunt vehicule disponibile pentru acest tip de infrastructură # Rail construction toolbar -STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construcţie cale ferată -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construcţie cale ferată electrificată -STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construcţie monoşină -STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construcţie pernă magnetică +STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construcție cale ferată +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construcție cale ferată electrificată +STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construcție monoșină +STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construcție pernă magnetică STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construiește o cale ferată. Ctrl comută construirea/eliminarea căii ferate. Shift comută între construire/afișare cost estimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construiește cale ferată în modul automat. Ctrl comută construirea/eliminarea căii ferate. Shift comută între construire/afișare cost estimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construiește un depou feroviar (pentru achiziție și service de trenuri). Shift comută între construire/afișare cost estimat -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Converteşte linia în punct de tranzit. Ctrl permite alipirea punctelor de tranzit distante. Shift comută între convertire/afişare cost estimat +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Convertește linia în punct de tranzit. Ctrl permite alipirea punctelor de tranzit distante. Shift comută între convertire/afișare cost estimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construiește gară. Ctrl permite alipirea stațiilor. Shift comută între construire/afișare cost estimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Plasează semnale feroviare. Ctrl comută între semafoare/semnale electrice{}Trage cu mausul pentru a construi automat semnale pe o porțiune de șină dreaptă. Apasă Ctrl pentru a construi semnale până la următoarea joncțiune{}Ctrl+Clic comută deschiderea ferestrei de selecție a tipului de semnal. Shift comută între construire/afișare cost estimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construiește un pod de cale ferată. Shift comută între construire/afișare cost estimat STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construiește un tunel feroviar. Shift comută între construire/afișare cost estimat -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Comută construcţia/înlăturarea căilor ferate, semnalelor, punctelor de tranzit şi a staţiilor. Ctrl+Click înlătură şinele din punctele de tranzit şi din staţii -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converteşte tipul de cale ferată. Shift comută între convertire/afişare cost estimat +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Comută construcția/înlăturarea căilor ferate, semnalelor, punctelor de tranzit și a stațiilor. Ctrl+Click înlătură șinele din punctele de tranzit și din stații +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Convertește tipul de cale ferată. Shift comută între convertire/afișare cost estimat STR_RAIL_NAME_RAILROAD :Cale ferată STR_RAIL_NAME_ELRAIL :Șină electrificată @@ -2733,10 +2734,10 @@ STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Alege nu STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Lungimea platformei STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Alege lungimea platformei gării STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop -STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construieşte o staţie prin drag & drop +STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construiește o stație prin drag & drop -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Alege o clasă de staţii pentru afişare -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Alege tipul de staţie pentru construcţie +STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Alege o clasă de stații pentru afișare +STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Alege tipul de stație pentru construcție STR_STATION_CLASS_DFLT :Implicită STR_STATION_CLASS_DFLT_STATION :Stație implicită @@ -2747,22 +2748,22 @@ STR_STATION_CLASS_WAYP_WAYPOINT :Punct intermedi # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Alegere semnal STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Comută afișarea tipurilor de semnal avansate -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Semnal standard (semafor){}Acesta este cel mai simplu tip de semnal, permiţând numai unui tren să fie în acelaşi bloc, la un moment dat -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Semnal de intrare (semafor){}Verde, atat timp cât există unul sau mai multe semnale verzi de ieşire din secţiunea următoare a căii ferate. Altfel indică roşu +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Semnal standard (semafor){}Acesta este cel mai simplu tip de semnal, permițând numai unui tren să fie în același bloc, la un moment dat +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Semnal de intrare (semafor){}Verde, atat timp cât există unul sau mai multe semnale verzi de ieșire din secțiunea următoare a căii ferate. Altfel indică roșu STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Semnal de ieșire (semafor){}Se comportă în același fel ca semnalul normal, dar este necesar pentru declanșarea culorii corecte la presemnalizatoarele de intrare și cele combinate STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Semnal combinat (semafor){}Semnalul combinat se comportă atât ca semnal de intrare, cât și de ieșire. Acest lucru permite construcția „arborilor” mari de presemnalizare -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Semnal de cale (semafor){}Un semnal de cale va permite trecerea în acelaşi timp în blocurile de semnale a mai multor trenuri, dacă trenurile pot găsi o cale până la un punct sigur pentru oprire. Semnalele standard de cale permit trecerea din ambele sensuri +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Semnal de cale (semafor){}Un semnal de cale va permite trecerea în același timp în blocurile de semnale a mai multor trenuri, dacă trenurile pot găsi o cale până la un punct sigur pentru oprire. Semnalele standard de cale permit trecerea din ambele sensuri STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Semnal de cale cu sens unic (semafor){}Un semnal de cale permite trecerea simultană a mai multor trenuri prin blocurile de semnale, dacă trenul poate rezerva o cale până la un punct sigur de oprire. Semnalele de cale cu sens unic permit trecerea intr-un singur sens STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Semnal standard (electric){}Acesta este cel mai simplu tip de semnal, permițând numai unui tren să fie în același bloc, la un moment dat STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Semnal de intrare (electric){}Verde, atât timp cât există unul sau mai multe semnale verzi de ieșire în secțiunea următoare a căii ferate. Altfel indică roșu STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Semnal de ieșire (electric){}Se comportă în același fel ca semnalul normal, dar este necesar pentru declanșarea culorii corecte la presemnalizatoarele de intrare și cele combinate STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Semnal combinat (electric){}Semnalul combinat se comportă atât ca semnal de intrare, cât și de ieșire. Acest lucru permite construcția „arborilor” mari de presemnalizare -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Semnal de cale (electric){}Un semnal de cale va permite trecerea în acelaşi timp în blocurile de semnale a mai multor trenuri, dacă trenurile pot găsi o cale până la un punct sigur pentru oprire. Semnalele standard de cale permit trecerea din ambele sensuri +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Semnal de cale (electric){}Un semnal de cale va permite trecerea în același timp în blocurile de semnale a mai multor trenuri, dacă trenurile pot găsi o cale până la un punct sigur pentru oprire. Semnalele standard de cale permit trecerea din ambele sensuri STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Semnal de cale cu sens unic (electric){}Un semnal de cale permite trecerea simultană a mai multor trenuri prin blocurile de semnale, dacă trenul poate rezerva o cale până la un punct sigur de oprire. Semnalele de cale cu sens unic permit trecerea intr-un singur sens STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversie semnal{}Când este selectat, clicul pe un semafor existent îl va converti în tipul și varianta selectată de semnalizare. Ctrl+clic va comuta varianta existentă. Shift+clic afișează costul estimat al conversiei STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densitatea semnalelor plasate prin tragerea cu mouse-ul STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Redu distanța semnalelor plasate prin tragerea cu mouse-ul -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Creşte densitatea semnalelor plasate prin tragerea cu mouse-ul +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Crește densitatea semnalelor plasate prin tragerea cu mouse-ul # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Alege pod de cale ferată @@ -2772,36 +2773,36 @@ STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} -STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensie, Oţel -STR_BRIDGE_NAME_GIRDER_STEEL :Grindă, Oţel -STR_BRIDGE_NAME_CANTILEVER_STEEL :Arc, Oţel +STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensie, Oțel +STR_BRIDGE_NAME_GIRDER_STEEL :Grindă, Oțel +STR_BRIDGE_NAME_CANTILEVER_STEEL :Arc, Oțel STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Suspensie, Beton STR_BRIDGE_NAME_WOODEN :Lemn STR_BRIDGE_NAME_CONCRETE :Beton -STR_BRIDGE_NAME_TUBULAR_STEEL :Tubular, Oţel +STR_BRIDGE_NAME_TUBULAR_STEEL :Tubular, Oțel STR_BRIDGE_TUBULAR_SILICON :Tubular, Silicon # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construcţii rutiere -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construcţie tramvai +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construcții rutiere +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construcție tramvai STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construiește o secțiune de șosea. Ctrl comută construirea/eliminarea șoselei. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construiește șină de tramvai. Ctrl comută construirea/eliminarea șinei. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construiește secțiune de șosea folosind modul Auto-șosea. Ctrl comută construirea/eliminarea șoselei. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construiește secțiune de șină de tramvai folosind modul Auto-tramvai. Ctrl comută construirea/eliminarea șinei. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construiește o autobază (pentru achiziție și service vehicule). Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construiește un depou de tramvaie (pentru achiziție și service vehicule). Shift comută între construire/afișare cost estimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construiește staţie de autobuz. Ctrl permite alipirea stațiilor. Shift comută între construire/afișare cost estimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construiește stație de autobuz. Ctrl permite alipirea stațiilor. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construiește stație de tramvai pentru călători. Ctrl permite alipirea stațiilor. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construiește platformă pentru camioane. Ctrl permite alipirea stațiilor. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construiește stație pentru tramvai de marfă. Ctrl permite alipirea stațiilor. Shift comută între construire/afișare cost estimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Activare/Dezactivare sensuri unice STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construiește un pod rutier. Shift comută între construire/afișare cost estimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construieşte pod pentru tramvaie. Shift comută între construire/afişare cost estimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construieşte tunel rutier. Shift comută între construire/afişare cost estimat -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construieşte tunel pentru tramvaie. Shift comută între construire/afişare cost estimat -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Comutator pentru construcţie/înlăturare şosele -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Comută construcţie/înlăturare pentru şine de tramvai +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construiește pod pentru tramvaie. Shift comută între construire/afișare cost estimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construiește tunel rutier. Shift comută între construire/afișare cost estimat +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construiește tunel pentru tramvaie. Shift comută între construire/afișare cost estimat +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Comutator pentru construcție/înlăturare șosele +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Comută construcție/înlăturare pentru șine de tramvai STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Convertește/Modernizează tipul drumului. Shift comută construcția/afișarea costului estimat STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Convertește/Modernizează tipul tramvaiului. Shift comută construcția/afișarea costului estimat @@ -2815,30 +2816,30 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Orientar STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Alege orientarea depoului de tramvaie # Road vehicle station construction window -STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientarea staţiei de autobuz -STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea staţiei de autobuz +STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientarea stației de autobuz +STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea stației de autobuz STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientarea platformei pentru camioane STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea platformei pentru camioane -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientarea staţiei de tramvai pentru călători -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea staţiei de tramvai pentru călători -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientarea staţiei de tramvai pentru marfă -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea staţiei de tramvai pentru marfă +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientarea stației de tramvai pentru călători +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea stației de tramvai pentru călători +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientarea stației de tramvai pentru marfă +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea stației de tramvai pentru marfă # Waterways toolbar (last two for SE only) -STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construcţie rute acvatice +STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construcție rute acvatice STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Rute acvatice -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construieşte canale. Shift comută între construire/afişare cost estimat -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construieşte ecluză. Shift comută între construire/afişare cost estimat +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construiește canale. Shift comută între construire/afișare cost estimat +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construiește ecluză. Shift comută între construire/afișare cost estimat STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construiește un șantier naval (pentru achiziționare și service nave). Shift comută între construire/afișare cost estimat -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construieşte port. Ctrl permite alipirea staţiilor distante. Shift comută între construire/afişare cost estimat -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Amplasează o baliză ce poate fi utilizată pentru direcţionare. Shift comută între amplasare/afişare cost estimat -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construieşte apeduct. Shift comută între construire/afişare cost estimat -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Defineşte zona apei.{}Creează un canal, excepţie când Ctrl este apăsat la nivelul mării, ce va determina inundarea împrejurimilor +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construiește port. Ctrl permite alipirea stațiilor distante. Shift comută între construire/afișare cost estimat +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Amplasează o baliză ce poate fi utilizată pentru direcționare. Shift comută între amplasare/afișare cost estimat +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construiește apeduct. Shift comută între construire/afișare cost estimat +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definește zona apei.{}Creează un canal, excepție când Ctrl este apăsat la nivelul mării, ce va determina inundarea împrejurimilor STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Amplasează râuri. Ctrl selectează aria pe diagonală # Ship depot construction window -STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientarea şantierului naval -STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea şantierului naval +STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientarea șantierului naval +STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Alege orientarea șantierului naval # Dock construction window STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Port @@ -2849,14 +2850,14 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construi # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Alege tipul de aeroport -STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Alege tipul şi mărimea aeroportului +STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Alege tipul și mărimea aeroportului STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Clasa aeroportului STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Amplasare {NUM} STR_AIRPORT_SMALL :Mic -STR_AIRPORT_CITY :Orăşenesc +STR_AIRPORT_CITY :Orășenesc STR_AIRPORT_METRO :Metropolitan -STR_AIRPORT_INTERNATIONAL :Internaţional +STR_AIRPORT_INTERNATIONAL :Internațional STR_AIRPORT_COMMUTER :Navetist STR_AIRPORT_INTERCONTINENTAL :Intercontinental STR_AIRPORT_HELIPORT :Helidrom @@ -2872,26 +2873,26 @@ STR_STATION_BUILD_NOISE :{BLACK}Zgomot g # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Modificare peisaj -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Scade altitudinea unui punct de teren. Trage cu mouse-ul pentru a coborî primul punct de teren și a nivela restul zonei la noua înălțime a acestuia. Ctrl pentru selecţie pe diagonală. -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Creşte altitudinea unui punct de teren. Trage cu mouse-ul pentru a ridica primul punct de teren și a nivela restul zonei la noua înălțime a acestuia. Ctrl pentru selecţie pe diagonală. +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Scade altitudinea unui punct de teren. Trage cu mouse-ul pentru a coborî primul punct de teren și a nivela restul zonei la noua înălțime a acestuia. Ctrl pentru selecție pe diagonală. +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Crește altitudinea unui punct de teren. Trage cu mouse-ul pentru a ridica primul punct de teren și a nivela restul zonei la noua înălțime a acestuia. Ctrl pentru selecție pe diagonală. STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelează terenul la înălțimea primului colț selectat. Ctrl pentru selecție pe diagonală STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Cumpărați teren pentru utilizare ulterioară. Ctrl selectează zona în diagonală. Shift comută construirea/afișarea estimării costurilor # Object construction window -STR_OBJECT_BUILD_CAPTION :{WHITE}Selecţia obiectelor +STR_OBJECT_BUILD_CAPTION :{WHITE}Selecția obiectelor STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selectați obiectul de construit. Ctrl selectează zona în diagonală. Shift comută construirea/afișarea estimării costurilor STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selectează clasa obiectului de construit STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Previzualizarea obiectului -STR_OBJECT_BUILD_SIZE :{BLACK}Dimensiune: {GOLD}{NUM} x {NUM} pătrăţele +STR_OBJECT_BUILD_SIZE :{BLACK}Dimensiune: {GOLD}{NUM} x {NUM} pătrățele STR_OBJECT_CLASS_LTHS :Faruri -STR_OBJECT_CLASS_TRNS :Transmiţătoare +STR_OBJECT_CLASS_TRNS :Transmițătoare # Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbori STR_PLANT_TREE_TOOLTIP :{BLACK}Alege specia de arbori de plantat. Dacă există deja un arbore în locația dorită, se vor adăuga arbori de tip mixt, indiferent de specia selectată STR_TREES_RANDOM_TYPE :{BLACK}Arbori din specii aleatoare -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantează arbori din diverse specii la întâmplare. Ctrl selectează zona în diagonală. Shift comută între plantare/afişare cost estimat +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantează arbori din diverse specii la întâmplare. Ctrl selectează zona în diagonală. Shift comută între plantare/afișare cost estimat STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Arbori aleatori STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantează aleator arbori pe uscat STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal @@ -2902,49 +2903,49 @@ STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Pădure STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantează păduri întinse prin tragerea peste peisaj. # Land generation window (SE) -STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generator suprafaţă uscat -STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plasează formaţiuni pietroase -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Defineşte suprafaţa de deşert.{}Ţine apăsat Ctrl pentru a şterge -STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Măreşte aria de editare a terenului -STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Micşorează aria de editare a terenului +STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generator suprafață uscat +STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plasează formațiuni pietroase +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definește suprafața de deșert.{}ține apăsat Ctrl pentru a șterge +STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Mărește aria de editare a terenului +STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Micșorează aria de editare a terenului STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Generează teren aleator STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Creează o hartă nouă STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Resetează peisajul -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Elimină de pe hartă toate proprietăţile deţinute de companii +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Elimină de pe hartă toate proprietățile deținute de companii STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Resetare peisaj -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Eşti sigur că vrei să elimini toate proprietăţile deţinute de companii? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ești sigur că vrei să elimini toate proprietățile deținute de companii? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Generare oraş -STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Oraş nou -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Construieşte un oraş nou. Shift+Click arată costul estimat -STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Oraş aleator -STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Construieşte un oraş într-o locaţie aleatoare -STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Mai multe oraşe aleatoare -STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Umple harta cu oraşe generate aleator +STR_FOUND_TOWN_CAPTION :{WHITE}Generare oraș +STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Oraș nou +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Construiește un oraș nou. Shift+Click arată costul estimat +STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Oraș aleator +STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Construiește un oraș într-o locație aleatoare +STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Mai multe orașe aleatoare +STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Umple harta cu orașe generate aleator STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Extinde orasele STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fă toate orașele să crească ușor -STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nume oraş: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introdu numele oraşului -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Click pentru a introduce numele oraşului +STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nume oraș: +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introdu numele orașului +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Click pentru a introduce numele orașului STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nume aleator STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Generează un nume aleator -STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Mărime oraş: +STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Mărime oraș: STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Mic STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Mediu STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Mare STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleator -STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Alege mărimea oraşului +STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Alege mărimea orașului STR_FOUND_TOWN_CITY :{BLACK}Metropolă STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Metropolele cresc mai repede decât orașele{}În funcție de setări, sunt mai mari când sunt fondate -STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Modelul drumului în oraş: -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Alege modelul de drum folosit pentru acest oraş +STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Modelul drumului în oraș: +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Alege modelul de drum folosit pentru acest oraș STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original -STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Îmbunătăţit +STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Îmbunătățit STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}Grilă 2x2 STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Grilă 3x3 STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleator @@ -2958,8 +2959,8 @@ STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Creează STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Sigure vrei să creezi multe industrii aleatoare? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospectează -STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construieşte -STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finanţează +STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construiește +STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finanțează STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Elimină toate industriile STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Elimină toate industriile prezente acum pe hartă STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Elimină toate industriile @@ -2971,12 +2972,12 @@ STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Lant de STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Industrii producătoare STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Industrii acceptante STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Case -STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Click pe industrie pentru a vedea furnizorii şi clienţii săi -STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Click pe cargo pentru a vedea furnizorii şi clienţii săi -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Lanţ industrial +STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Click pe industrie pentru a vedea furnizorii și clienții săi +STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Click pe cargo pentru a vedea furnizorii și clienții săi +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Lanț industrial STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Afișează industriile care furnizează și acceptă marfă STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link către harta mică -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selectează industriile afişate şi pe harta mică +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selectează industriile afișate și pe harta mică STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Alege tipul de marfă STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Alege tipul de marfă pe care dorești să îl afișezi STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Alege industria @@ -2987,18 +2988,18 @@ STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informa STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centrează vizorul principal pe locația dalei. Ctrl+clic deschide un vizor nou pe locația dalei STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Costul demolării: {LTBLUE}nu este cazul STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Costul demolării: {RED}{CURRENCY_LONG} -STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Încasări după curăţare: {LTBLUE}{CURRENCY_LONG} +STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Încasări după curățare: {LTBLUE}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_OWNER_N_A :nu este cazul STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Proprietar: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Proprietar al drumului: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Proprietar al şinei de tramvai: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Proprietar al șinei de tramvai: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietar al căii ferate: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritatea locală: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Niciuna STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordonate: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Data construcţiei: {LTBLUE}{DATE_LONG} -STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clasa staţiei: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tip staţie: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Data construcției: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clasa stației: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tip stație: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Clasă aeroport: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nume aeroport: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Numele dalei aeroportului: {LTBLUE}{STRING} @@ -3016,10 +3017,10 @@ STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Limită STR_LAI_CLEAR_DESCRIPTION_ROCKS :Stânci STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Teren pietros STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Teren viran -STR_LAI_CLEAR_DESCRIPTION_GRASS :Verdeaţă +STR_LAI_CLEAR_DESCRIPTION_GRASS :Verdeață STR_LAI_CLEAR_DESCRIPTION_FIELDS :Teren agricol STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Teren înzăpezit -STR_LAI_CLEAR_DESCRIPTION_DESERT :Deşert +STR_LAI_CLEAR_DESCRIPTION_DESERT :Deșert STR_LAI_RAIL_DESCRIPTION_TRACK :Cale ferată cale ferată STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Cale ferată cale ferată cu semafoare @@ -3042,28 +3043,28 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Cale ferată ca STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare de ieșire și semafoare direcționale unidirecționale STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Cale ferată cale ferată cu semafoare combo și semafoare direcționale STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare combo și semafoare direcționale unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare direcționale şi semafoare directionale unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare direcționale și semafoare directionale unidirecționale STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Cale ferată depou trenuri -STR_LAI_ROAD_DESCRIPTION_ROAD :Şosea +STR_LAI_ROAD_DESCRIPTION_ROAD :șosea STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Stradă iluminată STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Stradă cu copaci pe margine STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Autobază STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Trecere la nivel cu calea ferată -STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Şină de tramvai +STR_LAI_ROAD_DESCRIPTION_TRAMWAY :șină de tramvai # Houses come directly from their building names -STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (în construcţie) +STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (în construcție) STR_LAI_TREE_NAME_TREES :Arbori STR_LAI_TREE_NAME_RAINFOREST :Pădure tropicală -STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactuşi +STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactuși STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Gară STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar STR_LAI_STATION_DESCRIPTION_AIRPORT :Aeroport STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Platformă pentru camioane -STR_LAI_STATION_DESCRIPTION_BUS_STATION :Staţie de autobuz +STR_LAI_STATION_DESCRIPTION_BUS_STATION :Stație de autobuz STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Port STR_LAI_STATION_DESCRIPTION_BUOY :Baliză STR_LAI_STATION_DESCRIPTION_WAYPOINT :Punct de tranzit @@ -3073,24 +3074,24 @@ STR_LAI_WATER_DESCRIPTION_CANAL :Canal STR_LAI_WATER_DESCRIPTION_LOCK :Ecluză STR_LAI_WATER_DESCRIPTION_RIVER :Râu STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Coastă sau mal -STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Şantier naval +STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :șantier naval # Industries come directly from their industry names STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Tunel feroviar STR_LAI_TUNNEL_DESCRIPTION_ROAD :Tunel rutier -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Pod feroviar suspendat din oţel -STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Pod feroviar tip grindă din oţel -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Pod feroviar tip arc din oţel +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Pod feroviar suspendat din oțel +STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Pod feroviar tip grindă din oțel +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Pod feroviar tip arc din oțel STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Pod feroviar suspendat din beton STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Pod feroviar din lemn STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Pod feroviar din beton STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Pod feroviar tubular -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Pod rutier suspendat din oţel -STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Pod rutier tip grindă din oţel -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Pod rutier tip arc din oţel +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Pod rutier suspendat din oțel +STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Pod rutier tip grindă din oțel +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Pod rutier tip arc din oțel STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Pod rutier suspendat din beton armat STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Pod rutier din lemn STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Pod rutier din beton @@ -3098,7 +3099,7 @@ STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Pod rutier tubu STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Apeduct -STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Transmiţător +STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Transmițător STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Far STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sediu companie STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren în proprietatea unei companii @@ -3172,21 +3173,21 @@ STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salveaz STR_SAVELOAD_LOAD_CAPTION :{WHITE}Încarcă joc STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvează scenariu STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Încarcă scenariu -STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Încarcă harta înălţimilor -STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvează harta înălţimilor +STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Încarcă harta înălțimilor +STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Salvează harta înălțimilor STR_SAVELOAD_HOME_BUTTON :{BLACK}Click aici pentru a ajunge la directorul predefinit pentru salvări STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} liberi -STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de discuri, directoare şi fişiere cu jocuri salvate +STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de discuri, directoare și fișiere cu jocuri salvate STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Numele selectat pentru un joc salvat -STR_SAVELOAD_DELETE_BUTTON :{BLACK}Şterge -STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Şterge jocul salvat selectat +STR_SAVELOAD_DELETE_BUTTON :{BLACK}șterge +STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}șterge jocul salvat selectat STR_SAVELOAD_SAVE_BUTTON :{BLACK}Salvează STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvează cu numele selectat jocul curent STR_SAVELOAD_LOAD_BUTTON :{BLACK}Încarcă STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Încarcă salvarea selectată STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Încarcă harta selectată STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalii joc -STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nicio informaţie disponibilă +STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nicio informație disponibilă STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtru: @@ -3195,17 +3196,17 @@ STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Sigur v STR_SAVELOAD_DIRECTORY :{STRING} (listă) STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Director părinte) -STR_SAVELOAD_OSKTITLE :{BLACK}Introduceţi un nume pentru salvare +STR_SAVELOAD_OSKTITLE :{BLACK}Introduceți un nume pentru salvare # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Generare lume STR_MAPGEN_MAPSIZE :{BLACK}Mărime hartă: STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Alege mărimea hărții folosind ca unitate de măsură suprafețele. Numărul de suprafețe disponibile va fi puțin mai mic decât această valoare STR_MAPGEN_BY :{BLACK}* -STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nr. de oraşe: +STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nr. de orașe: STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selectați densitatea orașelor sau un număr personalizat STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Numele orașelor: -STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Alege naţionalitatea numelor oraşelor +STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Alege naționalitatea numelor orașelor STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selectați data de începere STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nr. de industrii: @@ -3227,21 +3228,21 @@ STR_MAPGEN_SEA_LEVEL :{BLACK}Nivelul STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Selectați nivelul mării STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Râuri: STR_MAPGEN_SMOOTHNESS :{BLACK}Netezime: -STR_MAPGEN_VARIETY :{BLACK}Distribuţia varietăţii: +STR_MAPGEN_VARIETY :{BLACK}Distribuția varietății: STR_MAPGEN_GENERATE :{WHITE}Generează STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Creează lumea și joacă OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Setări NewGRF -STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Afişează setările NewGRF +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Afișează setările NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Configurație AI STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Afișează setările AI STR_MAPGEN_GS_SETTINGS :{BLACK}Setări pentru scriptul de joc STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Afișează setările scriptului de joc ###length 21 -STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Englezeşti (Original) -STR_MAPGEN_TOWN_NAME_FRENCH :Franţuzeşti -STR_MAPGEN_TOWN_NAME_GERMAN :Nemţeşti -STR_MAPGEN_TOWN_NAME_ADDITIONAL_ENGLISH :Englezeşti (Adiţional) +STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Englezești (Original) +STR_MAPGEN_TOWN_NAME_FRENCH :Franțuzești +STR_MAPGEN_TOWN_NAME_GERMAN :Nemțești +STR_MAPGEN_TOWN_NAME_ADDITIONAL_ENGLISH :Englezești (Adițional) STR_MAPGEN_TOWN_NAME_LATIN_AMERICAN :Latino-Americane STR_MAPGEN_TOWN_NAME_SILLY :Amuzante STR_MAPGEN_TOWN_NAME_SWEDISH :Suedeze @@ -3250,14 +3251,14 @@ STR_MAPGEN_TOWN_NAME_FINNISH :Finlandeze STR_MAPGEN_TOWN_NAME_POLISH :Poloneze STR_MAPGEN_TOWN_NAME_SLOVAK :Slovace STR_MAPGEN_TOWN_NAME_NORWEGIAN :Norvegiene -STR_MAPGEN_TOWN_NAME_HUNGARIAN :Ungureşti +STR_MAPGEN_TOWN_NAME_HUNGARIAN :Ungurești STR_MAPGEN_TOWN_NAME_AUSTRIAN :Austriece -STR_MAPGEN_TOWN_NAME_ROMANIAN :Româneşti -STR_MAPGEN_TOWN_NAME_CZECH :Ceheşti -STR_MAPGEN_TOWN_NAME_SWISS :Elveţiene +STR_MAPGEN_TOWN_NAME_ROMANIAN :Românești +STR_MAPGEN_TOWN_NAME_CZECH :Cehești +STR_MAPGEN_TOWN_NAME_SWISS :Elvețiene STR_MAPGEN_TOWN_NAME_DANISH :Daneze -STR_MAPGEN_TOWN_NAME_TURKISH :Turceşti -STR_MAPGEN_TOWN_NAME_ITALIAN :Italieneşti +STR_MAPGEN_TOWN_NAME_TURKISH :Turcești +STR_MAPGEN_TOWN_NAME_ITALIAN :Italienești STR_MAPGEN_TOWN_NAME_CATALAN :Catalană # Strings for map borders at game generation @@ -3273,8 +3274,8 @@ STR_MAPGEN_BORDER_RANDOM :{BLACK}Aleator STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Aleator STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual -STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotaţie hartă înălţimi: -STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nume hartă înălţimi: +STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotație hartă înălțimi: +STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nume hartă înălțimi: STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Numele fișierului al hărții de înălțime STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Dimensiune: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Dimensiunea imaginii hărții de înălțime. Pentru cele mai bune rezultate, fiecare margine ar trebui să se potrivească cu o lungime disponibilă a marginii hărții în OpenTTD, cum ar fi 256, 512, 1024 etc. @@ -3291,25 +3292,25 @@ STR_SE_MAPGEN_CAPTION :{WHITE}Tipul sc STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Teren plat STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generează un teren plat STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Teren aleator -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Înălţimea terenului plat: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Înălțimea terenului plat: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Alegeți înălțimea terenului deasupra nivelului mării -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mută înălţimea terenului plat cu o unitate în jos -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mută înălţimea terenului plat cu o unitate în sus +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mută înălțimea terenului plat cu o unitate în jos +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mută înălțimea terenului plat cu o unitate în sus -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modifică înălţimea terenului plat +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modifică înălțimea terenului plat # Map generation progress STR_GENERATION_WORLD :{WHITE}Generez lumea... STR_GENERATION_ABORT :{BLACK}Anulează STR_GENERATION_ABORT_CAPTION :{WHITE}Anulează Generarea Lumii -STR_GENERATION_ABORT_MESSAGE :{YELLOW}Sigur doreşti să anulezi generarea? +STR_GENERATION_ABORT_MESSAGE :{YELLOW}Sigur dorești să anulezi generarea? STR_GENERATION_PROGRESS :{WHITE}{NUM}% efectuat STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generare lume STR_GENERATION_RIVER_GENERATION :{BLACK}Generarea râurilor STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori STR_GENERATION_OBJECT_GENERATION :{BLACK}Generare fixă -STR_GENERATION_CLEARING_TILES :{BLACK}Generare zonă dură şi pietroasă +STR_GENERATION_CLEARING_TILES :{BLACK}Generare zonă dură și pietroasă STR_GENERATION_SETTINGUP_GAME :{BLACK}Se configurează jocul STR_GENERATION_PREPARING_TILELOOP :{BLACK}Initializez ciclul dalelor STR_GENERATION_PREPARING_SCRIPT :{BLACK}Se rulează script-ul @@ -3317,29 +3318,29 @@ STR_GENERATION_PREPARING_GAME :{BLACK}Pregăte # NewGRF settings STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Setări NewGRF -STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informaţie detaliată NewGRF -STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Fişiere NewGRF active -STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Fişiere NewGRF inactive +STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informație detaliată NewGRF +STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Fișiere NewGRF active +STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Fișiere NewGRF inactive STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Selectează preset: STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtru: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Încarcă presetarea selectată STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Salvează presetare STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Salvează lista curentă ca presetare -STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Şterge presetarea +STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}șterge presetarea STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Șterge presetarea selectată STR_NEWGRF_SETTINGS_ADD :{BLACK}Adaugă -STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Adaugă fişierul NewGRF ales în configuraţie -STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Redetectează fişierele -STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Actualizează lista de fişiere NewGRF disponibile +STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Adaugă fișierul NewGRF ales în configurație +STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Redetectează fișierele +STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Actualizează lista de fișiere NewGRF disponibile STR_NEWGRF_SETTINGS_REMOVE :{BLACK}Elimină -STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Elimină fişierul NewGRF selectat din listă +STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Elimină fișierul NewGRF selectat din listă STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Mută în sus -STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Mută fişierul NewGRF selectat mai sus în listă +STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Mută fișierul NewGRF selectat mai sus în listă STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Mută în jos -STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mută fişierul NewGRF selectat mai jos în listă +STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mută fișierul NewGRF selectat mai jos în listă STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Upgrade STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Actualizați fișierele NewGRF pentru care aveți o versiune mai nouă instalată -STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}O listă a fişierelor NewGRF instalate +STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}O listă a fișierelor NewGRF instalate STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Setează parametri STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Afișează parametrii @@ -3350,7 +3351,7 @@ STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplică STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Caută online resursele lipsă STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Verifică dacă resursele care lipsesc pot fi găsite online -STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Nume fişier: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Nume fișier: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}ID GRF: {SILVER}{STRING} STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versiune: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Vers. minimă compatibilă: {SILVER}{NUM} @@ -3363,7 +3364,7 @@ STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nimic -STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Nicio informaţie disponibilă +STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Nicio informație disponibilă STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Niciun fisier potrivit STR_NEWGRF_SETTINGS_DISABLED :{RED}Dezactivat STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatibil cu această versiune de OpenTTD @@ -3383,7 +3384,7 @@ STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Schimba STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Schimbă parametrii NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Închide STR_NEWGRF_PARAMETERS_RESET :{BLACK}Resetează -STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Setează toţii parametrii la valorile implicite +STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Setează toții parametrii la valorile implicite STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parametru {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Număr de parametrii: {ORANGE}{NUM} @@ -3395,7 +3396,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Analizea STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} la {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Obiect -STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tip şină +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tip șină STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tip de drum STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametru variabilă 60+x NewGRF (hexadecimal) @@ -3403,13 +3404,13 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametr # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aliniere imagine {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Imaginea următoare -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mergi la următoarea imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi şi reporneşte când s-a ajuns la sfârşit +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mergi la următoarea imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi și repornește când s-a ajuns la sfârșit STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mergi la imagine STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Mergi la imaginea indicată. Dacă nu este o imagine normală, mergi la următoarea imagine normală STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Imaginea precedentă -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Mergi la precedenta imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi şi reporneşte când s-a ajuns la sfârşit +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Mergi la precedenta imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi și repornește când s-a ajuns la sfârșit STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Reprezentarea imaginii curente. Aliniamentul este ignorat -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mișcă imaginea schimbând distanțele pe axele X şi Y. Ctrl+Clic pentru mutarea imaginii câte opt unități la un pas +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mișcă imaginea schimbând distanțele pe axele X și Y. Ctrl+Clic pentru mutarea imaginii câte opt unități la un pas ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centrat @@ -3428,27 +3429,27 @@ STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Mergi la # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} -STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atenţie: {SILVER}{STRING} +STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atenție: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Eroare: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF-ul "{STRING}" a avut o eroare fatală:{}{STRING} STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-ul "{STRING}" a avut o eroare:{}{STRING} -STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nu va funcţiona cu versiunea TTDPatch raportată de OpenTTD +STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nu va funcționa cu versiunea TTDPatch raportată de OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} este pentru versiunea {2:STRING} a TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} este conceput pentru a fi folosit cu {2:STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :Parametru invalid pentru {1:STRING}: parametrul {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} trebuie să fie încărcat înaintea {2:STRING} STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} trebuie să fie încărcat după {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} necesită OpenTTD versiunea {2:STRING} sau mai nouă -STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :fişierul GRF conceput pentru traducere +STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :fișierul GRF conceput pentru traducere STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Sunt încărcate prea multe NewGRF-uri STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Încărcarea {1:STRING} ca un NewGRF static cu {2:STRING} ar putea cauza desincronizări STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Element grafic neașteptat (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Proprietate necunoscută pentru Acțiunea 0 {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Încercare de a folosi un ID invalid (sprite {3:NUM}) -STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} conţine o imagine coruptă. Toate imaginile corupte vor fi afişate ca semne de întrebare (?) roşii +STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} conține o imagine coruptă. Toate imaginile corupte vor fi afișate ca semne de întrebare (?) roșii STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Conține mai multe intrări pentru Acțiunea 8 (sprite {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Citire după sfârşitul preudo-elementului grafic (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Citire după sfârșitul preudo-elementului grafic (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Resursele GRF solicitate nu sunt disponibile (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} a fost dezactivat de {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Structură necunoscută/invalidă pentru elementul grafic (sprite {3:NUM}) @@ -3456,35 +3457,35 @@ STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Prea multe elem STR_NEWGRF_ERROR_INDPROD_CALLBACK :Reapelare de producție nevalidă (sprite {3:NUM}, „{2:STRING}”) # NewGRF related 'general' warnings -STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Atenţie! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Eşti pe cale să faci modificări într-un joc activ. Aceasta poate destabiliza OpenTTD. Nu raporta probleme de acest gen.{}Eşti absolut sigur că vrei să faci asta? +STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Atenție! +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Ești pe cale să faci modificări într-un joc activ. Aceasta poate destabiliza OpenTTD. Nu raporta probleme de acest gen.{}Ești absolut sigur că vrei să faci asta? -STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Nu pot adăuga fişierul: ID GRF duplicat -STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Nu am găsit niciun fişier corespunzător (am încărcat un GRF compatibil) +STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Nu pot adăuga fișierul: ID GRF duplicat +STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Nu am găsit niciun fișier corespunzător (am încărcat un GRF compatibil) STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Nu pot adăuga fișierul: Limita de fișiere NewGRF este atinsă -STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF-uri compatibile au fost încărcate pentru fişierele lipsă -STR_NEWGRF_DISABLED_WARNING :{WHITE}Fişierele GRF lipsă au fost dezactivate -STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Fişier(e) GRF lipsă -STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Reluarea jocului poate bloca OpenTTD. Nu raportaţi bug-uri pentru blocările ulterioare.{}Sigur doreşti să reiei jocul? +STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF-uri compatibile au fost încărcate pentru fișierele lipsă +STR_NEWGRF_DISABLED_WARNING :{WHITE}Fișierele GRF lipsă au fost dezactivate +STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Fișier(e) GRF lipsă +STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Reluarea jocului poate bloca OpenTTD. Nu raportați bug-uri pentru blocările ulterioare.{}Sigur dorești să reiei jocul? # NewGRF status STR_NEWGRF_LIST_NONE :Nimic ###length 3 -STR_NEWGRF_LIST_ALL_FOUND :Toate fişierele necesare sunt prezente -STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Fişiere compatibile găsite -STR_NEWGRF_LIST_MISSING :{RED}Fişiere lipsă +STR_NEWGRF_LIST_ALL_FOUND :Toate fișierele necesare sunt prezente +STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Fișiere compatibile găsite +STR_NEWGRF_LIST_MISSING :{RED}Fișiere lipsă # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}Comportamentul NewGRF '{0:STRING}' poate cauza desincronizări şi/sau blocări +STR_NEWGRF_BROKEN :{WHITE}Comportamentul NewGRF '{0:STRING}' poate cauza desincronizări și/sau blocări STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}A modificat starea trenului pentru '{1:ENGINE}' când nu se afla în depou STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}A modificat lungimea vehiculului pentru '{1:ENGINE}' când nu se afla în depou STR_NEWGRF_BROKEN_CAPACITY :{WHITE}A modificat capacitatea vehiculului pentru '{1:ENGINE}' când nu a fost într-un depou sau în timpul conversiei STR_BROKEN_VEHICLE_LENGTH :{WHITE}Trenul '{VEHICLE}', aparținând '{COMPANY}', nu are o lungime validă. Probabil este o problemă cu fișierele NewGRF. Jocul s-ar putea desincroniza sau bloca -STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' produce informaţii incorecte -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Datele despre marfa/regarnisire pentru '{1:ENGINE}' diferă de valorile iniţiale după construcţie. Acest lucru ar putea cauza eşuarea autorenovarii/schimbarii. -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' a cauzat o buclă infinită în funcţia de producţie +STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' produce informații incorecte +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Datele despre marfa/regarnisire pentru '{1:ENGINE}' diferă de valorile inițiale după construcție. Acest lucru ar putea cauza eșuarea autorenovarii/schimbarii. +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' a cauzat o buclă infinită în funcția de producție STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Execuția {1:HEX} a returnat un răspuns nevalid/necunoscut {2:HEX} STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' a returnat un tip nevalid de marfă în retro-apelul produsului la {2:HEX} @@ -3518,19 +3519,19 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Mergi la STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introdu un nume pentru semn # Town directory window -STR_TOWN_DIRECTORY_CAPTION :{WHITE}Oraşe +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Orașe STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nimic - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (oraș){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Numele oraşelor - clic pe un nume pentru a centra imaginea pe oraşul respectiv. Ctrl+Click deshide o fereastra cu locaţia oraşului -STR_TOWN_POPULATION :{BLACK}Populaţia totală: {COMMA} +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Numele orașelor - clic pe un nume pentru a centra imaginea pe orașul respectiv. Ctrl+Click deshide o fereastra cu locația orașului +STR_TOWN_POPULATION :{BLACK}Populația totală: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Metropolă) -STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populaţia: {ORANGE}{COMMA}{BLACK} Locuinţe: {ORANGE}{COMMA} +STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populația: {ORANGE}{COMMA}{BLACK} Locuințe: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} luna trecută: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Transporturi necesare dezvoltării oraşului: +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Transporturi necesare dezvoltării orașului: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necesare STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necesare iarna STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} livrate @@ -3539,18 +3540,18 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Orașul crește la fiecare {ORANGE}{COMMA}{BLACK}{NBSP}{P zi zile "de zile"} STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Orașul crește la fiecare {ORANGE}{COMMA}{BLACK}{NBSP}{P zi zile "de zile"} (cu fonduri) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Orașul {RED}nu{BLACK} crește -STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limita zgomotului în oraş: {ORANGE}{COMMA}{BLACK} maxim: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locaţia oraşului. Ctrl+Click deshide o fereastra cu locaţia oraşului +STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limita zgomotului în oraș: {ORANGE}{COMMA}{BLACK} maxim: {ORANGE}{COMMA} +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locația orașului. Ctrl+Click deshide o fereastra cu locația orașului STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoritate locală -STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Afişează informaţii referitoare la autoritatea locală -STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Schimbă numele oraşului +STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Afișează informații referitoare la autoritatea locală +STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Schimbă numele orașului STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Extinde -STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Măreşte dimensiunile oraşului -STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Şterge +STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Mărește dimensiunile orașului +STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}șterge STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Șterge acest oraș -STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Redenumire oraş +STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Redenumire oraș # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Autoritatea locală din {TOWN} @@ -3558,20 +3559,20 @@ STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zonă STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Arată zona de acoperire a autorităților locale STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Evaluarea companiilor de transport: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} -STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acţiuni disponibile: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acţiuni disponibile pentru acest oraş - clic pe fiecare pentru mai multe detalii +STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acțiuni disponibile: +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acțiuni disponibile pentru acest oraș - clic pe fiecare pentru mai multe detalii STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Alege -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Activează acţiunea selectată din listă +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Activează acțiunea selectată din listă ###length 8 STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Campanie publicitară mică STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Campanie publicitară medie STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Campanie publicitară mare STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Finanțează reconstrucția străzilor -STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Ridică un monument dedicat preşedintelui companiei -STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Finanţează construcţia de noi clădiri +STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Ridică un monument dedicat președintelui companiei +STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Finanțează construcția de noi clădiri STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Cumpără drepturi exclusive de transport -STR_LOCAL_AUTHORITY_ACTION_BRIBE :Mituieşte autoritatea locală +STR_LOCAL_AUTHORITY_ACTION_BRIBE :Mituiește autoritatea locală ###length 8 STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inițiază o campanie publicitară mică pentru a atrage mai mulți călători și mai multe mărfuri spre compania ta.{}Oferă temporar un spor la cotația staților tale pe o rază mică în jurul centrului orașului.{}{POP_COLOUR}Cost: {CURRENCY_LONG} @@ -3595,7 +3596,7 @@ STR_GOALS_TEXT :{ORANGE}{STRING STR_GOALS_NONE :{ORANGE}- Nici unul - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click pe ţintă pentru a centra ecranul principal pe industrie/oraş/zonă. Ctrl+Click deschide o fereastră nouă de vizualizare a industriei/oraşului/zonei +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click pe țintă pentru a centra ecranul principal pe industrie/oraș/zonă. Ctrl+Click deschide o fereastră nouă de vizualizare a industriei/orașului/zonei # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Întrebare @@ -3625,13 +3626,13 @@ STR_GOAL_QUESTION_BUTTON_SURRENDER :Renunță STR_GOAL_QUESTION_BUTTON_CLOSE :Închide # Subsidies window -STR_SUBSIDIES_CAPTION :{WHITE}Subvenţii (F6) -STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Subvenţii disponibile: +STR_SUBSIDIES_CAPTION :{WHITE}Subvenții (F6) +STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Subvenții disponibile: STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} de la {STRING} la {STRING}{YELLOW} (după {DATE_SHORT}) STR_SUBSIDIES_NONE :{ORANGE} - nici una - -STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Subvenţii acordate la ora actuală: +STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Subvenții acordate la ora actuală: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}- {STRING} de la {STRING} la {STRING}{YELLOW} ({COMPANY}{YELLOW}, până în {DATE_SHORT}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click pe serviciu pentru a centra imaginea pe industrie/oraş. Ctrl+Click deshide o fereastră cu locaţia industriei/oraşului +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click pe serviciu pentru a centra imaginea pe industrie/oraș. Ctrl+Click deshide o fereastră cu locația industriei/orașului # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Carte de poveste @@ -3644,18 +3645,18 @@ STR_STORY_BOOK_PREV_PAGE :{BLACK}Anterior STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Mergi la pagina anterioară STR_STORY_BOOK_NEXT_PAGE :{BLACK}Următor STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Mergi la pagina următoare -STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referinţă invalidă pentru scop +STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referință invalidă pentru scop # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Numele staţiilor - clic pe un nume pentru a centra imaginea pe staţia respectivă. Ctrl+Click deshide o fereastra cu locaţia staţiei -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ţine apăsat Ctrl pentru a alege mai multe obiecte +STR_STATION_LIST_TOOLTIP :{BLACK}Numele stațiilor - clic pe un nume pentru a centra imaginea pe stația respectivă. Ctrl+Click deshide o fereastra cu locația stației +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}ține apăsat Ctrl pentru a alege mai multe obiecte STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} {P stație stații "de stații"} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Nici una - -STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Alege toate facilităţile +STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Alege toate facilitățile STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Alege toate tipurile de încãrcãturi (inclusiv încãrcãturile care nu sunt în asteptare) -STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Nu este nici un fel de încărcătură în aşteptare +STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Nu este nici un fel de încărcătură în așteptare # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3663,39 +3664,39 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} rezervat pentru încărcare) STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Ce acceptă -STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Afişează lista de încărcături acceptate +STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Afișează lista de încărcături acceptate STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Acceptă: {WHITE}{CARGO_LIST} -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Această staţie are drepturi exclusive de transport în acest oraş. -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} a cumpărat drepturi exclusive de transport în acest oraş. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Această stație are drepturi exclusive de transport în acest oraș. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} a cumpărat drepturi exclusive de transport în acest oraș. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Evaluări -STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Afişează evaluările staţiei +STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Afișează evaluările stației STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Aprovizionare lunară și evaluare locală: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Grupează după -STR_STATION_VIEW_WAITING_STATION :Staţie: Aşteptare -STR_STATION_VIEW_WAITING_AMOUNT :Sumă: Aşteptare -STR_STATION_VIEW_PLANNED_STATION :Staţie: Planificat +STR_STATION_VIEW_WAITING_STATION :Stație: Așteptare +STR_STATION_VIEW_WAITING_AMOUNT :Sumă: Așteptare +STR_STATION_VIEW_PLANNED_STATION :Stație: Planificat STR_STATION_VIEW_PLANNED_AMOUNT :Sumă: Planificat STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} de la {STATION} STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} via {STATION} STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} către {STATION} -STR_STATION_VIEW_FROM_ANY :{RED}{CARGO_SHORT} de la staţie necunoscută -STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHORT} către orice staţie -STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHORT} prin orice staţie -STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} de la această staţie -STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_SHORT} opreşte la această staţie -STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} către această staţie +STR_STATION_VIEW_FROM_ANY :{RED}{CARGO_SHORT} de la stație necunoscută +STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHORT} către orice stație +STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHORT} prin orice stație +STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} de la această stație +STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_SHORT} oprește la această stație +STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} către această stație STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} non-stop -STR_STATION_VIEW_GROUP_S_V_D :Sursă-Via-Destinaţie -STR_STATION_VIEW_GROUP_S_D_V :Sursă-Destinaţie-Via -STR_STATION_VIEW_GROUP_V_S_D :Via-Sursă-Destinaţie -STR_STATION_VIEW_GROUP_V_D_S :Via-Destinaţie-Sursă -STR_STATION_VIEW_GROUP_D_S_V :Destinaţie-Sursă-Via -STR_STATION_VIEW_GROUP_D_V_S :Destinaţie-Via-Sursă +STR_STATION_VIEW_GROUP_S_V_D :Sursă-Via-Destinație +STR_STATION_VIEW_GROUP_S_D_V :Sursă-Destinație-Via +STR_STATION_VIEW_GROUP_V_S_D :Via-Sursă-Destinație +STR_STATION_VIEW_GROUP_V_D_S :Via-Destinație-Sursă +STR_STATION_VIEW_GROUP_D_S_V :Destinație-Sursă-Via +STR_STATION_VIEW_GROUP_D_V_S :Destinație-Via-Sursă ###length 8 STR_CARGO_RATING_APPALLING :Deplorabil @@ -3707,22 +3708,22 @@ STR_CARGO_RATING_VERY_GOOD :Foarte bun STR_CARGO_RATING_EXCELLENT :Excelent STR_CARGO_RATING_OUTSTANDING :Fantastic -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locaţia staţiei. Ctrl+Click deshide o fereastra cu locaţia staţiei -STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Schimbă numele staţiei +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locația stației. Ctrl+Click deshide o fereastra cu locația stației +STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Schimbă numele stației STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Afiseaza toate trenurile care opresc in aceasta statie STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Afiseaza toate autovehiculele care opresc in aceasta statie STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Afiseaza toate aeronavele care opresc in aceasta statie STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Afiseaza toate navele care opresc in aceasta statie -STR_STATION_VIEW_RENAME_STATION_CAPTION :Redenumeşte staţia +STR_STATION_VIEW_RENAME_STATION_CAPTION :Redenumește stația STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Închide aeroport STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Nu permite avioanelor să aterizeze pe acest aeroport # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrază fereasta principală pe punctul de tranzit. Ctrl+Click deshide o fereastra cu locaţia punctului de tranzit +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrază fereasta principală pe punctul de tranzit. Ctrl+Click deshide o fereastra cu locația punctului de tranzit STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Schimbă numele haltei STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrează vizorul principal pe locația balizei. Ctrl+clic deschide un vizor cu locația balizei STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Schimbă numele balizei @@ -3730,7 +3731,7 @@ STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Schimbă STR_EDIT_WAYPOINT_NAME :{WHITE}Editează numele haltei # Finances window -STR_FINANCES_CAPTION :{WHITE}Situaţia financiară a companiei {COMPANY} {BLACK}{COMPANY_NUM} +STR_FINANCES_CAPTION :{WHITE}Situația financiară a companiei {COMPANY} {BLACK}{COMPANY_NUM} STR_FINANCES_YEAR :{WHITE}{NUM} ###length 3 @@ -3740,7 +3741,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Cheltuie ###length 13 -STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Construcţii +STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Construcții STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Vehicule noi STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Trenuri STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Autovehicule @@ -3759,7 +3760,7 @@ STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} STR_FINANCES_PROFIT :{WHITE}Profit -STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanţă curentă +STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanță curentă STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Fonduri proprii STR_FINANCES_LOAN_TITLE :{WHITE}Credite STR_FINANCES_INTEREST_RATE :{WHITE}Dobândā la credit: {BLACK}{NUM}% @@ -3768,15 +3769,15 @@ STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENC STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Împrumută {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Împrumută o nouă sumă de bani. Ctrl-click pentru a împrumuta suma maximă posibilă -STR_FINANCES_REPAY_BUTTON :{BLACK}Plăteşte înapoi {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Plăteşte înapoi o parte din credite. Ctrl-click pentru a plăti cât de mult permit finanţele +STR_FINANCES_REPAY_BUTTON :{BLACK}Plătește înapoi {CURRENCY_LONG} +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Plătește înapoi o parte din credite. Ctrl-click pentru a plăti cât de mult permit finanțele STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infrastructură # Company view STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} -STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Preşedinte) +STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Președinte) -STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Anul înfiinţării: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Anul înființării: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Schemă culori: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicule: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} {P tren trenuri "de trenuri"} @@ -3794,7 +3795,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Niciuna STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Constr. sediu -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construieşte sediul companiei +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construiește sediul companiei STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Vezi sediul STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Vezi sediul companiei STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mută sediu @@ -3807,19 +3808,19 @@ STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Preluare STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Preia ostil această companie STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Schimbă poza -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Alege o nouă poză a preşedintelui +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Alege o nouă poză a președintelui STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Schemă culori -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Schimbă culoarea care îţi reprezintă compania +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Schimbă culoarea care îți reprezintă compania STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Nume companie STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Schimbă numele companiei -STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Nume preşedinte +STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Nume președinte STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Schimbă numele președintelui STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Noul nume al companiei -STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Noul nume al preşedintelui +STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Noul nume al președintelui STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introdu suma de bani pe care vrei să o dai -STR_BUY_COMPANY_MESSAGE :{WHITE}Căutăm o companie de transport care să preia societatea noastră{}{}Doriţi să cumpăraţi {COMPANY} la preţul de {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Căutăm o companie de transport care să preia societatea noastră{}{}Doriți să cumpărați {COMPANY} la prețul de {CURRENCY_LONG}? STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Prin preluarea ostilă a {COMPANY}, vei cumpăra toate bunurile acesteia, vei plăti toate împrumuturile și vei plăti profitul pe doi ani.{}{}Totalul estimat este {CURRENCY_LONG}.{}{}Vrei să dai curs preluării ostile? # Company infrastructure window @@ -3844,7 +3845,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} și încă {NUM}... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Numele industriilor - clic pe nume pentru focalizarea pe industrie. Ctrl+Click deschide o fereastră cu locaţia industriei +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Numele industriilor - clic pe nume pentru focalizarea pe industrie. Ctrl+Click deschide o fereastră cu locația industriei STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Marfă acceptată: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Marfă produsă: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Toate tipurile de mărfuri @@ -3852,11 +3853,11 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Niciunul # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producţia lunii trecute: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producția lunii trecute: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportat) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrează imaginea pe locaţia industriei. Ctrl+Click deshide o fereastra cu locaţia industriei -STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producţiei: {YELLOW}{COMMA}% -STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunţat închiderea iminentă! +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrează imaginea pe locația industriei. Ctrl+Click deshide o fereastra cu locația industriei +STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producției: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunțat închiderea iminentă! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Necesită: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} @@ -3867,7 +3868,7 @@ STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRI STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} așteaptă{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba productia (multiplu de 8, până la 2040) -STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%) +STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producției (procent, până la 800%) # Vehicle lists ###length VEHICLE_TYPES @@ -3879,8 +3880,8 @@ STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} ###length VEHICLE_TYPES STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - click pe tren pentru informații STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Autovehicule - clic pe vehicul pentru informatii -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Nave - click pe navă pentru informaţii -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronavă - clic pe aeronavă pentru informaţii +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Nave - click pe navă pentru informații +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronavă - clic pe aeronavă pentru informații ###length VEHICLE_TYPES STR_VEHICLE_LIST_AVAILABLE_TRAINS :Trenuri disponibile @@ -3926,7 +3927,7 @@ STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COM STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupuri - apasă pe un grup pentru lista completă a vehiculelor acestuia STR_GROUP_CREATE_TOOLTIP :{BLACK}Apasă pentru a crea un grup STR_GROUP_DELETE_TOOLTIP :{BLACK}Șterge grupul selectat -STR_GROUP_RENAME_TOOLTIP :{BLACK}Redenumeşte grupul selectat +STR_GROUP_RENAME_TOOLTIP :{BLACK}Redenumește grupul selectat STR_GROUP_LIVERY_TOOLTIP :{BLACK}Schimbă uniforma grupului selectat STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Apasă aici pentru a proteja acest grup de înlocuirile automate globale. Ctrl+Click pentru a proteja de asemenea subgrupurile @@ -3936,7 +3937,7 @@ STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Sigur do STR_GROUP_ADD_SHARED_VEHICLE :Adaugă vehicule partajate STR_GROUP_REMOVE_ALL_VEHICLES :Elimină toate vehiculele -STR_GROUP_RENAME_CAPTION :{BLACK}Redenumeşte un grup +STR_GROUP_RENAME_CAPTION :{BLACK}Redenumește un grup STR_GROUP_PROFIT_THIS_YEAR :Profitul pe anul acesta: STR_GROUP_PROFIT_LAST_YEAR :Profitul anului trecut: @@ -3947,7 +3948,7 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% ###length 4 STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Noi vehicule feroviare STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Noi vehicule electrice pe șine -STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Noi vehicule monoşină +STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Noi vehicule monoșină STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Noi vehicule pe Pernă Magnetică STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Autovehicule noi @@ -3969,8 +3970,8 @@ STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Viteza p STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Cost de rulare: {GOLD}{CURRENCY_LONG}/an STR_PURCHASE_INFO_CAPACITY :{BLACK}Capacitate: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(suportă alte mărfuri) -STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}An apariţie: {GOLD}{NUM}{BLACK} Durata de viaţă: {GOLD}{COMMA} ani -STR_PURCHASE_INFO_RELIABILITY :{BLACK}Eficienţă max.: {GOLD}{COMMA}% +STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}An apariție: {GOLD}{NUM}{BLACK} Durata de viață: {GOLD}{COMMA} ani +STR_PURCHASE_INFO_RELIABILITY :{BLACK}Eficiență max.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cost: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost reparații: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Greutate: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) @@ -3982,7 +3983,7 @@ STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Modifica STR_PURCHASE_INFO_ALL_TYPES :Toate tipurile de mărfuri STR_PURCHASE_INFO_NONE :Niciunul STR_PURCHASE_INFO_ENGINES_ONLY :Doar locomotive -STR_PURCHASE_INFO_ALL_BUT :Toate, cu excepţia {CARGO_LIST} +STR_PURCHASE_INFO_ALL_BUT :Toate, cu excepția {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Efort tractor max.: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rază acțiune: {GOLD}{COMMA} pătrățele STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tip de aeronavă: {GOLD}{STRING} @@ -3994,9 +3995,9 @@ STR_CARGO_TYPE_FILTER_NONE :Niciunul ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de selectie a componentelor trenului - clic pe vehicule pt. informatii -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Listă selecţie vehicule rutiere - apasă pe vehicul pentru informaţii -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Listă de selecţie a navelor - click pe o navă pentru informaţii -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de selecţie a aeronavelor - clic pe o aeronavă pentru informaţii +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Listă selecție vehicule rutiere - apasă pe vehicul pentru informații +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Listă de selecție a navelor - click pe o navă pentru informații +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de selecție a aeronavelor - clic pe o aeronavă pentru informații ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Cumpără vehicul @@ -4013,8 +4014,8 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Cumpăr ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără vehiculul feroviar selectat. Shift+Click arată costul estimat fără să cumpere vehiculul STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără autovehiculul selectat. Shift+clic arată costul estimat fără achiziția autovehiculului -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără nava selectată. Shift+Click arată costul estimativ fără a efectua achiziţia -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără aeronava selectată. Shift+Click arată costul estimativ fără a efectua achiziţia +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără nava selectată. Shift+Click arată costul estimativ fără a efectua achiziția +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără aeronava selectată. Shift+Click arată costul estimativ fără a efectua achiziția ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Cumpără și convertește trenul selectat. Shift+clic arată costul estimat fără achiziție @@ -4031,8 +4032,8 @@ STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Redenumi ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Redenumește modelul vehiculului feroviar STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Redenumește modelul de autovehicul -STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Redenumeşte modelul de navă -STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Redenumeşte modelul de aeronavă +STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Redenumește modelul de navă +STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Redenumește modelul de aeronavă ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Ascunde @@ -4055,8 +4056,8 @@ STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Comută ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Redenumește modelul vehiculului feroviar STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Redenumește modelul de autovehicul -STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Redenumeşte modelul de navă -STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Redenumeşte modelul de aeronavă +STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Redenumește modelul de navă +STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Redenumește modelul de aeronavă # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} @@ -4070,10 +4071,10 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} {P STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - trage vehiculele cu click stânga pentru a adauga/elimina din tren, click dreapta pe vehicul pentru informaţii. Tasta Ctrl aplică funcţiile pentru întreaga garnitură -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Autovehicule - clic dreapta pe vehicul pentru informaţii -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Nave - clic dreapta pe o navă pentru informaţii -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronavă - clic dreapta pe aeronavă pentru informaţii +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - trage vehiculele cu click stânga pentru a adauga/elimina din tren, click dreapta pe vehicul pentru informații. Tasta Ctrl aplică funcțiile pentru întreaga garnitură +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Autovehicule - clic dreapta pe vehicul pentru informații +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Nave - clic dreapta pe o navă pentru informații +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronavă - clic dreapta pe aeronavă pentru informații ###length VEHICLE_TYPES STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Mută un vehicul aici pentru a-l vinde @@ -4088,10 +4089,10 @@ STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Vinde to STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Vinde toate aeronavele din hangar ###length VEHICLE_TYPES -STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}înlocuieşte automat toate din depou -STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}înlocuieşte automat toate autovehiculele din depou -STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}înlocuieşte automat toate vasele din depou -STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}înlocuieşte automat toate aeronavele din hangar +STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}înlocuiește automat toate din depou +STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}înlocuiește automat toate autovehiculele din depou +STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}înlocuiește automat toate vasele din depou +STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}înlocuiește automat toate aeronavele din hangar ###length VEHICLE_TYPES STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Vehicule noi @@ -4100,7 +4101,7 @@ STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nave noi STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Aeronavă nouă ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Construieşte un nou vehicul feroviar +STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Construiește un nou vehicul feroviar STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Cumpără un autovehicul nou STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Cumpără o navă nouă STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Cumpără o nouă aeronavă @@ -4142,15 +4143,15 @@ STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Clic pen STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Click pt pornirea tuturor aeronavelor din hangar STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Trage locomotiva aici pentru a vinde întregul tren -STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Eşti pe cale să vinzi toate vehiculele din depou. Eşti sigur? +STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Ești pe cale să vinzi toate vehiculele din depou. Ești sigur? # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mesaj de la producătorul de vehicule -STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Am creat un nou tip de {STRING}. Aţi fi interesaţi de folosirea exclusivă pentru un an a acestui vehicul, astfel ca noi să-i putem observa performanţele înaintea lansării oficiale? +STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Am creat un nou tip de {STRING}. Ați fi interesați de folosirea exclusivă pentru un an a acestui vehicul, astfel ca noi să-i putem observa performanțele înaintea lansării oficiale? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :locomotivă STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotivă electrificată -STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotivă monoşină +STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotivă monoșină STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotivă pernă magnetică STR_ENGINE_PREVIEW_ROAD_VEHICLE :autovehicul @@ -4168,7 +4169,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Cost: {C STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Viteză max.: {VELOCITY}{}Tip aeronavă: {STRING} Autonomie: {COMMA} dale{}Capacitate: {CARGO_LONG}{}Mentenanță: {CURRENCY_LONG}/an # Autoreplace window -STR_REPLACE_VEHICLES_WHITE :{WHITE}Înlocuieşte {STRING} - {STRING} +STR_REPLACE_VEHICLES_WHITE :{WHITE}Înlocuiește {STRING} - {STRING} STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}Vehicule în uz STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}Coloana vehiculelor pe care le deții @@ -4182,11 +4183,11 @@ STR_REPLACE_VEHICLE_SHIP :Nava STR_REPLACE_VEHICLE_AIRCRAFT :Aeronava STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Alege tipul de motor pentru înlocuire -STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Alege noul tip de motor pe care doreşti să-l foloseşti în locul motorului selectat în stânga +STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Alege noul tip de motor pe care dorești să-l folosești în locul motorului selectat în stânga STR_REPLACE_VEHICLES_START :{BLACK}Incepere inlocuire vehicule -STR_REPLACE_VEHICLES_NOW :Înlocuieşte toate vehiculele acum -STR_REPLACE_VEHICLES_WHEN_OLD :Înlocuieşte doar vehiculele vechi +STR_REPLACE_VEHICLES_NOW :Înlocuiește toate vehiculele acum +STR_REPLACE_VEHICLES_WHEN_OLD :Înlocuiește doar vehiculele vechi STR_REPLACE_HELP_START_BUTTON :{BLACK}Apasă aici pentru a începe înlocuirea motorului selectat în stânga cu cel selectat în dreapta STR_REPLACE_NOT_REPLACING :{BLACK}Neinlocuire STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nici un vehicul selectat @@ -4215,7 +4216,7 @@ STR_REPLACE_ROAD_VEHICLES :Autovehicule STR_REPLACE_TRAM_VEHICLES :Tramvaie STR_REPLACE_REMOVE_WAGON :{BLACK}Retragere vagoane ({STRING}): {ORANGE}{STRING} -STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fă optiunea de autoînlocuire să păstreze identică lungimea unui tren prin eliminarea vagoanelor (începând din faţă) dacă înlocuirea locomotivei ar face trenul mai lung +STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fă optiunea de autoînlocuire să păstreze identică lungimea unui tren prin eliminarea vagoanelor (începând din față) dacă înlocuirea locomotivei ar face trenul mai lung STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+clic pentru aplicare și la sub-grupuri # Vehicle view @@ -4230,8 +4231,8 @@ STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centreaz ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trimite trenul într-un depou STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trimite autovehiculul la autobază. Ctrl+clic pentru service -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trimite nava în şantier. Ctrl+clic pentru întreţinere -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trimite aeronava la hangar. Ctrl+clic pentru întreţinere +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trimite nava în șantier. Ctrl+clic pentru întreținere +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trimite aeronava la hangar. Ctrl+clic pentru întreținere ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Acest buton va crea o copie a întregului tren. Ctrl+Click va sincroniza comenzile. Shift+Click va afișa costul estimat fără a achiziționa trenul @@ -4239,9 +4240,9 @@ STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Acest bu STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Acest buton va crea o copie a navei. Ctrl+clic va sincroniza comenzile. Shift+clic va afișa costul estimat fără a achiziționa nava STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Acest buton va crea o copie a aeronavei. Ctrl+clic va sincroniza comenzile. Shift+clic va afișa costul estimat fără a cumpăra aeronava -STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forţează trenul să ignore semnalizarea de oprire -STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Schimbă sensul de circulaţie al trenului -STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forţează vehiculul să întoarcă +STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forțează trenul să ignore semnalizarea de oprire +STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Schimbă sensul de circulație al trenului +STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forțează vehiculul să întoarcă STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centrează vizorul principal pe destinația comenzii. Ctrl+clic deschide un nou vizor pe locația de destinație a comenzii ###length VEHICLE_TYPES @@ -4257,10 +4258,10 @@ STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Afișeaz STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Afișează comenzile aeronavei. Ctrl-clic afișează orarul ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Afişează detaliile trenului -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Afişează detaliile autovehiculului -STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Afişează detaliile navei -STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Afişează detaliile aeronavei +STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Afișează detaliile trenului +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Afișează detaliile autovehiculului +STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Afișează detaliile navei +STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Afișează detaliile aeronavei ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Acțiunea trenului curent - clic pentru oprirea/pornirea trenului @@ -4305,10 +4306,10 @@ STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE ###length VEHICLE_TYPES STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Numele trenului STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Numele autovehiculului -STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Denumeşte această navă -STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Denumeşte aeronava +STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Denumește această navă +STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Denumește aeronava -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vechime: {LTBLUE}{STRING}{BLACK} Mentenanţă: {LTBLUE}{CURRENCY_LONG}/an +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vechime: {LTBLUE}{STRING}{BLACK} Mentenanță: {LTBLUE}{CURRENCY_LONG}/an STR_VEHICLE_INFO_AGE :{COMMA} {P an ani "de ani"} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} {P an ani "de ani"} ({COMMA}) @@ -4320,7 +4321,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Greutate STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit pe anul curent: {LTBLUE}{CURRENCY_LONG} (anul precedent: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Profit anul curent: {LTBLUE}{CURRENCY_LONG} (anul trecut: {CURRENCY_LONG}) {BLACK}performanta minima: {LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Eficienţă: {LTBLUE}{COMMA}% {BLACK}Defecţiuni de la ultimul service: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Eficiență: {LTBLUE}{COMMA}% {BLACK}Defecțiuni de la ultimul service: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Construit: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacitate: {LTBLUE}Nimic{STRING} @@ -4330,10 +4331,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacita STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transferă Credit: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalul pentru întreţinere: {LTBLUE}{COMMA}zile{BLACK} Ultima întreţinere: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalul pentru întreținere: {LTBLUE}{COMMA}zile{BLACK} Ultima întreținere: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalul de service: {LTBLUE}{COMMA}%{BLACK} Ultimul service: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Măreşte intervalul de service cu 10. Ctrl+click măreşte intervalul de service cu 5 -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Micşorează intervalul de service cu 10. Ctrl+Click micşorează intervalul de service cu 5 +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Mărește intervalul de service cu 10. Ctrl+click mărește intervalul de service cu 5 +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Micșorează intervalul de service cu 10. Ctrl+Click micșorează intervalul de service cu 5 STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Schimbă tipul intervalului de întreținere STR_VEHICLE_DETAILS_DEFAULT :Standard @@ -4343,8 +4344,8 @@ STR_VEHICLE_DETAILS_PERCENT :Procent ###length VEHICLE_TYPES STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Numele trenului STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Numele autovehiculului -STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Denumeşte această navă -STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Denumeşte aeronava +STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Denumește această navă +STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Denumește aeronava # Extra buttons for train details windows STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Cumpărat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY_LONG} @@ -4359,11 +4360,11 @@ STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_ STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} de la {STATION} (x{NUM}) STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Încărcătură -STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Afişează detalii despre încărcătura transportată +STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Afișează detalii despre încărcătura transportată STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Informatii -STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Afişează detalii despre componentele trenului -STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Capacităţi -STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Afişează capacităţile fiecărei componente +STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Afișează detalii despre componentele trenului +STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Capacități +STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Afișează capacitățile fiecărei componente STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Încãrcãturi STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Afiseazã capacitãtile totale ale trenului, diferentiate pe tip de încãrcãturã @@ -4401,12 +4402,12 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Orar STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Comută în modul de vizualizare orar -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_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 - - +STR_ORDERS_END_OF_ORDERS :- - Sfârșitul comenzilor - - +STR_ORDERS_END_OF_SHARED_ORDERS :- - Sfârșitul comenzilor sincronizate - - # Order bottom buttons STR_ORDER_NON_STOP :{BLACK}Non-stop @@ -4448,12 +4449,12 @@ STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Datele v # Conditional order variables, must follow order of OrderConditionVariable enum ###length 8 STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Procentaj încărcare -STR_ORDER_CONDITIONAL_RELIABILITY :Eficienţă +STR_ORDER_CONDITIONAL_RELIABILITY :Eficiență STR_ORDER_CONDITIONAL_MAX_SPEED :Viteză maximă STR_ORDER_CONDITIONAL_AGE :Vechime (ani) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necesită service STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Întotdeauna -STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Durată de viaţă rămasă +STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Durată de viață rămasă STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilitate maximă ###next-name-looks-similar @@ -4468,15 +4469,15 @@ STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :este adevărat STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :este fals STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Valoarea cu care se compară -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Introduceţi valoarea de comparat +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Introduceți valoarea de comparat STR_ORDERS_SKIP_BUTTON :{BLACK}Treci la următoarea STR_ORDERS_SKIP_TOOLTIP :{BLACK}Sari peste comanda actuală și preia-o pe următoarea. Ctrl+clic sare la comanda selectată -STR_ORDERS_DELETE_BUTTON :{BLACK}Şterge +STR_ORDERS_DELETE_BUTTON :{BLACK}șterge STR_ORDERS_DELETE_TOOLTIP :{BLACK}Șterge comanda selectată STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Șterge toate comenzile -STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Opreşte sincronizarea +STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Oprește sincronizarea STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Oprește sincronizarea comenzilor. Ctrl-clic șterge toate comenzile acestui vehicul STR_ORDERS_GO_TO_BUTTON :{BLACK}Mergi la @@ -4500,14 +4501,14 @@ STR_ORDER_NEAREST_HANGAR :cel mai apropia ###length 3 STR_ORDER_TRAIN_DEPOT :Depou de Trenuri STR_ORDER_ROAD_VEHICLE_DEPOT :Autobază -STR_ORDER_SHIP_DEPOT :Şantier Naval +STR_ORDER_SHIP_DEPOT :șantier Naval ###next-name-looks-similar STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_REFIT_ORDER :(Rearanjeaza in {STRING}) -STR_ORDER_REFIT_STOP_ORDER :(Modifică pentru {STRING} şi opreşte) +STR_ORDER_REFIT_STOP_ORDER :(Modifică pentru {STRING} și oprește) STR_ORDER_STOP_ORDER :(Stop) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -4518,17 +4519,17 @@ STR_ORDER_IMPLICIT :(Implicit) STR_ORDER_FULL_LOAD :(Încărcare maximă) STR_ORDER_FULL_LOAD_ANY :(Încărcare orice produs) STR_ORDER_NO_LOAD :(Fără încărcare) -STR_ORDER_UNLOAD :(Descarcă şi preia încărcătura) -STR_ORDER_UNLOAD_FULL_LOAD :(Descarcă şi aşteaptă încărcare maximă) -STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Descarcă şi aşteaptă orice încărcătură) -STR_ORDER_UNLOAD_NO_LOAD :(Descarcă şi pleacă) +STR_ORDER_UNLOAD :(Descarcă și preia încărcătura) +STR_ORDER_UNLOAD_FULL_LOAD :(Descarcă și așteaptă încărcare maximă) +STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Descarcă și așteaptă orice încărcătură) +STR_ORDER_UNLOAD_NO_LOAD :(Descarcă și pleacă) STR_ORDER_TRANSFER :(Transferă - preia încărcătura) -STR_ORDER_TRANSFER_FULL_LOAD :(Transferă şi aşteaptă încărcare maximă) -STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Transferă şi aşteaptă orice încărcătură) +STR_ORDER_TRANSFER_FULL_LOAD :(Transferă și așteaptă încărcare maximă) +STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Transferă și așteaptă orice încărcătură) STR_ORDER_TRANSFER_NO_LOAD :(Transferă - pleacă descărcat) -STR_ORDER_NO_UNLOAD :(Nu descărca şi preia încărcătura) -STR_ORDER_NO_UNLOAD_FULL_LOAD :(Nu descărca şi aşteaptă încărcare maximă) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Nu descărca şi aşteaptă orice încărcătură) +STR_ORDER_NO_UNLOAD :(Nu descărca și preia încărcătura) +STR_ORDER_NO_UNLOAD_FULL_LOAD :(Nu descărca și așteaptă încărcare maximă) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Nu descărca și așteaptă orice încărcătură) STR_ORDER_NO_UNLOAD_NO_LOAD :(Fără încărcare sau descărcare) STR_ORDER_AUTO_REFIT :(Înlocuire automată cu {STRING}) @@ -4603,18 +4604,18 @@ STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Elimină STR_TIMETABLE_CHANGE_SPEED :{BLACK}Schimbă limita de viteză STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Schimbă limita maximă de viteză a comenzii selectate. Ctrl+Click setează viteza pentru toate comenzile -STR_TIMETABLE_CLEAR_SPEED :{BLACK}Şterge limita de viteză +STR_TIMETABLE_CLEAR_SPEED :{BLACK}șterge limita de viteză STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Ștergeți viteza maximă de deplasare a comenzii evidențiate. Ctrl+Click șterge viteza pentru toate comenzile STR_TIMETABLE_RESET_LATENESS :{BLACK}Reinitializeaza contorul de intarziere -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniţializează contorul de întârziere, astfel ca vehiculul să ajungă la timp. Ctrl+clic va reseta tot grupul astfel încât cel mai întârziat vehicul va ajunge la timp și toate celelalte vor ajunge mai devreme +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reinițializează contorul de întârziere, astfel ca vehiculul să ajungă la timp. Ctrl+clic va reseta tot grupul astfel încât cel mai întârziat vehicul va ajunge la timp și toate celelalte vor ajunge mai devreme STR_TIMETABLE_AUTOFILL :{BLACK}Auto-completare STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Completați automat orarul cu valorile din următoarea călătorie. Ctrl+Click pentru a încerca să păstrați timpii de așteptare STR_TIMETABLE_EXPECTED :{BLACK}Estimat STR_TIMETABLE_SCHEDULED :{BLACK}Planificat -STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Comută între estimare şi orar +STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Comută între estimare și orar STR_TIMETABLE_ARRIVAL_DATE :S: {COLOUR}{DATE_TINY} STR_TIMETABLE_DEPARTURE_DATE :P: {COLOUR}{DATE_TINY} @@ -4625,7 +4626,7 @@ STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :P: {COLOUR}{COM # Date window (for timetable) STR_DATE_CAPTION :{WHITE}Setează data STR_DATE_SET_DATE :{BLACK}Setează data -STR_DATE_SET_DATE_TOOLTIP :{BLACK}Foloseşte data selectată ca dată de pornire pentru acest orar +STR_DATE_SET_DATE_TOOLTIP :{BLACK}Folosește data selectată ca dată de pornire pentru acest orar STR_DATE_DAY_TOOLTIP :{BLACK}Alege ziua STR_DATE_MONTH_TOOLTIP :{BLACK}Alege luna STR_DATE_YEAR_TOOLTIP :{BLACK}Alege anul @@ -4638,20 +4639,20 @@ STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Numele s STR_AI_DEBUG_SETTINGS :{BLACK}Setări STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Schimbă setările scriptului STR_AI_DEBUG_RELOAD :{BLACK}Reîncarcă IA -STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Opreşte IA, raîncarcă scriptul, apoi reporneşte IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activează/dezactivează suspendarea când un mesaj de la IA se potriveşte cu string-ul de oprire -STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Opreşte la: -STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Opreşte la -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Când un mesaj al modului de IA se potriveşte cu acest string, se suspendă jocul +STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Oprește IA, raîncarcă scriptul, apoi repornește IA +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activează/dezactivează suspendarea când un mesaj de la IA se potrivește cu string-ul de oprire +STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Oprește la: +STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Oprește la +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Când un mesaj al modului de IA se potrivește cu acest string, se suspendă jocul STR_AI_DEBUG_MATCH_CASE :{BLACK}Potrivire majuscule/minuscule -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Comută potrivirea pe majuscule/minuscule când se compară fişierele log ale AI cu string-ul de oprire +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Comută potrivirea pe majuscule/minuscule când se compară fișierele log ale AI cu string-ul de oprire STR_AI_DEBUG_CONTINUE :{BLACK}Continuă -STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Continuă execuţia modulului de Inteligenţă Artificială +STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Continuă execuția modulului de Inteligență Artificială STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vizualizează datele de debug ale acestui modul de IA STR_AI_GAME_SCRIPT :{BLACK}Game Script STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifică log-ul Game Script -STR_ERROR_AI_NO_AI_FOUND :Nici o IA potrivită a fost găsită{}Această IA este nefuncţională.{}Poţi descărca IA-uri folsind opţiunea "Resurse online" din meniul principal. +STR_ERROR_AI_NO_AI_FOUND :Nici o IA potrivită a fost găsită{}Această IA este nefuncțională.{}Poți descărca IA-uri folsind opțiunea "Resurse online" din meniul principal. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}O Inteligentă Artificială/Script Joc s-a oprit în mod eronat. Raportează această problemă autorului împreună cu o captură de ecran a ferestrei Depanare IA/Script Joc STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Fereastra pentru depanare IA / Script Joc este disponibilă doar serverului @@ -4726,7 +4727,7 @@ STR_TEXTFILE_VIEW_README :{BLACK}Vezi fi STR_TEXTFILE_VIEW_README_TOOLTIP :Vizualizați "citiți-mă / readme" pentru acest conținut STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Listă modificări STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Vizualizați jurnalul de modificări pentru acest conținut -STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenţă +STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licență STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Vedeți licența pentru acest conținut ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}, fișier readme al {STRING} @@ -4764,27 +4765,27 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Venit es STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvarea se efectueaza încã,{}vã rugãm asteptati pânã se încheie! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Auto-salvarea a esuat STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Discul nu a putut fi citit -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvarea jocului eşuată{}{STRING} +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvarea jocului eșuată{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ștergerea fișierului a eșuat -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Încărcarea jocului eşuată{}{STRING} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Încărcarea jocului eșuată{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Eroare internă: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvare eronată - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvarea a fost făcută cu o versiune mai nouă -STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fişierul nu poate fi citit -STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Fişierul nu poate fi scris +STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fișierul nu poate fi citit +STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Fișierul nu poate fi scris STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Integritatea datelor compromisă STR_GAME_SAVELOAD_ERROR_PATCHPACK :Salvarea este realizată cu o versiune modificată STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Jocul a fost salvat într-o versiune fără suport pentru tramvaie. Toate tramvaiele au fost eliminate # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Generarea hărţii a eşuat...{}... nici o locaţie potrivită pentru oraş -STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... în acest scenariu nu există nici un oraş +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Generarea hărții a eșuat...{}... nici o locație potrivită pentru oraș +STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... în acest scenariu nu există nici un oraș STR_ERROR_PNGMAP :{WHITE}Nu pot încărca peisajul din PNG... -STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... fişierul lipseşte -STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... nu am reuşit conversia tipului de imagine. Este necesară o imagine PNG pe 8 sau 24 de biţi -STR_ERROR_PNGMAP_MISC :{WHITE}... ceva nu a funcţionat cum trebuie (probabil fişierul este defect) +STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... fișierul lipsește +STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... nu am reușit conversia tipului de imagine. Este necesară o imagine PNG pe 8 sau 24 de biți +STR_ERROR_PNGMAP_MISC :{WHITE}... ceva nu a funcționat cum trebuie (probabil fișierul este defect) STR_ERROR_BMPMAP :{WHITE}Nu pot încărca peisajul din BMP... STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... nu am putut converti tipul de imagine @@ -4795,14 +4796,14 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Avertism STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Redimensionarea excesiva a hartii nu este recomandata. Continui cu generarea? # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Doar un set nul de efecte sonore a fost găsit. Dacă doreşti sunete, instalează un set de sunete folosind sistemul de Resurse Online +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Doar un set nul de efecte sonore a fost găsit. Dacă dorești sunete, instalează un set de sunete folosind sistemul de Resurse Online # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Imagine de dimensiune foarte mare STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Imaginea capturată va avea o dimensiune de {COMMA} x {COMMA} pixeli. Realizarea unei capturi va dura ceva timp. Dorești să continui? STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Harta înălțimilor s-a salvat cu succes ca '{STRING}'. Cel mai înalt vârf este {NUM} -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Imagine salvată cu succes pe disc în fişierul '{STRING}' +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Imagine salvată cu succes pe disc în fișierul '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Imaginea nu a putut fi capturată! # Error message titles @@ -4810,15 +4811,15 @@ STR_ERROR_MESSAGE_CAPTION :{YELLOW}Mesaj STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mesaj de la {STRING} # Generic construction errors -STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Depăşeşte limita hărţii -STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Prea aproape de marginea hărţii -STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Nu ai destui bani - îţi trebuie {CURRENCY_LONG} +STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Depășește limita hărții +STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Prea aproape de marginea hărții +STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Nu ai destui bani - îți trebuie {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Necesită teren plat -STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terenul are o înclinaţie nepotrivită +STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terenul are o înclinație nepotrivită STR_ERROR_CAN_T_DO_THIS :{WHITE}Nu se poate face asta... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Mai întâi trebuie demolată clădirea -STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Nu se poate curăţa terenul... -STR_ERROR_SITE_UNSUITABLE :{WHITE}... locaţie nepotrivită +STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Nu se poate curăța terenul... +STR_ERROR_SITE_UNSUITABLE :{WHITE}... locație nepotrivită STR_ERROR_ALREADY_BUILT :{WHITE}... deja construit STR_ERROR_OWNED_BY :{WHITE}... apartine companiei {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... terenul se află în proprietatea altei companii @@ -4836,7 +4837,7 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Autorita STR_ERROR_BRIBE_FAILED :{WHITE}Tentativa de mituire a fost descoperită de un investigator regional # Levelling errors -STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Nu se poate înălţa terenul... +STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Nu se poate înălța terenul... STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Nu se poate coborî terenul... STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Terenul nu poate fi uniformizat aici... STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}Săpăturile ar afecta tunelul @@ -4847,26 +4848,26 @@ STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}După ac # Company related errors STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Nu se poate schimba numele companiei... -STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Nu se poate schimba numele preşedintelui... +STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Nu se poate schimba numele președintelui... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... creditul maxim permis este de {CURRENCY_LONG} -STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nu mai poţi împrumuta bani... +STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nu mai poți împrumuta bani... STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... nu ai nici un credit de plătit STR_ERROR_CURRENCY_REQUIRED :{WHITE}... ai nevoie de {CURRENCY_LONG} -STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Nu poţi plăti creditul... -STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nu poţi dona din banii împrumutaţi de la bancă... +STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Nu poți plăti creditul... +STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nu poți dona din banii împrumutați de la bancă... STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Nu se pot da bani acestei companii... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Nu se poate cumpăra compania... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nu se poate construi sediul companiei... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Nu pot construi nici un oras -STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Nu se poate redenumi oraşul... -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Nu se poate construi un oraş aici... -STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Oraşul nu poate fi extins... -STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... prea aproape de marginea hărţii -STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... prea aproape de alt oraş -STR_ERROR_TOO_MANY_TOWNS :{WHITE}... prea multe oraşe +STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Nu se poate redenumi orașul... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Nu se poate construi un oraș aici... +STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Orașul nu poate fi extins... +STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... prea aproape de marginea hărții +STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... prea aproape de alt oraș +STR_ERROR_TOO_MANY_TOWNS :{WHITE}... prea multe orașe STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nu mai este loc pe hartă STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Lucrari la drum in curs de desfasurare STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Acest oraș nu poate fi șters...{}O stație sau un depou face referire la acest oraș, sau o parcelă deținută de oraș nu poate fi eliminată @@ -4879,15 +4880,15 @@ STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Nu se po STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Acest tip de industrie nu se poate construi aici... STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Nu pot prospecta industria... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... prea aproape de altă industrie -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... mai întâi trebuie creat un oraş -STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... un singur obiectiv de acest tip este permis per oraş -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... se poate construi doar în oraşe cu populaţia de cel puţin 1200 +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... mai întâi trebuie creat un oraș +STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... un singur obiectiv de acest tip este permis per oraș +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... se poate construi doar în orașe cu populația de cel puțin 1200 STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... se poate construi doar in padurile tropicale -STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... se poate construi doar în zonele de deşert -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... se poate construi doar în oraşe (înlocuind casele) +STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... se poate construi doar în zonele de deșert +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... se poate construi doar în orașe (înlocuind casele) STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... se poate construi doar lângă centrul orașului STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... poate fi construit(ă) doar în zone joase -STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... se poate construi doar la marginea hărţii +STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... se poate construi doar la marginea hărții STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... pădurile pot fi plantate doar în zonele înzăpezite STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... poate fi construit doar deasupra liniei zăpezii STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... poate fi construit doar sub linia zăpezii @@ -4899,54 +4900,54 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modific # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Nu se poate construi o gară aici... -STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Nu se poate construi staţie de autobuz... +STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Nu se poate construi stație de autobuz... STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nu se poate construi platformă pentru camioane... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nu pot construi staţie de tramvai aici... -STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nu pot construi staţie de tramvai aici... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nu pot construi stație de tramvai aici... +STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nu pot construi stație de tramvai aici... STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Nu pot construi port aici... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nu se poate construi un aeroport aici... -STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Este adiacentă mai multor staţii -STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... staţie prea întinsă -STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Prea multe staţii -STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Staţia are prea multe componente -STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Prea multe staţii de autobuz -STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Prea multe staţii de camion +STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Este adiacentă mai multor stații +STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stație prea întinsă +STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Prea multe stații +STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Stația are prea multe componente +STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Prea multe stații de autobuz +STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Prea multe stații de camion STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Prea aproape de alt port STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Prea aproape de un alt aeroport -STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nu se poate redenumi staţia... +STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nu se poate redenumi stația... STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... drum deținut de un oraș -STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... drum orientat în direcţia greşită -STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... haltele nu pot avea colţuri -STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... haltele nu pot avea intersecţii +STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... drum orientat în direcția greșită +STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... haltele nu pot avea colțuri +STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... haltele nu pot avea intersecții # Station destruction related errors -STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nu se poate demola doar o parte din staţie... -STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Trebuie mai întâi să demolaţi gara -STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Staţia de autobuz nu poate fi demolată... -STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Staţia de camioane nu poate fi ştearsă... -STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nu pot înlătura staţia de tramvai... -STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nu pot înlătura staţia de tramvai... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Trebuie îndepărtată staţia mai întâi -STR_ERROR_THERE_IS_NO_STATION :{WHITE}...nu există staţie aici +STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nu se poate demola doar o parte din stație... +STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Trebuie mai întâi să demolați gara +STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Stația de autobuz nu poate fi demolată... +STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Stația de camioane nu poate fi ștearsă... +STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nu pot înlătura stația de tramvai... +STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nu pot înlătura stația de tramvai... +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Trebuie îndepărtată stația mai întâi +STR_ERROR_THERE_IS_NO_STATION :{WHITE}...nu există stație aici STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Mai întâi trebuie demolată gara -STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Mai întâi trebuie demolată staţia de autobuz +STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Mai întâi trebuie demolată stația de autobuz STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Mai întâi trebuie demolată platforma pentru camioane -STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Mai întâi trebuie demolată staţia de tramvai -STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Mai întâi trebuie demolată staţia de tramvai +STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Mai întâi trebuie demolată stația de tramvai +STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Mai întâi trebuie demolată stația de tramvai STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Mai întâi trebuie demolat portul STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Mai întâi trebuie demolat aeroportul # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Uneşte mai multe puncte de tranzit +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unește mai multe puncte de tranzit STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Prea aproape de alt punct de tranzit STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Nu se poate plasa o haltă aici... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Nu se poate amplasa baliză aici... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Nu pot schimba numele haltei... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Nu se poate desfiinţa halta de aici... +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Nu se poate desființa halta de aici... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Trebuie îndepărtat punctul de tranzit feroviar mai intai STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... baliză în cale STR_ERROR_BUOY_IS_IN_USE :{WHITE}... baliza este folosită de o altă companie! @@ -4955,18 +4956,18 @@ STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bali STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Nu se poate construi depou feroviar aici... STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Nu se poate construi autobază aici... STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Nu pot construi depou de tramvaie aici... -STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Nu se poate construi şantier naval aici... +STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Nu se poate construi șantier naval aici... STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Nu se poate redenumi depoul... STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... trebuie oprit într-un depou STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... trebuie oprit într-o autobază -STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... trebuie oprită într-un şantier naval +STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... trebuie oprită într-un șantier naval STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... trebuie oprită intr-un hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trenurile pot fi modificate doar când staţionează într-un depou +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Trenurile pot fi modificate doar când staționează într-un depou STR_ERROR_TRAIN_TOO_LONG :{WHITE}Tren prea lung -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Nu se poate inversa direcţia vehiculului... +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Nu se poate inversa direcția vehiculului... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... este alcătuit din mai multe unități STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Tipurile de șine sunt incompatibile @@ -4979,13 +4980,13 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tip incorect de # 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/reînnoire aplicată +STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nicio regulă autoînlocuire/înnoire aplicată STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(fonduri limitate) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Noul vehicul nu poate transporta {STRING} STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Noul vehicul nu poate fi reparat în comanda {NUM} # Rail construction errors -STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinaţie de linii imposibilă +STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinație de linii imposibilă STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Trebuie îndepărtate semafoarele mai întâi STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Cale ferată nepotrivită STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Mai întâi trebuie înlăturată calea ferată @@ -5000,17 +5001,17 @@ STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Nu se po STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...nu există cale ferată aici STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...nu există semafoare -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Tipul de şină nu poate fi convertit aici... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Tipul de șină nu poate fi convertit aici... # Road construction errors -STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Mai întâi trebuie înlăturată şoseaua +STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Mai întâi trebuie înlăturată șoseaua STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... drumurile cu sens unic nu pot avea bifurcatii -STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Nu se poate construi şosea aici... -STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Nu pot construi şină de tramvai aici... -STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nu se poate înlătura şoseaua... -STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nu pot înlătura şina de tramvai de aici... +STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Nu se poate construi șosea aici... +STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Nu pot construi șină de tramvai aici... +STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nu se poate înlătura șoseaua... +STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nu pot înlătura șina de tramvai de aici... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...nu există drum aici -STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...nu există şină de tramvai aici +STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...nu există șină de tramvai aici STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Tipul de drum nu poate fi convertit aici... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Nu pot converti tipul de tramvai aici... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Niciun drum adecvat @@ -5029,14 +5030,14 @@ STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Trebuie STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Nu pot construi apeductul aici... # Tree related errors -STR_ERROR_TREE_ALREADY_HERE :{WHITE}... sunt deja plantaţi arbori +STR_ERROR_TREE_ALREADY_HERE :{WHITE}... sunt deja plantați arbori STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... terenul nu este propice acestui tip de copac STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Nu se pot planta arbori aici... # Bridge related errors STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Nu se poate construi pod aici... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Mai întâi trebuie demolat podul -STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Cele două capete nu se pot situa în acelaşi loc +STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Cele două capete nu se pot situa în același loc STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Capetele podului nu sunt la acelasi nivel STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Podul este prea jos pentru terenul corespunzator STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}Podul este prea înalt pentru acest teren. @@ -5050,7 +5051,7 @@ STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Nu se po STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Loc nepotrivit pentru intrarea într-un tunel STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Mai întâi trebuie demolat tunelul STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Intersectare cu alt tunel -STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Tunelul ar ieşi din hartă +STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Tunelul ar ieși din hartă STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Terenul de la celălalt capăt al tunelului este imposibil de excavat STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tunel prea lung @@ -5059,7 +5060,7 @@ STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... prea STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Obiectul nu poate fi construit... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Obiect în cale STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sediu de companie în cale -STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Nu poţi cumpăra teren aici... +STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Nu poți cumpăra teren aici... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... este deja în proprietatea ta! STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... limita de obiecte construibile a fost atinsă @@ -5108,7 +5109,7 @@ STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Nu se po ###length VEHICLE_TYPES STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Nu se poate trimite trenul la depou... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Nu pot trimite autovehiculul la autobază... -STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nu pot trimite nava în şantier... +STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nu pot trimite nava în șantier... STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Nu se poate trimite aeronava la hangar... ###length VEHICLE_TYPES @@ -5130,14 +5131,14 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Nu pot v STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Nu se poate vinde aeronava... STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Prea multe vehicule în joc -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Nu se poate schimba intervalul de întreţinere... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Nu se poate schimba intervalul de întreținere... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehiculul este distrus STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nu toate vehiculele sunt identice STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Niciun vehicul nu va fi disponibil -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Schimbă configuraţia NewGRF +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Schimbă configurația NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Niciun vehicul nu este disponibil încă STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Începe un joc nou după {DATE_SHORT} sau utilizează un NewGRF care oferă vehicule în avans @@ -5159,16 +5160,16 @@ STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Nu se po STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Nu pot muta acest ordin... STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Nu se poate sări peste comanda actuală... STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Nu pot sări la comanda selectată... -STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... vehiculul nu poate ajunge la toate staţiile -STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... vehiculul nu poate ajunge la acea staţie -STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... un vehicul care are acest ordin nu poate ajunge la acea staţie +STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... vehiculul nu poate ajunge la toate stațiile +STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... vehiculul nu poate ajunge la acea stație +STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... un vehicul care are acest ordin nu poate ajunge la acea stație STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nu toate vehiculele au aceleași comenzi STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nu toate vehiculele împart comenzi STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Nu se poate trece la comenzi sincronizate... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Nu pot opri sincronizarea listei de comenzi... STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Nu pot copia lista de comenzi... -STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... prea departe de destinaţia precedentă +STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... prea departe de destinația precedentă STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... avionul nu are o rază de acțiune suficientă # Extra messages which go on the third line of errors, explaining why orders failed @@ -5187,8 +5188,8 @@ STR_ERROR_NO_BUOY :{WHITE}Nu exist # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nu pot programa vehiculul... -STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehiculele pot aştepta numai în staţii -STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Acest vehicul nu are oprire în această staţie +STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehiculele pot aștepta numai în stații +STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Acest vehicul nu are oprire în această stație STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... orarul este incomplet STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... orarul nu a început încă @@ -5228,18 +5229,18 @@ STR_TOWN_BUILDING_NAME_STATUE_1 :Statuie STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Fântână STR_TOWN_BUILDING_NAME_PARK_1 :Parc STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2 :Clădire de birouri -STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1 :Magazine şi birouri +STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1 :Magazine și birouri STR_TOWN_BUILDING_NAME_MODERN_OFFICE_BUILDING_1 :Clădire modernă de birouri STR_TOWN_BUILDING_NAME_WAREHOUSE_1 :Depozit STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_3 :Bloc de birouri STR_TOWN_BUILDING_NAME_STADIUM_1 :Stadion STR_TOWN_BUILDING_NAME_OLD_HOUSES_1 :Case vechi -STR_TOWN_BUILDING_NAME_COTTAGES_1 :Căsuţe +STR_TOWN_BUILDING_NAME_COTTAGES_1 :Căsuțe STR_TOWN_BUILDING_NAME_HOUSES_1 :Case STR_TOWN_BUILDING_NAME_FLATS_1 :Blocuri STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_2 :Clădire înaltă de birouri -STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_2 :Magazine şi birouri -STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_3 :Magazine şi birouri +STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_2 :Magazine și birouri +STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_3 :Magazine și birouri STR_TOWN_BUILDING_NAME_THEATER_1 :Teatru STR_TOWN_BUILDING_NAME_STADIUM_2 :Stadion STR_TOWN_BUILDING_NAME_OFFICES_1 :Birouri @@ -5249,7 +5250,7 @@ STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Centru comercia STR_TOWN_BUILDING_NAME_IGLOO_1 :Iglu STR_TOWN_BUILDING_NAME_TEPEES_1 :Corturi STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Casă-ceainic -STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Puşculiţă +STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Pușculiță ##id 0x4800 # industry names @@ -5261,7 +5262,7 @@ STR_INDUSTRY_NAME_OIL_REFINERY :Rafinărie STR_INDUSTRY_NAME_OIL_RIG :Platformă petrolieră STR_INDUSTRY_NAME_FACTORY :Fabrică de conserve STR_INDUSTRY_NAME_PRINTING_WORKS :Tipografie -STR_INDUSTRY_NAME_STEEL_MILL :Oţelărie +STR_INDUSTRY_NAME_STEEL_MILL :Oțelărie STR_INDUSTRY_NAME_FARM :Fermă STR_INDUSTRY_NAME_COPPER_ORE_MINE :Mină de cupru STR_INDUSTRY_NAME_OIL_WELLS :Sonde de petrol @@ -5273,7 +5274,7 @@ STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :Bancă STR_INDUSTRY_NAME_DIAMOND_MINE :Mină de diamante STR_INDUSTRY_NAME_IRON_ORE_MINE :Mină de fier STR_INDUSTRY_NAME_FRUIT_PLANTATION :Livadă -STR_INDUSTRY_NAME_RUBBER_PLANTATION :Plantaţie de cauciuc +STR_INDUSTRY_NAME_RUBBER_PLANTATION :Plantație de cauciuc STR_INDUSTRY_NAME_WATER_SUPPLY :Rezervor STR_INDUSTRY_NAME_WATER_TOWER :Turn de apă STR_INDUSTRY_NAME_FACTORY_2 :Fabrică de conserve @@ -5287,7 +5288,7 @@ STR_INDUSTRY_NAME_TOY_SHOP :Magazin de juc STR_INDUSTRY_NAME_TOY_FACTORY :Fabrică de jucării STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :Fântâni de plastic STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY :Fabrică de sucuri -STR_INDUSTRY_NAME_BUBBLE_GENERATOR :Generator de balonaşe +STR_INDUSTRY_NAME_BUBBLE_GENERATOR :Generator de balonașe STR_INDUSTRY_NAME_TOFFEE_QUARRY :Carieră de caramel STR_INDUSTRY_NAME_SUGAR_MINE :Mină de zahăr @@ -5315,7 +5316,7 @@ STR_SV_STNAME_VALLEY :Valea {STRING} STR_SV_STNAME_HEIGHTS :Dealurile {STRING} STR_SV_STNAME_WOODS :Pădurea {STRING} STR_SV_STNAME_LAKESIDE :Lacul {STRING} -STR_SV_STNAME_EXCHANGE :Piaţa {STRING} +STR_SV_STNAME_EXCHANGE :Piața {STRING} STR_SV_STNAME_AIRPORT :Aeroportul {STRING} STR_SV_STNAME_OILFIELD :Platforma {STRING} STR_SV_STNAME_MINES :Minele {STRING} @@ -5330,7 +5331,7 @@ STR_SV_STNAME_UPPER :{STRING} de Sus STR_SV_STNAME_LOWER :{STRING} de Jos STR_SV_STNAME_HELIPORT :Heliportul {STRING} STR_SV_STNAME_FOREST :Pădurea {STRING} -STR_SV_STNAME_FALLBACK :{STRING} Staţia #{NUM} +STR_SV_STNAME_FALLBACK :{STRING} Stația #{NUM} ############ end of savegame specific region! @@ -5365,7 +5366,7 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Electr STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Electric) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Electric) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Vagon pentru călători -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Vagon pentru poştă +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Vagon pentru poștă STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Vagon pentru cărbuni STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_OIL_TANKER :Cisternă pentru petrol STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_LIVESTOCK_VAN :Vagon pentru animale @@ -5373,7 +5374,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_GOODS_VAN :Vagon pentru bu STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_GRAIN_HOPPER :Vagon pentru cereale STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WOOD_TRUCK :Vagon pentru lemne STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_IRON_ORE_HOPPER :Vagon pentru minereu de fier -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_STEEL_TRUCK :Vagon pentru oţel +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_STEEL_TRUCK :Vagon pentru oțel STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_ARMORED_VAN :Vagon blindat STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FOOD_VAN :Vagon pentru alimente STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PAPER_TRUCK :Vagon pentru hârtie @@ -5384,7 +5385,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Vagon pentru ca STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Vagon pentru zahăr STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Vagon pentru vată de zahăr STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Vagon pentru caramel -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Vagon pentru balonaşe +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Vagon pentru balonașe STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Cisternă pentru cola STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :Vagon pentru bomboane STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Vagon pentru jucării @@ -5395,7 +5396,7 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Electr STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Electric) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Vagon pentru călători -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Vagon pentru poştă +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Vagon pentru poștă STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Vagon pentru cărbuni STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_OIL_TANKER :Cisternă pentru petrol STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_LIVESTOCK_VAN :Vagon pentru animale @@ -5403,7 +5404,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GOODS_VAN :Vagon pentru bu STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GRAIN_HOPPER :Vagon pentru cereale STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WOOD_TRUCK :Vagon pentru lemne STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_IRON_ORE_HOPPER :Vagon pentru minereu de fier -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_STEEL_TRUCK :Vagon pentru oţel +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_STEEL_TRUCK :Vagon pentru oțel STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_ARMORED_VAN :Vagon blindat STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Vagon pentru alimente STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PAPER_TRUCK :Vagon pentru hârtie @@ -5414,7 +5415,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Vagon pentru ca STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Vagon pentru zahăr STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Vagon pentru vată de zahăr STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Vagon pentru caramel -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Vagon pentru balonaşe +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Vagon pentru balonașe STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Cisternă pentru cola STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Vagon pentru bomboane STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Vagon pentru jucării @@ -5427,7 +5428,7 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Electric) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Vagon pentru călători -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Vagon pentru poştă +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Vagon pentru poștă STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COAL_CAR :Vagon pentru cărbuni STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_OIL_TANKER :Cisternă pentru petrol STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_LIVESTOCK_VAN :Vagon pentru animale @@ -5435,7 +5436,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Vagon pentru bu STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GRAIN_HOPPER :Vagon pentru cereale STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Vagon pentru lemne STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Vagon pentru minereu de fier -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Vagon pentru oţel +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Vagon pentru oțel STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Vagon blindat STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Vagon pentru alimente STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Vagon pentru hârtie @@ -5446,7 +5447,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Vagon pentru ca STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Vagon pentru zahăr STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Vagon pentru vată de zahăr STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Vagon pentru caramel -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Vagon pentru balonaşe +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Vagon pentru balonașe STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Cisternă pentru cola STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Vagon pentru bomboane STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Vagon pentru jucării @@ -5465,12 +5466,12 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Autobuz Ploddyp STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Camion pentru cărbuni Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Camion pentru cărbuni Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :Camion pentru cărbuni DW -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :Camion poştal MPS -STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Camion poştal Reynard -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Camion poştal Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :Camion poştal MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Camion poştal Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Camion poştal Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :Camion poștal MPS +STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Camion poștal Reynard +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Camion poștal Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :Camion poștal MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Camion poștal Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Camion poștal Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Cisternă pentru petrol Witcombe STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Cisternă pentru petrol Foster STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Cisternă pentru petrol Perry @@ -5489,9 +5490,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Camion pentru l STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :Camion pentru fier MPS STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Camion pentru fier Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Camion pentru fier Chippy -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Camion pentru oţel Balogh -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Camion pentru oţel Uhl -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Camion pentru oţel Kelling +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Camion pentru oțel Balogh +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Camion pentru oțel Uhl +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Camion pentru oțel Kelling STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Camion blindat Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Camion blindat Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Camion blindat Foster @@ -5540,9 +5541,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Camion pentru s STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :Camion pentru plastic MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Camion pentru plastic Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Camion pentru plastic Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :Camion pentru balonaşe MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Camion pentru balonaşe Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Camion pentru balonaşe Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :Camion pentru balonașe MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Camion pentru balonașe Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Camion pentru balonașe Wizzowow ###length 11 STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Tanc petrolier MPS @@ -5632,7 +5633,7 @@ STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Depou na STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangar # _SERIAL version of AIRACRAFT doesn't exist -STR_UNKNOWN_STATION :staţie necunoscută +STR_UNKNOWN_STATION :stație necunoscută STR_DEFAULT_SIGN_NAME :Semn STR_COMPANY_SOMEONE :cineva diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1b9cf46733b2b..02cc0a6eca8dc 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1928,6 +1928,9 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :отключе STR_CONFIG_SETTING_NOSERVICE :Не обслуживать транспорт, если отключены поломки: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Отключение технического обслуживания транспортных средств, если отключены поломки. (Если транспорт не заходит в депо, автозамена не работает). +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Медленная загрузка длинных составов: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :При включении - составы, длина которых превышает длину станции, загружаются медленнее тех, что полностью помещаются на станции. Это не влияет на построение маршрутов. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Учитывать ограничение скорости у вагонов: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :При наличии в составе вагонов с ограничением скорости учитывать это ограничение при определении максимальной скорости состава diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index b92d562f13527..34b2a1ec13250 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1902,6 +1902,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Onemogućeno STR_CONFIG_SETTING_NOSERVICE :Isključeno servisiranje kada ne postoje kvarovi: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Kada je uključeno, vozila se ne servisiraju ako ne mogu da se pokvare + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Uključeno ograničenje brzine kod vagona: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Kada je omogućeno, takođe upotrebi ograničenje brzine vagona za određivanje maksimalne brzine voza diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 4768d82107463..6d6d74e837579 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -260,7 +260,7 @@ STR_UNITS_SECONDS :{COMMA}{NBSP} STR_UNITS_TICKS :{COMMA}{NBSP} 刻 # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}关键字词: +STR_LIST_FILTER_TITLE :{BLACK}搜索: STR_LIST_FILTER_OSKTITLE :{BLACK}输入关键字筛选 STR_LIST_FILTER_TOOLTIP :{BLACK}输入关键字以筛选查找此列表 @@ -349,7 +349,7 @@ STR_SORT_BY_POWER_VS_RUNNING_COST :功率/运行 STR_SORT_BY_CARGO_CAPACITY :运载能力 STR_SORT_BY_RANGE :航行距离 STR_SORT_BY_POPULATION :人口 -STR_SORT_BY_RATING :等级 +STR_SORT_BY_RATING :评价 STR_SORT_BY_NUM_VEHICLES :交通工具数量 STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :去年总利润 STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :今年总利润 @@ -367,7 +367,7 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}打开 # Tooltips for the main toolbar ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}暂停游戏 -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}快速游戏模式 +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}快进游戏 STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}选项和设置 STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}保存游戏、读取游戏、放弃游戏、退出 STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}显示地图、附加视点、客货流或标志列表 @@ -378,8 +378,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}显示 STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}显示公司综合信息 STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}显示公司历史纪录 STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}显示游戏目标选单 -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}显示图表和货物运费表 -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}显示公司名次表 +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}显示公司图表和货物运费表 +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}显示公司排行榜 STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}查看工业设施或投资工业设施建设 STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}显示公司的火车列表。按住 Ctrl 键单击可以切换组群和车辆列表。 STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}显示公司的汽车列表。按住 Ctrl 键单击可以切换组群和汽车列表。 @@ -388,10 +388,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}显示 STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}放大视图 STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}缩小视图 STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}显示铁路建设工具 -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}显示公路建设工具 -STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建造电车道 -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}显示水运建设工具 -STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}显示机场建设工具 +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}建设道路 +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建造电车轨道 +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}建设码头 +STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}建设机场 STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开景观美化工具栏{}以修改地形、设置地貌等 STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}显示 声音/音乐 控制菜单 STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息 @@ -520,7 +520,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :关于 'OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite 对齐 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :切换边界框 STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :切换脏方块的颜色 -STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :调节小组件边框 +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :切换小组件边框 # Place in highscore window ###length 15 @@ -667,7 +667,7 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}总表 ###length 10 STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}上一年盈利的车船总数;包括火车、汽车、船只和飞机 STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}最近仍然使用的车站组件数量。车站的每个组件(火车站、公交站、机场)即使是连接成为一个车站,也会被独立计数。 -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}单一运输工具最低年利润(只计算使用两年以上的车辆、船只和飞机) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}最低收入载具的损益(只计算使用两年以上的车辆、船只和飞机) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最少的季度的现金收入 STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最多的季度的现金收入 STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}在过去 4 个季度中运输的货物总数 @@ -717,7 +717,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}清除 STR_PLAYLIST_CHANGE_SET :更改设置 STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}清除当前列表中曲目{}(仅限自定义1或自定义2) -STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}选择另一种已安装的音乐 +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}选择其他已安装的音乐包 STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}点击音乐曲目以加入当前播放列表{}(仅限自定义1或自定义2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}点击音乐曲目以从当前播放列表中删除{}(仅限自定义1或自定义2) @@ -809,7 +809,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}地图 # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}显示最后一条消息或新闻 STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - -STR_STATUSBAR_PAUSED :{YELLOW}* * 暂停中 * * +STR_STATUSBAR_PAUSED :{YELLOW}* * 已暂停 * * STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * 已暂停 (等待货物分配图更新) * * STR_STATUSBAR_AUTOSAVE :{RED}自动保存 STR_STATUSBAR_SAVING_GAME :{RED}* * 保存游戏中 * * @@ -842,7 +842,7 @@ STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLAC STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}汽车被 'UFO' 炸毁! STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}在 {TOWN} 附近的炼油厂泄漏! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}在 {TOWN} 附近的工厂神秘被毁! -STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}'UFO' 在 {TOWN} 附近降落! +STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}UFO 在 {TOWN} 附近降落! STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}在 {TOWN} 附近的煤矿发生塌方! STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}洪水!{}至少 {COMMA} 人失踪,据推测凶多吉少! @@ -909,7 +909,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}新 {STRING} 上市了! - {ENGINE} -STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}打开该运输工具所属的组 +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}打开该载具所属的组 STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION}不再接受:{CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION}现在接受:{CARGO_LIST} @@ -1172,16 +1172,16 @@ STR_TERRAIN_TYPE_CUSTOM :自定义高度 STR_TERRAIN_TYPE_CUSTOM_VALUE :自定义高度 ({NUM}) ###length 4 -STR_CITY_APPROVAL_LENIENT :宽容的 +STR_CITY_APPROVAL_LENIENT :宽容 STR_CITY_APPROVAL_TOLERANT :隐忍 STR_CITY_APPROVAL_HOSTILE :对立 -STR_CITY_APPROVAL_PERMISSIVE :宽容(对公司行为没有影响 ) +STR_CITY_APPROVAL_PERMISSIVE :放任(所有行为均不受影响) STR_WARNING_NO_SUITABLE_AI :{WHITE}无合适的 AI 可用...{}你可以在线下载各种 AI 。 # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}设置 -STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}关键字搜索: +STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}搜索条目: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}展开全部 STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}关闭全部 STR_CONFIG_SETTING_RESET_ALL :{BLACK}重置所有值 @@ -1252,16 +1252,16 @@ STR_CONFIG_SETTING_INTEREST_RATE :贷款利率: { STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :贷款利率;如果通货膨胀启用,将同时影响通货膨胀率。 STR_CONFIG_SETTING_RUNNING_COSTS :运营费用: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :设置维护费用、运营费用的难度 +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :设置载具的营运与维护成本水平。 STR_CONFIG_SETTING_CONSTRUCTION_SPEED :建设速度: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :AI建设频率的上限 STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :车辆损坏: {STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :设置运输工具故障率 +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :设置维修不足的载具的故障频率。 -STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :补贴系数: {STRING} -STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :设置线路补贴额度 +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :财政补贴系数: {STRING} +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :设置获得财政补贴的线路的利润倍数 STR_CONFIG_SETTING_SUBSIDY_DURATION :财政补贴尺度:{STRING} STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :设置发放财政补贴的年数 @@ -1271,7 +1271,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} 年 STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :没有财政补贴 STR_CONFIG_SETTING_CONSTRUCTION_COSTS :建设费用: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :设置建设费用和交易费用难度 +STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :设定建造的成本水平。 STR_CONFIG_SETTING_RECESSIONS :经济衰退: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :启用后,经济衰退将每隔几年就出现。在衰退期内,所有产出将大幅下降直至衰退结束。 @@ -1282,7 +1282,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :启用后,如 STR_CONFIG_SETTING_DISASTERS :灾难: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :灾难可能引起堵车或者车祸或者建筑损毁。 -STR_CONFIG_SETTING_CITY_APPROVAL :地区政府对区域改造的态度: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :地方政府态度: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :设置相关参数以决定各公司造成的噪音及环境破坏时,各城镇对该公司的评价及未来城镇建设的影响。 STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :地图高度限制:{STRING} @@ -1292,7 +1292,7 @@ STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(自动) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}您不能把最高地面高度限制设为这个值,因为地图上至少有一座山的高度大于该值 -STR_CONFIG_SETTING_AUTOSLOPE :允许在建筑、轨道等下方改变地形(自动斜坡): {STRING} +STR_CONFIG_SETTING_AUTOSLOPE :允许在基建设施底下改变地形: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :允许在建筑和轨道下方改变地形而不需要拆除他们 STR_CONFIG_SETTING_CATCHMENT :允许更真实的客源范围:{STRING} @@ -1301,28 +1301,28 @@ STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :启用时不同 STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :公司私有车站可以服务自带车站的工业设施:{STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :启用后,自带车站的工业设施(如钻井平台)也可以被临近的公司私有车站服务。禁用后,这些工业设施只能被它们自带的车站服务。任何临近的公司车站将不能服务它们,工业设施自有车站也不会提供除本工业设施的产品以外的其他产品 -STR_CONFIG_SETTING_EXTRADYNAMITE :允许拆除更多的由城镇所有的公路、桥梁、隧道等:{STRING} +STR_CONFIG_SETTING_EXTRADYNAMITE :允许拆除更多的城市桥隧道路:{STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :启用时更容易拆除城市自有的设施和建筑 STR_CONFIG_SETTING_TRAIN_LENGTH :火车的最大长度:{STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :设置火车的最大长度 STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} 格 -STR_CONFIG_SETTING_SMOKE_AMOUNT :火车头产生的蒸气/火花数量: {STRING} -STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :设置由火车头产生的蒸汽或者火花数量 +STR_CONFIG_SETTING_SMOKE_AMOUNT :载具废气数量: {STRING} +STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :设定载具可产生多少废气,即蒸汽/火花。 -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :列车加速度: {STRING} +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :列车加速模型: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :选择列车加速度模型,选“原版”时斜坡对所有列车影响相同,“真实”时影响因素包括斜坡长度、转弯半径、牵引力等 STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :汽车加速模型: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :选择汽车加速度模型,选“原版”时斜坡对所有汽车影响相同,选“真实”时依赖引擎性能,比如“牵引力” -STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :斜坡对火车的影响率:{STRING} -STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :每一格斜坡对火车速度的影响率,数值越大,火车越难爬上斜坡 +STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :列车斜坡坡度:{STRING} +STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :设置对列车而言,一格斜坡的坡度大小。数值越高,坡度越大,列车越难爬上斜坡。 STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :斜坡对汽车速度影响率: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :每一格斜坡对汽车速度的影响率,数值越大,汽车越难爬上斜坡 +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :汽车斜坡坡度: {STRING} +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :设置对汽车而言,一格斜坡的坡度大小。数值越高,坡度越大,汽车越难爬上斜坡。 STR_CONFIG_SETTING_FORBID_90_DEG :禁止列车 90 度转弯:{STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :当水平方向轨道与垂直方向轨道交叉时,没有采用45度的轨道组合连接,而是采用轨道90度直接连接时,列车通过时需要90度转弯,当本设置”打开“时,将禁止火车90度转弯。 @@ -1389,17 +1389,17 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :“打开”时 STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :允许买断经营权: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :如果一家公司购买了城市独家经营权,其它公司的站台将在一年之内不再产生乘客或者货物。 -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :允许新建房屋: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :允许资助城镇建设: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :“打开”时,允许公司提供资助新建房屋 -STR_CONFIG_SETTING_ALLOW_FUND_ROAD :允许使用资助地方道路修整功能: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_ROAD :允许资助道路重建: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :“打开”时,允许公司资助地方修整道路 STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :允许向其他公司转移资金: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :“打开”时,允许联机游戏模式下公司之间转移资金 -STR_CONFIG_SETTING_FREIGHT_TRAINS :根据装载货物的数量模拟超重列车:{STRING} -STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :设置载重量对火车的影响效果,高一些的数值会使火车对载重量更敏感,尤其是爬坡时 +STR_CONFIG_SETTING_FREIGHT_TRAINS :货物重量倍数:{STRING} +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :设置列车所载货物的重量倍数。设定的数值越高,货物对列车而言月中,并影响其加速、转弯及上坡的效率。 STR_CONFIG_SETTING_PLANE_SPEED :飞机速度因子:{STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :设置飞机与其它车辆类型的相对速率,使飞机运输收入减少 @@ -1421,14 +1421,14 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :允许在竞争 STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :“打开”时,允许在其它公司所属的道路上建设通过式车站 STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}当有车辆时,不可能更改此设定。 -STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :加强版固定资产维护: {STRING} -STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :固定资产会发生维护费用,“打开”本选项时,维护费用的增长会超过交通网络的增长规模,因而,对大公司影响更大。 +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :基础设施维护: {STRING} +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :启用时,基础设施会产生维护成本。公司所拥有的基础建设越多,维护成本也相应地越多。此设定更多影响较大的公司,而对较小的公司影响更小。 -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :初创公司颜色:{STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :公司初始主色调:{STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :选定公司的初始配色方案 STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :公司初始副色调: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :如果正在使用的NewGRF允许,选定一个公司初始副色调。 +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :选择公司初始副色调,需要使用支持副色调的NewGRF。 STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :总允许建设小型机场: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :“打开”此选项,每种类型机场出现后一直是可用的 @@ -1446,8 +1446,8 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :检查 所有 STR_CONFIG_SETTING_WARN_INCOME_LESS :若线路亏损时发出提示: {STRING} STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :“打开”,当一辆车在一年内总体亏损,发出提示 -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :车辆永不报废:{STRING} -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :“打开”时,所有的车辆在它出现后一直可用 +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :载具永不过期:{STRING} +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。 STR_CONFIG_SETTING_AUTORENEW_VEHICLE :当车辆报废时自动更新:{STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :“打开”时,车辆在临近它的报废期限时自动更新 @@ -1476,19 +1476,19 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :在地图城镇 STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :图表曲线宽度: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :图表中曲线的宽度,细线清晰易读,粗线容易分辨颜色 -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :在建造运输工具窗口中显示 NewGRF 的名字:{STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :在建造运输工具窗口中添加一行,显示选中运输工具来自的 NewGRF。 +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :在购买载具窗口中显示 NewGRF 的名字:{STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :在购买载具窗口中添加一行,显示选中载具的 NewGRF。 STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :在列表窗口中显示车辆可以携带的货物 {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :如果启用,车辆的可运输负载将出现在车辆列表的上方 STR_CONFIG_SETTING_LANDSCAPE :景观: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :此设置决定基本的游戏场景、有什么货物可供运输,以及城镇发展的所需条件。然而,NewGRF 及游戏脚本可以比此设置更加细致地设置游戏场景 -STR_CONFIG_SETTING_LAND_GENERATOR :生成地形:{STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :使用原始算法时,系统会依赖基础图形组去生成固定的地形。新算法 TerraGenesis 是一个基于 Perlin 噪声的地形生成程序,支持较为细致的地形设置 +STR_CONFIG_SETTING_LAND_GENERATOR :地形算法:{STRING} +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :使用原始算法时,系统会依赖基础图形组去生成固定的地形。新算法 TerraGenesis 是一个基于柏林噪声的地形生成程序,支持较为细致的地形设置 ###length 2 STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :原始算法 -STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :新算法 +STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :地貌类型: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :选择生成地图的起伏度 @@ -1500,17 +1500,17 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :石油工业距 STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :限制炼油厂和油井到地图边缘或海岛海岸的最大距离。对于大于 256 格的地图,该值将按比例放大。 STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪线高度:{STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :控制在寒带气候中雪线高度。大雪会影响工业和城镇发展需求。只能在场景编辑器中更改或由“积雪覆盖率”计算得到。 +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :控制在寒带气候中雪线高度。大雪会影响工业和城镇发展需求。只能在场景编辑器中更改或由“雪地比率”计算得到。 -STR_CONFIG_SETTING_SNOW_COVERAGE :积雪覆盖率:{STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE :雪地比率:{STRING} STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :控制寒带气候中大致的雪量。雪会影响工业和城镇发展需求。只在地图生成时使用。海岸线上的土地永远没有积雪 STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% -STR_CONFIG_SETTING_DESERT_COVERAGE :沙漠覆盖率:{STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE :沙漠比率:{STRING} STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :控制热带气候中大致的沙漠量。沙漠会影响工业生成和城镇发展需求。只在地图生成时有效 STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地面粗糙度 (仅限生成地图时):{STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地面粗糙度:{STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :选择在地图上的山丘密度。光滑的地形会包含较少且相互之间较分散的山丘;粗糙的地形的山丘较密集,但可能会使地图显得重复 ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :非常光滑 @@ -1528,15 +1528,15 @@ STR_CONFIG_SETTING_TREE_PLACER :森林算法: STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :选择地图上树木的分布方式:“原版”树木各处一致分布,“改良”各类树木成片分布 ###length 3 STR_CONFIG_SETTING_TREE_PLACER_NONE :没有 -STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :原始的 -STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :增强的 +STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :原版 +STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :改良 STR_CONFIG_SETTING_ROAD_SIDE :道路车辆: {STRING} STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :选择道路通行方向 ###length 2 -STR_CONFIG_SETTING_ROAD_SIDE_LEFT :左侧通行 -STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :右侧通行 +STR_CONFIG_SETTING_ROAD_SIDE_LEFT :左行 +STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :右行 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :高度图旋转:{STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :选择高度图旋转的方向以创建地图 @@ -1650,8 +1650,8 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :暂停时允许 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :选择游戏暂停时可以进行哪些操作 ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :没有操作 -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :除建设面板外全部操作 -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :除景观面板操作外全部操作 +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :除建设操作外所有操作 +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :除景观操作所有操作 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :所有操作 STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :使用高级车辆列表: {STRING} @@ -1713,8 +1713,8 @@ STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :按一下按钮 STR_CONFIG_SETTING_SOUND_DISASTER :灾难/事故: {STRING} STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :播放灾难和事故音效 -STR_CONFIG_SETTING_SOUND_VEHICLE :运输工具: {STRING} -STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :播放运输工具音效 +STR_CONFIG_SETTING_SOUND_VEHICLE :载具: {STRING} +STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :播放载具音效 STR_CONFIG_SETTING_SOUND_AMBIENT :音效:{STRING} STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :播放与地貌、工业设施和城镇有关的环境音效 @@ -1759,7 +1759,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :每个脚本的 STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :单个脚本强制终止前可占用的最大内存量。对于大地图可能需要增加。 STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB -STR_CONFIG_SETTING_SERVINT_ISPERCENT :保养周期(百分数): {STRING} +STR_CONFIG_SETTING_SERVINT_ISPERCENT :维护间隔以百分比(%)计算: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :“打开”时,当车辆的可靠性降到他们最大可靠性的一定百分比时,他们会去保养。{}{}例如,如果一辆车的最大可靠性是90%,而保养间隔是20%,车辆会在可靠性为72%时去保养。 STR_CONFIG_SETTING_SERVINT_TRAINS :火车默认保养周期:{STRING} @@ -1777,23 +1777,26 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :关闭 STR_CONFIG_SETTING_NOSERVICE :在无故障模式下禁用保养周期:{STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :“打开”时,在无故障模式下,车辆禁用保养周期 -STR_CONFIG_SETTING_WAGONSPEEDLIMITS :启动车辆限速:{STRING} -STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :“打开“时,还要根据车辆的限速来决定一列火车的最高速度 +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :站台长度装卸惩罚:{STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :启用站台长度装卸惩罚。过长的火车将会在站台中装卸得更慢。此项设置不会影响寻路。 + +STR_CONFIG_SETTING_WAGONSPEEDLIMITS :列车车厢速度限制:{STRING} +STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :启用时,列车的最高速度将取决于车厢的速度上限。 STR_CONFIG_SETTING_DISABLE_ELRAILS :禁用电气化铁路:{STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :“打开”本选项时禁止电气化铁路的使用 STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :玩家车站的剪彩仪式: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :报纸报道运输工具到达新玩家的站台情况 +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :当玩家设立的车站首次有载具停靠时显示讯息。 STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :对手车站的剪彩仪式: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :报纸报道竞争对手运输工具新到一个站台的情况 +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :当对手设立的车站首次有载具停靠时显示讯息。 STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :事故/灾难: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :报纸报道事故或灾难发生情况 -STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :竞争对手的运输工具事故:{STRING} -STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :显示竞争对手的运输工具事故消息 +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :竞争对手的载具事故:{STRING} +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :显示竞争对手的载具事故消息 STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :公司信息: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :报纸报道新公司开业或者预警倒闭风险 @@ -1817,10 +1820,10 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :其它工业产 STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :报纸报道非玩家或竞争对手的工业产量变化 STR_CONFIG_SETTING_NEWS_ADVICE :对于企业车辆的建议及信息: {STRING} -STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :显示运输工具需要关注的消息 +STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :显示载具需要关注的消息 -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :新车型: {STRING} -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :显示新运输工具上市的消息 +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :载具上市: {STRING} +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :显示新载具上市的消息 STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :货物接受情况变更: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :显示站台接受货物种类变更的消息 @@ -1876,7 +1879,7 @@ STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :选择在信号 STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :仅路径信号灯 STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :所有信号 -STR_CONFIG_SETTING_TOWN_LAYOUT :新建城镇道路自动延伸: {STRING} +STR_CONFIG_SETTING_TOWN_LAYOUT :新建城镇道路布局: {STRING} STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :选择城市道路网络的建设方式 ###length 5 STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :默认 @@ -1888,10 +1891,10 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :随机 STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :允许城镇建设道路: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :“打开”时允许成长时建设道路,“关闭”时禁止城镇自行建设道路 STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :允许城镇建设平交道: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :“打开”时允许城镇建设平交路口 +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :“打开”时允许城镇建设平交道口 -STR_CONFIG_SETTING_NOISE_LEVEL :基于噪音级别控制机场建设: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :允许城镇基于城镇人口、机场大小和距离控制机场噪音。“关闭”时,每个城市只允许建设两座机场,除非地方政府态度被设为“宽容的” +STR_CONFIG_SETTING_NOISE_LEVEL :允许城镇限制机场噪音: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :允许城镇基于城镇人口、机场大小和距离控制机场噪音。“关闭”时,每个城市只允许建设两座机场,除非地方政府态度被设为“放任” STR_CONFIG_SETTING_TOWN_FOUNDING :在游戏中建立城镇: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :“打开”本选项时,允许玩家在游戏中创建新城镇 @@ -1923,8 +1926,8 @@ STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :移动一个窗 STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} 像素 ###setting-zero-is-special STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :关闭 -STR_CONFIG_SETTING_SOFT_LIMIT :窗口软性限制(非粘滞): {STRING} -STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :设置为腾出位置显示新的窗口,在打开多少个窗口后自动关闭非锁定窗口 +STR_CONFIG_SETTING_SOFT_LIMIT :窗口数量上限: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :设定窗口数量上限。超出此限值时游戏会自动关闭最早打开的窗口。已固定的窗口不受此项限制。 STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :关闭 @@ -1957,7 +1960,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :正常 STR_CONFIG_SETTING_TOWN_GROWTH_FAST :快 STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :非常快 -STR_CONFIG_SETTING_LARGER_TOWNS :随机生成城镇时,生成大都市的比例为: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS :都市比例: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :随机生成城镇时,有可能生成大都市的数量,这些大都市起始人口较多、发展也较快。 STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA} ###setting-zero-is-special @@ -1970,7 +1973,7 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :两次连结图 STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :在货物分配的重新计算上花费 {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :每一个连结图的重新计算时间。当一次重新计算开始,一个线程会被允许运行这个秒数。此设定赋值越小,则线程无法按时结束的可能性越大,从而导致游戏运行延迟。此设定赋值越大,则在线路改变时货物再分配所需时间会变长。 -STR_CONFIG_SETTING_DISTRIBUTION_PAX :乗客分配方式:{STRING} +STR_CONFIG_SETTING_DISTRIBUTION_PAX :乘客分配方式:{STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :假设有交通路线连接甲、乙两站。“对称”指甲站往乙站的乗客数量与乙站往甲站的乘客数量大致相同。“不对称”指任何一站往另一站的乘客数量皆由系统随意决定。“手动”指系统不会自动分配乘客的目的地。 STR_CONFIG_SETTING_DISTRIBUTION_MAIL :邮件分配方式:{STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :假设有交通路线连接甲、乙两站。“对称”指甲站往乙站的邮件数量与乙站往甲站的邮件数量大致相同。“不对称”指任何一站往另一站的邮件数量皆由系统随意决定。“手动”指系统不会自动分配邮件的目的地。 @@ -1995,7 +1998,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :如果最短路 STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :货物分配功能在派送货物时,会优先使用最短路径,当它饱和后改用第二短的路径,如此类推。当所有路径皆饱和但仍未满足需求,系统會由容量较大的路径开始继续加载货物。{}由于路径饱和度难以准确估算,此设定容许您定义一值,使短路径达到该饱和度后,系统便开始加载容量较大的路径。{}如果此设定的值少於100%,就算系统高估路径容量,也不會使过多的货物滞留在站台上。 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度单位(陆地):{STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :速度单位 (航海): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :速度单位(航海):{STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :在界面上以所选择的单位表示速度 ###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :英制(英里/小时) @@ -2004,8 +2007,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国际单位制 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :游戏单位 (格/日) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :节 -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :运输工具功率单位:{STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :在界面上以所选择的单位表示运输工具的功率 +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :载具功率单位:{STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :在界面上以所选择的单位表示载具的功率 ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :英制(马力) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :公制(马力) @@ -2196,12 +2199,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}显示 STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}显示汽车配色方案 STR_LIVERY_SHIP_TOOLTIP :{BLACK}显示船只配色方案 STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}显示飞机配色方案 +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}显示列车分组配色 +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}显示汽车分组配色 +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}显示船只分组配色 +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}显示飞机分组配色 STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}为选定的配色方案指定主色调 STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}为选定的配色方案指定副色调 STR_LIVERY_PANEL_TOOLTIP :{BLACK}选择一个或多个(CTRL+单击){}要更改的配色方案{}点击方块可以切换不同的方案 +STR_LIVERY_TRAIN_GROUP_EMPTY :尚未为列车分组 +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :尚未为汽车分组 +STR_LIVERY_SHIP_GROUP_EMPTY :尚未为船只分组 +STR_LIVERY_AIRCRAFT_GROUP_EMPTY :尚未为飞机分组 ###length 23 -STR_LIVERY_DEFAULT :标准外观 +STR_LIVERY_DEFAULT :默认配色 STR_LIVERY_STEAM :蒸汽机车 STR_LIVERY_DIESEL :内燃机车 STR_LIVERY_ELECTRIC :电力机车 @@ -2305,7 +2316,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}游戏 STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}日期 STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}当前日期 STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}年数 -STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}年数{}游戏正在运行的 +STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}游戏年数{}游戏正在运行中 STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}语言,服务器版本和其他信息 STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}点击列表中的服务器可以选定它 @@ -2313,12 +2324,12 @@ STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}上一 STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}点击选择您上次加入的服务器 STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}游戏信息 -STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}客 户 端: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} +STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}客户端: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}场景类型: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}地图尺寸: {WHITE}{COMMA}×{COMMA} -STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}服务器版本: {WHITE}{STRING} +STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}游戏版本: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}该服IP: {WHITE}{STRING} -STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}邀请码:{WHITE}{STRING} +STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}邀请代码:{WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}开始日期: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}当前日期: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}游戏脚本:{WHITE}{STRING} (v{NUM}) @@ -2584,7 +2595,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}选择 STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}更新所有已下载的扩展包 STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}取消全选 STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}取消全部选择 -STR_CONTENT_SEARCH_EXTERNAL :{BLACK}搜索整个网络 +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}在外部网站搜索 STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}在与OpenTTD没有联系的网站搜寻没有纳入OpenTTD內容服务的內容 STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}正在离开游戏! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}在外部网站下载內容的规则及条款可能跟OpenTTD引用的规则及条款不同。{}您需要参照有关网站以取得在OpenTTD安装有关內容的资讯。{}您要継续吗? @@ -2861,10 +2872,10 @@ STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}配置 { STR_AIRPORT_SMALL :小型机场 STR_AIRPORT_CITY :城市机场 -STR_AIRPORT_METRO :国内机场 +STR_AIRPORT_METRO :都会机场 STR_AIRPORT_INTERNATIONAL :国际机场 STR_AIRPORT_COMMUTER :通勤机场 -STR_AIRPORT_INTERCONTINENTAL :全球机场 +STR_AIRPORT_INTERCONTINENTAL :洲际机场 STR_AIRPORT_HELIPORT :直升机停机楼 STR_AIRPORT_HELIDEPOT :直升机专用机场 STR_AIRPORT_HELISTATION :直升机小型机场 @@ -3212,7 +3223,7 @@ STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}城镇 STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}选择城镇密度,或者输入一个自定义数字 STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}城镇名称: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}选择城镇名称的命名风格 -STR_MAPGEN_DATE :{BLACK}日期: +STR_MAPGEN_DATE :{BLACK}起始日期: STR_MAPGEN_DATE_TOOLTIP :{BLACK}选择起始日期 STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}工业数量: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}选择工业密度,或者输入一个自定义数字 @@ -3220,17 +3231,17 @@ STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}最高 STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}选择游戏地图中最高峰的海拔,以海平面为原点计。 STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}提高最高峰的最大高度一格 STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}降低最高峰的最大高度一格 -STR_MAPGEN_SNOW_COVERAGE :{BLACK}积雪覆盖率: -STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}增加 10% 积雪覆盖率 -STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}减少 10% 积雪覆盖率 +STR_MAPGEN_SNOW_COVERAGE :{BLACK}雪地比率: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}将雪地比率增加10% +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}将雪地比率减少10% STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE :{BLACK}沙漠覆盖率: -STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}增加 10% 沙漠覆盖率 -STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}减少 10% 沙漠覆盖率 +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}将沙漠比率增加10% +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}将沙漠比率减少10% STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}地形特点: STR_MAPGEN_SEA_LEVEL :{BLACK}海洋面积: -STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK} 选择覆盖率 +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}选择海洋覆盖率 STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}河流数量: STR_MAPGEN_SMOOTHNESS :{BLACK}平滑度: STR_MAPGEN_VARIETY :{BLACK}多样的分发: @@ -3244,11 +3255,11 @@ STR_MAPGEN_GS_SETTINGS :{BLACK}游戏 STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}显示游戏脚本设置 ###length 21 -STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :英国 (原始的) +STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :英国 (原版) STR_MAPGEN_TOWN_NAME_FRENCH :法国 STR_MAPGEN_TOWN_NAME_GERMAN :德国 -STR_MAPGEN_TOWN_NAME_ADDITIONAL_ENGLISH :英国 (增强的) -STR_MAPGEN_TOWN_NAME_LATIN_AMERICAN :美式拉丁 +STR_MAPGEN_TOWN_NAME_ADDITIONAL_ENGLISH :英国 (增订) +STR_MAPGEN_TOWN_NAME_LATIN_AMERICAN :拉丁美洲 STR_MAPGEN_TOWN_NAME_SILLY :搞笑地名 STR_MAPGEN_TOWN_NAME_SWEDISH :瑞典 STR_MAPGEN_TOWN_NAME_DUTCH :荷兰 @@ -3325,20 +3336,20 @@ STR_GENERATION_PREPARING_GAME :{BLACK}准备 STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF 设置 STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}NewGRF 详细信息 STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}已激活 NewGRF -STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}停用 NewGRF +STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}已停用 NewGRF STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}选择预设 -STR_NEWGRF_FILTER_TITLE :{ORANGE}关键字词搜索: -STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}装载选定的预定义 -STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}保存预定义 -STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}将当前组保存为预定义 -STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}删除预定义组 -STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}删掉当前预定义组 +STR_NEWGRF_FILTER_TITLE :{ORANGE}搜索: +STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}载入选定的预设 +STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}保存预设 +STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}将当前激活列表保存为预设 +STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}删除预设 +STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}删除选定的预设 STR_NEWGRF_SETTINGS_ADD :{BLACK}增加 STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}将选定的 NewGRF 文件添加到你的配置中 STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}重新检索文件 STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}刷新可用的 NewGRF 文件列表 -STR_NEWGRF_SETTINGS_REMOVE :{BLACK}删除 -STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}从列表中删除一个 NewGRF 文件 +STR_NEWGRF_SETTINGS_REMOVE :{BLACK}停用 +STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}从列表中停用选定的 NewGRF 文件 STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}上移 STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}将选定的 NewGRF 文件向上移动 STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}下移 @@ -3350,7 +3361,7 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}已经 STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}设置参数 STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}显示参数 STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}切换调色板 -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}切换选定GRF的调色.{}本功能用于游戏使用时GRF呈粉色 +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}切换选定GRF的调色盘。{}如果该GRF在游戏中看起来是一片粉色,您可以尝试调整此项以解决问题。若没有问题,请不要调整此项 STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}应用 STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}在线查找缺失的扩展包 @@ -3362,10 +3373,10 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}版本: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}最低兼容版本: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5 码:{SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}调色板: {SILVER}{STRING} -STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :默认 (D) -STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :默认 (D) / 32 bpp -STR_NEWGRF_SETTINGS_PALETTE_LEGACY :传统 (W) -STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :传统 (W) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :默认 (DOS) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :默认 (DOS) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :传统 (Windows) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :传统 (Windows) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}参数:{SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :无 @@ -3382,7 +3393,7 @@ STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}保存 STR_SAVE_PRESET_CANCEL :{BLACK}取消 STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}不修改默认设置 STR_SAVE_PRESET_SAVE :{BLACK}保存 -STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}以当前选定的名称保存预设值 +STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}以当前选定的名称保存预设 # NewGRF parameters window STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}改变基本图形组参数 @@ -3502,7 +3513,7 @@ STR_NEWGRF_INVALID_ENGINE : # Placeholders for other invalid stuff, e.g. vehicles that have gone (Game Script). -STR_INVALID_VEHICLE :<种类不明的运输工具> +STR_INVALID_VEHICLE :<不明载具> # NewGRF scanning window STR_NEWGRF_SCAN_CAPTION :{WHITE}正在扫描 NewGRF @@ -3659,9 +3670,9 @@ STR_STATION_LIST_CAPTION :{WHITE}{COMPANY STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- 没有 - -STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}选择全部运输工具种类 +STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}选择所有设施 STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}选择所有货物类型{}(包括不在等待列表中的) -STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}选择无等待货物车站 +STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}无任何货物等待运送 # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3747,7 +3758,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}资本 ###length 13 STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}建设费用 -STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}购置新运输工具 +STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}购置新载具 STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}列车 STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}公路车辆 STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}航空运行成本 @@ -3895,7 +3906,7 @@ STR_VEHICLE_LIST_AVAILABLE_SHIPS :可用的船只 STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :可用的飞机 STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}管理列表 -STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向所有在此列表中的运输工具发出指令 +STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向列表中所有载具发出指令 STR_VEHICLE_LIST_REPLACE_VEHICLES :替换车辆/飞机/船只 STR_VEHICLE_LIST_SEND_FOR_SERVICING :进行保养 STR_VEHICLE_LIST_CREATE_GROUP :创建分组 @@ -3910,7 +3921,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :前往机库 STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}点击这里可以停止列表中的{}所有车辆/船只/飞机 STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}点击这里可以启动列表中的{}所有车辆/船只/飞机 -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}查看此运输工具类型的{}全部可选购列表 +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}显示此载具类别所有可用的设计 STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}与 {COMMA} 车辆/船只/飞机共享调度计划 @@ -4176,10 +4187,10 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}售价 # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}更新 {STRING} - {STRING} -STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}正在使用的运输工具 -STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}此行显示您拥有的运输工具 -STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES :{YELLOW}可用的运输工具 -STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}此行显示可供替换的运输工具 +STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}使用中的载具 +STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}此行显示拥有的载具 +STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES :{YELLOW}可用的载具 +STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}此行显示可供替换的载具 ###length VEHICLE_TYPES STR_REPLACE_VEHICLE_TRAIN :火车 @@ -4277,7 +4288,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}当前 # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}装载/卸货 STR_VEHICLE_STATUS_LEAVING :{LTBLUE}发车 -STR_VEHICLE_STATUS_CRASHED :{RED}撞毁! +STR_VEHICLE_STATUS_CRASHED :{RED}已撞毁! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}抛锚 STR_VEHICLE_STATUS_STOPPED :{RED}停运 STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}正在停止,{VELOCITY} @@ -4288,11 +4299,11 @@ STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}距离 STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}正在前往 {STATION},{VELOCITY} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}没有目标,{VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}正在前往{WAYPOINT},{VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}正前往 {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}正在前往 {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}正在服务于 {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}不能到达 {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}不能到达路点 {WAYPOINT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}不能到达 {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}不能到达 {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}不能到达 {DEPOT}, {VELOCITY} @@ -4483,7 +4494,7 @@ STR_ORDERS_DELETE_BUTTON :{BLACK}删除 STR_ORDERS_DELETE_TOOLTIP :{BLACK}删除高亮的调度命令 STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}删除全部调度 STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}退出共享调度计划 -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}退出共享调度计划。 按住 Ctrl 键单击可以同时清除此运输工具的调度计划。 +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}退出共享调度计划。 按住 Ctrl 键单击可以同时清除此载具的调度计划。 STR_ORDERS_GO_TO_BUTTON :{BLACK}前往 STR_ORDER_GO_TO_NEAREST_DEPOT :前往最近的车库 @@ -4653,9 +4664,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}符合 STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}切换对比AI 记录信息是否与断点字符串相符时是否要符合大小写 STR_AI_DEBUG_CONTINUE :{BLACK}继续 STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}取消暂停AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}查看此AI的调试输出 +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}查看此AI的调试输出。按住Ctrl键点选以打开新窗口 STR_AI_GAME_SCRIPT :{BLACK}游戏脚本 -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}查看脚本记录 +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}检查游戏脚本日志。按住Ctrl键点选以打开新窗口 STR_ERROR_AI_NO_AI_FOUND :找不到可用的AI。{}本AI是一个演示AI,并不会在游戏中做任何动作,{}您可以通过“在线查找扩展包”功能下载新的AI。 STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}您使用的一个AI崩溃了。请附上一张AI调试窗口的截图,将此错误通报AI作者。 @@ -4670,8 +4681,8 @@ STR_AI_CONFIG_HUMAN_PLAYER :玩家 STR_AI_CONFIG_RANDOM_AI :随机 AI STR_AI_CONFIG_NONE :(无) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} -STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}最大竞争对手个数:{ORANGE}{COMMA} -STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}竞争对手公司建立间隔: {ORANGE}{COMMA} 分钟 +STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}电脑玩家数量上限:{ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}电脑公司建立间隔 {ORANGE}{COMMA} 分钟 STR_AI_CONFIG_MOVE_UP :{BLACK}上移 STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}在列表中将选择的AI上移 @@ -5075,9 +5086,9 @@ STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}无法 STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}无法重命名分组…… STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}无法移动分组... STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... 组从属关系不能出现自环 -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}无法从该组移除所有运输工具 -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}无法添加运输工具到该组…… -STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}无法添加共享指令的运输工具到该组…… +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}无法从该组移除所有载具…… +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}无法添加载具到该组…… +STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}无法添加共享指令的载具到该组…… # Generic vehicle errors @@ -5142,10 +5153,10 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... 运 STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}...并非所有车辆都相同 -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}没有可用的运输工具 +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}没有可用的载具 STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}请改动您的 NewGRF 设置 -STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}暂时沒有可用的运输工具 -STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}在{DATE_SHORT}后开始新游戏,或使用一款能提供早期运输工具的NewGRF +STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}暂时沒有可用的载具 +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}在{DATE_SHORT}后开始新游戏,或使用一款能提供早期载具的NewGRF # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}不能让列车冒险通过信号... diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 7a01b41ad601e..2761d26018700 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1815,6 +1815,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :vypnuté STR_CONFIG_SETTING_NOSERVICE :Vypnúť servisy, ak sú vypnuté poruchy: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ak je zapnuté, vozidlá nebudú servisované ak sú vypnuté poruchy. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Obmedzenie rýchlosti pre vagóny: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ak je zapnuté, použijú sa tiež rýchlostné obmedzenia pre vagóny na obmedzenie celkovej rýchlosti vlakov. diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 7c28205376c6f..ff6849addd47b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1735,6 +1735,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Onemogočeno STR_CONFIG_SETTING_NOSERVICE :Onemogoči servisiranje, če so onemogočene okvare: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Če je omogočeno, se vozila ne servisirajo, če ni okvar. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Omogoči omejitve hitrosti vagonov: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Če je omogočeno, se upošteva tudi omejitve hitrosti posameznih vagonov pri najvišji hitrosti vlaka. diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 1c27e5fd52383..2307048bfe7aa 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1710,6 +1710,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deshabilitado STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento cuando las averías están desactivadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Cuando se activa, los vehículos no reciben mantenimiento si no pueden averiarse + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad en vagones: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Si se activa, se tienen en cuenta los límites de velocidad de los vagones a la hora de establecer la velocidad máxima de un tren diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c73c53cd4e518..b85e3c86826c9 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1710,6 +1710,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Deshabilitado STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento si las averías están desactivadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, los vehículos no recibirán mantenimiento si no pueden averiarse + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad para vagones: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Al activarse, se tienen en cuenta los límites de velocidad de los vagones para decidir la máxima velocidad de un tren diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 8749a84be03a3..e20e3d46be0f9 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1762,6 +1762,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Inaktiverat STR_CONFIG_SETTING_NOSERVICE :Inaktivera service när motorstopp är av: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :När det är aktiverat servas inte fordon om de inte kan få motorstopp + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Använd hastighetsbegränsningar för tågvagnar: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :När det är aktiverat tas även hänsyn till vagnarnas hastighetsbegränsningar när ett tågs maxhastighet beräknas diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 577a6f955e272..ce0e573aae7b3 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1549,6 +1549,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :செயலி STR_CONFIG_SETTING_NOSERVICE :பழுதுகள் இல்லையெனில் பழுதுபார்த்தலினை செயலிழக்கவும்: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :இயக்கப்படும் போது, வாகனங்கள் உடைக்க முடியாவிட்டால் சேவை செய்யப்படாது + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :பெட்டி வேக கட்டுப்பாட்டினை செயல்படுத்தவும்: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :மின்சார இரயில்களை அனுமதிக்காதே: {STRING} diff --git a/src/lang/thai.txt b/src/lang/thai.txt index cb5798c642aef..876b6cf24639c 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1596,6 +1596,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :ไม่ตั STR_CONFIG_SETTING_NOSERVICE :ไม่ใช้งานการซ่อมบำรุงเมื่อตั้งเป็นไม่มีการขัดข้อง: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :เมื่อเปิดใช้งาน ยานพาหนะจะไม่เข้ารับการซ่อมบำรุงหากตั้งค่าไว้ไม่ให้มีการชำรุด + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :จำกัดความเร็วของรถจักร/รถพ่วง: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :เมื่อเปิดใช้งาน จะทำให้มีจำกัดความเร็วสูงสุดของยานพาหนะและรถพ่วงต่างๆ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 03e036c28a1bc..af6d24f501684 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1755,6 +1755,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :停用 STR_CONFIG_SETTING_NOSERVICE :如果停用故障,車輛不會進行自動維護:{STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :如啟用此選項,而且車輛設定為不故障,它們將不會進入機廠接受維護。 + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :開啟列車車廂速限:{STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :如啟用此選項,無動力車廂的限速會影響列車的最高速度。 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index eecec8e4e745f..056a8b07f11df 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1777,6 +1777,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Etkisiz STR_CONFIG_SETTING_NOSERVICE :Bozulmalar kapalıysa sevisler kapalı olsun: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Etkinleştirildiğinde, araçlar bozulmuyorlarsa bakıma gönderilmezler + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Vagonların treni yavaşlatması izinli: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Etkinleştirildiğinde, bir trenin azami hızına karar verirken vagonların hız limitleri de göz önünde bulundurulur diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 3e9de47466889..ea6f39c4a3e87 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1857,6 +1857,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Відключ STR_CONFIG_SETTING_NOSERVICE :Не відправляти на техогляд, якщо відключені аварії: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Включення цієї опції дозволяє не проводити автоматичний техогляд у разі, якщо поломки транспорту вимкнено. + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Враховувати обмеження швидкості вагонів: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :При включенні максимальна швидкість потяга враховує обмеження швидкості вагонів. diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index afa61cebac931..d6a8d6db9a7a3 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1336,6 +1336,7 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :مرمتی وق STR_CONFIG_SETTING_NOSERVICE :گاڑیوں کی خرابی غیر فعال ہونے کی صورت میں مرمت بھی غیر فعال کر دیں: {STRING} + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :مال گاڑی کی حد رفتار فعال کریں: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :الیلٹرک ریل گاڑیاں غیر فعال کریں: {STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index d29cbb867c4f1..0cbd17a0bbdcc 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1777,6 +1777,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :tắt STR_CONFIG_SETTING_NOSERVICE :Tắt bảo trì khi đặt tắt tuỳ chọn hỏng hóc: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Nếu bật, phương tiện sẽ không cần bảo trì nếu chúng không thể bị hỏng + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Bật giới hạn tốc độ toa tàu: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Nếu bật, sử dụng giới hạn tốc độ của toa xe để hạn chế tốc độ của cả đoàn tàu diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index c50e759abb25c..8f291f18b88b9 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1627,6 +1627,7 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Analluogwyd STR_CONFIG_SETTING_NOSERVICE :Analluogi gwasanaethau pan fydd torri i lawr wedi ei osod i Ddim: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Pan y galluogir, ni wasanaethir cerbydau os na allent dorri i lawr + STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Galluogi terfynau cyflymder wagenni: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Pan y galluogir, fe ddefnyddir terfynnau cyflymder pob cerbyd mewn trên pan yn cyfrifo ei gyflymder uchafsymol diff --git a/src/map_func.h b/src/map_func.h index d4b3de70bcba1..14d65db690e2c 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -398,7 +398,7 @@ debug_inline static TileIndex TileXY(uint x, uint y) * @return The resulting offset value of the given coordinate * @see ToTileIndexDiff(TileIndexDiffC) */ -static inline TileIndexDiff TileDiffXY(int x, int y) +inline TileIndexDiff TileDiffXY(int x, int y) { /* Multiplication gives much better optimization on MSVC than shifting. * 0 << shift isn't optimized to 0 properly. @@ -449,7 +449,7 @@ debug_inline static uint TileY(TileIndex tile) * @return The difference between two tiles. * @see TileDiffXY(int, int) */ -static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) +inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) { return (tidc.y << Map::LogX()) + tidc.x; } @@ -487,7 +487,7 @@ TileIndex TileAddWrap(TileIndex tile, int addx, int addy); * @param dir The given direction * @return The offset as TileIndexDiffC value */ -static inline TileIndexDiffC TileIndexDiffCByDiagDir(DiagDirection dir) +inline TileIndexDiffC TileIndexDiffCByDiagDir(DiagDirection dir) { extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END]; @@ -501,7 +501,7 @@ static inline TileIndexDiffC TileIndexDiffCByDiagDir(DiagDirection dir) * @param dir The given direction * @return The offset as TileIndexDiffC value */ -static inline TileIndexDiffC TileIndexDiffCByDir(Direction dir) +inline TileIndexDiffC TileIndexDiffCByDir(Direction dir) { extern const TileIndexDiffC _tileoffs_by_dir[DIR_END]; @@ -519,7 +519,7 @@ static inline TileIndexDiffC TileIndexDiffCByDir(Direction dir) * @param diff The offset to add on the tile * @return The resulting TileIndex */ -static inline TileIndex AddTileIndexDiffCWrap(TileIndex tile, TileIndexDiffC diff) +inline TileIndex AddTileIndexDiffCWrap(TileIndex tile, TileIndexDiffC diff) { int x = TileX(tile) + diff.x; int y = TileY(tile) + diff.y; @@ -535,7 +535,7 @@ static inline TileIndex AddTileIndexDiffCWrap(TileIndex tile, TileIndexDiffC dif * @param tile_b to tile * @return the difference between tila_a and tile_b */ -static inline TileIndexDiffC TileIndexToTileIndexDiffC(TileIndex tile_a, TileIndex tile_b) +inline TileIndexDiffC TileIndexToTileIndexDiffC(TileIndex tile_a, TileIndex tile_b) { TileIndexDiffC difference; @@ -560,7 +560,7 @@ uint DistanceFromEdgeDir(TileIndex, DiagDirection); ///< distance from the map e * @return The resulting TileIndexDiff * @see TileIndexDiffCByDiagDir */ -static inline TileIndexDiff TileOffsByDiagDir(DiagDirection dir) +inline TileIndexDiff TileOffsByDiagDir(DiagDirection dir) { extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END]; @@ -574,7 +574,7 @@ static inline TileIndexDiff TileOffsByDiagDir(DiagDirection dir) * @param dir The direction to convert from * @return The resulting TileIndexDiff */ -static inline TileIndexDiff TileOffsByDir(Direction dir) +inline TileIndexDiff TileOffsByDir(Direction dir) { extern const TileIndexDiffC _tileoffs_by_dir[DIR_END]; @@ -589,7 +589,7 @@ static inline TileIndexDiff TileOffsByDir(Direction dir) * @param dir The direction in which we want to step * @return the moved tile */ -static inline TileIndex TileAddByDir(TileIndex tile, Direction dir) +inline TileIndex TileAddByDir(TileIndex tile, Direction dir) { return TILE_ADD(tile, TileOffsByDir(dir)); } @@ -601,7 +601,7 @@ static inline TileIndex TileAddByDir(TileIndex tile, Direction dir) * @param dir The direction in which we want to step * @return the moved tile */ -static inline TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir) +inline TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir) { return TILE_ADD(tile, TileOffsByDiagDir(dir)); } @@ -613,7 +613,7 @@ static inline TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir) * @param tile_to Destination tile * @return DiagDirection from tile_from towards tile_to, or INVALID_DIAGDIR if the tiles are not on an axis */ -static inline DiagDirection DiagdirBetweenTiles(TileIndex tile_from, TileIndex tile_to) +inline DiagDirection DiagdirBetweenTiles(TileIndex tile_from, TileIndex tile_to) { int dx = (int)TileX(tile_to) - (int)TileX(tile_from); int dy = (int)TileY(tile_to) - (int)TileY(tile_from); @@ -643,7 +643,7 @@ bool CircularTileSearch(TileIndex *tile, uint radius, uint w, uint h, TestTileOn * @param r the random 'seed' * @return a valid tile */ -static inline TileIndex RandomTileSeed(uint32_t r) +inline TileIndex RandomTileSeed(uint32_t r) { return Map::WrapToMap(r); } diff --git a/src/misc/array.hpp b/src/misc/array.hpp index 277fe29a36403..cc48d295cd9da 100644 --- a/src/misc/array.hpp +++ b/src/misc/array.hpp @@ -28,7 +28,7 @@ class SmallArray { SuperArray data; ///< array of arrays of items /** return first sub-array with free space for new item */ - inline SubArray& FirstFreeSubArray() + inline SubArray &FirstFreeSubArray() { uint super_size = data.Length(); if (super_size > 0) { diff --git a/src/misc/dbg_helpers.h b/src/misc/dbg_helpers.h index 8453aa1618361..fdfcaba04afb7 100644 --- a/src/misc/dbg_helpers.h +++ b/src/misc/dbg_helpers.h @@ -124,7 +124,7 @@ struct DumpTarget { : m_indent(0) {} - static size_t& LastTypeId(); + static size_t &LastTypeId(); std::string GetCurrentStructName(); bool FindKnownName(size_t type_id, const void *ptr, std::string &name); diff --git a/src/misc/fixedsizearray.hpp b/src/misc/fixedsizearray.hpp index a36a810f27958..7a2c97b58b0b5 100644 --- a/src/misc/fixedsizearray.hpp +++ b/src/misc/fixedsizearray.hpp @@ -39,25 +39,25 @@ struct FixedSizeArray { T *data; /** return reference to the array header (non-const) */ - inline ArrayHeader& Hdr() + inline ArrayHeader &Hdr() { return *(ArrayHeader*)(((byte*)data) - HeaderSize); } /** return reference to the array header (const) */ - inline const ArrayHeader& Hdr() const + inline const ArrayHeader &Hdr() const { return *(ArrayHeader*)(((byte*)data) - HeaderSize); } /** return reference to the block reference counter */ - inline uint& RefCnt() + inline uint &RefCnt() { return Hdr().reference_count; } /** return reference to number of used items */ - inline uint& SizeRef() + inline uint &SizeRef() { return Hdr().items; } diff --git a/src/misc/hashtable.hpp b/src/misc/hashtable.hpp index 0fd744777ab67..92e759adbeb69 100644 --- a/src/misc/hashtable.hpp +++ b/src/misc/hashtable.hpp @@ -216,7 +216,7 @@ class CHashTableT { } /** non-const item search & removal */ - Titem_& Pop(const Tkey &key) + Titem_ &Pop(const Tkey &key) { Titem_ *item = TryPop(key); assert(item != nullptr); diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index d180886a3809f..eaf616c5351f8 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -37,9 +37,9 @@ static const int MS_TO_REFTIME = 1000 * 10; ///< DirectMusic time base is 100 ns static const int MIDITIME_TO_REFTIME = 10; ///< Time base of the midi file reader is 1 us. -#define FOURCC_INFO mmioFOURCC('I','N','F','O') -#define FOURCC_fmt mmioFOURCC('f','m','t',' ') -#define FOURCC_data mmioFOURCC('d','a','t','a') +#define FOURCC_INFO mmioFOURCC('I', 'N', 'F', 'O') +#define FOURCC_fmt mmioFOURCC('f', 'm', 't', ' ') +#define FOURCC_data mmioFOURCC('d', 'a', 't', 'a') /** A DLS file. */ struct DLSFile { diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index dc02bc280c912..fbb1a1dee1696 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -377,7 +377,7 @@ static bool FixupMidiData(MidiFile &target) while (cur_block < target.blocks.size()) { MidiFile::DataBlock &block = target.blocks[cur_block]; MidiFile::TempoChange &tempo = target.tempos[cur_tempo]; - MidiFile::TempoChange &next_tempo = target.tempos[cur_tempo+1]; + MidiFile::TempoChange &next_tempo = target.tempos[cur_tempo + 1]; if (block.ticktime <= next_tempo.ticktime) { /* block is within the current tempo */ int64_t tickdiff = block.ticktime - last_ticktime; @@ -792,12 +792,12 @@ struct MpsMachine { /* Always reset percussion channel to program 0 */ this->target.blocks.push_back(MidiFile::DataBlock()); - AddMidiData(this->target.blocks.back(), MIDIST_PROGCHG+9, 0x00); + AddMidiData(this->target.blocks.back(), MIDIST_PROGCHG + 9, 0x00); /* Technically should be an endless loop, but having * a maximum (about 10 minutes) avoids getting stuck, * in case of corrupted data. */ - for (uint32_t tick = 0; tick < 100000; tick+=1) { + for (uint32_t tick = 0; tick < 100000; tick += 1) { this->target.blocks.push_back(MidiFile::DataBlock()); auto &block = this->target.blocks.back(); block.ticktime = tick; diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index 4d57dcb5010d5..7504f6986fd89 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -52,7 +52,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Wi memcpy(&address, &ifo[j].iiAddress.Address, sizeof(sockaddr)); ((sockaddr_in*)&address)->sin_addr.s_addr = ifo[j].iiAddress.AddressIn.sin_addr.s_addr | ~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr; NetworkAddress addr(address, sizeof(sockaddr)); - if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) broadcast->push_back(addr); + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const &elem) -> bool { return elem == addr; })) broadcast->push_back(addr); } free(ifo); @@ -72,7 +72,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) if (ifa->ifa_broadaddr->sa_family != AF_INET) continue; NetworkAddress addr(ifa->ifa_broadaddr, sizeof(sockaddr)); - if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) broadcast->push_back(addr); + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const &elem) -> bool { return elem == addr; })) broadcast->push_back(addr); } freeifaddrs(ifap); } diff --git a/src/network/core/http.h b/src/network/core/http.h index 7bb03bc346dbb..dfeadb7596621 100644 --- a/src/network/core/http.h +++ b/src/network/core/http.h @@ -30,7 +30,7 @@ struct HTTPCallback { * @param length the amount of received data, 0 when all data has been received. * @note When nullptr is sent the HTTP socket handler is closed/freed. */ - virtual void OnReceiveData(const char *data, size_t length) = 0; + virtual void OnReceiveData(std::unique_ptr data, size_t length) = 0; /** * Check if there is a request to cancel the transfer. diff --git a/src/network/core/http_curl.cpp b/src/network/core/http_curl.cpp index d49f753f3e123..e238a8177264e 100644 --- a/src/network/core/http_curl.cpp +++ b/src/network/core/http_curl.cpp @@ -17,6 +17,7 @@ #include "../network_internal.h" #include "http.h" +#include "http_shared.h" #include #include @@ -44,6 +45,11 @@ static auto _certificate_directories = { }; #endif /* UNIX */ +static std::vector _http_callbacks; +static std::vector _new_http_callbacks; +static std::mutex _http_callback_mutex; +static std::mutex _new_http_callback_mutex; + /** Single HTTP request. */ class NetworkHTTPRequest { public: @@ -59,11 +65,19 @@ class NetworkHTTPRequest { callback(callback), data(data) { + std::lock_guard lock(_new_http_callback_mutex); + _new_http_callbacks.push_back(&this->callback); } - const std::string uri; ///< URI to connect to. - HTTPCallback *callback; ///< Callback to send data back on. - const std::string data; ///< Data to send, if any. + ~NetworkHTTPRequest() + { + std::lock_guard lock(_http_callback_mutex); + _http_callbacks.erase(std::remove(_http_callbacks.begin(), _http_callbacks.end(), &this->callback), _http_callbacks.end()); + } + + const std::string uri; ///< URI to connect to. + HTTPThreadSafeCallback callback; ///< Callback to send data back on. + const std::string data; ///< Data to send, if any. }; static std::thread _http_thread; @@ -92,6 +106,20 @@ static std::string _http_ca_path = ""; /* static */ void NetworkHTTPSocketHandler::HTTPReceive() { + std::lock_guard lock(_http_callback_mutex); + + { + std::lock_guard lock_new(_new_http_callback_mutex); + if (!_new_http_callbacks.empty()) { + /* We delay adding new callbacks, as HandleQueue() below might add a new callback. */ + _http_callbacks.insert(_http_callbacks.end(), _new_http_callbacks.begin(), _new_http_callbacks.end()); + _new_http_callbacks.clear(); + } + } + + for (auto &callback : _http_callbacks) { + callback->HandleQueue(); + } } void HttpThread() @@ -163,11 +191,16 @@ void HttpThread() /* Setup our (C-style) callback function which we pipe back into the callback. */ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, +[](char *ptr, size_t size, size_t nmemb, void *userdata) -> size_t { Debug(net, 4, "HTTP callback: {} bytes", size * nmemb); - HTTPCallback *callback = static_cast(userdata); - callback->OnReceiveData(ptr, size * nmemb); + HTTPThreadSafeCallback *callback = static_cast(userdata); + + /* Copy the buffer out of CURL. OnReceiveData() will free it when done. */ + std::unique_ptr buffer = std::make_unique(size * nmemb); + memcpy(buffer.get(), ptr, size * nmemb); + callback->OnReceiveData(std::move(buffer), size * nmemb); + return size * nmemb; }); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, request->callback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &request->callback); /* Create a callback from which we can cancel. Sadly, there is no other * thread-safe way to do this. If the connection went idle, it can take @@ -175,10 +208,10 @@ void HttpThread() * do about this. */ curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, +[](void *userdata, curl_off_t /*dltotal*/, curl_off_t /*dlnow*/, curl_off_t /*ultotal*/, curl_off_t /*ulnow*/) -> int { - const HTTPCallback *callback = static_cast(userdata); - return (callback->IsCancelled() || _http_thread_exit) ? 1 : 0; + const HTTPThreadSafeCallback *callback = static_cast(userdata); + return (callback->cancelled || _http_thread_exit) ? 1 : 0; }); - curl_easy_setopt(curl, CURLOPT_XFERINFODATA, request->callback); + curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &request->callback); /* Perform the request. */ CURLcode res = curl_easy_perform(curl); @@ -187,15 +220,20 @@ void HttpThread() if (res == CURLE_OK) { Debug(net, 1, "HTTP request succeeded"); - request->callback->OnReceiveData(nullptr, 0); + request->callback.OnReceiveData(nullptr, 0); } else { long status_code = 0; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status_code); /* No need to be verbose about rate limiting. */ - Debug(net, (request->callback->IsCancelled() || _http_thread_exit || status_code == HTTP_429_TOO_MANY_REQUESTS) ? 1 : 0, "HTTP request failed: status_code: {}, error: {}", status_code, curl_easy_strerror(res)); - request->callback->OnFailure(); + Debug(net, (request->callback.cancelled || _http_thread_exit || status_code == HTTP_429_TOO_MANY_REQUESTS) ? 1 : 0, "HTTP request failed: status_code: {}, error: {}", status_code, curl_easy_strerror(res)); + request->callback.OnFailure(); } + + /* Wait till the callback tells us all data is dequeued, or _http_thread_exit has been set. */ + request->callback.WaitTillEmptyOrCondition([]() -> bool { + return _http_thread_exit; + }); } curl_easy_cleanup(curl); @@ -238,10 +276,12 @@ void NetworkHTTPInitialize() void NetworkHTTPUninitialize() { - curl_global_cleanup(); - _http_thread_exit = true; + /* Ensure the callbacks are handled. This is mostly needed as we send + * a survey just before close, and that might be pending here. */ + NetworkHTTPSocketHandler::HTTPReceive(); + { std::lock_guard lock(_http_mutex); _http_cv.notify_one(); @@ -250,4 +290,6 @@ void NetworkHTTPUninitialize() if (_http_thread.joinable()) { _http_thread.join(); } + + curl_global_cleanup(); } diff --git a/src/network/core/http_shared.h b/src/network/core/http_shared.h new file mode 100644 index 0000000000000..ec3ae79348bac --- /dev/null +++ b/src/network/core/http_shared.h @@ -0,0 +1,120 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** + * @file http_shared.h Shared functions for implementations of HTTP requests. + */ + +#ifndef NETWORK_CORE_HTTP_SHARED_H +#define NETWORK_CORE_HTTP_SHARED_H + +#include "http.h" + +#include +#include +#include + +/** Converts a HTTPCallback to a Thread-Safe variant. */ +class HTTPThreadSafeCallback { +private: + /** Entries on the queue for later handling. */ + class Callback { + public: + Callback(std::unique_ptr data, size_t length) : data(std::move(data)), length(length), failure(false) {} + Callback() : data(nullptr), length(0), failure(true) {} + + std::unique_ptr data; + size_t length; + bool failure; + }; + +public: + /** + * Similar to HTTPCallback::OnFailure, but thread-safe. + */ + void OnFailure() + { + std::lock_guard lock(this->mutex); + this->queue.emplace_back(); + } + + /** + * Similar to HTTPCallback::OnReceiveData, but thread-safe. + */ + void OnReceiveData(std::unique_ptr data, size_t length) + { + std::lock_guard lock(this->mutex); + this->queue.emplace_back(std::move(data), length); + } + + /** + * Process everything on the queue. + * + * Should be called from the Game Thread. + */ + void HandleQueue() + { + this->cancelled = callback->IsCancelled(); + + std::lock_guard lock(this->mutex); + + for (auto &item : this->queue) { + if (item.failure) { + this->callback->OnFailure(); + } else { + this->callback->OnReceiveData(std::move(item.data), item.length); + } + } + + this->queue.clear(); + this->queue_cv.notify_all(); + } + + /** + * Wait till the queue is dequeued, or a condition is met. + * @param condition Condition functor. + */ + template + void WaitTillEmptyOrCondition(T condition) + { + std::unique_lock lock(this->mutex); + + while (!(queue.empty() || condition())) { + this->queue_cv.wait(lock); + } + } + + /** + * Check if the queue is empty. + */ + bool IsQueueEmpty() + { + std::lock_guard lock(this->mutex); + return this->queue.empty(); + } + + HTTPThreadSafeCallback(HTTPCallback *callback) : callback(callback) {} + + ~HTTPThreadSafeCallback() + { + std::lock_guard lock(this->mutex); + + /* Clear the list and notify explicitly. */ + queue.clear(); + queue_cv.notify_all(); + } + + std::atomic cancelled = false; + +private: + HTTPCallback *callback; ///< The callback to send data back on. + std::mutex mutex; ///< Mutex to protect the queue. + std::vector queue; ///< Queue of data to send back. + std::condition_variable queue_cv; ///< Condition variable to wait for the queue to be empty. +}; + +#endif /* NETWORK_CORE_HTTP_SHARED_H */ diff --git a/src/network/core/http_winhttp.cpp b/src/network/core/http_winhttp.cpp index 78a21d3c16f41..7736dd60f82da 100644 --- a/src/network/core/http_winhttp.cpp +++ b/src/network/core/http_winhttp.cpp @@ -15,6 +15,7 @@ #include "../network_internal.h" #include "http.h" +#include "http_shared.h" #include #include @@ -26,9 +27,9 @@ static HINTERNET _winhttp_session = nullptr; /** Single HTTP request. */ class NetworkHTTPRequest { private: - const std::wstring uri; ///< URI to connect to. - HTTPCallback *callback; ///< Callback to send data back on. - const std::string data; ///< Data to send, if any. + const std::wstring uri; ///< URI to connect to. + HTTPThreadSafeCallback callback; ///< Callback to send data back on. + const std::string data; ///< Data to send, if any. HINTERNET connection = nullptr; ///< Current connection object. HINTERNET request = nullptr; ///< Current request object. @@ -49,6 +50,11 @@ static std::vector _http_requests; static std::vector _new_http_requests; static std::mutex _new_http_requests_mutex; +static std::vector _http_callbacks; +static std::vector _new_http_callbacks; +static std::mutex _http_callback_mutex; +static std::mutex _new_http_callback_mutex; + /** * Create a new HTTP request. * @@ -61,6 +67,8 @@ NetworkHTTPRequest::NetworkHTTPRequest(const std::wstring &uri, HTTPCallback *ca callback(callback), data(data) { + std::lock_guard lock(_new_http_callback_mutex); + _new_http_callbacks.push_back(&this->callback); } static std::string GetLastErrorAsString() @@ -113,7 +121,7 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) if (this->depth++ > 5) { Debug(net, 0, "HTTP request failed: too many redirects"); this->finished = true; - this->callback->OnFailure(); + this->callback.OnFailure(); return; } break; @@ -136,7 +144,7 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) /* No need to be verbose about rate limiting. */ Debug(net, status_code == HTTP_429_TOO_MANY_REQUESTS ? 1 : 0, "HTTP request failed: status-code {}", status_code); this->finished = true; - this->callback->OnFailure(); + this->callback.OnFailure(); return; } @@ -150,17 +158,15 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) DWORD size = *(DWORD *)info; /* Next step: read the data in a temporary allocated buffer. - * The buffer will be free'd in the next step. */ - char *buffer = size == 0 ? nullptr : MallocT(size); + * The buffer will be free'd by OnReceiveData() in the next step. */ + char *buffer = size == 0 ? nullptr : new char[size]; WinHttpReadData(this->request, buffer, size, 0); } break; case WINHTTP_CALLBACK_STATUS_READ_COMPLETE: Debug(net, 4, "HTTP callback: {} bytes", length); - this->callback->OnReceiveData(static_cast(info), length); - /* Free the temporary buffer that was allocated in the previous step. */ - free(info); + this->callback.OnReceiveData(std::unique_ptr(static_cast(info)), length); if (length == 0) { /* Next step: no more data available: request is finished. */ @@ -177,13 +183,13 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: Debug(net, 0, "HTTP request failed: {}", GetLastErrorAsString()); this->finished = true; - this->callback->OnFailure(); + this->callback.OnFailure(); break; default: Debug(net, 0, "HTTP request failed: unexepected callback code 0x{:x}", code); this->finished = true; - this->callback->OnFailure(); + this->callback.OnFailure(); return; } } @@ -227,7 +233,7 @@ void NetworkHTTPRequest::Connect() if (this->connection == nullptr) { Debug(net, 0, "HTTP request failed: {}", GetLastErrorAsString()); this->finished = true; - this->callback->OnFailure(); + this->callback.OnFailure(); return; } @@ -237,7 +243,7 @@ void NetworkHTTPRequest::Connect() Debug(net, 0, "HTTP request failed: {}", GetLastErrorAsString()); this->finished = true; - this->callback->OnFailure(); + this->callback.OnFailure(); return; } @@ -258,14 +264,14 @@ void NetworkHTTPRequest::Connect() */ bool NetworkHTTPRequest::Receive() { - if (this->callback->IsCancelled()) { + if (this->callback.cancelled && !this->finished) { Debug(net, 1, "HTTP request failed: cancelled by user"); this->finished = true; - this->callback->OnFailure(); - return true; + this->callback.OnFailure(); + /* Fall-through, as we are waiting for IsQueueEmpty() to happen. */ } - return this->finished; + return this->finished && this->callback.IsQueueEmpty(); } /** @@ -279,6 +285,9 @@ NetworkHTTPRequest::~NetworkHTTPRequest() WinHttpCloseHandle(this->request); WinHttpCloseHandle(this->connection); } + + std::lock_guard lock(_http_callback_mutex); + _http_callbacks.erase(std::remove(_http_callbacks.begin(), _http_callbacks.end(), &this->callback), _http_callbacks.end()); } /* static */ void NetworkHTTPSocketHandler::Connect(const std::string &uri, HTTPCallback *callback, const std::string data) @@ -292,6 +301,25 @@ NetworkHTTPRequest::~NetworkHTTPRequest() /* static */ void NetworkHTTPSocketHandler::HTTPReceive() { + /* Process all callbacks. */ + { + std::lock_guard lock(_http_callback_mutex); + + { + std::lock_guard lock(_new_http_callback_mutex); + if (!_new_http_callbacks.empty()) { + /* We delay adding new callbacks, as HandleQueue() below might add a new callback. */ + _http_callbacks.insert(_http_callbacks.end(), _new_http_callbacks.begin(), _new_http_callbacks.end()); + _new_http_callbacks.clear(); + } + } + + for (auto &callback : _http_callbacks) { + callback->HandleQueue(); + } + } + + /* Process all requests. */ { std::lock_guard lock(_new_http_requests_mutex); if (!_new_http_requests.empty()) { diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index c8cf67a49967b..cc35c01436398 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -121,7 +121,7 @@ typedef unsigned long in_addr_t; * @param address The address returned by those four functions. * @return The correct value for addrlen. */ -static inline socklen_t FixAddrLenForEmscripten(struct sockaddr_storage &address) +inline socklen_t FixAddrLenForEmscripten(struct sockaddr_storage &address) { switch (address.ss_family) { case AF_INET6: return sizeof(struct sockaddr_in6); diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp index b5dc3e6b6ac61..ef3ca67c3e70b 100644 --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -537,7 +537,7 @@ CommandDataBuffer SanitizeCmdStrings(const CommandDataBuffer &data) * @param cp Command packet to unpack. */ template -void UnpackNetworkCommand(const CommandPacket* cp) +void UnpackNetworkCommand(const CommandPacket *cp) { auto args = EndianBufferReader::ToValue::Args>(cp->data); Command::PostFromNet(cp->err_msg, std::get(_callback_tuple), cp->my_cmd, args); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 12e3ee30618d5..a9305f0d2f13f 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -602,19 +602,21 @@ void ClientNetworkContentSocketHandler::OnFailure() } } -void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t length) +void ClientNetworkContentSocketHandler::OnReceiveData(std::unique_ptr data, size_t length) { - assert(data == nullptr || length != 0); + assert(data.get() == nullptr || length != 0); /* Ignore any latent data coming from a connection we closed. */ - if (this->http_response_index == -2) return; + if (this->http_response_index == -2) { + return; + } this->lastActivity = std::chrono::steady_clock::now(); if (this->http_response_index == -1) { if (data != nullptr) { /* Append the rest of the response. */ - this->http_response.insert(this->http_response.end(), data, data + length); + this->http_response.insert(this->http_response.end(), data.get(), data.get() + length); return; } else { /* Make sure the response is properly terminated. */ @@ -627,13 +629,14 @@ void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t l if (data != nullptr) { /* We have data, so write it to the file. */ - if (fwrite(data, 1, length, this->curFile) != length) { + if (fwrite(data.get(), 1, length, this->curFile) != length) { /* Writing failed somehow, let try via the old method. */ this->OnFailure(); } else { /* Just received the data. */ this->OnDownloadProgress(this->curInfo, (int)length); } + /* Nothing more to do now. */ return; } diff --git a/src/network/network_content.h b/src/network/network_content.h index ecf300729e842..a5f75bcd84f62 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -95,7 +95,7 @@ class ClientNetworkContentSocketHandler : public NetworkContentSocketHandler, Co void OnDownloadComplete(ContentID cid) override; void OnFailure() override; - void OnReceiveData(const char *data, size_t length) override; + void OnReceiveData(std::unique_ptr data, size_t length) override; bool IsCancelled() const override; bool BeforeDownload(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 29227844bfeba..3e58ca964b0ff 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1097,7 +1097,7 @@ struct NetworkStartServerWindow : public Window { case WID_NSS_PLAY_HEIGHTMAP: if (!CheckServerName()) return; _is_network_server = true; - ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); + ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_LOAD); break; } } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 8a4960425eace..8bab091caaa16 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1521,30 +1521,25 @@ static void NetworkCheckRestartMap() */ static void NetworkAutoCleanCompanies() { - bool clients_in_company[MAX_COMPANIES]; - int vehicles_in_company[MAX_COMPANIES]; + CompanyMask has_clients = 0; + CompanyMask has_vehicles = 0; if (!_settings_client.network.autoclean_companies) return; - memset(clients_in_company, 0, sizeof(clients_in_company)); - /* Detect the active companies */ for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { - if (Company::IsValidID(ci->client_playas)) clients_in_company[ci->client_playas] = true; + if (Company::IsValidID(ci->client_playas)) SetBit(has_clients, ci->client_playas); } if (!_network_dedicated) { const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); assert(ci != nullptr); - if (Company::IsValidID(ci->client_playas)) clients_in_company[ci->client_playas] = true; + if (Company::IsValidID(ci->client_playas)) SetBit(has_clients, ci->client_playas); } if (_settings_client.network.autoclean_novehicles != 0) { - memset(vehicles_in_company, 0, sizeof(vehicles_in_company)); - - for (const Vehicle *v : Vehicle::Iterate()) { - if (!Company::IsValidID(v->owner) || !v->IsPrimaryVehicle()) continue; - vehicles_in_company[v->owner]++; + for (const Company *c : Company::Iterate()) { + if (std::any_of(std::begin(c->group_all), std::end(c->group_all), [](const GroupStatistics &gs) { return gs.num_vehicle != 0; })) SetBit(has_vehicles, c->index); } } @@ -1553,7 +1548,7 @@ static void NetworkAutoCleanCompanies() /* Skip the non-active once */ if (c->is_ai) continue; - if (!clients_in_company[c->index]) { + if (!HasBit(has_clients, c->index)) { /* The company is empty for one month more */ _network_company_states[c->index].months_empty++; @@ -1572,7 +1567,7 @@ static void NetworkAutoCleanCompanies() NetworkServerUpdateCompanyPassworded(c->index, false); } /* Is the company empty for autoclean_novehicles-months, and has no vehicles? */ - if (_settings_client.network.autoclean_novehicles != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_novehicles && vehicles_in_company[c->index] == 0) { + if (_settings_client.network.autoclean_novehicles != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_novehicles && !HasBit(has_vehicles, c->index)) { /* Shut the company down */ Command::Post(CCA_DELETE, c->index, CRR_AUTOCLEAN, INVALID_CLIENT_ID); IConsolePrint(CC_INFO, "Auto-cleaned company #{} with no vehicles.", c->index + 1); diff --git a/src/network/network_survey.cpp b/src/network/network_survey.cpp index aa8cead44eca3..5e73ffb0b047d 100644 --- a/src/network/network_survey.cpp +++ b/src/network/network_survey.cpp @@ -11,6 +11,7 @@ #include "network_survey.h" #include "settings_table.h" #include "network.h" +#include "network_func.h" #include "../debug.h" #include "../survey.h" #include "../3rdparty/fmt/chrono.h" @@ -99,21 +100,29 @@ void NetworkSurveyHandler::Transmit(Reason reason, bool blocking) if (blocking) { std::unique_lock lock(this->mutex); + /* Block no longer than 2 seconds. If we failed to send the survey in that time, so be it. */ - this->loaded.wait_for(lock, std::chrono::seconds(2)); + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now() + std::chrono::seconds(2); + + while (!this->transmitted && std::chrono::steady_clock::now() < end) { + NetworkBackgroundLoop(); + this->transmitted_cv.wait_for(lock, std::chrono::milliseconds(30)); + } } } void NetworkSurveyHandler::OnFailure() { Debug(net, 1, "Survey: failed to send survey results"); - this->loaded.notify_all(); + this->transmitted = true; + this->transmitted_cv.notify_all(); } -void NetworkSurveyHandler::OnReceiveData(const char *data, size_t) +void NetworkSurveyHandler::OnReceiveData(std::unique_ptr data, size_t) { if (data == nullptr) { Debug(net, 1, "Survey: survey results sent"); - this->loaded.notify_all(); + this->transmitted = true; + this->transmitted_cv.notify_all(); } } diff --git a/src/network/network_survey.h b/src/network/network_survey.h index fbad97bfab59f..8acddb9ede388 100644 --- a/src/network/network_survey.h +++ b/src/network/network_survey.h @@ -20,7 +20,7 @@ class NetworkSurveyHandler : public HTTPCallback { protected: void OnFailure() override; - void OnReceiveData(const char *data, size_t length) override; + void OnReceiveData(std::unique_ptr data, size_t length) override; bool IsCancelled() const override { return false; } public: @@ -41,7 +41,8 @@ class NetworkSurveyHandler : public HTTPCallback { private: std::mutex mutex; ///< Mutex for the condition variable. - std::condition_variable loaded; ///< Condition variable to wait for the survey to be sent. + std::atomic transmitted; ///< Whether the survey has been transmitted. + std::condition_variable transmitted_cv; ///< Condition variable to inform changes to transmitted. }; extern NetworkSurveyHandler _survey; diff --git a/src/newgrf.h b/src/newgrf.h index c23f6aad55c75..9ca54e86d209e 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -186,7 +186,7 @@ struct GRFLoadedFeatures { * @param bit The bit to check. * @return Whether the bit is set. */ -static inline bool HasGrfMiscBit(GrfMiscBit bit) +inline bool HasGrfMiscBit(GrfMiscBit bit) { extern byte _misc_grf_features; return HasBit(_misc_grf_features, bit); diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index 76b719151311a..08913fd40b0af 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -71,7 +71,7 @@ DECLARE_ENUM_AS_BIT_SET(TileLayoutFlags) * @param num_sprites Number of available sprites to select stage from. * @return Sprite to use */ -static inline uint GetConstructionStageOffset(uint construction_stage, uint num_sprites) +inline uint GetConstructionStageOffset(uint construction_stage, uint num_sprites) { assert(num_sprites > 0); if (num_sprites > 4) num_sprites = 4; diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index c64f58549ab37..83f857e657962 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -403,7 +403,7 @@ struct NewGRFInspectWindow : Window { * Helper function to draw the vehicle chain widget. * @param r The rectangle to draw within. */ - void DrawVehicleChainWidget(const Rect& r) const + void DrawVehicleChainWidget(const Rect &r) const { const Vehicle *v = Vehicle::Get(this->GetFeatureIndex()); int total_width = 0; @@ -444,7 +444,7 @@ struct NewGRFInspectWindow : Window { * Helper function to draw the main panel widget. * @param r The rectangle to draw within. */ - void DrawMainPanelWidget(const Rect& r) const + void DrawMainPanelWidget(const Rect &r) const { uint index = this->GetFeatureIndex(); const NIFeature *nif = GetFeature(this->window_number); @@ -919,7 +919,7 @@ struct SpriteAlignerWindow : Window { DrawSprite(this->current_sprite, PAL_NONE, x, y, nullptr, SpriteAlignerWindow::zoom); Rect outline = {0, 0, UnScaleByZoom(spr->width, SpriteAlignerWindow::zoom) - 1, UnScaleByZoom(spr->height, SpriteAlignerWindow::zoom) - 1}; - outline = outline.Translate(x + UnScaleByZoom(spr->x_offs, SpriteAlignerWindow::zoom),y + UnScaleByZoom(spr->y_offs, SpriteAlignerWindow::zoom)); + outline = outline.Translate(x + UnScaleByZoom(spr->x_offs, SpriteAlignerWindow::zoom), y + UnScaleByZoom(spr->y_offs, SpriteAlignerWindow::zoom)); DrawRectOutline(outline.Expand(1), PC_LIGHT_BLUE, 1, 1); if (SpriteAlignerWindow::crosshair) { diff --git a/src/newgrf_generic.h b/src/newgrf_generic.h index a027dd1e68738..1a317f476e7c2 100644 --- a/src/newgrf_generic.h +++ b/src/newgrf_generic.h @@ -51,7 +51,7 @@ uint16_t GetAiPurchaseCallbackResult(uint8_t feature, CargoID cargo_type, uint8_ void AmbientSoundEffectCallback(TileIndex tile); /** Play an ambient sound effect for an empty tile. */ -static inline void AmbientSoundEffect(TileIndex tile) +inline void AmbientSoundEffect(TileIndex tile) { /* Only run callback if enabled. */ if (!HasGrfMiscBit(GMB_AMBIENT_SOUND_CALLBACK)) return; diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 2b16653030caf..9fe9bf3af3d4a 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -227,7 +227,7 @@ RoadStopResolverObject::~RoadStopResolverObject() delete this->town_scope; } -TownScopeResolver* RoadStopResolverObject::GetTown() +TownScopeResolver *RoadStopResolverObject::GetTown() { if (this->town_scope == nullptr) { Town *t; diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 87803dc8bcdd0..eda86054d928b 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -81,7 +81,7 @@ struct RoadStopScopeResolver : public ScopeResolver { uint8_t view; ///< Station axis. RoadType roadtype; ///< Road type (used when no tile) - RoadStopScopeResolver(ResolverObject& ro, BaseStation* st, const RoadStopSpec *roadstopspec, TileIndex tile, RoadType roadtype, StationType type, uint8_t view = 0) + RoadStopScopeResolver(ResolverObject &ro, BaseStation *st, const RoadStopSpec *roadstopspec, TileIndex tile, RoadType roadtype, StationType type, uint8_t view = 0) : ScopeResolver(ro), tile(tile), st(st), roadstopspec(roadstopspec), type(type), view(view), roadtype(roadtype) { } @@ -97,10 +97,10 @@ struct RoadStopResolverObject : public ResolverObject { RoadStopScopeResolver roadstop_scope; ///< The stop scope resolver. TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). - RoadStopResolverObject(const RoadStopSpec* roadstopspec, BaseStation* st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); + RoadStopResolverObject(const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); ~RoadStopResolverObject(); - ScopeResolver* GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->roadstop_scope; diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index d63f4061ccb72..fcdd12bb918c6 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -180,7 +180,7 @@ static U EvalAdjustT(const DeterministicSpriteGroupAdjust &adjust, ScopeResolver } -static bool RangeHighComparator(const DeterministicSpriteGroupRange& range, uint32_t value) +static bool RangeHighComparator(const DeterministicSpriteGroupRange &range, uint32_t value) { return range.high < value; } diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index e1ce8ffc19acf..9b91dcdcbfb7e 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -26,7 +26,7 @@ * @pre i < 0x110 * @return the value of the register */ -static inline uint32_t GetRegister(uint i) +inline uint32_t GetRegister(uint i) { extern TemporaryStorageArray _temp_store; return _temp_store.GetValue(i); diff --git a/src/newgrf_townname.cpp b/src/newgrf_townname.cpp index bc89dbc6f11e6..82e9c9aa2c210 100644 --- a/src/newgrf_townname.cpp +++ b/src/newgrf_townname.cpp @@ -88,7 +88,7 @@ void InitGRFTownGeneratorNames() } } -const std::vector& GetGRFTownNameList() +const std::vector &GetGRFTownNameList() { return _grf_townname_names; } diff --git a/src/newgrf_townname.h b/src/newgrf_townname.h index 1ca54cdb481ba..9a0e919efe2a4 100644 --- a/src/newgrf_townname.h +++ b/src/newgrf_townname.h @@ -51,6 +51,6 @@ uint32_t GetGRFTownNameId(uint16_t gen); uint16_t GetGRFTownNameType(uint16_t gen); StringID GetGRFTownNameName(uint16_t gen); -const std::vector& GetGRFTownNameList(); +const std::vector &GetGRFTownNameList(); #endif /* NEWGRF_TOWNNAME_H */ diff --git a/src/news_func.h b/src/news_func.h index 01f22ebc8a3de..614f29cf7edd1 100644 --- a/src/news_func.h +++ b/src/news_func.h @@ -17,7 +17,7 @@ void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32_t ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32_t ref2 = UINT32_MAX, const NewsAllocatedData *data = nullptr); -static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni) +inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni) { AddNewsItem(string, NT_COMPANY_INFO, NF_COMPANY, NR_NONE, UINT32_MAX, NR_NONE, UINT32_MAX, cni); } @@ -27,7 +27,7 @@ static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *c * * @warning The DParams may not reference the vehicle due to autoreplace stuff. See AddVehicleAdviceNewsItem for how that can be done. */ -static inline void AddVehicleNewsItem(StringID string, NewsType type, VehicleID vehicle, StationID station = INVALID_STATION) +inline void AddVehicleNewsItem(StringID string, NewsType type, VehicleID vehicle, StationID station = INVALID_STATION) { AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_VEHICLE, vehicle, station == INVALID_STATION ? NR_NONE : NR_STATION, station); } @@ -37,17 +37,17 @@ static inline void AddVehicleNewsItem(StringID string, NewsType type, VehicleID * * @warning DParam 0 must reference the vehicle! */ -static inline void AddVehicleAdviceNewsItem(StringID string, VehicleID vehicle) +inline void AddVehicleAdviceNewsItem(StringID string, VehicleID vehicle) { AddNewsItem(string, NT_ADVICE, NF_INCOLOUR | NF_SMALL | NF_VEHICLE_PARAM0, NR_VEHICLE, vehicle); } -static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, const NewsAllocatedData *data = nullptr, StationID station = INVALID_STATION) +inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, const NewsAllocatedData *data = nullptr, StationID station = INVALID_STATION) { AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_TILE, tile.base(), station == INVALID_STATION ? NR_NONE : NR_STATION, station, data); } -static inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry, const NewsAllocatedData *data = nullptr) +inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry, const NewsAllocatedData *data = nullptr) { AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_INDUSTRY, industry, NR_NONE, UINT32_MAX, data); } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 0bc8caf012d79..e5b73de2e482b 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -210,7 +210,7 @@ static WindowDesc _small_news_desc(__FILE__, __LINE__, /** * Window layouts for news items. */ -static WindowDesc* _news_window_layout[] = { +static WindowDesc *_news_window_layout[] = { &_thin_news_desc, ///< NF_THIN &_small_news_desc, ///< NF_SMALL &_normal_news_desc, ///< NF_NORMAL @@ -218,7 +218,7 @@ static WindowDesc* _news_window_layout[] = { &_company_news_desc, ///< NF_COMPANY }; -WindowDesc* GetNewsWindowLayout(NewsFlag flags) +WindowDesc *GetNewsWindowLayout(NewsFlag flags) { uint layout = GB(flags, NFB_WINDOW_LAYOUT, NFB_WINDOW_LAYOUT_COUNT); assert(layout < lengthof(_news_window_layout)); diff --git a/src/object_map.h b/src/object_map.h index 1a1af934442db..ae5e73d963f52 100644 --- a/src/object_map.h +++ b/src/object_map.h @@ -22,7 +22,7 @@ ObjectType GetObjectType(Tile t); * @pre IsTileType(t, MP_OBJECT) * @return True if type matches. */ -static inline bool IsObjectType(Tile t, ObjectType type) +inline bool IsObjectType(Tile t, ObjectType type) { return GetObjectType(t) == type; } @@ -33,7 +33,7 @@ static inline bool IsObjectType(Tile t, ObjectType type) * @param type Type to test. * @return True if type matches. */ -static inline bool IsObjectTypeTile(Tile t, ObjectType type) +inline bool IsObjectTypeTile(Tile t, ObjectType type) { return IsTileType(t, MP_OBJECT) && GetObjectType(t) == type; } @@ -44,7 +44,7 @@ static inline bool IsObjectTypeTile(Tile t, ObjectType type) * @pre IsTileType(t, MP_OBJECT) * @return The ObjectID of the object. */ -static inline ObjectID GetObjectIndex(Tile t) +inline ObjectID GetObjectIndex(Tile t) { assert(IsTileType(t, MP_OBJECT)); return t.m2() | t.m5() << 16; @@ -56,7 +56,7 @@ static inline ObjectID GetObjectIndex(Tile t) * @pre IsTileType(t, MP_OBJECT) * @return The random bits. */ -static inline byte GetObjectRandomBits(Tile t) +inline byte GetObjectRandomBits(Tile t) { assert(IsTileType(t, MP_OBJECT)); return t.m3(); @@ -71,7 +71,7 @@ static inline byte GetObjectRandomBits(Tile t) * @param wc Water class for this object. * @param random Random data to store on the tile */ -static inline void MakeObject(Tile t, Owner o, ObjectID index, WaterClass wc, byte random) +inline void MakeObject(Tile t, Owner o, ObjectID index, WaterClass wc, byte random) { SetTileType(t, MP_OBJECT); SetTileOwner(t, o); diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 2650843c1f694..b64275314f6d0 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1961,6 +1961,10 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool } if (v->current_order.GetDepotActionType() & ODATFB_NEAREST_DEPOT) { + /* If the vehicle can't find its destination, delay its next search. + * In case many vehicles are in this state, use the vehicle index to spread out pathfinder calls. */ + if (v->dest_tile == 0 && TimerGameCalendar::date_fract != (v->index % Ticks::DAY_TICKS)) break; + /* We need to search for the nearest depot (hangar). */ ClosestDepot closestDepot = v->FindClosestDepot(); diff --git a/src/os/macosx/crashlog_osx.cpp b/src/os/macosx/crashlog_osx.cpp index 3f8b7fe7ecc35..8e3f4c224bec3 100644 --- a/src/os/macosx/crashlog_osx.cpp +++ b/src/os/macosx/crashlog_osx.cpp @@ -70,7 +70,7 @@ class CrashLogOSX : public CrashLog { } #ifdef WITH_UNOFFICIAL_BREAKPAD - static bool MinidumpCallback(const char* dump_dir, const char* minidump_id, void* context, bool succeeded) + static bool MinidumpCallback(const char *dump_dir, const char *minidump_id, void *context, bool succeeded) { CrashLogOSX *crashlog = reinterpret_cast(context); diff --git a/src/os/macosx/macos.h b/src/os/macosx/macos.h index 9e9e4cf560e90..33f016a34bc59 100644 --- a/src/os/macosx/macos.h +++ b/src/os/macosx/macos.h @@ -22,7 +22,7 @@ void GetMacOSVersion(int *return_major, int *return_minor, int *return_bugfix); * @param bugfix bugfix version of the os. This would be 11 in the case of 10.4.11. * @return true if the running os is at least what we asked, false otherwise. */ -static inline bool MacOSVersionIsAtLeast(long major, long minor, long bugfix) +inline bool MacOSVersionIsAtLeast(long major, long minor, long bugfix) { int version_major, version_minor, version_bugfix; GetMacOSVersion(&version_major, &version_minor, &version_bugfix); diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index cd281257b0417..068767b6fdaf9 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -24,10 +24,10 @@ extern "C" { typedef const struct __CTRunDelegate * CTRunDelegateRef; - typedef void (*CTRunDelegateDeallocateCallback) (void* refCon); - typedef CGFloat (*CTRunDelegateGetAscentCallback) (void* refCon); - typedef CGFloat (*CTRunDelegateGetDescentCallback) (void* refCon); - typedef CGFloat (*CTRunDelegateGetWidthCallback) (void* refCon); + typedef void (*CTRunDelegateDeallocateCallback) (void *refCon); + typedef CGFloat (*CTRunDelegateGetAscentCallback) (void *refCon); + typedef CGFloat (*CTRunDelegateGetDescentCallback) (void *refCon); + typedef CGFloat (*CTRunDelegateGetWidthCallback) (void *refCon); typedef struct { CFIndex version; CTRunDelegateDeallocateCallback dealloc; @@ -43,7 +43,7 @@ extern "C" { extern const CFStringRef kCTRunDelegateAttributeName AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; - CTRunDelegateRef CTRunDelegateCreate(const CTRunDelegateCallbacks* callbacks, void* refCon) AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + CTRunDelegateRef CTRunDelegateCreate(const CTRunDelegateCallbacks *callbacks, void *refCon) AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; } #endif /* HAVE_OSX_109_SDK */ @@ -60,7 +60,7 @@ class CoreTextParagraphLayout : public ParagraphLayouter { private: const CoreTextParagraphLayoutFactory::CharType *text_buffer; ptrdiff_t length; - const FontMap& font_map; + const FontMap &font_map; CFAutoRelease typesetter; diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp index 70cdc7be68b80..7ab97a72224f7 100644 --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -70,7 +70,7 @@ class CrashLogUnix : public CrashLog { } #ifdef WITH_UNOFFICIAL_BREAKPAD - static bool MinidumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded) + static bool MinidumpCallback(const google_breakpad::MinidumpDescriptor &descriptor, void *context, bool succeeded) { CrashLogUnix *crashlog = reinterpret_cast(context); diff --git a/src/palette_func.h b/src/palette_func.h index c0920faceb69a..894099d6fe5cd 100644 --- a/src/palette_func.h +++ b/src/palette_func.h @@ -21,7 +21,7 @@ void GfxInitPalettes(); uint8_t GetNearestColourIndex(uint8_t r, uint8_t g, uint8_t b); -static inline uint8_t GetNearestColourIndex(const Colour colour) +inline uint8_t GetNearestColourIndex(const Colour colour) { return GetNearestColourIndex(colour.r, colour.g, colour.b); } @@ -32,7 +32,7 @@ static inline uint8_t GetNearestColourIndex(const Colour colour) * @param colours The value to check * @return true if the given value is a valid Colours. */ -static inline bool IsValidColours(Colours colours) +inline bool IsValidColours(Colours colours) { return colours < COLOUR_END; } diff --git a/src/pathfinder/pathfinder_func.h b/src/pathfinder/pathfinder_func.h index f11b8088a6dd3..444b100ce7b0a 100644 --- a/src/pathfinder/pathfinder_func.h +++ b/src/pathfinder/pathfinder_func.h @@ -22,7 +22,7 @@ * @param station_type the station type to get the closest tile of * @return The closest station tile to the given tile. */ -static inline TileIndex CalcClosestStationTile(StationID station, TileIndex tile, StationType station_type) +inline TileIndex CalcClosestStationTile(StationID station, TileIndex tile, StationType station_type) { const BaseStation *st = BaseStation::Get(station); TileArea ta; @@ -57,7 +57,7 @@ static inline TileIndex CalcClosestStationTile(StationID station, TileIndex tile * the pathfinders cannot exit on the wrong side and allows reversing on such * tiles. */ -static inline TrackdirBits GetTrackdirBitsForRoad(TileIndex tile, RoadTramType rtt) +inline TrackdirBits GetTrackdirBitsForRoad(TileIndex tile, RoadTramType rtt) { TrackdirBits bits = TrackStatusToTrackdirBits(GetTileTrackStatus(tile, TRANSPORT_ROAD, rtt)); diff --git a/src/pathfinder/yapf/nodelist.hpp b/src/pathfinder/yapf/nodelist.hpp index e4d91c6ee0b37..b74345e544934 100644 --- a/src/pathfinder/yapf/nodelist.hpp +++ b/src/pathfinder/yapf/nodelist.hpp @@ -116,7 +116,7 @@ class CNodeList_HashTableT { } /** remove and return the open node specified by a key */ - inline Titem_& PopOpenNode(const Key &key) + inline Titem_ &PopOpenNode(const Key &key) { Titem_ &item = m_open.Pop(key); uint idxPop = m_open_queue.FindIndex(item); @@ -145,7 +145,7 @@ class CNodeList_HashTableT { } /** Get a particular item. */ - inline Titem_& ItemAt(int idx) + inline Titem_ &ItemAt(int idx) { return m_arr[idx]; } diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp index 8c45efa1e3fe2..d5d388cebe813 100644 --- a/src/pathfinder/yapf/yapf_base.hpp +++ b/src/pathfinder/yapf/yapf_base.hpp @@ -87,14 +87,14 @@ class CYapfBaseT { protected: /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } public: /** return current settings (can be custom - company based - but later) */ - inline const YAPFSettings& PfGetSettings() const + inline const YAPFSettings &PfGetSettings() const { return *m_settings; } @@ -167,7 +167,7 @@ class CYapfBaseT { * Calls NodeList::CreateNewNode() - allocates new node that can be filled and used * as argument for AddStartupNode() or AddNewNode() */ - inline Node& CreateNewNode() + inline Node &CreateNewNode() { Node &node = *m_nodes.CreateNewNode(); return node; diff --git a/src/pathfinder/yapf/yapf_common.hpp b/src/pathfinder/yapf/yapf_common.hpp index e0e43c468995c..796c3e05a387e 100644 --- a/src/pathfinder/yapf/yapf_common.hpp +++ b/src/pathfinder/yapf/yapf_common.hpp @@ -24,7 +24,7 @@ class CYapfOriginTileT TrackdirBits m_orgTrackdirs; ///< origin trackdir mask /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } @@ -68,7 +68,7 @@ class CYapfOriginTileTwoWayT bool m_treat_first_red_two_way_signal_as_eol; ///< in some cases (leaving station) we need to handle first two-way signal differently /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } @@ -131,7 +131,7 @@ class CYapfDestinationTileT protected: /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } diff --git a/src/pathfinder/yapf/yapf_costcache.hpp b/src/pathfinder/yapf/yapf_costcache.hpp index 2f453b846ac25..06e8566a790c6 100644 --- a/src/pathfinder/yapf/yapf_costcache.hpp +++ b/src/pathfinder/yapf/yapf_costcache.hpp @@ -63,7 +63,7 @@ class CYapfSegmentCostCacheLocalT LocalCache m_local_cache; /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } @@ -138,7 +138,7 @@ struct CSegmentCostCacheT : public CSegmentCostCacheBase { m_heap.Clear(); } - inline Tsegment& Get(Key &key, bool *found) + inline Tsegment &Get(Key &key, bool *found) { Tsegment *item = m_map.Find(key); if (item == nullptr) { @@ -174,12 +174,12 @@ class CYapfSegmentCostCacheGlobalT : public CYapfSegmentCostCacheLocalT { inline CYapfSegmentCostCacheGlobalT() : m_global_cache(stGetGlobalCache()) {}; /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } - inline static Cache& stGetGlobalCache() + inline static Cache &stGetGlobalCache() { static int last_rail_change_counter = 0; static Cache C; diff --git a/src/pathfinder/yapf/yapf_costrail.hpp b/src/pathfinder/yapf/yapf_costrail.hpp index 042ccf9275902..0ce9e478de3ba 100644 --- a/src/pathfinder/yapf/yapf_costrail.hpp +++ b/src/pathfinder/yapf/yapf_costrail.hpp @@ -77,7 +77,7 @@ class CYapfCostRailT : public CYapfCostBase { } /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } diff --git a/src/pathfinder/yapf/yapf_destrail.hpp b/src/pathfinder/yapf/yapf_destrail.hpp index e9167d3fdb98b..7abc4294eeb0f 100644 --- a/src/pathfinder/yapf/yapf_destrail.hpp +++ b/src/pathfinder/yapf/yapf_destrail.hpp @@ -40,7 +40,7 @@ class CYapfDestinationAnyDepotRailT : public CYapfDestinationRailBase { typedef typename Node::Key Key; ///< key to hash tables /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } @@ -78,7 +78,7 @@ class CYapfDestinationAnySafeTileRailT : public CYapfDestinationRailBase { typedef typename Types::TrackFollower TrackFollower; ///< TrackFollower. Need to typedef for gcc 2.95 /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } @@ -121,7 +121,7 @@ class CYapfDestinationTileOrStationRailT : public CYapfDestinationRailBase { bool m_any_depot; /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } diff --git a/src/pathfinder/yapf/yapf_node.hpp b/src/pathfinder/yapf/yapf_node.hpp index 760ed330bb943..82c212708bf83 100644 --- a/src/pathfinder/yapf/yapf_node.hpp +++ b/src/pathfinder/yapf/yapf_node.hpp @@ -97,7 +97,7 @@ struct CYapfNodeT { return m_key.m_td; } - inline const Tkey_& GetKey() const + inline const Tkey_ &GetKey() const { return m_key; } diff --git a/src/pathfinder/yapf/yapf_node_rail.hpp b/src/pathfinder/yapf/yapf_node_rail.hpp index a7a07951504b7..9185009df6db5 100644 --- a/src/pathfinder/yapf/yapf_node_rail.hpp +++ b/src/pathfinder/yapf/yapf_node_rail.hpp @@ -82,7 +82,7 @@ struct CYapfRailSegment , m_hash_next(nullptr) {} - inline const Key& GetKey() const + inline const Key &GetKey() const { return m_key; } diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index ee7ba618be778..94ec48f12751f 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -44,7 +44,7 @@ class CYapfReserveTrack protected: /** to access inherited pathfinder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } @@ -196,7 +196,7 @@ class CYapfFollowAnyDepotRailT protected: /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } @@ -287,7 +287,7 @@ class CYapfFollowAnySafeTileRailT : public CYapfReserveTrack protected: /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } @@ -370,7 +370,7 @@ class CYapfFollowRailT : public CYapfReserveTrack protected: /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp index 86749c4f23bfe..2cb55ea0597c1 100644 --- a/src/pathfinder/yapf/yapf_road.cpp +++ b/src/pathfinder/yapf/yapf_road.cpp @@ -30,7 +30,7 @@ class CYapfCostRoadT CYapfCostRoadT() : m_max_cost(0) {}; /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } @@ -191,7 +191,7 @@ class CYapfDestinationAnyDepotRoadT typedef typename Node::Key Key; ///< key to hash tables /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } @@ -258,7 +258,7 @@ class CYapfDestinationTileRoadT protected: /** to access inherited path finder */ - Tpf& Yapf() + Tpf &Yapf() { return *static_cast(this); } @@ -325,7 +325,7 @@ class CYapfFollowRoadT protected: /** to access inherited path finder */ - inline Tpf& Yapf() + inline Tpf &Yapf() { return *static_cast(this); } diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 5d9c64dfc28ef..915334e67c142 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -64,14 +64,14 @@ class CYapfDestinationTileWaterT } protected: - /** To access inherited path finder. */ - inline Tpf& Yapf() + /** to access inherited path finder */ + inline Tpf &Yapf() { return *static_cast(this); } public: - /** Called by YAPF to detect if node ends in the desired destination. */ + /** Called by YAPF to detect if node ends in the desired destination */ inline bool PfDetectDestination(Node &n) { return PfDetectDestinationTile(n.m_segment_last_tile, n.m_segment_last_td); @@ -133,8 +133,8 @@ class CYapfFollowShipT typedef typename Node::Key Key; ///< key to hash tables. protected: - /** To access inherited path finder. */ - inline Tpf& Yapf() + /** to access inherited path finder */ + inline Tpf &Yapf() { return *static_cast(this); } @@ -342,8 +342,8 @@ class CYapfCostShipT typedef typename Node::Key Key; ///< key to hash tables. protected: - /** To access inherited path finder. */ - Tpf& Yapf() + /** to access inherited path finder */ + Tpf &Yapf() { return *static_cast(this); } diff --git a/src/pbs.h b/src/pbs.h index a7af4e373ec8a..e65b6196e3508 100644 --- a/src/pbs.h +++ b/src/pbs.h @@ -55,7 +55,7 @@ Train *GetTrainForReservation(TileIndex tile, Track track); * @param tracks the tracks to test * @return true if at least on of tracks is reserved */ -static inline bool HasReservedTracks(TileIndex tile, TrackBits tracks) +inline bool HasReservedTracks(TileIndex tile, TrackBits tracks) { return (GetReservedTrackbits(tile) & tracks) != TRACK_BIT_NONE; } diff --git a/src/progress.h b/src/progress.h index 765020635e6f0..d6889743eb8f8 100644 --- a/src/progress.h +++ b/src/progress.h @@ -14,7 +14,7 @@ * Check if we are currently in a modal progress state. * @return Are we in the modal state? */ -static inline bool HasModalProgress() +inline bool HasModalProgress() { extern bool _in_modal_progress; return _in_modal_progress; diff --git a/src/rail.h b/src/rail.h index 6b52eab66148f..6fe9c28d69228 100644 --- a/src/rail.h +++ b/src/rail.h @@ -301,7 +301,7 @@ class RailTypeInfo { * @param railtype the rail type which the information is requested for * @return The pointer to the RailTypeInfo */ -static inline const RailTypeInfo *GetRailTypeInfo(RailType railtype) +inline const RailTypeInfo *GetRailTypeInfo(RailType railtype) { extern RailTypeInfo _railtypes[RAILTYPE_END]; assert(railtype < RAILTYPE_END); @@ -316,7 +316,7 @@ static inline const RailTypeInfo *GetRailTypeInfo(RailType railtype) * @param enginetype The RailType of the engine we are considering. * @param tiletype The RailType of the tile we are considering. */ -static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype) +inline bool IsCompatibleRail(RailType enginetype, RailType tiletype) { return HasBit(GetRailTypeInfo(enginetype)->compatible_railtypes, tiletype); } @@ -329,7 +329,7 @@ static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype) * @param enginetype The RailType of the engine we are considering. * @param tiletype The RailType of the tile we are considering. */ -static inline bool HasPowerOnRail(RailType enginetype, RailType tiletype) +inline bool HasPowerOnRail(RailType enginetype, RailType tiletype) { return HasBit(GetRailTypeInfo(enginetype)->powered_railtypes, tiletype); } @@ -339,7 +339,7 @@ static inline bool HasPowerOnRail(RailType enginetype, RailType tiletype) * @param rt The RailType to check. * @return Whether level crossings are not allowed. */ -static inline bool RailNoLevelCrossings(RailType rt) +inline bool RailNoLevelCrossings(RailType rt) { return HasBit(GetRailTypeInfo(rt)->flags, RTF_NO_LEVEL_CROSSING); } @@ -351,7 +351,7 @@ static inline bool RailNoLevelCrossings(RailType rt) * @param def Default value to use if the rail type doesn't specify anything. * @return True if 90 degree turns are disallowed between the two rail types. */ -static inline bool Rail90DegTurnDisallowed(RailType rt1, RailType rt2, bool def = _settings_game.pf.forbid_90_deg) +inline bool Rail90DegTurnDisallowed(RailType rt1, RailType rt2, bool def = _settings_game.pf.forbid_90_deg) { if (rt1 == INVALID_RAILTYPE || rt2 == INVALID_RAILTYPE) return def; @@ -369,7 +369,7 @@ static inline bool Rail90DegTurnDisallowed(RailType rt1, RailType rt2, bool def * @param railtype The railtype being built. * @return The cost multiplier. */ -static inline Money RailBuildCost(RailType railtype) +inline Money RailBuildCost(RailType railtype) { assert(railtype < RAILTYPE_END); return (_price[PR_BUILD_RAIL] * GetRailTypeInfo(railtype)->cost_multiplier) >> 3; @@ -380,7 +380,7 @@ static inline Money RailBuildCost(RailType railtype) * @param railtype The railtype being removed. * @return The cost. */ -static inline Money RailClearCost(RailType railtype) +inline Money RailClearCost(RailType railtype) { /* Clearing rail in fact earns money, but if the build cost is set * very low then a loophole exists where money can be made. @@ -397,7 +397,7 @@ static inline Money RailClearCost(RailType railtype) * @param to The railtype we are converting to * @return Cost per TrackBit */ -static inline Money RailConvertCost(RailType from, RailType to) +inline Money RailConvertCost(RailType from, RailType to) { /* Get the costs for removing and building anew * A conversion can never be more costly */ @@ -424,7 +424,7 @@ static inline Money RailConvertCost(RailType from, RailType to) * @param total_num Total number of track bits of all railtypes. * @return Total cost. */ -static inline Money RailMaintenanceCost(RailType railtype, uint32_t num, uint32_t total_num) +inline Money RailMaintenanceCost(RailType railtype, uint32_t num, uint32_t total_num) { assert(railtype < RAILTYPE_END); return (_price[PR_INFRASTRUCTURE_RAIL] * GetRailTypeInfo(railtype)->maintenance_multiplier * num * (1 + IntSqrt(total_num))) >> 11; // 4 bits fraction for the multiplier and 7 bits scaling. @@ -435,7 +435,7 @@ static inline Money RailMaintenanceCost(RailType railtype, uint32_t num, uint32_ * @param num Number of signals. * @return Total cost. */ -static inline Money SignalMaintenanceCost(uint32_t num) +inline Money SignalMaintenanceCost(uint32_t num) { return (_price[PR_INFRASTRUCTURE_RAIL] * 15 * num * (1 + IntSqrt(num))) >> 8; // 1 bit fraction for the multiplier and 7 bits scaling. } diff --git a/src/rail_map.h b/src/rail_map.h index 0626eb47cbcda..5f93314f00b39 100644 --- a/src/rail_map.h +++ b/src/rail_map.h @@ -69,7 +69,7 @@ debug_inline static bool IsPlainRailTile(Tile t) * @pre IsTileType(t, MP_RAILWAY) * @return true if and only if the tile has signals */ -static inline bool HasSignals(Tile t) +inline bool HasSignals(Tile t) { return GetRailTileType(t) == RAIL_TILE_SIGNALS; } @@ -80,7 +80,7 @@ static inline bool HasSignals(Tile t) * @param signals whether the rail tile should have signals or not * @pre IsPlainRailTile(tile) */ -static inline void SetHasSignals(Tile tile, bool signals) +inline void SetHasSignals(Tile tile, bool signals) { assert(IsPlainRailTile(tile)); SB(tile.m5(), 6, 1, signals); @@ -112,7 +112,7 @@ debug_inline static bool IsRailDepotTile(Tile t) * @param t the tile to get the rail type from * @return the rail type of the tile */ -static inline RailType GetRailType(Tile t) +inline RailType GetRailType(Tile t) { return (RailType)GB(t.m8(), 0, 6); } @@ -122,7 +122,7 @@ static inline RailType GetRailType(Tile t) * @param t the tile to set the rail type of * @param r the new rail type for the tile */ -static inline void SetRailType(Tile t, RailType r) +inline void SetRailType(Tile t, RailType r) { SB(t.m8(), 0, 6, r); } @@ -133,7 +133,7 @@ static inline void SetRailType(Tile t, RailType r) * @param tile the tile to get the track bits from * @return the track bits of the tile */ -static inline TrackBits GetTrackBits(Tile tile) +inline TrackBits GetTrackBits(Tile tile) { assert(IsPlainRailTile(tile)); return (TrackBits)GB(tile.m5(), 0, 6); @@ -144,7 +144,7 @@ static inline TrackBits GetTrackBits(Tile tile) * @param t the tile to set the track bits of * @param b the new track bits for the tile */ -static inline void SetTrackBits(Tile t, TrackBits b) +inline void SetTrackBits(Tile t, TrackBits b) { assert(IsPlainRailTile(t)); SB(t.m5(), 0, 6, b); @@ -157,7 +157,7 @@ static inline void SetTrackBits(Tile t, TrackBits b) * @pre IsPlainRailTile(tile) * @return true if and only if the given track exists on the tile */ -static inline bool HasTrack(Tile tile, Track track) +inline bool HasTrack(Tile tile, Track track) { return HasBit(GetTrackBits(tile), track); } @@ -168,7 +168,7 @@ static inline bool HasTrack(Tile tile, Track track) * @pre IsRailDepotTile(t) * @return the direction the depot is facing */ -static inline DiagDirection GetRailDepotDirection(Tile t) +inline DiagDirection GetRailDepotDirection(Tile t) { return (DiagDirection)GB(t.m5(), 0, 2); } @@ -179,7 +179,7 @@ static inline DiagDirection GetRailDepotDirection(Tile t) * @param t the tile to get the depot track from * @return the track of the depot */ -static inline Track GetRailDepotTrack(Tile t) +inline Track GetRailDepotTrack(Tile t) { return DiagDirToDiagTrack(GetRailDepotDirection(t)); } @@ -191,7 +191,7 @@ static inline Track GetRailDepotTrack(Tile t) * @param t the tile to query * @return the track bits */ -static inline TrackBits GetRailReservationTrackBits(Tile t) +inline TrackBits GetRailReservationTrackBits(Tile t) { assert(IsPlainRailTile(t)); byte track_b = GB(t.m2(), 8, 3); @@ -206,7 +206,7 @@ static inline TrackBits GetRailReservationTrackBits(Tile t) * @param t the tile to change * @param b the track bits */ -static inline void SetTrackReservation(Tile t, TrackBits b) +inline void SetTrackReservation(Tile t, TrackBits b) { assert(IsPlainRailTile(t)); assert(b != INVALID_TRACK_BIT); @@ -223,7 +223,7 @@ static inline void SetTrackReservation(Tile t, TrackBits b) * @param t the rack to reserve * @return true if successful */ -static inline bool TryReserveTrack(Tile tile, Track t) +inline bool TryReserveTrack(Tile tile, Track t) { assert(HasTrack(tile, t)); TrackBits bits = TrackToTrackBits(t); @@ -241,7 +241,7 @@ static inline bool TryReserveTrack(Tile tile, Track t) * @param tile the tile * @param t the track to free */ -static inline void UnreserveTrack(Tile tile, Track t) +inline void UnreserveTrack(Tile tile, Track t) { assert(HasTrack(tile, t)); TrackBits res = GetRailReservationTrackBits(tile); @@ -255,7 +255,7 @@ static inline void UnreserveTrack(Tile tile, Track t) * @param t the depot tile * @return reservation state */ -static inline bool HasDepotReservation(Tile t) +inline bool HasDepotReservation(Tile t) { assert(IsRailDepot(t)); return HasBit(t.m5(), 4); @@ -267,7 +267,7 @@ static inline bool HasDepotReservation(Tile t) * @param t the depot tile * @param b the reservation state */ -static inline void SetDepotReservation(Tile t, bool b) +inline void SetDepotReservation(Tile t, bool b) { assert(IsRailDepot(t)); SB(t.m5(), 4, 1, (byte)b); @@ -279,25 +279,25 @@ static inline void SetDepotReservation(Tile t, bool b) * @param t the tile * @return reserved track bits */ -static inline TrackBits GetDepotReservationTrackBits(Tile t) +inline TrackBits GetDepotReservationTrackBits(Tile t) { return HasDepotReservation(t) ? TrackToTrackBits(GetRailDepotTrack(t)) : TRACK_BIT_NONE; } -static inline bool IsPbsSignal(SignalType s) +inline bool IsPbsSignal(SignalType s) { return s == SIGTYPE_PBS || s == SIGTYPE_PBS_ONEWAY; } -static inline SignalType GetSignalType(Tile t, Track track) +inline SignalType GetSignalType(Tile t, Track track) { assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; return (SignalType)GB(t.m2(), pos, 3); } -static inline void SetSignalType(Tile t, Track track, SignalType s) +inline void SetSignalType(Tile t, Track track, SignalType s) { assert(GetRailTileType(t) == RAIL_TILE_SIGNALS); byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 0; @@ -305,23 +305,23 @@ static inline void SetSignalType(Tile t, Track track, SignalType s) if (track == INVALID_TRACK) SB(t.m2(), 4, 3, s); } -static inline bool IsPresignalEntry(Tile t, Track track) +inline bool IsPresignalEntry(Tile t, Track track) { return GetSignalType(t, track) == SIGTYPE_ENTRY || GetSignalType(t, track) == SIGTYPE_COMBO; } -static inline bool IsPresignalExit(Tile t, Track track) +inline bool IsPresignalExit(Tile t, Track track) { return GetSignalType(t, track) == SIGTYPE_EXIT || GetSignalType(t, track) == SIGTYPE_COMBO; } /** One-way signals can't be passed the 'wrong' way. */ -static inline bool IsOnewaySignal(Tile t, Track track) +inline bool IsOnewaySignal(Tile t, Track track) { return GetSignalType(t, track) != SIGTYPE_PBS; } -static inline void CycleSignalSide(Tile t, Track track) +inline void CycleSignalSide(Tile t, Track track) { byte sig; byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 4 : 6; @@ -331,13 +331,13 @@ static inline void CycleSignalSide(Tile t, Track track) SB(t.m3(), pos, 2, sig); } -static inline SignalVariant GetSignalVariant(Tile t, Track track) +inline SignalVariant GetSignalVariant(Tile t, Track track) { byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 7 : 3; return (SignalVariant)GB(t.m2(), pos, 1); } -static inline void SetSignalVariant(Tile t, Track track, SignalVariant v) +inline void SetSignalVariant(Tile t, Track track, SignalVariant v) { byte pos = (track == TRACK_LOWER || track == TRACK_RIGHT) ? 7 : 3; SB(t.m2(), pos, 1, v); @@ -349,7 +349,7 @@ static inline void SetSignalVariant(Tile t, Track track, SignalVariant v) * @param tile the tile to set the states for * @param state the new state */ -static inline void SetSignalStates(Tile tile, uint state) +inline void SetSignalStates(Tile tile, uint state) { SB(tile.m4(), 4, 4, state); } @@ -359,7 +359,7 @@ static inline void SetSignalStates(Tile tile, uint state) * @param tile the tile to set the states for * @return the state of the signals */ -static inline uint GetSignalStates(Tile tile) +inline uint GetSignalStates(Tile tile) { return GB(tile.m4(), 4, 4); } @@ -370,7 +370,7 @@ static inline uint GetSignalStates(Tile tile) * @param signalbit the signal * @return the state of the signal */ -static inline SignalState GetSingleSignalState(Tile t, byte signalbit) +inline SignalState GetSingleSignalState(Tile t, byte signalbit) { return (SignalState)HasBit(GetSignalStates(t), signalbit); } @@ -380,7 +380,7 @@ static inline SignalState GetSingleSignalState(Tile t, byte signalbit) * @param tile the tile to set the present signals for * @param signals the signals that have to be present */ -static inline void SetPresentSignals(Tile tile, uint signals) +inline void SetPresentSignals(Tile tile, uint signals) { SB(tile.m3(), 4, 4, signals); } @@ -390,7 +390,7 @@ static inline void SetPresentSignals(Tile tile, uint signals) * @param tile the tile to get the present signals for * @return the signals that are present */ -static inline uint GetPresentSignals(Tile tile) +inline uint GetPresentSignals(Tile tile) { return GB(tile.m3(), 4, 4); } @@ -401,7 +401,7 @@ static inline uint GetPresentSignals(Tile tile) * @param signalbit the signal * @return true if and only if the signal is present */ -static inline bool IsSignalPresent(Tile t, byte signalbit) +inline bool IsSignalPresent(Tile t, byte signalbit) { return HasBit(GetPresentSignals(t), signalbit); } @@ -410,7 +410,7 @@ static inline bool IsSignalPresent(Tile t, byte signalbit) * Checks for the presence of signals (either way) on the given track on the * given rail tile. */ -static inline bool HasSignalOnTrack(Tile tile, Track track) +inline bool HasSignalOnTrack(Tile tile, Track track) { assert(IsValidTrack(track)); return GetRailTileType(tile) == RAIL_TILE_SIGNALS && (GetPresentSignals(tile) & SignalOnTrack(track)) != 0; @@ -423,7 +423,7 @@ static inline bool HasSignalOnTrack(Tile tile, Track track) * Along meaning if you are currently driving on the given trackdir, this is * the signal that is facing us (for which we stop when it's red). */ -static inline bool HasSignalOnTrackdir(Tile tile, Trackdir trackdir) +inline bool HasSignalOnTrackdir(Tile tile, Trackdir trackdir) { assert (IsValidTrackdir(trackdir)); return GetRailTileType(tile) == RAIL_TILE_SIGNALS && GetPresentSignals(tile) & SignalAlongTrackdir(trackdir); @@ -435,7 +435,7 @@ static inline bool HasSignalOnTrackdir(Tile tile, Trackdir trackdir) * Along meaning if you are currently driving on the given trackdir, this is * the signal that is facing us (for which we stop when it's red). */ -static inline SignalState GetSignalStateByTrackdir(Tile tile, Trackdir trackdir) +inline SignalState GetSignalStateByTrackdir(Tile tile, Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); assert(HasSignalOnTrack(tile, TrackdirToTrack(trackdir))); @@ -446,7 +446,7 @@ static inline SignalState GetSignalStateByTrackdir(Tile tile, Trackdir trackdir) /** * Sets the state of the signal along the given trackdir. */ -static inline void SetSignalStateByTrackdir(Tile tile, Trackdir trackdir, SignalState state) +inline void SetSignalStateByTrackdir(Tile tile, Trackdir trackdir, SignalState state) { if (state == SIGNAL_STATE_GREEN) { // set 1 SetSignalStates(tile, GetSignalStates(tile) | SignalAlongTrackdir(trackdir)); @@ -460,7 +460,7 @@ static inline void SetSignalStateByTrackdir(Tile tile, Trackdir trackdir, Signal * @param tile the tile to check * @param td the trackdir to check */ -static inline bool HasPbsSignalOnTrackdir(Tile tile, Trackdir td) +inline bool HasPbsSignalOnTrackdir(Tile tile, Trackdir td) { return IsTileType(tile, MP_RAILWAY) && HasSignalOnTrackdir(tile, td) && IsPbsSignal(GetSignalType(tile, TrackdirToTrack(td))); @@ -472,7 +472,7 @@ static inline bool HasPbsSignalOnTrackdir(Tile tile, Trackdir td) * @param tile the tile to check * @param td the trackdir to check */ -static inline bool HasOnewaySignalBlockingTrackdir(Tile tile, Trackdir td) +inline bool HasOnewaySignalBlockingTrackdir(Tile tile, Trackdir td) { return IsTileType(tile, MP_RAILWAY) && HasSignalOnTrackdir(tile, ReverseTrackdir(td)) && !HasSignalOnTrackdir(tile, td) && IsOnewaySignal(tile, TrackdirToTrack(td)); @@ -500,23 +500,23 @@ enum RailGroundType { RAIL_GROUND_HALF_SNOW = 14, ///< Snow only on higher part of slope (steep or one corner raised) }; -static inline void SetRailGroundType(Tile t, RailGroundType rgt) +inline void SetRailGroundType(Tile t, RailGroundType rgt) { SB(t.m4(), 0, 4, rgt); } -static inline RailGroundType GetRailGroundType(Tile t) +inline RailGroundType GetRailGroundType(Tile t) { return (RailGroundType)GB(t.m4(), 0, 4); } -static inline bool IsSnowRailGround(Tile t) +inline bool IsSnowRailGround(Tile t) { return GetRailGroundType(t) == RAIL_GROUND_ICE_DESERT; } -static inline void MakeRailNormal(Tile t, Owner o, TrackBits b, RailType r) +inline void MakeRailNormal(Tile t, Owner o, TrackBits b, RailType r) { SetTileType(t, MP_RAILWAY); SetTileOwner(t, o); @@ -535,7 +535,7 @@ static inline void MakeRailNormal(Tile t, Owner o, TrackBits b, RailType r) * @param tile Tile of the depot. * @param dir Direction of the depot exit. */ -static inline void SetRailDepotExitDirection(Tile tile, DiagDirection dir) +inline void SetRailDepotExitDirection(Tile tile, DiagDirection dir) { assert(IsRailDepotTile(tile)); SB(tile.m5(), 0, 2, dir); @@ -549,7 +549,7 @@ static inline void SetRailDepotExitDirection(Tile tile, DiagDirection dir) * @param dir Direction of the depot exit. * @param rail_type Rail type of the depot. */ -static inline void MakeRailDepot(Tile tile, Owner owner, DepotID depot_id, DiagDirection dir, RailType rail_type) +inline void MakeRailDepot(Tile tile, Owner owner, DepotID depot_id, DiagDirection dir, RailType rail_type) { SetTileType(tile, MP_RAILWAY); SetTileOwner(tile, owner); diff --git a/src/road.h b/src/road.h index 61108191083a5..c6a88e85524e3 100644 --- a/src/road.h +++ b/src/road.h @@ -196,22 +196,22 @@ class RoadTypeInfo { extern RoadTypes _roadtypes_type; -static inline bool RoadTypeIsRoad(RoadType roadtype) +inline bool RoadTypeIsRoad(RoadType roadtype) { return !HasBit(_roadtypes_type, roadtype); } -static inline bool RoadTypeIsTram(RoadType roadtype) +inline bool RoadTypeIsTram(RoadType roadtype) { return HasBit(_roadtypes_type, roadtype); } -static inline RoadTramType GetRoadTramType(RoadType roadtype) +inline RoadTramType GetRoadTramType(RoadType roadtype) { return RoadTypeIsTram(roadtype) ? RTT_TRAM : RTT_ROAD; } -static inline RoadTramType OtherRoadTramType(RoadTramType rtt) +inline RoadTramType OtherRoadTramType(RoadTramType rtt) { return rtt == RTT_ROAD ? RTT_TRAM : RTT_ROAD; } @@ -221,7 +221,7 @@ static inline RoadTramType OtherRoadTramType(RoadTramType rtt) * @param roadtype the road type which the information is requested for * @return The pointer to the RoadTypeInfo */ -static inline const RoadTypeInfo *GetRoadTypeInfo(RoadType roadtype) +inline const RoadTypeInfo *GetRoadTypeInfo(RoadType roadtype) { extern RoadTypeInfo _roadtypes[ROADTYPE_END]; assert(roadtype < ROADTYPE_END); @@ -236,7 +236,7 @@ static inline const RoadTypeInfo *GetRoadTypeInfo(RoadType roadtype) * @param enginetype The RoadType of the engine we are considering. * @param tiletype The RoadType of the tile we are considering. */ -static inline bool HasPowerOnRoad(RoadType enginetype, RoadType tiletype) +inline bool HasPowerOnRoad(RoadType enginetype, RoadType tiletype) { return HasBit(GetRoadTypeInfo(enginetype)->powered_roadtypes, tiletype); } @@ -246,7 +246,7 @@ static inline bool HasPowerOnRoad(RoadType enginetype, RoadType tiletype) * @param roadtype The roadtype being built. * @return The cost multiplier. */ -static inline Money RoadBuildCost(RoadType roadtype) +inline Money RoadBuildCost(RoadType roadtype) { assert(roadtype < ROADTYPE_END); return (_price[PR_BUILD_ROAD] * GetRoadTypeInfo(roadtype)->cost_multiplier) >> 3; @@ -257,7 +257,7 @@ static inline Money RoadBuildCost(RoadType roadtype) * @param roadtype The roadtype being removed. * @return The cost. */ -static inline Money RoadClearCost(RoadType roadtype) +inline Money RoadClearCost(RoadType roadtype) { assert(roadtype < ROADTYPE_END); @@ -275,7 +275,7 @@ static inline Money RoadClearCost(RoadType roadtype) * @param to The roadtype we are converting to * @return Cost per RoadBit */ -static inline Money RoadConvertCost(RoadType from, RoadType to) +inline Money RoadConvertCost(RoadType from, RoadType to) { /* Don't apply convert costs when converting to the same roadtype (ex. building a roadstop over existing road) */ if (from == to) return (Money)0; @@ -289,7 +289,7 @@ static inline Money RoadConvertCost(RoadType from, RoadType to) * @param roadtype The roadtype we are testing * @return True iff the roadtype disallows level crossings */ -static inline bool RoadNoLevelCrossing(RoadType roadtype) +inline bool RoadNoLevelCrossing(RoadType roadtype) { assert(roadtype < ROADTYPE_END); return HasBit(GetRoadTypeInfo(roadtype)->flags, ROTF_NO_LEVEL_CROSSING); diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 53cc8e2278e7a..592edd1b58d54 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1404,7 +1404,7 @@ void DrawRoadTypeCatenary(const TileInfo *ti, RoadType rt, RoadBits rb) if (CountBits(rb_new) >= 2) rb = rb_new; } - const RoadTypeInfo* rti = GetRoadTypeInfo(rt); + const RoadTypeInfo *rti = GetRoadTypeInfo(rt); SpriteID front = GetCustomRoadSprite(rti, ti->tile, ROTSG_CATENARY_FRONT); SpriteID back = GetCustomRoadSprite(rti, ti->tile, ROTSG_CATENARY_BACK); @@ -1849,7 +1849,7 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt) { PaletteID palette = COMPANY_SPRITE_COLOUR(_local_company); - const RoadTypeInfo* rti = GetRoadTypeInfo(rt); + const RoadTypeInfo *rti = GetRoadTypeInfo(rt); int relocation = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_DEPOT); bool default_gfx = relocation == 0; if (default_gfx) { diff --git a/src/road_func.h b/src/road_func.h index 031e2978a5522..7c73597b9f02e 100644 --- a/src/road_func.h +++ b/src/road_func.h @@ -20,7 +20,7 @@ * @param r the roadtype to check for validness * @return true if and only if valid */ -static inline bool IsValidRoadBits(RoadBits r) +inline bool IsValidRoadBits(RoadBits r) { return r < ROAD_END; } @@ -34,7 +34,7 @@ static inline bool IsValidRoadBits(RoadBits r) * @param r The given RoadBits value * @return the complement */ -static inline RoadBits ComplementRoadBits(RoadBits r) +inline RoadBits ComplementRoadBits(RoadBits r) { assert(IsValidRoadBits(r)); return (RoadBits)(ROAD_ALL ^ r); @@ -48,7 +48,7 @@ static inline RoadBits ComplementRoadBits(RoadBits r) * @param r The given RoadBits value * @return the mirrored */ -static inline RoadBits MirrorRoadBits(RoadBits r) +inline RoadBits MirrorRoadBits(RoadBits r) { assert(IsValidRoadBits(r)); return (RoadBits)(GB(r, 0, 2) << 2 | GB(r, 2, 2)); @@ -63,7 +63,7 @@ static inline RoadBits MirrorRoadBits(RoadBits r) * @param rot The given Rotation angle * @return the rotated */ -static inline RoadBits RotateRoadBits(RoadBits r, DiagDirDiff rot) +inline RoadBits RotateRoadBits(RoadBits r, DiagDirDiff rot) { assert(IsValidRoadBits(r)); for (; rot > (DiagDirDiff)0; rot--) { @@ -78,7 +78,7 @@ static inline RoadBits RotateRoadBits(RoadBits r, DiagDirDiff rot) * @param r The given RoadBits * @return true if we've got a straight road */ -static inline bool IsStraightRoad(RoadBits r) +inline bool IsStraightRoad(RoadBits r) { assert(IsValidRoadBits(r)); return (r == ROAD_X || r == ROAD_Y); @@ -93,7 +93,7 @@ static inline bool IsStraightRoad(RoadBits r) * @param d The DiagDirection * @return The result RoadBits which the selected road-part set */ -static inline RoadBits DiagDirToRoadBits(DiagDirection d) +inline RoadBits DiagDirToRoadBits(DiagDirection d) { assert(IsValidDiagDirection(d)); return (RoadBits)(ROAD_NW << (3 ^ d)); @@ -108,7 +108,7 @@ static inline RoadBits DiagDirToRoadBits(DiagDirection d) * @param a The Axis * @return The result RoadBits which the selected road-part set */ -static inline RoadBits AxisToRoadBits(Axis a) +inline RoadBits AxisToRoadBits(Axis a) { assert(IsValidAxis(a)); return a == AXIS_X ? ROAD_X : ROAD_Y; @@ -122,7 +122,7 @@ static inline RoadBits AxisToRoadBits(Axis a) * @param total_num Total number of road bits of all road/tram-types. * @return Total cost. */ -static inline Money RoadMaintenanceCost(RoadType roadtype, uint32_t num, uint32_t total_num) +inline Money RoadMaintenanceCost(RoadType roadtype, uint32_t num, uint32_t total_num) { assert(roadtype < ROADTYPE_END); return (_price[PR_INFRASTRUCTURE_ROAD] * GetRoadTypeInfo(roadtype)->maintenance_multiplier * num * (1 + IntSqrt(total_num))) >> 12; @@ -132,7 +132,7 @@ static inline Money RoadMaintenanceCost(RoadType roadtype, uint32_t num, uint32_ * Test if a road type has catenary * @param roadtype Road type to test */ -static inline bool HasRoadCatenary(RoadType roadtype) +inline bool HasRoadCatenary(RoadType roadtype) { assert(roadtype < ROADTYPE_END); return HasBit(GetRoadTypeInfo(roadtype)->flags, ROTF_CATENARY); @@ -142,7 +142,7 @@ static inline bool HasRoadCatenary(RoadType roadtype) * Test if we should draw road catenary * @param roadtype Road type to test */ -static inline bool HasRoadCatenaryDrawn(RoadType roadtype) +inline bool HasRoadCatenaryDrawn(RoadType roadtype) { return HasRoadCatenary(roadtype) && !IsInvisibilitySet(TO_CATENARY); } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 34cab6a898661..1d513d49d46c8 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -755,7 +755,7 @@ struct BuildRoadToolbarWindow : Window { */ static EventState RoadTramToolbarGlobalHotkeys(int hotkey, RoadType last_build, RoadTramType rtt) { - Window* w = nullptr; + Window *w = nullptr; switch (_game_mode) { case GM_NORMAL: w = ShowBuildRoadToolbar(last_build); diff --git a/src/road_map.h b/src/road_map.h index f31f67f160817..9179579b4cf4c 100644 --- a/src/road_map.h +++ b/src/road_map.h @@ -30,7 +30,7 @@ enum RoadTileType { * @param t Tile to query. * @return true if tile can be queried about road/tram types. */ -static inline bool MayHaveRoad(Tile t) +inline bool MayHaveRoad(Tile t) { switch (GetTileType(t)) { case MP_ROAD: @@ -82,7 +82,7 @@ debug_inline static bool IsNormalRoadTile(Tile t) * @pre IsTileType(t, MP_ROAD) * @return True if level crossing. */ -static inline bool IsLevelCrossing(Tile t) +inline bool IsLevelCrossing(Tile t) { return GetRoadTileType(t) == ROAD_TILE_CROSSING; } @@ -92,7 +92,7 @@ static inline bool IsLevelCrossing(Tile t) * @param t Tile to query. * @return True if level crossing tile. */ -static inline bool IsLevelCrossingTile(Tile t) +inline bool IsLevelCrossingTile(Tile t) { return IsTileType(t, MP_ROAD) && IsLevelCrossing(t); } @@ -125,7 +125,7 @@ debug_inline static bool IsRoadDepotTile(Tile t) * @pre IsNormalRoad(t) * @return The present road bits for the road type. */ -static inline RoadBits GetRoadBits(Tile t, RoadTramType rtt) +inline RoadBits GetRoadBits(Tile t, RoadTramType rtt) { assert(IsNormalRoad(t)); if (rtt == RTT_TRAM) return (RoadBits)GB(t.m3(), 0, 4); @@ -138,7 +138,7 @@ static inline RoadBits GetRoadBits(Tile t, RoadTramType rtt) * @param tile The tile from which we want to get the RoadBits * @return all set RoadBits of the tile */ -static inline RoadBits GetAllRoadBits(Tile tile) +inline RoadBits GetAllRoadBits(Tile tile) { return GetRoadBits(tile, RTT_ROAD) | GetRoadBits(tile, RTT_TRAM); } @@ -150,7 +150,7 @@ static inline RoadBits GetAllRoadBits(Tile tile) * @param rt Road type. * @pre IsNormalRoad(t) */ -static inline void SetRoadBits(Tile t, RoadBits r, RoadTramType rtt) +inline void SetRoadBits(Tile t, RoadBits r, RoadTramType rtt) { assert(IsNormalRoad(t)); // XXX incomplete if (rtt == RTT_TRAM) { @@ -160,19 +160,19 @@ static inline void SetRoadBits(Tile t, RoadBits r, RoadTramType rtt) } } -static inline RoadType GetRoadTypeRoad(Tile t) +inline RoadType GetRoadTypeRoad(Tile t) { assert(MayHaveRoad(t)); return (RoadType)GB(t.m4(), 0, 6); } -static inline RoadType GetRoadTypeTram(Tile t) +inline RoadType GetRoadTypeTram(Tile t) { assert(MayHaveRoad(t)); return (RoadType)GB(t.m8(), 6, 6); } -static inline RoadType GetRoadType(Tile t, RoadTramType rtt) +inline RoadType GetRoadType(Tile t, RoadTramType rtt) { return (rtt == RTT_TRAM) ? GetRoadTypeTram(t) : GetRoadTypeRoad(t); } @@ -182,7 +182,7 @@ static inline RoadType GetRoadType(Tile t, RoadTramType rtt) * @param t The tile to query. * @return Present road types. */ -static inline RoadTypes GetPresentRoadTypes(Tile t) +inline RoadTypes GetPresentRoadTypes(Tile t) { RoadTypes result = ROADTYPES_NONE; if (MayHaveRoad(t)) { @@ -192,12 +192,12 @@ static inline RoadTypes GetPresentRoadTypes(Tile t) return result; } -static inline bool HasRoadTypeRoad(Tile t) +inline bool HasRoadTypeRoad(Tile t) { return GetRoadTypeRoad(t) != INVALID_ROADTYPE; } -static inline bool HasRoadTypeTram(Tile t) +inline bool HasRoadTypeTram(Tile t) { return GetRoadTypeTram(t) != INVALID_ROADTYPE; } @@ -208,7 +208,7 @@ static inline bool HasRoadTypeTram(Tile t) * @param tram True to check tram, false to check road. * @return True if the tile has the specified road type. */ -static inline bool HasTileRoadType(Tile t, RoadTramType rtt) +inline bool HasTileRoadType(Tile t, RoadTramType rtt) { return GetRoadType(t, rtt) != INVALID_ROADTYPE; } @@ -219,7 +219,7 @@ static inline bool HasTileRoadType(Tile t, RoadTramType rtt) * @param rts Allowed road types. * @return True if the tile has one of the specified road types. */ -static inline bool HasTileAnyRoadType(Tile t, RoadTypes rts) +inline bool HasTileAnyRoadType(Tile t, RoadTypes rts) { if (!MayHaveRoad(t)) return false; return (GetPresentRoadTypes(t) & rts); @@ -231,7 +231,7 @@ static inline bool HasTileAnyRoadType(Tile t, RoadTypes rts) * @param rtt RoadTramType. * @return Owner of the given road type. */ -static inline Owner GetRoadOwner(Tile t, RoadTramType rtt) +inline Owner GetRoadOwner(Tile t, RoadTramType rtt) { assert(MayHaveRoad(t)); if (rtt == RTT_ROAD) return (Owner)GB(IsNormalRoadTile(t) ? t.m1() : t.m7(), 0, 5); @@ -248,7 +248,7 @@ static inline Owner GetRoadOwner(Tile t, RoadTramType rtt) * @param rtt RoadTramType. * @param o New owner of the given road type. */ -static inline void SetRoadOwner(Tile t, RoadTramType rtt, Owner o) +inline void SetRoadOwner(Tile t, RoadTramType rtt, Owner o) { if (rtt == RTT_ROAD) { SB(IsNormalRoadTile(t) ? t.m1() : t.m7(), 0, 5, o); @@ -265,7 +265,7 @@ static inline void SetRoadOwner(Tile t, RoadTramType rtt, Owner o) * @pre HasTileRoadType(t, rt) * @return True if the road type is owned by the given owner. */ -static inline bool IsRoadOwner(Tile t, RoadTramType rtt, Owner o) +inline bool IsRoadOwner(Tile t, RoadTramType rtt, Owner o) { assert(HasTileRoadType(t, rtt)); return (GetRoadOwner(t, rtt) == o); @@ -277,7 +277,7 @@ static inline bool IsRoadOwner(Tile t, RoadTramType rtt, Owner o) * @pre IsTileType(t, MP_ROAD) * @return true iff tile has road and the road is owned by a town */ -static inline bool HasTownOwnedRoad(Tile t) +inline bool HasTownOwnedRoad(Tile t) { return HasTileRoadType(t, RTT_ROAD) && IsRoadOwner(t, RTT_ROAD, OWNER_TOWN); } @@ -288,7 +288,7 @@ static inline bool HasTownOwnedRoad(Tile t) * @param wc The value to check * @return true if the given value is a valid DisallowedRoadDirections. */ -static inline bool IsValidDisallowedRoadDirections(DisallowedRoadDirections drt) +inline bool IsValidDisallowedRoadDirections(DisallowedRoadDirections drt) { return drt < DRD_END; } @@ -298,7 +298,7 @@ static inline bool IsValidDisallowedRoadDirections(DisallowedRoadDirections drt) * @param t the tile to get the directions from * @return the disallowed directions */ -static inline DisallowedRoadDirections GetDisallowedRoadDirections(Tile t) +inline DisallowedRoadDirections GetDisallowedRoadDirections(Tile t) { assert(IsNormalRoad(t)); return (DisallowedRoadDirections)GB(t.m5(), 4, 2); @@ -309,7 +309,7 @@ static inline DisallowedRoadDirections GetDisallowedRoadDirections(Tile t) * @param t the tile to set the directions for * @param drd the disallowed directions */ -static inline void SetDisallowedRoadDirections(Tile t, DisallowedRoadDirections drd) +inline void SetDisallowedRoadDirections(Tile t, DisallowedRoadDirections drd) { assert(IsNormalRoad(t)); assert(drd < DRD_END); @@ -322,7 +322,7 @@ static inline void SetDisallowedRoadDirections(Tile t, DisallowedRoadDirections * @pre IsLevelCrossing(t) * @return The axis of the road. */ -static inline Axis GetCrossingRoadAxis(Tile t) +inline Axis GetCrossingRoadAxis(Tile t) { assert(IsLevelCrossing(t)); return (Axis)GB(t.m5(), 0, 1); @@ -334,7 +334,7 @@ static inline Axis GetCrossingRoadAxis(Tile t) * @pre IsLevelCrossing(t) * @return The axis of the rail. */ -static inline Axis GetCrossingRailAxis(Tile t) +inline Axis GetCrossingRailAxis(Tile t) { assert(IsLevelCrossing(t)); return OtherAxis((Axis)GetCrossingRoadAxis(t)); @@ -345,7 +345,7 @@ static inline Axis GetCrossingRailAxis(Tile t) * @param tile The tile to query. * @return The present road bits. */ -static inline RoadBits GetCrossingRoadBits(Tile tile) +inline RoadBits GetCrossingRoadBits(Tile tile) { return GetCrossingRoadAxis(tile) == AXIS_X ? ROAD_X : ROAD_Y; } @@ -355,7 +355,7 @@ static inline RoadBits GetCrossingRoadBits(Tile tile) * @param tile The tile to query. * @return The rail track. */ -static inline Track GetCrossingRailTrack(Tile tile) +inline Track GetCrossingRailTrack(Tile tile) { return AxisToTrack(GetCrossingRailAxis(tile)); } @@ -365,7 +365,7 @@ static inline Track GetCrossingRailTrack(Tile tile) * @param tile The tile to query. * @return The rail track bits. */ -static inline TrackBits GetCrossingRailBits(Tile tile) +inline TrackBits GetCrossingRailBits(Tile tile) { return AxisToTrackBits(GetCrossingRailAxis(tile)); } @@ -377,7 +377,7 @@ static inline TrackBits GetCrossingRailBits(Tile tile) * @return reservation state * @pre IsLevelCrossingTile(t) */ -static inline bool HasCrossingReservation(Tile t) +inline bool HasCrossingReservation(Tile t) { assert(IsLevelCrossingTile(t)); return HasBit(t.m5(), 4); @@ -390,7 +390,7 @@ static inline bool HasCrossingReservation(Tile t) * @param b the reservation state * @pre IsLevelCrossingTile(t) */ -static inline void SetCrossingReservation(Tile t, bool b) +inline void SetCrossingReservation(Tile t, bool b) { assert(IsLevelCrossingTile(t)); SB(t.m5(), 4, 1, b ? 1 : 0); @@ -402,7 +402,7 @@ static inline void SetCrossingReservation(Tile t, bool b) * @pre IsLevelCrossingTile(t) * @return reserved track bits */ -static inline TrackBits GetCrossingReservationTrackBits(Tile t) +inline TrackBits GetCrossingReservationTrackBits(Tile t) { return HasCrossingReservation(t) ? GetCrossingRailBits(t) : TRACK_BIT_NONE; } @@ -413,7 +413,7 @@ static inline TrackBits GetCrossingReservationTrackBits(Tile t) * @pre IsLevelCrossing(t) * @return True if the level crossing is barred. */ -static inline bool IsCrossingBarred(Tile t) +inline bool IsCrossingBarred(Tile t) { assert(IsLevelCrossing(t)); return HasBit(t.m5(), 5); @@ -425,7 +425,7 @@ static inline bool IsCrossingBarred(Tile t) * @param barred True if the crossing should be barred, false otherwise. * @pre IsLevelCrossing(t) */ -static inline void SetCrossingBarred(Tile t, bool barred) +inline void SetCrossingBarred(Tile t, bool barred) { assert(IsLevelCrossing(t)); SB(t.m5(), 5, 1, barred ? 1 : 0); @@ -435,7 +435,7 @@ static inline void SetCrossingBarred(Tile t, bool barred) * Unbar a level crossing. * @param t The tile to change. */ -static inline void UnbarCrossing(Tile t) +inline void UnbarCrossing(Tile t) { SetCrossingBarred(t, false); } @@ -444,7 +444,7 @@ static inline void UnbarCrossing(Tile t) * Bar a level crossing. * @param t The tile to change. */ -static inline void BarCrossing(Tile t) +inline void BarCrossing(Tile t) { SetCrossingBarred(t, true); } @@ -456,7 +456,7 @@ static inline void BarCrossing(Tile t) * @param t The tile to query. * @return True if the tile has snow/desert. */ -static inline bool IsOnSnow(Tile t) +inline bool IsOnSnow(Tile t) { return HasBit(t.m7(), 5); } @@ -467,7 +467,7 @@ static inline bool IsOnSnow(Tile t) * Toggle the snow/desert state of a road tile. * @param t The tile to change. */ -static inline void ToggleSnow(Tile t) +inline void ToggleSnow(Tile t) { ToggleBit(t.m7(), 5); } @@ -490,7 +490,7 @@ enum Roadside { * @param tile The tile to query. * @return The road decoration of the tile. */ -static inline Roadside GetRoadside(Tile tile) +inline Roadside GetRoadside(Tile tile) { return (Roadside)GB(tile.m6(), 3, 3); } @@ -500,7 +500,7 @@ static inline Roadside GetRoadside(Tile tile) * @param tile The tile to change. * @param s The new road decoration of the tile. */ -static inline void SetRoadside(Tile tile, Roadside s) +inline void SetRoadside(Tile tile, Roadside s) { SB(tile.m6(), 3, 3, s); } @@ -510,7 +510,7 @@ static inline void SetRoadside(Tile tile, Roadside s) * @param t The tile to check. * @return True if the tile has road works in progress. */ -static inline bool HasRoadWorks(Tile t) +inline bool HasRoadWorks(Tile t) { return GetRoadside(t) >= ROADSIDE_GRASS_ROAD_WORKS; } @@ -520,7 +520,7 @@ static inline bool HasRoadWorks(Tile t) * @param t The tile to modify. * @return True if the road works are in the last stage. */ -static inline bool IncreaseRoadWorksCounter(Tile t) +inline bool IncreaseRoadWorksCounter(Tile t) { AB(t.m7(), 0, 4, 1); @@ -532,7 +532,7 @@ static inline bool IncreaseRoadWorksCounter(Tile t) * @param t The tile to start the work on. * @pre !HasRoadWorks(t) */ -static inline void StartRoadWorks(Tile t) +inline void StartRoadWorks(Tile t) { assert(!HasRoadWorks(t)); /* Remove any trees or lamps in case or roadwork */ @@ -548,7 +548,7 @@ static inline void StartRoadWorks(Tile t) * @param t Tile to stop the road works on. * @pre HasRoadWorks(t) */ -static inline void TerminateRoadWorks(Tile t) +inline void TerminateRoadWorks(Tile t) { assert(HasRoadWorks(t)); SetRoadside(t, (Roadside)(GetRoadside(t) - ROADSIDE_GRASS_ROAD_WORKS + ROADSIDE_GRASS)); @@ -562,7 +562,7 @@ static inline void TerminateRoadWorks(Tile t) * @param t The tile to query. * @return Diagonal direction of the depot exit. */ -static inline DiagDirection GetRoadDepotDirection(Tile t) +inline DiagDirection GetRoadDepotDirection(Tile t) { assert(IsRoadDepot(t)); return (DiagDirection)GB(t.m5(), 0, 2); @@ -576,7 +576,7 @@ RoadBits GetAnyRoadBits(Tile tile, RoadTramType rtt, bool straight_tunnel_bridge * @param t The tile to change. * @param rt The road type to set. */ -static inline void SetRoadTypeRoad(Tile t, RoadType rt) +inline void SetRoadTypeRoad(Tile t, RoadType rt) { assert(MayHaveRoad(t)); assert(rt == INVALID_ROADTYPE || RoadTypeIsRoad(rt)); @@ -588,7 +588,7 @@ static inline void SetRoadTypeRoad(Tile t, RoadType rt) * @param t The tile to change. * @param rt The road type to set. */ -static inline void SetRoadTypeTram(Tile t, RoadType rt) +inline void SetRoadTypeTram(Tile t, RoadType rt) { assert(MayHaveRoad(t)); assert(rt == INVALID_ROADTYPE || RoadTypeIsTram(rt)); @@ -601,7 +601,7 @@ static inline void SetRoadTypeTram(Tile t, RoadType rt) * @param rtt Set road or tram type. * @param rt The road type to set. */ -static inline void SetRoadType(Tile t, RoadTramType rtt, RoadType rt) +inline void SetRoadType(Tile t, RoadTramType rtt, RoadType rt) { if (rtt == RTT_TRAM) { SetRoadTypeTram(t, rt); @@ -616,7 +616,7 @@ static inline void SetRoadType(Tile t, RoadTramType rtt, RoadType rt) * @param road_rt The road roadtype to set for the tile. * @param tram_rt The tram roadtype to set for the tile. */ -static inline void SetRoadTypes(Tile t, RoadType road_rt, RoadType tram_rt) +inline void SetRoadTypes(Tile t, RoadType road_rt, RoadType tram_rt) { SetRoadTypeRoad(t, road_rt); SetRoadTypeTram(t, tram_rt); @@ -632,7 +632,7 @@ static inline void SetRoadTypes(Tile t, RoadType road_rt, RoadType tram_rt) * @param road New owner of road. * @param tram New owner of tram tracks. */ -static inline void MakeRoadNormal(Tile t, RoadBits bits, RoadType road_rt, RoadType tram_rt, TownID town, Owner road, Owner tram) +inline void MakeRoadNormal(Tile t, RoadBits bits, RoadType road_rt, RoadType tram_rt, TownID town, Owner road, Owner tram) { SetTileType(t, MP_ROAD); SetTileOwner(t, road); @@ -657,7 +657,7 @@ static inline void MakeRoadNormal(Tile t, RoadBits bits, RoadType road_rt, RoadT * @param tram_rt The tram roadtype to set for the tile. * @param town Town ID if the road is a town-owned road. */ -static inline void MakeRoadCrossing(Tile t, Owner road, Owner tram, Owner rail, Axis roaddir, RailType rat, RoadType road_rt, RoadType tram_rt, uint town) +inline void MakeRoadCrossing(Tile t, Owner road, Owner tram, Owner rail, Axis roaddir, RailType rat, RoadType road_rt, RoadType tram_rt, uint town) { SetTileType(t, MP_ROAD); SetTileOwner(t, rail); @@ -677,7 +677,7 @@ static inline void MakeRoadCrossing(Tile t, Owner road, Owner tram, Owner rail, * @param tile Tile of the depot. * @param dir Direction of the depot exit. */ -static inline void SetRoadDepotExitDirection(Tile tile, DiagDirection dir) +inline void SetRoadDepotExitDirection(Tile tile, DiagDirection dir) { assert(IsRoadDepotTile(tile)); SB(tile.m5(), 0, 2, dir); @@ -691,7 +691,7 @@ static inline void SetRoadDepotExitDirection(Tile tile, DiagDirection dir) * @param dir Direction of the depot exit. * @param rt Road type of the depot. */ -static inline void MakeRoadDepot(Tile tile, Owner owner, DepotID depot_id, DiagDirection dir, RoadType rt) +inline void MakeRoadDepot(Tile tile, Owner owner, DepotID depot_id, DiagDirection dir, RoadType rt) { SetTileType(tile, MP_ROAD); SetTileOwner(tile, owner); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 1cc135dfb53e5..368bafa9be3bc 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1243,7 +1243,7 @@ bool AfterLoadGame() } } - for (Vehicle* v : Vehicle::Iterate()) { + for (Vehicle *v : Vehicle::Iterate()) { if (!v->IsGroundVehicle()) continue; if (IsBridgeTile(v->tile)) { DiagDirection dir = GetTunnelBridgeDirection(v->tile); @@ -2398,7 +2398,7 @@ bool AfterLoadGame() * 'default' names, after that we can assign the names. */ for (Depot *d : Depot::Iterate()) d->town_cn = UINT16_MAX; - for (Depot* d : Depot::Iterate()) MakeDefaultName(d); + for (Depot *d : Depot::Iterate()) MakeDefaultName(d); } if (IsSavegameVersionBefore(SLV_142)) { @@ -2483,7 +2483,7 @@ bool AfterLoadGame() if (!wp->name.empty()) wp->town_cn = UINT16_MAX; } - for (Waypoint* wp : Waypoint::Iterate()) { + for (Waypoint *wp : Waypoint::Iterate()) { if (!wp->name.empty()) MakeDefaultName(wp); } } diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index b8ecc89449b17..ab62d756a8008 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -48,7 +48,7 @@ static std::vector _temp_engine; * The allocated Engine must be freed using FreeEngine; * @return Allocated engine. */ -static Engine* CallocEngine() +static Engine *CallocEngine() { uint8_t *zero = CallocT(sizeof(Engine)); Engine *engine = new (zero) Engine(); diff --git a/src/saveload/oldloader.h b/src/saveload/oldloader.h index 09f143db166c6..3eaa20425adda 100644 --- a/src/saveload/oldloader.h +++ b/src/saveload/oldloader.h @@ -100,13 +100,13 @@ bool LoadChunk(LoadgameState *ls, void *base, const OldChunks *chunks); bool LoadTTDMain(LoadgameState *ls); bool LoadTTOMain(LoadgameState *ls); -static inline uint16_t ReadUint16(LoadgameState *ls) +inline uint16_t ReadUint16(LoadgameState *ls) { byte x = ReadByte(ls); return x | ReadByte(ls) << 8; } -static inline uint32_t ReadUint32(LoadgameState *ls) +inline uint32_t ReadUint32(LoadgameState *ls) { uint16_t x = ReadUint16(ls); return x | ReadUint16(ls) << 16; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 5ddf9f346bba1..b3bd344cd955e 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -717,7 +717,7 @@ struct SaveLoadCompat { * @param type VarType holding information about the variable-type * @return the SLE_VAR_* part of a variable-type description */ -static inline constexpr VarType GetVarMemType(VarType type) +inline constexpr VarType GetVarMemType(VarType type) { return GB(type, 4, 4) << 4; } @@ -728,7 +728,7 @@ static inline constexpr VarType GetVarMemType(VarType type) * @param type VarType holding information about the file-type * @return the SLE_FILE_* part of a variable-type description */ -static inline constexpr VarType GetVarFileType(VarType type) +inline constexpr VarType GetVarFileType(VarType type) { return GB(type, 0, 4); } @@ -738,7 +738,7 @@ static inline constexpr VarType GetVarFileType(VarType type) * @param conv the type to check * @return True if it's a numeric type. */ -static inline constexpr bool IsNumericType(VarType conv) +inline constexpr bool IsNumericType(VarType conv) { return GetVarMemType(conv) <= SLE_VAR_U64; } @@ -748,7 +748,7 @@ static inline constexpr bool IsNumericType(VarType conv) * @param type VarType to get size of. * @return size of type in bytes. */ -static inline constexpr size_t SlVarSize(VarType type) +inline constexpr size_t SlVarSize(VarType type) { switch (GetVarMemType(type)) { case SLE_VAR_BL: return sizeof(bool); @@ -776,7 +776,7 @@ static inline constexpr size_t SlVarSize(VarType type) * @param size Actual size of variable. * @return true iff the sizes match. */ -static inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t length, size_t size) +inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t length, size_t size) { switch (cmd) { case SL_VAR: return SlVarSize(type) == size; @@ -1192,7 +1192,7 @@ static inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size * @param minor Minor number of the version to check against. If \a minor is 0 or not specified, only the major number is checked. * @return Savegame version is earlier than the specified version. */ -static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0) +inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0) { extern SaveLoadVersion _sl_version; extern byte _sl_minor_version; @@ -1206,7 +1206,7 @@ static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0 * @param major Major number of the version to check against. * @return Savegame version is at most the specified version. */ -static inline bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major) +inline bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major) { extern SaveLoadVersion _sl_version; return _sl_version <= major; @@ -1219,7 +1219,7 @@ static inline bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major) * @param version_to Exclusive savegame version upper bound. SL_MAX_VERSION if no upper bound. * @return Active savegame version falls within the given range. */ -static inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to) +inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to) { extern const SaveLoadVersion SAVEGAME_VERSION; return version_from <= SAVEGAME_VERSION && SAVEGAME_VERSION < version_to; @@ -1230,7 +1230,7 @@ static inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLo * everything else has a callback function that returns the address based * on the saveload data and the current object for non-globals. */ -static inline void *GetVariableAddress(const void *object, const SaveLoad &sld) +inline void *GetVariableAddress(const void *object, const SaveLoad &sld) { /* Entry is a null-variable, mostly used to read old savegames etc. */ if (GetVarMemType(sld.conv) == SLE_VAR_NULL) { @@ -1274,7 +1274,7 @@ bool SaveloadCrashWithMissingNewGRFs(); * anything with them, discarding them in effect * @param length The amount of bytes that is being treated this way */ -static inline void SlSkipBytes(size_t length) +inline void SlSkipBytes(size_t length) { for (; length != 0; length--) SlReadByte(); } diff --git a/src/saveload/saveload_error.hpp b/src/saveload/saveload_error.hpp index 5a42257daaabb..f23a81e32d342 100644 --- a/src/saveload/saveload_error.hpp +++ b/src/saveload/saveload_error.hpp @@ -26,7 +26,7 @@ void NORETURN SlErrorCorrupt(const std::string &msg); * break out of all the saveload code. */ template -static inline void NORETURN SlErrorCorruptFmt(const T &format, Args&&... fmt_args) +inline void NORETURN SlErrorCorruptFmt(const T &format, Args&&... fmt_args) { SlErrorCorrupt(fmt::format(format, fmt_args...)); } diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index de57120c98cf3..7745c9b6e5565 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -86,7 +86,7 @@ void MoveWaypointsToBaseStations() /* As of version 17, we recalculate the custom graphic ID of waypoints * from the GRF ID / station index. */ for (OldWaypoint &wp : _old_waypoints) { - StationClass* stclass = StationClass::Get(STAT_CLASS_WAYP); + StationClass *stclass = StationClass::Get(STAT_CLASS_WAYP); for (uint i = 0; i < stclass->GetSpecCount(); i++) { const StationSpec *statspec = stclass->GetSpec(i); if (statspec != nullptr && statspec->grf_prop.grffile->grfid == wp.grfid && statspec->grf_prop.local_id == wp.localidx) { diff --git a/src/script/api/script_depotlist.cpp b/src/script/api/script_depotlist.cpp index 6f3caa2900806..eb43139165d1a 100644 --- a/src/script/api/script_depotlist.cpp +++ b/src/script/api/script_depotlist.cpp @@ -27,8 +27,10 @@ ScriptDepotList::ScriptDepotList(ScriptTile::TransportType transport_type) case ScriptTile::TRANSPORT_AIR: { /* Hangars are not seen as real depots by the depot code. */ + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); for (const Station *st : Station::Iterate()) { - if (st->owner == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity()) { + if (is_deity || st->owner == owner) { for (uint i = 0; i < st->airport.GetNumHangars(); i++) { this->AddItem(st->airport.GetHangarTile(i).base()); } @@ -39,7 +41,9 @@ ScriptDepotList::ScriptDepotList(ScriptTile::TransportType transport_type) } /* Handle 'standard' depots. */ + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); for (const Depot *depot : Depot::Iterate()) { - if ((::GetTileOwner(depot->xy) == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity()) && ::IsTileType(depot->xy, tile_type)) this->AddItem(depot->xy.base()); + if ((is_deity || ::GetTileOwner(depot->xy) == owner) && ::IsTileType(depot->xy, tile_type)) this->AddItem(depot->xy.base()); } } diff --git a/src/script/api/script_enginelist.cpp b/src/script/api/script_enginelist.cpp index 9ba725dfd0339..e7c38f840b863 100644 --- a/src/script/api/script_enginelist.cpp +++ b/src/script/api/script_enginelist.cpp @@ -16,7 +16,9 @@ ScriptEngineList::ScriptEngineList(ScriptVehicle::VehicleType vehicle_type) { EnforceDeityOrCompanyModeValid_Void(); + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); for (const Engine *e : Engine::IterateType((::VehicleType)vehicle_type)) { - if (ScriptCompanyMode::IsDeity() || HasBit(e->company_avail, ScriptObject::GetCompany())) this->AddItem(e->index); + if (is_deity || HasBit(e->company_avail, owner)) this->AddItem(e->index); } } diff --git a/src/script/api/script_grouplist.cpp b/src/script/api/script_grouplist.cpp index 3fb9358e8df8c..7fa93e8099438 100644 --- a/src/script/api/script_grouplist.cpp +++ b/src/script/api/script_grouplist.cpp @@ -17,7 +17,8 @@ ScriptGroupList::ScriptGroupList() { EnforceCompanyModeValid_Void(); + CompanyID owner = ScriptObject::GetCompany(); for (const Group *g : Group::Iterate()) { - if (g->owner == ScriptObject::GetCompany()) this->AddItem(g->index); + if (g->owner == owner) this->AddItem(g->index); } } diff --git a/src/script/api/script_industry.hpp b/src/script/api/script_industry.hpp index bedb3504d1f22..ea9bc7f9d86ca 100644 --- a/src/script/api/script_industry.hpp +++ b/src/script/api/script_industry.hpp @@ -330,6 +330,7 @@ class ScriptIndustry : public ScriptObject { /** * Gets the current production level of an industry. * @param industry_id The index of the industry. + * @return The current production level of the industry. * @api -ai */ static SQInteger GetProductionLevel(IndustryID industry_id); diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp index 8a9339e0207aa..854bdd9c78712 100644 --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -11,7 +11,9 @@ #include "script_list.hpp" #include "script_controller.hpp" #include "../../debug.h" +#include "../../core/backup_type.hpp" #include "../../script/squirrel.hpp" +#include <../squirrel/sqvm.h> #include "../../safeguards.h" @@ -866,6 +868,14 @@ SQInteger ScriptList::Valuate(HSQUIRRELVM vm) bool backup_allow = ScriptObject::GetAllowDoCommand(); ScriptObject::SetAllowDoCommand(false); + /* Limit the total number of ops that can be consumed by a valuate operation */ + SQInteger new_ops_error_threshold = vm->_ops_till_suspend_error_threshold; + if (vm->_ops_till_suspend_error_threshold == INT64_MIN) { + new_ops_error_threshold = vm->_ops_till_suspend - MAX_VALUATE_OPS; + vm->_ops_till_suspend_error_label = "valuator function"; + } + AutoRestoreBackup ops_error_threshold_backup(vm->_ops_till_suspend_error_threshold, new_ops_error_threshold); + /* Push the function to call */ sq_push(vm, 2); diff --git a/src/script/api/script_list.hpp b/src/script/api/script_list.hpp index a4793500e6665..aa24f4992b093 100644 --- a/src/script/api/script_list.hpp +++ b/src/script/api/script_list.hpp @@ -13,6 +13,9 @@ #include "script_object.hpp" +/** Maximum number of operations allowed for valuating a list. */ +static const int MAX_VALUATE_OPS = 500000; + class ScriptListSorter; /** diff --git a/src/script/api/script_railtypelist.cpp b/src/script/api/script_railtypelist.cpp index 7bf55dca4b56c..3cdc9b83c645c 100644 --- a/src/script/api/script_railtypelist.cpp +++ b/src/script/api/script_railtypelist.cpp @@ -17,7 +17,9 @@ ScriptRailTypeList::ScriptRailTypeList() { EnforceDeityOrCompanyModeValid_Void(); + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { - if (ScriptCompanyMode::IsDeity() || ::HasRailTypeAvail(ScriptObject::GetCompany(), rt)) this->AddItem(rt); + if (is_deity || ::HasRailTypeAvail(owner, rt)) this->AddItem(rt); } } diff --git a/src/script/api/script_roadtypelist.cpp b/src/script/api/script_roadtypelist.cpp index e1728553bed0e..18b0d6845da20 100644 --- a/src/script/api/script_roadtypelist.cpp +++ b/src/script/api/script_roadtypelist.cpp @@ -16,8 +16,9 @@ ScriptRoadTypeList::ScriptRoadTypeList(ScriptRoad::RoadTramTypes rtts) { EnforceDeityOrCompanyModeValid_Void(); + CompanyID owner = ScriptObject::GetCompany(); for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { if (!HasBit(rtts, GetRoadTramType(rt))) continue; - if (::HasRoadTypeAvail(ScriptObject::GetCompany(), rt)) this->AddItem(rt); + if (::HasRoadTypeAvail(owner, rt)) this->AddItem(rt); } } diff --git a/src/script/api/script_stationlist.cpp b/src/script/api/script_stationlist.cpp index dd254f19cb475..e3bca735ba4f4 100644 --- a/src/script/api/script_stationlist.cpp +++ b/src/script/api/script_stationlist.cpp @@ -19,8 +19,10 @@ ScriptStationList::ScriptStationList(ScriptStation::StationType station_type) { EnforceDeityOrCompanyModeValid_Void(); + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); for (Station *st : Station::Iterate()) { - if ((st->owner == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity()) && (st->facilities & station_type) != 0) this->AddItem(st->index); + if ((is_deity || st->owner == owner) && (st->facilities & station_type) != 0) this->AddItem(st->index); } } diff --git a/src/script/api/script_vehiclelist.cpp b/src/script/api/script_vehiclelist.cpp index 6c09f3f88bd05..f3080953c317a 100644 --- a/src/script/api/script_vehiclelist.cpp +++ b/src/script/api/script_vehiclelist.cpp @@ -14,7 +14,10 @@ #include "script_station.hpp" #include "../../depot_map.h" #include "../../vehicle_base.h" +#include "../../vehiclelist_func.h" #include "../../train.h" +#include "../../core/backup_type.hpp" +#include <../squirrel/sqvm.h> #include "../../safeguards.h" @@ -41,8 +44,18 @@ ScriptVehicleList::ScriptVehicleList(HSQUIRRELVM vm) bool backup_allow = ScriptObject::GetAllowDoCommand(); ScriptObject::SetAllowDoCommand(false); + /* Limit the total number of ops that can be consumed by a filter operation, if a filter function is present */ + SQInteger new_ops_error_threshold = vm->_ops_till_suspend_error_threshold; + if (nparam >= 1 && vm->_ops_till_suspend_error_threshold == INT64_MIN) { + new_ops_error_threshold = vm->_ops_till_suspend - MAX_VALUATE_OPS; + vm->_ops_till_suspend_error_label = "vehicle filter function"; + } + AutoRestoreBackup ops_error_threshold_backup(vm->_ops_till_suspend_error_threshold, new_ops_error_threshold); + + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); for (const Vehicle *v : Vehicle::Iterate()) { - if (v->owner != ScriptObject::GetCompany() && !ScriptCompanyMode::IsDeity()) continue; + if (v->owner != owner && !is_deity) continue; if (!v->IsPrimaryVehicle() && !(v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon())) continue; if (nparam < 1) { @@ -97,16 +110,14 @@ ScriptVehicleList_Station::ScriptVehicleList_Station(StationID station_id) EnforceDeityOrCompanyModeValid_Void(); if (!ScriptBaseStation::IsValidBaseStation(station_id)) return; - for (const Vehicle *v : Vehicle::Iterate()) { - if ((v->owner == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity()) && v->IsPrimaryVehicle()) { - for (const Order *order : v->Orders()) { - if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT)) && order->GetDestination() == station_id) { - this->AddItem(v->index); - break; - } - } - } - } + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); + + FindVehiclesWithOrder( + [is_deity, owner](const Vehicle *v) { return is_deity || v->owner == owner; }, + [station_id](const Order *order) { return (order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT)) && order->GetDestination() == station_id; }, + [this](const Vehicle *v) { this->AddItem(v->index); } + ); } ScriptVehicleList_Depot::ScriptVehicleList_Depot(TileIndex tile) @@ -146,16 +157,14 @@ ScriptVehicleList_Depot::ScriptVehicleList_Depot(TileIndex tile) return; } - for (const Vehicle *v : Vehicle::Iterate()) { - if ((v->owner == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity()) && v->IsPrimaryVehicle() && v->type == type) { - for (const Order *order : v->Orders()) { - if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == dest) { - this->AddItem(v->index); - break; - } - } - } - } + bool is_deity = ScriptCompanyMode::IsDeity(); + CompanyID owner = ScriptObject::GetCompany(); + + FindVehiclesWithOrder( + [is_deity, owner, type](const Vehicle *v) { return (is_deity || v->owner == owner) && v->type == type; }, + [dest](const Order *order) { return order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == dest; }, + [this](const Vehicle *v) { this->AddItem(v->index); } + ); } ScriptVehicleList_SharedOrders::ScriptVehicleList_SharedOrders(VehicleID vehicle_id) @@ -172,8 +181,9 @@ ScriptVehicleList_Group::ScriptVehicleList_Group(GroupID group_id) EnforceCompanyModeValid_Void(); if (!ScriptGroup::IsValidGroup((ScriptGroup::GroupID)group_id)) return; + CompanyID owner = ScriptObject::GetCompany(); for (const Vehicle *v : Vehicle::Iterate()) { - if (v->owner == ScriptObject::GetCompany() && v->IsPrimaryVehicle()) { + if (v->owner == owner && v->IsPrimaryVehicle()) { if (v->group_id == group_id) this->AddItem(v->index); } } @@ -184,8 +194,9 @@ ScriptVehicleList_DefaultGroup::ScriptVehicleList_DefaultGroup(ScriptVehicle::Ve EnforceCompanyModeValid_Void(); if (vehicle_type < ScriptVehicle::VT_RAIL || vehicle_type > ScriptVehicle::VT_AIR) return; + CompanyID owner = ScriptObject::GetCompany(); for (const Vehicle *v : Vehicle::Iterate()) { - if (v->owner == ScriptObject::GetCompany() && v->IsPrimaryVehicle()) { + if (v->owner == owner && v->IsPrimaryVehicle()) { if (v->type == (::VehicleType)vehicle_type && v->group_id == ScriptGroup::GROUP_DEFAULT) this->AddItem(v->index); } } diff --git a/src/script/api/script_vehiclelist.hpp b/src/script/api/script_vehiclelist.hpp index 942e50b7cea58..c629bc48d2a5d 100644 --- a/src/script/api/script_vehiclelist.hpp +++ b/src/script/api/script_vehiclelist.hpp @@ -45,7 +45,7 @@ class ScriptVehicleList : public ScriptList { * The constructor wrapper from Squirrel. */ ScriptVehicleList(HSQUIRRELVM vm); -#endif +#endif /* DOXYGEN_API */ }; /** diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 8bd0f82fb3eef..ffe8beb6bf229 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -87,10 +87,10 @@ static void ShowCustCurrency(); /** Window for displaying the textfile of a BaseSet. */ template struct BaseSetTextfileWindow : public TextfileWindow { - const TBaseSet* baseset; ///< View the textfile of this BaseSet. + const TBaseSet *baseset; ///< View the textfile of this BaseSet. StringID content_type; ///< STR_CONTENT_TYPE_xxx for title. - BaseSetTextfileWindow(TextfileType file_type, const TBaseSet* baseset, StringID content_type) : TextfileWindow(file_type), baseset(baseset), content_type(content_type) + BaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) : TextfileWindow(file_type), baseset(baseset), content_type(content_type) { auto textfile = this->baseset->GetTextfile(file_type); this->LoadTextfile(textfile.value(), BASESET_DIR); @@ -112,7 +112,7 @@ struct BaseSetTextfileWindow : public TextfileWindow { * @param content_type STR_CONTENT_TYPE_xxx for title. */ template -void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet* baseset, StringID content_type) +void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) { CloseWindowById(WC_TEXTFILE, file_type); new BaseSetTextfileWindow(file_type, baseset, content_type); @@ -688,7 +688,7 @@ struct GameOptionsWindow : Window { case WID_GO_BASE_GRF_DROPDOWN: if (_game_mode == GM_MENU) { CloseWindowByClass(WC_GRF_PARAMETERS); - auto* set = BaseGraphics::GetSet(index); + auto set = BaseGraphics::GetSet(index); BaseGraphics::SetSet(set); this->reload = true; this->InvalidateData(); @@ -697,7 +697,7 @@ struct GameOptionsWindow : Window { case WID_GO_BASE_SFX_DROPDOWN: if (_game_mode == GM_MENU) { - auto* set = BaseSounds::GetSet(index); + auto set = BaseSounds::GetSet(index); BaseSounds::ini_set = set->name; BaseSounds::SetSet(set); this->reload = true; @@ -1794,11 +1794,14 @@ static SettingsContainer &GetSettingsTree() { construction->Add(new SettingEntry("gui.link_terraform_toolbar")); construction->Add(new SettingEntry("gui.persistent_buildingtools")); - construction->Add(new SettingEntry("gui.quick_goto")); construction->Add(new SettingEntry("gui.default_rail_type")); + construction->Add(new SettingEntry("gui.semaphore_build_before")); + construction->Add(new SettingEntry("gui.signal_gui_mode")); + construction->Add(new SettingEntry("gui.cycle_signal_types")); + construction->Add(new SettingEntry("gui.drag_signals_fixed_distance")); + construction->Add(new SettingEntry("gui.auto_remove_signals")); } - interface->Add(new SettingEntry("gui.fast_forward_speed_limit")); interface->Add(new SettingEntry("gui.toolbar_pos")); interface->Add(new SettingEntry("gui.statusbar_pos")); interface->Add(new SettingEntry("gui.prefer_teamchat")); @@ -1836,13 +1839,6 @@ static SettingsContainer &GetSettingsTree() SettingsPage *company = main->Add(new SettingsPage(STR_CONFIG_SETTING_COMPANY)); { - company->Add(new SettingEntry("gui.semaphore_build_before")); - company->Add(new SettingEntry("gui.cycle_signal_types")); - company->Add(new SettingEntry("gui.signal_gui_mode")); - company->Add(new SettingEntry("gui.drag_signals_fixed_distance")); - company->Add(new SettingEntry("gui.auto_remove_signals")); - company->Add(new SettingEntry("gui.new_nonstop")); - company->Add(new SettingEntry("gui.stop_location")); company->Add(new SettingEntry("gui.starting_colour")); company->Add(new SettingEntry("gui.starting_colour_secondary")); company->Add(new SettingEntry("company.engine_renew")); @@ -1884,6 +1880,7 @@ static SettingsContainer &GetSettingsTree() SettingsPage *routing = vehicles->Add(new SettingsPage(STR_CONFIG_SETTING_VEHICLES_ROUTING)); { + routing->Add(new SettingEntry("vehicle.road_side")); routing->Add(new SettingEntry("pf.pathfinder_for_trains")); routing->Add(new SettingEntry("difficulty.line_reverse_mode")); routing->Add(new SettingEntry("pf.reverse_at_signals")); @@ -1892,8 +1889,12 @@ static SettingsContainer &GetSettingsTree() routing->Add(new SettingEntry("pf.pathfinder_for_ships")); } - vehicles->Add(new SettingEntry("order.no_servicing_if_no_breakdowns")); - vehicles->Add(new SettingEntry("order.serviceathelipad")); + SettingsPage *orders = vehicles->Add(new SettingsPage(STR_CONFIG_SETTING_VEHICLES_ORDERS)); + { + orders->Add(new SettingEntry("gui.new_nonstop")); + orders->Add(new SettingEntry("gui.quick_goto")); + orders->Add(new SettingEntry("gui.stop_location")); + } } SettingsPage *limitations = main->Add(new SettingsPage(STR_CONFIG_SETTING_LIMITATIONS)); @@ -1914,18 +1915,22 @@ static SettingsContainer &GetSettingsTree() limitations->Add(new SettingEntry("vehicle.max_train_length")); limitations->Add(new SettingEntry("station.station_spread")); limitations->Add(new SettingEntry("station.distant_join_stations")); + limitations->Add(new SettingEntry("station.modified_catchment")); limitations->Add(new SettingEntry("construction.road_stop_on_town_road")); limitations->Add(new SettingEntry("construction.road_stop_on_competitor_road")); limitations->Add(new SettingEntry("construction.crossing_with_competitor")); limitations->Add(new SettingEntry("vehicle.disable_elrails")); + limitations->Add(new SettingEntry("order.station_length_loading_penalty")); } SettingsPage *disasters = main->Add(new SettingsPage(STR_CONFIG_SETTING_ACCIDENTS)); { disasters->Add(new SettingEntry("difficulty.disasters")); disasters->Add(new SettingEntry("difficulty.economy")); - disasters->Add(new SettingEntry("difficulty.vehicle_breakdowns")); disasters->Add(new SettingEntry("vehicle.plane_crashes")); + disasters->Add(new SettingEntry("difficulty.vehicle_breakdowns")); + disasters->Add(new SettingEntry("order.no_servicing_if_no_breakdowns")); + disasters->Add(new SettingEntry("order.serviceathelipad")); } SettingsPage *genworld = main->Add(new SettingsPage(STR_CONFIG_SETTING_GENWORLD)); @@ -1939,18 +1944,17 @@ static SettingsContainer &GetSettingsTree() genworld->Add(new SettingEntry("game_creation.snow_line_height")); genworld->Add(new SettingEntry("game_creation.desert_coverage")); genworld->Add(new SettingEntry("game_creation.amount_of_rivers")); - genworld->Add(new SettingEntry("game_creation.tree_placer")); - genworld->Add(new SettingEntry("vehicle.road_side")); - genworld->Add(new SettingEntry("economy.larger_towns")); - genworld->Add(new SettingEntry("economy.initial_city_size")); - genworld->Add(new SettingEntry("economy.town_layout")); - genworld->Add(new SettingEntry("difficulty.industry_density")); - genworld->Add(new SettingEntry("gui.pause_on_newgame")); - genworld->Add(new SettingEntry("game_creation.ending_year")); } SettingsPage *environment = main->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT)); { + SettingsPage *time = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_TIME)); + { + time->Add(new SettingEntry("game_creation.ending_year")); + time->Add(new SettingEntry("gui.pause_on_newgame")); + time->Add(new SettingEntry("gui.fast_forward_speed_limit")); + } + SettingsPage *authorities = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES)); { authorities->Add(new SettingEntry("difficulty.town_council_tolerance")); @@ -1967,11 +1971,15 @@ static SettingsContainer &GetSettingsTree() towns->Add(new SettingEntry("economy.allow_town_roads")); towns->Add(new SettingEntry("economy.allow_town_level_crossings")); towns->Add(new SettingEntry("economy.found_town")); + towns->Add(new SettingEntry("economy.town_layout")); + towns->Add(new SettingEntry("economy.larger_towns")); + towns->Add(new SettingEntry("economy.initial_city_size")); towns->Add(new SettingEntry("economy.town_cargogen_mode")); } SettingsPage *industries = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES)); { + industries->Add(new SettingEntry("difficulty.industry_density")); industries->Add(new SettingEntry("construction.raw_industry_construction")); industries->Add(new SettingEntry("construction.industry_platform")); industries->Add(new SettingEntry("economy.multiple_industry_per_town")); @@ -1994,8 +2002,11 @@ static SettingsContainer &GetSettingsTree() cdist->Add(new SettingEntry("linkgraph.short_path_saturation")); } - environment->Add(new SettingEntry("station.modified_catchment")); - environment->Add(new SettingEntry("construction.extra_tree_placement")); + SettingsPage *trees = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_TREES)); + { + trees->Add(new SettingEntry("game_creation.tree_placer")); + trees->Add(new SettingEntry("construction.extra_tree_placement")); + } } SettingsPage *ai = main->Add(new SettingsPage(STR_CONFIG_SETTING_AI)); diff --git a/src/settings_type.h b/src/settings_type.h index 8ac229ed723de..dcae83b8149e9 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -501,6 +501,7 @@ struct OrderSettings { bool selectgoods; ///< only send the goods to station if a train has been there bool no_servicing_if_no_breakdowns; ///< don't send vehicles to depot when breakdowns are disabled bool serviceathelipad; ///< service helicopters at helipads automatically (no need to send to depot) + bool station_length_loading_penalty; ///< make trains longer than the station load more slowly }; /** Settings related to vehicles. */ @@ -645,7 +646,7 @@ extern VehicleDefaultSettings _old_vds; * Get the settings-object applicable for the current situation: the newgame settings * when we're in the main menu and otherwise the settings of the current game. */ -static inline GameSettings &GetGameSettings() +inline GameSettings &GetGameSettings() { return (_game_mode == GM_MENU) ? _settings_newgame : _settings_game; } diff --git a/src/signal_func.h b/src/signal_func.h index 621eeedc50c51..3521c43850c4e 100644 --- a/src/signal_func.h +++ b/src/signal_func.h @@ -19,7 +19,7 @@ * Maps a trackdir to the bit that stores its status in the map arrays, in the * direction along with the trackdir. */ -static inline byte SignalAlongTrackdir(Trackdir trackdir) +inline byte SignalAlongTrackdir(Trackdir trackdir) { extern const byte _signal_along_trackdir[TRACKDIR_END]; return _signal_along_trackdir[trackdir]; @@ -29,7 +29,7 @@ static inline byte SignalAlongTrackdir(Trackdir trackdir) * Maps a trackdir to the bit that stores its status in the map arrays, in the * direction against the trackdir. */ -static inline byte SignalAgainstTrackdir(Trackdir trackdir) +inline byte SignalAgainstTrackdir(Trackdir trackdir) { extern const byte _signal_against_trackdir[TRACKDIR_END]; return _signal_against_trackdir[trackdir]; @@ -39,7 +39,7 @@ static inline byte SignalAgainstTrackdir(Trackdir trackdir) * Maps a Track to the bits that store the status of the two signals that can * be present on the given track. */ -static inline byte SignalOnTrack(Track track) +inline byte SignalOnTrack(Track track) { extern const byte _signal_on_track[TRACK_END]; return _signal_on_track[track]; diff --git a/src/slope_func.h b/src/slope_func.h index afc49eeafa313..b6217ae035d30 100644 --- a/src/slope_func.h +++ b/src/slope_func.h @@ -73,7 +73,7 @@ static constexpr inline Slope RemoveHalftileSlope(Slope s) * @param s The #Slope to get the complement. * @return a complement Slope of the given slope. */ -static inline Slope ComplementSlope(Slope s) +inline Slope ComplementSlope(Slope s) { assert(!IsSteepSlope(s) && !IsHalftileSlope(s)); return s ^ SLOPE_ELEVATED; @@ -85,7 +85,7 @@ static inline Slope ComplementSlope(Slope s) * @param s The #Slope * @return true iff exactly one corner is raised */ -static inline bool IsSlopeWithOneCornerRaised(Slope s) +inline bool IsSlopeWithOneCornerRaised(Slope s) { return (s == SLOPE_W) || (s == SLOPE_S) || (s == SLOPE_E) || (s == SLOPE_N); } @@ -96,7 +96,7 @@ static inline bool IsSlopeWithOneCornerRaised(Slope s) * @param corner The #Corner. * @return The #Slope with corner "corner" raised. */ -static inline Slope SlopeWithOneCornerRaised(Corner corner) +inline Slope SlopeWithOneCornerRaised(Corner corner) { assert(IsValidCorner(corner)); return (Slope)(1 << corner); @@ -110,7 +110,7 @@ static inline Slope SlopeWithOneCornerRaised(Corner corner) * @param s The #Slope. * @return true iff the slope has a highest corner. */ -static inline bool HasSlopeHighestCorner(Slope s) +inline bool HasSlopeHighestCorner(Slope s) { s = RemoveHalftileSlope(s); return IsSteepSlope(s) || IsSlopeWithOneCornerRaised(s); @@ -123,7 +123,7 @@ static inline bool HasSlopeHighestCorner(Slope s) * @param s The #Slope. * @return Highest corner. */ -static inline Corner GetHighestSlopeCorner(Slope s) +inline Corner GetHighestSlopeCorner(Slope s) { switch (RemoveHalftileSlope(s)) { case SLOPE_W: @@ -181,7 +181,7 @@ static constexpr inline int GetSlopeMaxPixelZ(Slope s) * @param corner A #Corner. * @return The opposite corner to "corner". */ -static inline Corner OppositeCorner(Corner corner) +inline Corner OppositeCorner(Corner corner) { return (Corner)(corner ^ 2); } @@ -192,7 +192,7 @@ static inline Corner OppositeCorner(Corner corner) * @param s The #Slope * @return true iff exactly three corners are raised */ -static inline bool IsSlopeWithThreeCornersRaised(Slope s) +inline bool IsSlopeWithThreeCornersRaised(Slope s) { return !IsHalftileSlope(s) && !IsSteepSlope(s) && IsSlopeWithOneCornerRaised(ComplementSlope(s)); } @@ -203,7 +203,7 @@ static inline bool IsSlopeWithThreeCornersRaised(Slope s) * @param corner The #Corner. * @return The #Slope with all corners but "corner" raised. */ -static inline Slope SlopeWithThreeCornersRaised(Corner corner) +inline Slope SlopeWithThreeCornersRaised(Corner corner) { return ComplementSlope(SlopeWithOneCornerRaised(corner)); } @@ -214,7 +214,7 @@ static inline Slope SlopeWithThreeCornersRaised(Corner corner) * @param corner A #Corner. * @return The steep #Slope with "corner" as highest corner. */ -static inline Slope SteepSlope(Corner corner) +inline Slope SteepSlope(Corner corner) { return SLOPE_STEEP | SlopeWithThreeCornersRaised(OppositeCorner(corner)); } @@ -225,7 +225,7 @@ static inline Slope SteepSlope(Corner corner) * @param s The #Slope * @return true iff the slope is inclined. */ -static inline bool IsInclinedSlope(Slope s) +inline bool IsInclinedSlope(Slope s) { return (s == SLOPE_NW) || (s == SLOPE_SW) || (s == SLOPE_SE) || (s == SLOPE_NE); } @@ -236,7 +236,7 @@ static inline bool IsInclinedSlope(Slope s) * @param s A #Slope * @return The direction the slope goes up in. Or INVALID_DIAGDIR if the slope is not an inclined slope. */ -static inline DiagDirection GetInclinedSlopeDirection(Slope s) +inline DiagDirection GetInclinedSlopeDirection(Slope s) { switch (s) { case SLOPE_NE: return DIAGDIR_NE; @@ -253,7 +253,7 @@ static inline DiagDirection GetInclinedSlopeDirection(Slope s) * @param dir A #DiagDirection * @return The #Slope that goes up in direction dir. */ -static inline Slope InclinedSlope(DiagDirection dir) +inline Slope InclinedSlope(DiagDirection dir) { switch (dir) { case DIAGDIR_NE: return SLOPE_NE; @@ -284,7 +284,7 @@ static constexpr inline Slope HalftileSlope(Slope s, Corner corner) * @param f Maybe a #Foundation. * @return true iff f is a foundation. */ -static inline bool IsFoundation(Foundation f) +inline bool IsFoundation(Foundation f) { return f != FOUNDATION_NONE; } @@ -295,7 +295,7 @@ static inline bool IsFoundation(Foundation f) * @param f The #Foundation. * @return true iff f is a leveled foundation. */ -static inline bool IsLeveledFoundation(Foundation f) +inline bool IsLeveledFoundation(Foundation f) { return f == FOUNDATION_LEVELED; } @@ -306,7 +306,7 @@ static inline bool IsLeveledFoundation(Foundation f) * @param f The #Foundation. * @return true iff f is an inclined foundation. */ -static inline bool IsInclinedFoundation(Foundation f) +inline bool IsInclinedFoundation(Foundation f) { return (f == FOUNDATION_INCLINED_X) || (f == FOUNDATION_INCLINED_Y); } @@ -317,7 +317,7 @@ static inline bool IsInclinedFoundation(Foundation f) * @param f The #Foundation. * @return true iff f is a non-continuous foundation */ -static inline bool IsNonContinuousFoundation(Foundation f) +inline bool IsNonContinuousFoundation(Foundation f) { return IsInsideMM(f, FOUNDATION_STEEP_BOTH, FOUNDATION_HALFTILE_N + 1); } @@ -330,7 +330,7 @@ static inline bool IsNonContinuousFoundation(Foundation f) * @param f The #Foundation. * @return The #Corner with track. */ -static inline Corner GetHalftileFoundationCorner(Foundation f) +inline Corner GetHalftileFoundationCorner(Foundation f) { assert(IsInsideMM(f, FOUNDATION_HALFTILE_W, FOUNDATION_HALFTILE_N + 1)); return (Corner)(f - FOUNDATION_HALFTILE_W); @@ -342,7 +342,7 @@ static inline Corner GetHalftileFoundationCorner(Foundation f) * @param f The #Foundation. * @return true iff f is a special rail foundation for single horizontal/vertical track. */ -static inline bool IsSpecialRailFoundation(Foundation f) +inline bool IsSpecialRailFoundation(Foundation f) { return IsInsideMM(f, FOUNDATION_RAIL_W, FOUNDATION_RAIL_N + 1); } @@ -353,7 +353,7 @@ static inline bool IsSpecialRailFoundation(Foundation f) * @param f The #Foundation. * @return The #Corner with track. */ -static inline Corner GetRailFoundationCorner(Foundation f) +inline Corner GetRailFoundationCorner(Foundation f) { assert(IsSpecialRailFoundation(f)); return (Corner)(f - FOUNDATION_RAIL_W); @@ -366,7 +366,7 @@ static inline Corner GetRailFoundationCorner(Foundation f) * @param s The current #Slope. * @return The needed #Foundation. */ -static inline Foundation FlatteningFoundation(Slope s) +inline Foundation FlatteningFoundation(Slope s) { return (s == SLOPE_FLAT ? FOUNDATION_NONE : FOUNDATION_LEVELED); } @@ -377,7 +377,7 @@ static inline Foundation FlatteningFoundation(Slope s) * @param axis The #Axis. * @return The needed #Foundation. */ -static inline Foundation InclinedFoundation(Axis axis) +inline Foundation InclinedFoundation(Axis axis) { return (axis == AXIS_X ? FOUNDATION_INCLINED_X : FOUNDATION_INCLINED_Y); } @@ -388,7 +388,7 @@ static inline Foundation InclinedFoundation(Axis axis) * @param corner The #Corner with the track. * @return The wanted #Foundation. */ -static inline Foundation HalftileFoundation(Corner corner) +inline Foundation HalftileFoundation(Corner corner) { assert(IsValidCorner(corner)); return (Foundation)(FOUNDATION_HALFTILE_W + corner); @@ -400,7 +400,7 @@ static inline Foundation HalftileFoundation(Corner corner) * @param corner The #Corner with the track. * @return The wanted #Foundation. */ -static inline Foundation SpecialRailFoundation(Corner corner) +inline Foundation SpecialRailFoundation(Corner corner) { assert(IsValidCorner(corner)); return (Foundation)(FOUNDATION_RAIL_W + corner); @@ -412,7 +412,7 @@ static inline Foundation SpecialRailFoundation(Corner corner) * @param s The #Slope to get the offset for. * @return The sprite offset for this #Slope. */ -static inline uint SlopeToSpriteOffset(Slope s) +inline uint SlopeToSpriteOffset(Slope s) { extern const byte _slope_to_sprite_offset[32]; return _slope_to_sprite_offset[s]; diff --git a/src/sortlist_type.h b/src/sortlist_type.h index d9fc1705818cc..e0fd01c740189 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -96,7 +96,7 @@ class GUIList : public std::vector { /* If sort parameters are used then we require a reference to the params. */ template >* = nullptr> - GUIList(const P& params) : + GUIList(const P ¶ms) : sort_func_list(nullptr), filter_func_list(nullptr), flags(VL_NONE), diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp index f50a109dec93d..b4d08c4900375 100644 --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -36,7 +36,7 @@ using Microsoft::WRL::ComPtr; #include "../safeguards.h" // Definition of the "XAudio2Create" call used to initialise XAudio2 -typedef HRESULT(__stdcall *API_XAudio2Create)(_Outptr_ IXAudio2** ppXAudio2, UINT32 Flags, XAUDIO2_PROCESSOR XAudio2Processor); +typedef HRESULT(__stdcall *API_XAudio2Create)(_Outptr_ IXAudio2 **ppXAudio2, UINT32 Flags, XAUDIO2_PROCESSOR XAudio2Processor); static FSoundDriver_XAudio2 iFSoundDriver_XAudio2; @@ -51,7 +51,7 @@ class StreamingVoiceContext : public IXAudio2VoiceCallback char *buffer; public: - IXAudio2SourceVoice* SourceVoice; + IXAudio2SourceVoice *SourceVoice; StreamingVoiceContext(int bufferLength) { @@ -112,10 +112,10 @@ class StreamingVoiceContext : public IXAudio2VoiceCallback }; static HMODULE _xaudio_dll_handle; -static IXAudio2SourceVoice* _source_voice = nullptr; -static IXAudio2MasteringVoice* _mastering_voice = nullptr; +static IXAudio2SourceVoice *_source_voice = nullptr; +static IXAudio2MasteringVoice *_mastering_voice = nullptr; static ComPtr _xaudio2; -static StreamingVoiceContext* _voice_context = nullptr; +static StreamingVoiceContext *_voice_context = nullptr; /** Create XAudio2 context with SEH exception checking. */ static HRESULT CreateXAudio(API_XAudio2Create xAudio2Create) diff --git a/src/sprite.h b/src/sprite.h index 39d8e7f4e13bd..9c6c1bca649c9 100644 --- a/src/sprite.h +++ b/src/sprite.h @@ -86,7 +86,7 @@ void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32_t or * @param total_offset Spriteoffset from normal rail to current railtype. * @param newgrf_offset Startsprite of the Action1 to use. */ -static inline void DrawRailTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32_t total_offset, uint32_t newgrf_offset, PaletteID default_palette) +inline void DrawRailTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32_t total_offset, uint32_t newgrf_offset, PaletteID default_palette) { DrawCommonTileSeq(ti, dts, to, total_offset, newgrf_offset, default_palette, false); } @@ -96,7 +96,7 @@ static inline void DrawRailTileSeq(const struct TileInfo *ti, const DrawTileSpri * @param total_offset Spriteoffset from normal rail to current railtype. * @param newgrf_offset Startsprite of the Action1 to use. */ -static inline void DrawRailTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32_t total_offset, uint32_t newgrf_offset, PaletteID default_palette) +inline void DrawRailTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32_t total_offset, uint32_t newgrf_offset, PaletteID default_palette) { DrawCommonTileSeqInGUI(x, y, dts, total_offset, newgrf_offset, default_palette, false); } @@ -104,7 +104,7 @@ static inline void DrawRailTileSeqInGUI(int x, int y, const DrawTileSprites *dts /** * Draw TTD sprite sequence on tile. */ -static inline void DrawOrigTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, PaletteID default_palette) +inline void DrawOrigTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, PaletteID default_palette) { DrawCommonTileSeq(ti, dts, to, 0, 0, default_palette, false); } @@ -112,7 +112,7 @@ static inline void DrawOrigTileSeq(const struct TileInfo *ti, const DrawTileSpri /** * Draw TTD sprite sequence in GUI. */ -static inline void DrawOrigTileSeqInGUI(int x, int y, const DrawTileSprites *dts, PaletteID default_palette) +inline void DrawOrigTileSeqInGUI(int x, int y, const DrawTileSprites *dts, PaletteID default_palette) { DrawCommonTileSeqInGUI(x, y, dts, 0, 0, default_palette, false); } @@ -121,7 +121,7 @@ static inline void DrawOrigTileSeqInGUI(int x, int y, const DrawTileSprites *dts * Draw NewGRF industrytile or house sprite layout * @param stage Sprite inside the Action1 spritesets to use, i.e. construction stage. */ -static inline void DrawNewGRFTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, uint32_t stage, PaletteID default_palette) +inline void DrawNewGRFTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, uint32_t stage, PaletteID default_palette) { DrawCommonTileSeq(ti, dts, to, 0, stage, default_palette, true); } @@ -130,7 +130,7 @@ static inline void DrawNewGRFTileSeq(const struct TileInfo *ti, const DrawTileSp * Draw NewGRF object in GUI * @param stage Sprite inside the Action1 spritesets to use, i.e. construction stage. */ -static inline void DrawNewGRFTileSeqInGUI(int x, int y, const DrawTileSprites *dts, uint32_t stage, PaletteID default_palette) +inline void DrawNewGRFTileSeqInGUI(int x, int y, const DrawTileSprites *dts, uint32_t stage, PaletteID default_palette) { DrawCommonTileSeqInGUI(x, y, dts, 0, stage, default_palette, true); } @@ -146,7 +146,7 @@ static inline void DrawNewGRFTileSeqInGUI(int x, int y, const DrawTileSprites *d * @param default_pal The default recolour sprite to use (typically company colour resp. random industry/house colour) * @return The palette to use */ -static inline PaletteID SpriteLayoutPaletteTransform(SpriteID image, PaletteID pal, PaletteID default_pal) +inline PaletteID SpriteLayoutPaletteTransform(SpriteID image, PaletteID pal, PaletteID default_pal) { if (HasBit(image, PALETTE_MODIFIER_TRANSPARENT) || HasBit(image, PALETTE_MODIFIER_COLOUR)) { return (pal != 0 ? pal : default_pal); @@ -165,7 +165,7 @@ static inline PaletteID SpriteLayoutPaletteTransform(SpriteID image, PaletteID p * @param default_pal The default recolour sprite to use (typically company colour resp. random industry/house colour) * @return The palette to use */ -static inline PaletteID GroundSpritePaletteTransform(SpriteID image, PaletteID pal, PaletteID default_pal) +inline PaletteID GroundSpritePaletteTransform(SpriteID image, PaletteID pal, PaletteID default_pal) { if (HasBit(image, PALETTE_MODIFIER_COLOUR)) { return (pal != 0 ? pal : default_pal); diff --git a/src/spritecache.h b/src/spritecache.h index ea0f6073811c7..10a9df4149e6a 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -44,13 +44,13 @@ uint GetSpriteCountForFile(const std::string &filename, SpriteID begin, SpriteID uint GetMaxSpriteID(); -static inline const Sprite *GetSprite(SpriteID sprite, SpriteType type) +inline const Sprite *GetSprite(SpriteID sprite, SpriteType type) { assert(type != SpriteType::Recolour); return (Sprite*)GetRawSprite(sprite, type); } -static inline const byte *GetNonSprite(SpriteID sprite, SpriteType type) +inline const byte *GetNonSprite(SpriteID sprite, SpriteType type) { assert(type == SpriteType::Recolour); return (byte*)GetRawSprite(sprite, type); diff --git a/src/spritecache_internal.h b/src/spritecache_internal.h index 6664f980b2d5d..5acf7b893794b 100644 --- a/src/spritecache_internal.h +++ b/src/spritecache_internal.h @@ -31,7 +31,7 @@ struct SpriteCache { byte control_flags; ///< Control flags, see SpriteCacheCtrlFlags }; -static inline bool IsMapgenSpriteID(SpriteID sprite) +inline bool IsMapgenSpriteID(SpriteID sprite) { return IsInsideMM(sprite, SPR_MAPGEN_BEGIN, SPR_MAPGEN_END); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 4cbfab59792ef..ea2553bf77c6d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3164,8 +3164,8 @@ static void DrawTile_Station(TileInfo *ti) if (IsRoadStop(ti->tile)) { RoadType road_rt = GetRoadTypeRoad(ti->tile); RoadType tram_rt = GetRoadTypeTram(ti->tile); - const RoadTypeInfo* road_rti = road_rt == INVALID_ROADTYPE ? nullptr : GetRoadTypeInfo(road_rt); - const RoadTypeInfo* tram_rti = tram_rt == INVALID_ROADTYPE ? nullptr : GetRoadTypeInfo(tram_rt); + const RoadTypeInfo *road_rti = road_rt == INVALID_ROADTYPE ? nullptr : GetRoadTypeInfo(road_rt); + const RoadTypeInfo *tram_rti = tram_rt == INVALID_ROADTYPE ? nullptr : GetRoadTypeInfo(tram_rt); Axis axis = GetRoadStopDir(ti->tile) == DIAGDIR_NE ? AXIS_X : AXIS_Y; DiagDirection dir = GetRoadStopDir(ti->tile); diff --git a/src/station_func.h b/src/station_func.h index 426856931670e..cbc6a10920b8b 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -56,7 +56,7 @@ void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2); * @param num Number of station tiles. * @return Total cost. */ -static inline Money StationMaintenanceCost(uint32_t num) +inline Money StationMaintenanceCost(uint32_t num) { return (_price[PR_INFRASTRUCTURE_STATION] * num * (1 + IntSqrt(num))) >> 7; // 7 bits scaling. } diff --git a/src/station_map.h b/src/station_map.h index d1032d8ab85fd..b255da7a051b5 100644 --- a/src/station_map.h +++ b/src/station_map.h @@ -25,7 +25,7 @@ typedef byte StationGfx; ///< Index of station graphics. @see _station_display_d * @pre IsTileType(t, MP_STATION) * @return Station ID of the station at \a t */ -static inline StationID GetStationIndex(Tile t) +inline StationID GetStationIndex(Tile t) { assert(IsTileType(t, MP_STATION)); return (StationID)t.m2(); @@ -41,7 +41,7 @@ static const int GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET = 4; ///< The offset for the * @pre IsTileType(t, MP_STATION) * @return the station type */ -static inline StationType GetStationType(Tile t) +inline StationType GetStationType(Tile t) { assert(IsTileType(t, MP_STATION)); return (StationType)GB(t.m6(), 3, 3); @@ -53,7 +53,7 @@ static inline StationType GetStationType(Tile t) * @pre GetStationType(t) == STATION_TRUCK || GetStationType(t) == STATION_BUS * @return the road stop type */ -static inline RoadStopType GetRoadStopType(Tile t) +inline RoadStopType GetRoadStopType(Tile t) { assert(GetStationType(t) == STATION_TRUCK || GetStationType(t) == STATION_BUS); return GetStationType(t) == STATION_TRUCK ? ROADSTOP_TRUCK : ROADSTOP_BUS; @@ -65,7 +65,7 @@ static inline RoadStopType GetRoadStopType(Tile t) * @pre IsTileType(t, MP_STATION) * @return the station graphics */ -static inline StationGfx GetStationGfx(Tile t) +inline StationGfx GetStationGfx(Tile t) { assert(IsTileType(t, MP_STATION)); return t.m5(); @@ -77,7 +77,7 @@ static inline StationGfx GetStationGfx(Tile t) * @param gfx the new graphics * @pre IsTileType(t, MP_STATION) */ -static inline void SetStationGfx(Tile t, StationGfx gfx) +inline void SetStationGfx(Tile t, StationGfx gfx) { assert(IsTileType(t, MP_STATION)); t.m5() = gfx; @@ -89,7 +89,7 @@ static inline void SetStationGfx(Tile t, StationGfx gfx) * @pre IsTileType(t, MP_STATION) * @return true if and only if the tile is a rail station */ -static inline bool IsRailStation(Tile t) +inline bool IsRailStation(Tile t) { return GetStationType(t) == STATION_RAIL; } @@ -99,7 +99,7 @@ static inline bool IsRailStation(Tile t) * @param t the tile to get the information from * @return true if and only if the tile is a rail station */ -static inline bool IsRailStationTile(Tile t) +inline bool IsRailStationTile(Tile t) { return IsTileType(t, MP_STATION) && IsRailStation(t); } @@ -110,7 +110,7 @@ static inline bool IsRailStationTile(Tile t) * @pre IsTileType(t, MP_STATION) * @return true if and only if the tile is a rail waypoint */ -static inline bool IsRailWaypoint(Tile t) +inline bool IsRailWaypoint(Tile t) { return GetStationType(t) == STATION_WAYPOINT; } @@ -120,7 +120,7 @@ static inline bool IsRailWaypoint(Tile t) * @param t the tile to get the information from * @return true if and only if the tile is a rail waypoint */ -static inline bool IsRailWaypointTile(Tile t) +inline bool IsRailWaypointTile(Tile t) { return IsTileType(t, MP_STATION) && IsRailWaypoint(t); } @@ -132,7 +132,7 @@ static inline bool IsRailWaypointTile(Tile t) * @pre IsTileType(t, MP_STATION) * @return true if and only if the tile has rail */ -static inline bool HasStationRail(Tile t) +inline bool HasStationRail(Tile t) { return IsRailStation(t) || IsRailWaypoint(t); } @@ -143,7 +143,7 @@ static inline bool HasStationRail(Tile t) * @param t the tile to check * @return true if and only if the tile is a station tile and has rail */ -static inline bool HasStationTileRail(Tile t) +inline bool HasStationTileRail(Tile t) { return IsTileType(t, MP_STATION) && HasStationRail(t); } @@ -154,7 +154,7 @@ static inline bool HasStationTileRail(Tile t) * @pre IsTileType(t, MP_STATION) * @return true if and only if the tile is an airport */ -static inline bool IsAirport(Tile t) +inline bool IsAirport(Tile t) { return GetStationType(t) == STATION_AIRPORT; } @@ -164,7 +164,7 @@ static inline bool IsAirport(Tile t) * @param t the tile to get the information from * @return true if and only if the tile is an airport */ -static inline bool IsAirportTile(Tile t) +inline bool IsAirportTile(Tile t) { return IsTileType(t, MP_STATION) && IsAirport(t); } @@ -177,7 +177,7 @@ bool IsHangar(Tile t); * @pre IsTileType(t, MP_STATION) * @return \c true if station is a truck stop, \c false otherwise */ -static inline bool IsTruckStop(Tile t) +inline bool IsTruckStop(Tile t) { return GetStationType(t) == STATION_TRUCK; } @@ -188,7 +188,7 @@ static inline bool IsTruckStop(Tile t) * @pre IsTileType(t, MP_STATION) * @return \c true if station is a bus stop, \c false otherwise */ -static inline bool IsBusStop(Tile t) +inline bool IsBusStop(Tile t) { return GetStationType(t) == STATION_BUS; } @@ -199,7 +199,7 @@ static inline bool IsBusStop(Tile t) * @pre IsTileType(t, MP_STATION) * @return \c true if station at the tile is a bus top or a truck stop, \c false otherwise */ -static inline bool IsRoadStop(Tile t) +inline bool IsRoadStop(Tile t) { assert(IsTileType(t, MP_STATION)); return IsTruckStop(t) || IsBusStop(t); @@ -210,7 +210,7 @@ static inline bool IsRoadStop(Tile t) * @param t Tile to check * @return \c true if the tile is a station tile and a road stop */ -static inline bool IsRoadStopTile(Tile t) +inline bool IsRoadStopTile(Tile t) { return IsTileType(t, MP_STATION) && IsRoadStop(t); } @@ -220,7 +220,7 @@ static inline bool IsRoadStopTile(Tile t) * @param t Tile to check * @return \c true if the tile is a station tile and a bay road stop */ -static inline bool IsBayRoadStopTile(Tile t) +inline bool IsBayRoadStopTile(Tile t) { return IsRoadStopTile(t) && GetStationGfx(t) < GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET; } @@ -230,7 +230,7 @@ static inline bool IsBayRoadStopTile(Tile t) * @param t Tile to check * @return \c true if the tile is a station tile and a drive through road stop */ -static inline bool IsDriveThroughStopTile(Tile t) +inline bool IsDriveThroughStopTile(Tile t) { return IsRoadStopTile(t) && GetStationGfx(t) >= GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET; } @@ -243,7 +243,7 @@ StationGfx GetTranslatedAirportTileID(StationGfx gfx); * @pre IsAirport(t) * @return the station graphics */ -static inline StationGfx GetAirportGfx(Tile t) +inline StationGfx GetAirportGfx(Tile t) { assert(IsAirport(t)); return GetTranslatedAirportTileID(GetStationGfx(t)); @@ -255,7 +255,7 @@ static inline StationGfx GetAirportGfx(Tile t) * @pre IsRoadStopTile(t) * @return the direction of the entrance */ -static inline DiagDirection GetRoadStopDir(Tile t) +inline DiagDirection GetRoadStopDir(Tile t) { StationGfx gfx = GetStationGfx(t); assert(IsRoadStopTile(t)); @@ -272,7 +272,7 @@ static inline DiagDirection GetRoadStopDir(Tile t) * @pre IsTileType(t, MP_STATION) * @return \c true if the tile is an oilrig tile */ -static inline bool IsOilRig(Tile t) +inline bool IsOilRig(Tile t) { return GetStationType(t) == STATION_OILRIG; } @@ -283,7 +283,7 @@ static inline bool IsOilRig(Tile t) * @pre IsTileType(t, MP_STATION) * @return \c true if the tile is a dock */ -static inline bool IsDock(Tile t) +inline bool IsDock(Tile t) { return GetStationType(t) == STATION_DOCK; } @@ -293,7 +293,7 @@ static inline bool IsDock(Tile t) * @param t Tile to check * @return \c true if the tile is a dock */ -static inline bool IsDockTile(Tile t) +inline bool IsDockTile(Tile t) { return IsTileType(t, MP_STATION) && GetStationType(t) == STATION_DOCK; } @@ -304,7 +304,7 @@ static inline bool IsDockTile(Tile t) * @pre IsTileType(t, MP_STATION) * @return \c true if the tile is a buoy */ -static inline bool IsBuoy(Tile t) +inline bool IsBuoy(Tile t) { return GetStationType(t) == STATION_BUOY; } @@ -314,7 +314,7 @@ static inline bool IsBuoy(Tile t) * @param t Tile to check * @return \c true if the tile is a buoy */ -static inline bool IsBuoyTile(Tile t) +inline bool IsBuoyTile(Tile t) { return IsTileType(t, MP_STATION) && IsBuoy(t); } @@ -324,7 +324,7 @@ static inline bool IsBuoyTile(Tile t) * @param t Tile to check * @return \c true if the tile is an hangar */ -static inline bool IsHangarTile(Tile t) +inline bool IsHangarTile(Tile t) { return IsTileType(t, MP_STATION) && IsHangar(t); } @@ -335,7 +335,7 @@ static inline bool IsHangarTile(Tile t) * @param t Tile to check * @return \c true if the tile is blocked */ -static inline bool IsStationTileBlocked(Tile t) +inline bool IsStationTileBlocked(Tile t) { assert(HasStationRail(t)); return HasBit(t.m6(), 0); @@ -347,7 +347,7 @@ static inline bool IsStationTileBlocked(Tile t) * @param t the station tile * @param b the blocked state */ -static inline void SetStationTileBlocked(Tile t, bool b) +inline void SetStationTileBlocked(Tile t, bool b) { assert(HasStationRail(t)); SB(t.m6(), 0, 1, b ? 1 : 0); @@ -359,7 +359,7 @@ static inline void SetStationTileBlocked(Tile t, bool b) * @param t Tile to check * @return \c true if the tile can have catenary wires */ -static inline bool CanStationTileHaveWires(Tile t) +inline bool CanStationTileHaveWires(Tile t) { assert(HasStationRail(t)); return HasBit(t.m6(), 6); @@ -371,7 +371,7 @@ static inline bool CanStationTileHaveWires(Tile t) * @param t the station tile * @param b the catenary wires state */ -static inline void SetStationTileHaveWires(Tile t, bool b) +inline void SetStationTileHaveWires(Tile t, bool b) { assert(HasStationRail(t)); SB(t.m6(), 6, 1, b ? 1 : 0); @@ -383,7 +383,7 @@ static inline void SetStationTileHaveWires(Tile t, bool b) * @param t Tile to check * @return \c true if the tile can have catenary pylons */ -static inline bool CanStationTileHavePylons(Tile t) +inline bool CanStationTileHavePylons(Tile t) { assert(HasStationRail(t)); return HasBit(t.m6(), 7); @@ -395,7 +395,7 @@ static inline bool CanStationTileHavePylons(Tile t) * @param t the station tile * @param b the catenary pylons state */ -static inline void SetStationTileHavePylons(Tile t, bool b) +inline void SetStationTileHavePylons(Tile t, bool b) { assert(HasStationRail(t)); SB(t.m6(), 7, 1, b ? 1 : 0); @@ -407,7 +407,7 @@ static inline void SetStationTileHavePylons(Tile t, bool b) * @pre HasStationRail(t) * @return The direction of the rails on tile \a t. */ -static inline Axis GetRailStationAxis(Tile t) +inline Axis GetRailStationAxis(Tile t) { assert(HasStationRail(t)); return HasBit(GetStationGfx(t), 0) ? AXIS_Y : AXIS_X; @@ -419,7 +419,7 @@ static inline Axis GetRailStationAxis(Tile t) * @pre HasStationRail(t) * @return The rail track of the rails on tile \a t. */ -static inline Track GetRailStationTrack(Tile t) +inline Track GetRailStationTrack(Tile t) { return AxisToTrack(GetRailStationAxis(t)); } @@ -430,7 +430,7 @@ static inline Track GetRailStationTrack(Tile t) * @pre HasStationRail(t) * @return The trackbits of the rails on tile \a t. */ -static inline TrackBits GetRailStationTrackBits(Tile t) +inline TrackBits GetRailStationTrackBits(Tile t) { return AxisToTrackBits(GetRailStationAxis(t)); } @@ -448,7 +448,7 @@ static inline TrackBits GetRailStationTrackBits(Tile t) * @pre IsRailStationTile(station_tile) * @return true if the two tiles are compatible */ -static inline bool IsCompatibleTrainStationTile(Tile test_tile, Tile station_tile) +inline bool IsCompatibleTrainStationTile(Tile test_tile, Tile station_tile) { assert(IsRailStationTile(station_tile)); return IsRailStationTile(test_tile) && !IsStationTileBlocked(test_tile) && @@ -463,7 +463,7 @@ static inline bool IsCompatibleTrainStationTile(Tile test_tile, Tile station_til * @param t the station tile * @return reservation state */ -static inline bool HasStationReservation(Tile t) +inline bool HasStationReservation(Tile t) { assert(HasStationRail(t)); return HasBit(t.m6(), 2); @@ -475,7 +475,7 @@ static inline bool HasStationReservation(Tile t) * @param t the station tile * @param b the reservation state */ -static inline void SetRailStationReservation(Tile t, bool b) +inline void SetRailStationReservation(Tile t, bool b) { assert(HasStationRail(t)); SB(t.m6(), 2, 1, b ? 1 : 0); @@ -487,7 +487,7 @@ static inline void SetRailStationReservation(Tile t, bool b) * @param t the tile * @return reserved track bits */ -static inline TrackBits GetStationReservationTrackBits(Tile t) +inline TrackBits GetStationReservationTrackBits(Tile t) { return HasStationReservation(t) ? GetRailStationTrackBits(t) : TRACK_BIT_NONE; } @@ -499,7 +499,7 @@ static inline TrackBits GetStationReservationTrackBits(Tile t) * @pre \a t is the land part of the dock * @return The direction of the dock on tile \a t. */ -static inline DiagDirection GetDockDirection(Tile t) +inline DiagDirection GetDockDirection(Tile t) { StationGfx gfx = GetStationGfx(t); assert(IsDock(t) && gfx < GFX_DOCK_BASE_WATER_PART); @@ -509,7 +509,7 @@ static inline DiagDirection GetDockDirection(Tile t) /** * Check whether a dock tile is the tile on water. */ -static inline bool IsDockWaterPart(Tile t) +inline bool IsDockWaterPart(Tile t) { assert(IsDockTile(t)); StationGfx gfx = GetStationGfx(t); @@ -522,7 +522,7 @@ static inline bool IsDockWaterPart(Tile t) * @pre HasStationTileRail(t) * @return True if this station is part of a newgrf station. */ -static inline bool IsCustomStationSpecIndex(Tile t) +inline bool IsCustomStationSpecIndex(Tile t) { assert(HasStationTileRail(t)); return t.m4() != 0; @@ -534,7 +534,7 @@ static inline bool IsCustomStationSpecIndex(Tile t) * @param specindex The new spec. * @pre HasStationTileRail(t) */ -static inline void SetCustomStationSpecIndex(Tile t, byte specindex) +inline void SetCustomStationSpecIndex(Tile t, byte specindex) { assert(HasStationTileRail(t)); t.m4() = specindex; @@ -546,7 +546,7 @@ static inline void SetCustomStationSpecIndex(Tile t, byte specindex) * @pre HasStationTileRail(t) * @return The custom station spec of this tile. */ -static inline uint GetCustomStationSpecIndex(Tile t) +inline uint GetCustomStationSpecIndex(Tile t) { assert(HasStationTileRail(t)); return t.m4(); @@ -558,7 +558,7 @@ static inline uint GetCustomStationSpecIndex(Tile t) * @pre IsRoadStopTile(t) * @return True if this station is part of a newgrf station. */ -static inline bool IsCustomRoadStopSpecIndex(Tile t) +inline bool IsCustomRoadStopSpecIndex(Tile t) { assert(IsRoadStopTile(t)); return GB(t.m8(), 0, 6) != 0; @@ -570,7 +570,7 @@ static inline bool IsCustomRoadStopSpecIndex(Tile t) * @param specindex The new spec. * @pre IsRoadStopTile(t) */ -static inline void SetCustomRoadStopSpecIndex(Tile t, byte specindex) +inline void SetCustomRoadStopSpecIndex(Tile t, byte specindex) { assert(IsRoadStopTile(t)); SB(t.m8(), 0, 6, specindex); @@ -582,7 +582,7 @@ static inline void SetCustomRoadStopSpecIndex(Tile t, byte specindex) * @pre IsRoadStopTile(t) * @return The custom station spec of this tile. */ -static inline uint GetCustomRoadStopSpecIndex(Tile t) +inline uint GetCustomRoadStopSpecIndex(Tile t) { assert(IsRoadStopTile(t)); return GB(t.m8(), 0, 6); @@ -594,7 +594,7 @@ static inline uint GetCustomRoadStopSpecIndex(Tile t) * @param random_bits The random bits. * @pre IsTileType(t, MP_STATION) */ -static inline void SetStationTileRandomBits(Tile t, byte random_bits) +inline void SetStationTileRandomBits(Tile t, byte random_bits) { assert(IsTileType(t, MP_STATION)); SB(t.m3(), 4, 4, random_bits); @@ -606,7 +606,7 @@ static inline void SetStationTileRandomBits(Tile t, byte random_bits) * @pre IsTileType(t, MP_STATION) * @return The random bits for this station tile. */ -static inline byte GetStationTileRandomBits(Tile t) +inline byte GetStationTileRandomBits(Tile t) { assert(IsTileType(t, MP_STATION)); return GB(t.m3(), 4, 4); @@ -621,7 +621,7 @@ static inline byte GetStationTileRandomBits(Tile t) * @param section the StationGfx to be used for this tile * @param wc The water class of the station */ -static inline void MakeStation(Tile t, Owner o, StationID sid, StationType st, byte section, WaterClass wc = WATER_CLASS_INVALID) +inline void MakeStation(Tile t, Owner o, StationID sid, StationType st, byte section, WaterClass wc = WATER_CLASS_INVALID) { SetTileType(t, MP_STATION); SetTileOwner(t, o); @@ -646,7 +646,7 @@ static inline void MakeStation(Tile t, Owner o, StationID sid, StationType st, b * @param section the StationGfx to be used for this tile * @param rt the railtype of this tile */ -static inline void MakeRailStation(Tile t, Owner o, StationID sid, Axis a, byte section, RailType rt) +inline void MakeRailStation(Tile t, Owner o, StationID sid, Axis a, byte section, RailType rt) { MakeStation(t, o, sid, STATION_RAIL, section + a); SetRailType(t, rt); @@ -662,7 +662,7 @@ static inline void MakeRailStation(Tile t, Owner o, StationID sid, Axis a, byte * @param section the StationGfx to be used for this tile * @param rt the railtype of this tile */ -static inline void MakeRailWaypoint(Tile t, Owner o, StationID sid, Axis a, byte section, RailType rt) +inline void MakeRailWaypoint(Tile t, Owner o, StationID sid, Axis a, byte section, RailType rt) { MakeStation(t, o, sid, STATION_WAYPOINT, section + a); SetRailType(t, rt); @@ -679,7 +679,7 @@ static inline void MakeRailWaypoint(Tile t, Owner o, StationID sid, Axis a, byte * @param tram_rt the tram roadtype on this tile * @param d the direction of the roadstop */ -static inline void MakeRoadStop(Tile t, Owner o, StationID sid, RoadStopType rst, RoadType road_rt, RoadType tram_rt, DiagDirection d) +inline void MakeRoadStop(Tile t, Owner o, StationID sid, RoadStopType rst, RoadType road_rt, RoadType tram_rt, DiagDirection d) { MakeStation(t, o, sid, (rst == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK), d); SetRoadTypes(t, road_rt, tram_rt); @@ -699,7 +699,7 @@ static inline void MakeRoadStop(Tile t, Owner o, StationID sid, RoadStopType rst * @param tram_rt the tram roadtype on this tile * @param a the direction of the roadstop */ -static inline void MakeDriveThroughRoadStop(Tile t, Owner station, Owner road, Owner tram, StationID sid, RoadStopType rst, RoadType road_rt, RoadType tram_rt, Axis a) +inline void MakeDriveThroughRoadStop(Tile t, Owner station, Owner road, Owner tram, StationID sid, RoadStopType rst, RoadType road_rt, RoadType tram_rt, Axis a) { MakeStation(t, station, sid, (rst == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK), GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET + a); SetRoadTypes(t, road_rt, tram_rt); @@ -715,7 +715,7 @@ static inline void MakeDriveThroughRoadStop(Tile t, Owner station, Owner road, O * @param section the StationGfx to be used for this tile * @param wc the type of water on this tile */ -static inline void MakeAirport(Tile t, Owner o, StationID sid, byte section, WaterClass wc) +inline void MakeAirport(Tile t, Owner o, StationID sid, byte section, WaterClass wc) { MakeStation(t, o, sid, STATION_AIRPORT, section, wc); } @@ -726,7 +726,7 @@ static inline void MakeAirport(Tile t, Owner o, StationID sid, byte section, Wat * @param sid the station to which this tile belongs * @param wc the type of water on this tile */ -static inline void MakeBuoy(Tile t, StationID sid, WaterClass wc) +inline void MakeBuoy(Tile t, StationID sid, WaterClass wc) { /* Make the owner of the buoy tile the same as the current owner of the * water tile. In this way, we can reset the owner of the water to its @@ -742,7 +742,7 @@ static inline void MakeBuoy(Tile t, StationID sid, WaterClass wc) * @param d the direction of the dock * @param wc the type of water on this tile */ -static inline void MakeDock(Tile t, Owner o, StationID sid, DiagDirection d, WaterClass wc) +inline void MakeDock(Tile t, Owner o, StationID sid, DiagDirection d, WaterClass wc) { MakeStation(t, o, sid, STATION_DOCK, d); MakeStation(TileIndex(t) + TileOffsByDiagDir(d), o, sid, STATION_DOCK, GFX_DOCK_BASE_WATER_PART + DiagDirToAxis(d), wc); @@ -754,7 +754,7 @@ static inline void MakeDock(Tile t, Owner o, StationID sid, DiagDirection d, Wat * @param sid the station to which this tile belongs * @param wc the type of water on this tile */ -static inline void MakeOilrig(Tile t, StationID sid, WaterClass wc) +inline void MakeOilrig(Tile t, StationID sid, WaterClass wc) { MakeStation(t, OWNER_NONE, sid, STATION_OILRIG, 0, wc); } diff --git a/src/stdafx.h b/src/stdafx.h index 9dd3359696cf0..edfd4f02a95cb 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -411,7 +411,7 @@ void NORETURN AssertFailedError(int line, const char *file, const char *expressi * Version of the standard free that accepts const pointers. * @param ptr The data to free. */ -static inline void free(const void *ptr) +inline void free(const void *ptr) { free(const_cast(ptr)); } diff --git a/src/story_base.h b/src/story_base.h index 90f5c49d7d090..f7da7c9930090 100644 --- a/src/story_base.h +++ b/src/story_base.h @@ -113,7 +113,7 @@ enum StoryPageButtonCursor : byte { * @param wc The value to check * @return true if the given value is a valid StoryPageButtonCursor. */ -static inline bool IsValidStoryPageButtonCursor(StoryPageButtonCursor cursor) +inline bool IsValidStoryPageButtonCursor(StoryPageButtonCursor cursor) { return cursor < SPBC_END; } diff --git a/src/story_gui.cpp b/src/story_gui.cpp index a3232194ca99f..b3f4647337c26 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -534,7 +534,7 @@ struct StoryBookWindow : Window { * Internal event handler for when a page element is clicked. * @param pe The clicked page element. */ - void OnPageElementClick(const StoryPageElement& pe) + void OnPageElementClick(const StoryPageElement &pe) { switch (pe.type) { case SPET_TEXT: diff --git a/src/string_func.h b/src/string_func.h index 876659c43d8b0..ca23fdf18974c 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -54,7 +54,7 @@ struct CaseInsensitiveComparator { * @return true if the buffer starts with the terminating null-character or * if the given pointer points to nullptr else return false */ -static inline bool StrEmpty(const char *s) +inline bool StrEmpty(const char *s) { return s == nullptr || s[0] == '\0'; } @@ -66,7 +66,7 @@ static inline bool StrEmpty(const char *s) * @param maxlen The maximum size of the buffer * @return The length of the string */ -static inline size_t ttd_strnlen(const char *str, size_t maxlen) +inline size_t ttd_strnlen(const char *str, size_t maxlen) { const char *t; for (t = str; (size_t)(t - str) < maxlen && *t != '\0'; t++) {} @@ -82,7 +82,7 @@ size_t Utf8Encode(std::back_insert_iterator &buf, char32_t c); size_t Utf8TrimString(char *s, size_t maxlen); -static inline char32_t Utf8Consume(const char **s) +inline char32_t Utf8Consume(const char **s) { char32_t c; *s += Utf8Decode(&c, *s); @@ -90,7 +90,7 @@ static inline char32_t Utf8Consume(const char **s) } template -static inline char32_t Utf8Consume(Titr &s) +inline char32_t Utf8Consume(Titr &s) { char32_t c; s += Utf8Decode(&c, &*s); @@ -102,7 +102,7 @@ static inline char32_t Utf8Consume(Titr &s) * @param c Unicode character. * @return Length of UTF-8 encoding for character. */ -static inline int8_t Utf8CharLen(char32_t c) +inline int8_t Utf8CharLen(char32_t c) { if (c < 0x80) return 1; if (c < 0x800) return 2; @@ -121,7 +121,7 @@ static inline int8_t Utf8CharLen(char32_t c) * @param c char to query length of * @return requested size */ -static inline int8_t Utf8EncodedCharLen(char c) +inline int8_t Utf8EncodedCharLen(char c) { if (GB(c, 3, 5) == 0x1E) return 4; if (GB(c, 4, 4) == 0x0E) return 3; @@ -134,7 +134,7 @@ static inline int8_t Utf8EncodedCharLen(char c) /* Check if the given character is part of a UTF8 sequence */ -static inline bool IsUtf8Part(char c) +inline bool IsUtf8Part(char c) { return GB(c, 6, 2) == 2; } @@ -146,14 +146,14 @@ static inline bool IsUtf8Part(char c) * @note The function should not be used to determine the length of the previous * encoded char because it might be an invalid/corrupt start-sequence */ -static inline char *Utf8PrevChar(char *s) +inline char *Utf8PrevChar(char *s) { char *ret = s; while (IsUtf8Part(*--ret)) {} return ret; } -static inline const char *Utf8PrevChar(const char *s) +inline const char *Utf8PrevChar(const char *s) { const char *ret = s; while (IsUtf8Part(*--ret)) {} @@ -168,7 +168,7 @@ size_t Utf8StringLength(const std::string &str); * @param c The character to test. * @return True if the character is a lead surrogate code point. */ -static inline bool Utf16IsLeadSurrogate(uint c) +inline bool Utf16IsLeadSurrogate(uint c) { return c >= 0xD800 && c <= 0xDBFF; } @@ -178,7 +178,7 @@ static inline bool Utf16IsLeadSurrogate(uint c) * @param c The character to test. * @return True if the character is a lead surrogate code point. */ -static inline bool Utf16IsTrailSurrogate(uint c) +inline bool Utf16IsTrailSurrogate(uint c) { return c >= 0xDC00 && c <= 0xDFFF; } @@ -189,7 +189,7 @@ static inline bool Utf16IsTrailSurrogate(uint c) * @param trail Trail surrogate code point. * @return Decoded Unicode character. */ -static inline char32_t Utf16DecodeSurrogate(uint lead, uint trail) +inline char32_t Utf16DecodeSurrogate(uint lead, uint trail) { return 0x10000 + (((lead - 0xD800) << 10) | (trail - 0xDC00)); } @@ -199,7 +199,7 @@ static inline char32_t Utf16DecodeSurrogate(uint lead, uint trail) * @param c Pointer to one or two UTF-16 code points. * @return Decoded Unicode character. */ -static inline char32_t Utf16DecodeChar(const uint16_t *c) +inline char32_t Utf16DecodeChar(const uint16_t *c) { if (Utf16IsLeadSurrogate(c[0])) { return Utf16DecodeSurrogate(c[0], c[1]); @@ -214,7 +214,7 @@ static inline char32_t Utf16DecodeChar(const uint16_t *c) * @return true iff the character is used to influence * the text direction. */ -static inline bool IsTextDirectionChar(char32_t c) +inline bool IsTextDirectionChar(char32_t c) { switch (c) { case CHAR_TD_LRM: @@ -231,7 +231,7 @@ static inline bool IsTextDirectionChar(char32_t c) } } -static inline bool IsPrintable(char32_t c) +inline bool IsPrintable(char32_t c) { if (c < 0x20) return false; if (c < 0xE000) return true; @@ -246,7 +246,7 @@ static inline bool IsPrintable(char32_t c) * @return a boolean value whether 'c' is a whitespace character or not * @see http://www.fileformat.info/info/unicode/category/Zs/list.htm */ -static inline bool IsWhitespace(char32_t c) +inline bool IsWhitespace(char32_t c) { return c == 0x0020 /* SPACE */ || c == 0x3000; /* IDEOGRAPHIC SPACE */ } diff --git a/src/strings.cpp b/src/strings.cpp index a0f1387972dc9..456ea6ab3407e 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -81,15 +81,13 @@ StringParameter *StringParameters::GetNextParameterPointer() { assert(this->next_type == 0 || (SCC_CONTROL_START <= this->next_type && this->next_type <= SCC_CONTROL_END)); if (this->offset >= this->parameters.size()) { - Debug(misc, 0, "Trying to read invalid string parameter"); - return nullptr; + throw std::out_of_range("Trying to read invalid string parameter"); } auto ¶m = this->parameters[this->offset++]; if (param.type != 0 && param.type != this->next_type) { - Debug(misc, 0, "Trying to read string parameter with wrong type"); this->next_type = 0; - return nullptr; + throw std::out_of_range("Trying to read string parameter with wrong type"); } param.type = this->next_type; this->next_type = 0; @@ -903,732 +901,738 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara str_stack.push(str_arg); for (;;) { - while (!str_stack.empty() && (b = Utf8Consume(&str_stack.top())) == '\0') { - str_stack.pop(); - } - if (str_stack.empty()) break; - const char *&str = str_stack.top(); - - if (SCC_NEWGRF_FIRST <= b && b <= SCC_NEWGRF_LAST) { - /* We need to pass some stuff as it might be modified. */ - StringParameters remaining = args.GetRemainingParameters(); - b = RemapNewGRFStringControlCode(b, &str, remaining, dry_run); - if (b == 0) continue; - } + try { + while (!str_stack.empty() && (b = Utf8Consume(&str_stack.top())) == '\0') { + str_stack.pop(); + } + if (str_stack.empty()) break; + const char *&str = str_stack.top(); + + if (SCC_NEWGRF_FIRST <= b && b <= SCC_NEWGRF_LAST) { + /* We need to pass some stuff as it might be modified. */ + StringParameters remaining = args.GetRemainingParameters(); + b = RemapNewGRFStringControlCode(b, &str, remaining, dry_run); + if (b == 0) continue; + } - if (b < SCC_CONTROL_START || b > SCC_CONTROL_END) { - builder.Utf8Encode(b); - continue; - } + if (b < SCC_CONTROL_START || b > SCC_CONTROL_END) { + builder.Utf8Encode(b); + continue; + } - args.SetTypeOfNextParameter(b); - switch (b) { - case SCC_ENCODED: { - ArrayStringParameters<20> sub_args; - - char *p; - uint32_t stringid = std::strtoul(str, &p, 16); - if (*p != ':' && *p != '\0') { - while (*p != '\0') p++; - str = p; - builder += "(invalid SCC_ENCODED)"; - break; - } - if (stringid >= TAB_SIZE_GAMESCRIPT) { - while (*p != '\0') p++; - str = p; - builder += "(invalid StringID)"; - break; - } + args.SetTypeOfNextParameter(b); + switch (b) { + case SCC_ENCODED: { + ArrayStringParameters<20> sub_args; + + char *p; + uint32_t stringid = std::strtoul(str, &p, 16); + if (*p != ':' && *p != '\0') { + while (*p != '\0') p++; + str = p; + builder += "(invalid SCC_ENCODED)"; + break; + } + if (stringid >= TAB_SIZE_GAMESCRIPT) { + while (*p != '\0') p++; + str = p; + builder += "(invalid StringID)"; + break; + } - int i = 0; - while (*p != '\0' && i < 20) { - uint64_t param; - const char *s = ++p; - - /* Find the next value */ - bool instring = false; - bool escape = false; - for (;; p++) { - if (*p == '\\') { - escape = true; - continue; - } - if (*p == '"' && escape) { + int i = 0; + while (*p != '\0' && i < 20) { + uint64_t param; + const char *s = ++p; + + /* Find the next value */ + bool instring = false; + bool escape = false; + for (;; p++) { + if (*p == '\\') { + escape = true; + continue; + } + if (*p == '"' && escape) { + escape = false; + continue; + } escape = false; - continue; - } - escape = false; - if (*p == '"') { - instring = !instring; - continue; - } - if (instring) { - continue; - } + if (*p == '"') { + instring = !instring; + continue; + } + if (instring) { + continue; + } - if (*p == ':') break; - if (*p == '\0') break; - } + if (*p == ':') break; + if (*p == '\0') break; + } - if (*s != '"') { - /* Check if we want to look up another string */ - char32_t l; - size_t len = Utf8Decode(&l, s); - bool lookup = (l == SCC_ENCODED); - if (lookup) s += len; - - param = std::strtoull(s, &p, 16); - - if (lookup) { - if (param >= TAB_SIZE_GAMESCRIPT) { - while (*p != '\0') p++; - str = p; - builder += "(invalid sub-StringID)"; - break; + if (*s != '"') { + /* Check if we want to look up another string */ + char32_t l; + size_t len = Utf8Decode(&l, s); + bool lookup = (l == SCC_ENCODED); + if (lookup) s += len; + + param = std::strtoull(s, &p, 16); + + if (lookup) { + if (param >= TAB_SIZE_GAMESCRIPT) { + while (*p != '\0') p++; + str = p; + builder += "(invalid sub-StringID)"; + break; + } + param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, param); } - param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, param); - } - sub_args.SetParam(i++, param); - } else { - s++; // skip the leading \" - sub_args.SetParam(i++, std::string(s, p - s - 1)); // also skip the trailing \". + sub_args.SetParam(i++, param); + } else { + s++; // skip the leading \" + sub_args.SetParam(i++, std::string(s, p - s - 1)); // also skip the trailing \". + } } + /* If we didn't error out, we can actually print the string. */ + if (*str != '\0') { + str = p; + GetStringWithArgs(builder, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), sub_args, true); + } + break; } - /* If we didn't error out, we can actually print the string. */ - if (*str != '\0') { - str = p; - GetStringWithArgs(builder, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), sub_args, true); - } - break; - } - case SCC_NEWGRF_STRINL: { - StringID substr = Utf8Consume(&str); - str_stack.push(GetStringPtr(substr)); - break; - } + case SCC_NEWGRF_STRINL: { + StringID substr = Utf8Consume(&str); + str_stack.push(GetStringPtr(substr)); + break; + } - case SCC_NEWGRF_PRINT_WORD_STRING_ID: { - StringID substr = args.GetNextParameter(); - str_stack.push(GetStringPtr(substr)); - case_index = next_substr_case_index; - next_substr_case_index = 0; - break; - } + case SCC_NEWGRF_PRINT_WORD_STRING_ID: { + StringID substr = args.GetNextParameter(); + str_stack.push(GetStringPtr(substr)); + case_index = next_substr_case_index; + next_substr_case_index = 0; + break; + } - case SCC_GENDER_LIST: { // {G 0 Der Die Das} - /* First read the meta data from the language file. */ - size_t offset = orig_offset + (byte)*str++; - int gender = 0; - if (!dry_run && args.GetTypeAtOffset(offset) != 0) { - /* Now we need to figure out what text to resolve, i.e. - * what do we need to draw? So get the actual raw string - * first using the control code to get said string. */ - char input[4 + 1]; - char *p = input + Utf8Encode(input, args.GetTypeAtOffset(offset)); - *p = '\0'; - - /* The gender is stored at the start of the formatted string. */ - bool old_sgd = _scan_for_gender_data; - _scan_for_gender_data = true; - std::string buffer; - StringBuilder tmp_builder(buffer); - StringParameters tmp_params = args.GetRemainingParameters(offset); - FormatString(tmp_builder, input, tmp_params); - _scan_for_gender_data = old_sgd; - - /* And determine the string. */ - const char *s = buffer.c_str(); - char32_t c = Utf8Consume(&s); - /* Does this string have a gender, if so, set it */ - if (c == SCC_GENDER_INDEX) gender = (byte)s[0]; + case SCC_GENDER_LIST: { // {G 0 Der Die Das} + /* First read the meta data from the language file. */ + size_t offset = orig_offset + (byte)*str++; + int gender = 0; + if (!dry_run && args.GetTypeAtOffset(offset) != 0) { + /* Now we need to figure out what text to resolve, i.e. + * what do we need to draw? So get the actual raw string + * first using the control code to get said string. */ + char input[4 + 1]; + char *p = input + Utf8Encode(input, args.GetTypeAtOffset(offset)); + *p = '\0'; + + /* The gender is stored at the start of the formatted string. */ + bool old_sgd = _scan_for_gender_data; + _scan_for_gender_data = true; + std::string buffer; + StringBuilder tmp_builder(buffer); + StringParameters tmp_params = args.GetRemainingParameters(offset); + FormatString(tmp_builder, input, tmp_params); + _scan_for_gender_data = old_sgd; + + /* And determine the string. */ + const char *s = buffer.c_str(); + char32_t c = Utf8Consume(&s); + /* Does this string have a gender, if so, set it */ + if (c == SCC_GENDER_INDEX) gender = (byte)s[0]; + } + str = ParseStringChoice(str, gender, builder); + break; } - str = ParseStringChoice(str, gender, builder); - break; - } - /* This sets up the gender for the string. - * We just ignore this one. It's used in {G 0 Der Die Das} to determine the case. */ - case SCC_GENDER_INDEX: // {GENDER 0} - if (_scan_for_gender_data) { - builder.Utf8Encode(SCC_GENDER_INDEX); - builder += *str++; - } else { - str++; + /* This sets up the gender for the string. + * We just ignore this one. It's used in {G 0 Der Die Das} to determine the case. */ + case SCC_GENDER_INDEX: // {GENDER 0} + if (_scan_for_gender_data) { + builder.Utf8Encode(SCC_GENDER_INDEX); + builder += *str++; + } else { + str++; + } + break; + + case SCC_PLURAL_LIST: { // {P} + int plural_form = *str++; // contains the plural form for this string + size_t offset = orig_offset + (byte)*str++; + int64_t v = args.GetParam(offset); // contains the number that determines plural + str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), builder); + break; } - break; - - case SCC_PLURAL_LIST: { // {P} - int plural_form = *str++; // contains the plural form for this string - size_t offset = orig_offset + (byte)*str++; - int64_t v = args.GetParam(offset); // contains the number that determines plural - str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), builder); - break; - } - case SCC_ARG_INDEX: { // Move argument pointer - args.SetOffset(orig_offset + (byte)*str++); - break; - } + case SCC_ARG_INDEX: { // Move argument pointer + args.SetOffset(orig_offset + (byte)*str++); + break; + } - case SCC_SET_CASE: { // {SET_CASE} - /* This is a pseudo command, it's outputted when someone does {STRING.ack} - * The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */ - next_substr_case_index = (byte)*str++; - break; - } + case SCC_SET_CASE: { // {SET_CASE} + /* This is a pseudo command, it's outputted when someone does {STRING.ack} + * The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */ + next_substr_case_index = (byte)*str++; + break; + } - case SCC_SWITCH_CASE: { // {Used to implement case switching} - /* <0x9E> - * Each LEN is printed using 2 bytes in big endian order. */ - uint num = (byte)*str++; - while (num) { - if ((byte)str[0] == case_index) { - /* Found the case, adjust str pointer and continue */ - str += 3; - break; + case SCC_SWITCH_CASE: { // {Used to implement case switching} + /* <0x9E> + * Each LEN is printed using 2 bytes in big endian order. */ + uint num = (byte)*str++; + while (num) { + if ((byte)str[0] == case_index) { + /* Found the case, adjust str pointer and continue */ + str += 3; + break; + } + /* Otherwise skip to the next case */ + str += 3 + (str[1] << 8) + str[2]; + num--; } - /* Otherwise skip to the next case */ - str += 3 + (str[1] << 8) + str[2]; - num--; + break; } - break; - } - case SCC_REVISION: // {REV} - builder += _openttd_revision; - break; + case SCC_REVISION: // {REV} + builder += _openttd_revision; + break; - case SCC_RAW_STRING_POINTER: { // {RAW_STRING} - const char *raw_string = args.GetNextParameterString(); - /* raw_string can be(come) nullptr when the parameter is out of range and 0 is returned instead. */ - if (raw_string == nullptr) { - builder += "(invalid RAW_STRING parameter)"; + case SCC_RAW_STRING_POINTER: { // {RAW_STRING} + const char *raw_string = args.GetNextParameterString(); + /* raw_string can be nullptr. */ + if (raw_string == nullptr) { + builder += "(invalid RAW_STRING parameter)"; + break; + } + FormatString(builder, raw_string, args); break; } - FormatString(builder, raw_string, args); - break; - } - case SCC_STRING: {// {STRING} - StringID string_id = args.GetNextParameter(); - if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; - /* It's prohibited for the included string to consume any arguments. */ - StringParameters tmp_params(args, 0); - GetStringWithArgs(builder, string_id, tmp_params, next_substr_case_index, game_script); - next_substr_case_index = 0; - break; - } + case SCC_STRING: {// {STRING} + StringID string_id = args.GetNextParameter(); + if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; + /* It's prohibited for the included string to consume any arguments. */ + StringParameters tmp_params(args, game_script ? args.GetDataLeft() : 0); + GetStringWithArgs(builder, string_id, tmp_params, next_substr_case_index, game_script); + next_substr_case_index = 0; + break; + } - case SCC_STRING1: - case SCC_STRING2: - case SCC_STRING3: - case SCC_STRING4: - case SCC_STRING5: - case SCC_STRING6: - case SCC_STRING7: { // {STRING1..7} - /* Strings that consume arguments */ - StringID string_id = args.GetNextParameter(); - if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; - uint size = b - SCC_STRING1 + 1; - if (game_script && size > args.GetDataLeft()) { - builder += "(too many parameters)"; - } else { - StringParameters sub_args(args, size); - GetStringWithArgs(builder, string_id, sub_args, next_substr_case_index, game_script); + case SCC_STRING1: + case SCC_STRING2: + case SCC_STRING3: + case SCC_STRING4: + case SCC_STRING5: + case SCC_STRING6: + case SCC_STRING7: { // {STRING1..7} + /* Strings that consume arguments */ + StringID string_id = args.GetNextParameter(); + if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; + uint size = b - SCC_STRING1 + 1; + if (game_script && size > args.GetDataLeft()) { + builder += "(too many parameters)"; + } else { + StringParameters sub_args(args, game_script ? args.GetDataLeft() : size); + GetStringWithArgs(builder, string_id, sub_args, next_substr_case_index, game_script); + args.AdvanceOffset(size); + } + next_substr_case_index = 0; + break; } - next_substr_case_index = 0; - break; - } - case SCC_COMMA: // {COMMA} - FormatCommaNumber(builder, args.GetNextParameter()); - break; + case SCC_COMMA: // {COMMA} + FormatCommaNumber(builder, args.GetNextParameter()); + break; - case SCC_DECIMAL: { // {DECIMAL} - int64_t number = args.GetNextParameter(); - int digits = args.GetNextParameter(); - FormatCommaNumber(builder, number, digits); - break; - } + case SCC_DECIMAL: { // {DECIMAL} + int64_t number = args.GetNextParameter(); + int digits = args.GetNextParameter(); + FormatCommaNumber(builder, number, digits); + break; + } - case SCC_NUM: // {NUM} - FormatNoCommaNumber(builder, args.GetNextParameter()); - break; + case SCC_NUM: // {NUM} + FormatNoCommaNumber(builder, args.GetNextParameter()); + break; - case SCC_ZEROFILL_NUM: { // {ZEROFILL_NUM} - int64_t num = args.GetNextParameter(); - FormatZerofillNumber(builder, num, args.GetNextParameter()); - break; - } + case SCC_ZEROFILL_NUM: { // {ZEROFILL_NUM} + int64_t num = args.GetNextParameter(); + FormatZerofillNumber(builder, num, args.GetNextParameter()); + break; + } - case SCC_HEX: // {HEX} - FormatHexNumber(builder, args.GetNextParameter()); - break; - - case SCC_BYTES: // {BYTES} - FormatBytes(builder, args.GetNextParameter()); - break; - - case SCC_CARGO_TINY: { // {CARGO_TINY} - /* Tiny description of cargotypes. Layout: - * param 1: cargo type - * param 2: cargo count */ - CargoID cargo = args.GetNextParameter(); - if (cargo >= CargoSpec::GetArraySize()) break; - - StringID cargo_str = CargoSpec::Get(cargo)->units_volume; - int64_t amount = 0; - switch (cargo_str) { - case STR_TONS: - amount = _units_weight[_settings_game.locale.units_weight].c.ToDisplay(args.GetNextParameter()); - break; + case SCC_HEX: // {HEX} + FormatHexNumber(builder, args.GetNextParameter()); + break; - case STR_LITERS: - amount = _units_volume[_settings_game.locale.units_volume].c.ToDisplay(args.GetNextParameter()); - break; + case SCC_BYTES: // {BYTES} + FormatBytes(builder, args.GetNextParameter()); + break; - default: { - amount = args.GetNextParameter(); - break; + case SCC_CARGO_TINY: { // {CARGO_TINY} + /* Tiny description of cargotypes. Layout: + * param 1: cargo type + * param 2: cargo count */ + CargoID cargo = args.GetNextParameter(); + if (cargo >= CargoSpec::GetArraySize()) break; + + StringID cargo_str = CargoSpec::Get(cargo)->units_volume; + int64_t amount = 0; + switch (cargo_str) { + case STR_TONS: + amount = _units_weight[_settings_game.locale.units_weight].c.ToDisplay(args.GetNextParameter()); + break; + + case STR_LITERS: + amount = _units_volume[_settings_game.locale.units_volume].c.ToDisplay(args.GetNextParameter()); + break; + + default: { + amount = args.GetNextParameter(); + break; + } } - } - FormatCommaNumber(builder, amount); - break; - } + FormatCommaNumber(builder, amount); + break; + } - case SCC_CARGO_SHORT: { // {CARGO_SHORT} - /* Short description of cargotypes. Layout: - * param 1: cargo type - * param 2: cargo count */ - CargoID cargo = args.GetNextParameter(); - if (cargo >= CargoSpec::GetArraySize()) break; - - StringID cargo_str = CargoSpec::Get(cargo)->units_volume; - switch (cargo_str) { - case STR_TONS: { - assert(_settings_game.locale.units_weight < lengthof(_units_weight)); - const auto &x = _units_weight[_settings_game.locale.units_weight]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.l), tmp_params); - break; - } + case SCC_CARGO_SHORT: { // {CARGO_SHORT} + /* Short description of cargotypes. Layout: + * param 1: cargo type + * param 2: cargo count */ + CargoID cargo = args.GetNextParameter(); + if (cargo >= CargoSpec::GetArraySize()) break; + + StringID cargo_str = CargoSpec::Get(cargo)->units_volume; + switch (cargo_str) { + case STR_TONS: { + assert(_settings_game.locale.units_weight < lengthof(_units_weight)); + const auto &x = _units_weight[_settings_game.locale.units_weight]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.l), tmp_params); + break; + } - case STR_LITERS: { - assert(_settings_game.locale.units_volume < lengthof(_units_volume)); - const auto &x = _units_volume[_settings_game.locale.units_volume]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.l), tmp_params); - break; - } + case STR_LITERS: { + assert(_settings_game.locale.units_volume < lengthof(_units_volume)); + const auto &x = _units_volume[_settings_game.locale.units_volume]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.l), tmp_params); + break; + } - default: { - auto tmp_params = MakeParameters(args.GetNextParameter()); - GetStringWithArgs(builder, cargo_str, tmp_params); - break; + default: { + auto tmp_params = MakeParameters(args.GetNextParameter()); + GetStringWithArgs(builder, cargo_str, tmp_params); + break; + } } + break; } - break; - } - case SCC_CARGO_LONG: { // {CARGO_LONG} - /* First parameter is cargo type, second parameter is cargo count */ - CargoID cargo = args.GetNextParameter(); - if (IsValidCargoID(cargo) && cargo >= CargoSpec::GetArraySize()) break; + case SCC_CARGO_LONG: { // {CARGO_LONG} + /* First parameter is cargo type, second parameter is cargo count */ + CargoID cargo = args.GetNextParameter(); + if (IsValidCargoID(cargo) && cargo >= CargoSpec::GetArraySize()) break; - StringID cargo_str = !IsValidCargoID(cargo) ? STR_QUANTITY_N_A : CargoSpec::Get(cargo)->quantifier; - auto tmp_args = MakeParameters(args.GetNextParameter()); - GetStringWithArgs(builder, cargo_str, tmp_args); - break; - } + StringID cargo_str = !IsValidCargoID(cargo) ? STR_QUANTITY_N_A : CargoSpec::Get(cargo)->quantifier; + auto tmp_args = MakeParameters(args.GetNextParameter()); + GetStringWithArgs(builder, cargo_str, tmp_args); + break; + } - case SCC_CARGO_LIST: { // {CARGO_LIST} - CargoTypes cmask = args.GetNextParameter(); - bool first = true; + case SCC_CARGO_LIST: { // {CARGO_LIST} + CargoTypes cmask = args.GetNextParameter(); + bool first = true; - for (const auto &cs : _sorted_cargo_specs) { - if (!HasBit(cmask, cs->Index())) continue; + for (const auto &cs : _sorted_cargo_specs) { + if (!HasBit(cmask, cs->Index())) continue; - if (first) { - first = false; - } else { - /* Add a comma if this is not the first item */ - builder += ", "; - } + if (first) { + first = false; + } else { + /* Add a comma if this is not the first item */ + builder += ", "; + } - GetStringWithArgs(builder, cs->name, args, next_substr_case_index, game_script); - } + GetStringWithArgs(builder, cs->name, args, next_substr_case_index, game_script); + } - /* If first is still true then no cargo is accepted */ - if (first) GetStringWithArgs(builder, STR_JUST_NOTHING, args, next_substr_case_index, game_script); + /* If first is still true then no cargo is accepted */ + if (first) GetStringWithArgs(builder, STR_JUST_NOTHING, args, next_substr_case_index, game_script); - next_substr_case_index = 0; - break; - } + next_substr_case_index = 0; + break; + } - case SCC_CURRENCY_SHORT: // {CURRENCY_SHORT} - FormatGenericCurrency(builder, _currency, args.GetNextParameter(), true); - break; - - case SCC_CURRENCY_LONG: // {CURRENCY_LONG} - FormatGenericCurrency(builder, _currency, args.GetNextParameter(), false); - break; - - case SCC_DATE_TINY: // {DATE_TINY} - FormatTinyOrISODate(builder, args.GetNextParameter(), STR_FORMAT_DATE_TINY); - break; - - case SCC_DATE_SHORT: // {DATE_SHORT} - FormatMonthAndYear(builder, args.GetNextParameter(), next_substr_case_index); - next_substr_case_index = 0; - break; - - case SCC_DATE_LONG: // {DATE_LONG} - FormatYmdString(builder, args.GetNextParameter(), next_substr_case_index); - next_substr_case_index = 0; - break; - - case SCC_DATE_ISO: // {DATE_ISO} - FormatTinyOrISODate(builder, args.GetNextParameter(), STR_FORMAT_DATE_ISO); - break; - - case SCC_FORCE: { // {FORCE} - assert(_settings_game.locale.units_force < lengthof(_units_force)); - const auto &x = _units_force[_settings_game.locale.units_force]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_CURRENCY_SHORT: // {CURRENCY_SHORT} + FormatGenericCurrency(builder, _currency, args.GetNextParameter(), true); + break; - case SCC_HEIGHT: { // {HEIGHT} - assert(_settings_game.locale.units_height < lengthof(_units_height)); - const auto &x = _units_height[_settings_game.locale.units_height]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_CURRENCY_LONG: // {CURRENCY_LONG} + FormatGenericCurrency(builder, _currency, args.GetNextParameter(), false); + break; - case SCC_POWER: { // {POWER} - assert(_settings_game.locale.units_power < lengthof(_units_power)); - const auto &x = _units_power[_settings_game.locale.units_power]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_DATE_TINY: // {DATE_TINY} + FormatTinyOrISODate(builder, args.GetNextParameter(), STR_FORMAT_DATE_TINY); + break; - case SCC_POWER_TO_WEIGHT: { // {POWER_TO_WEIGHT} - auto setting = _settings_game.locale.units_power * 3u + _settings_game.locale.units_weight; - assert(setting < lengthof(_units_power_to_weight)); - const auto &x = _units_power_to_weight[setting]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_DATE_SHORT: // {DATE_SHORT} + FormatMonthAndYear(builder, args.GetNextParameter(), next_substr_case_index); + next_substr_case_index = 0; + break; - case SCC_VELOCITY: { // {VELOCITY} - int64_t arg = args.GetNextParameter(); - // Unpack vehicle type from packed argument to get desired units. - VehicleType vt = static_cast(GB(arg, 56, 8)); - byte units = GetVelocityUnits(vt); - assert(units < lengthof(_units_velocity)); - const auto &x = _units_velocity[units]; - auto tmp_params = MakeParameters(ConvertKmhishSpeedToDisplaySpeed(GB(arg, 0, 56), vt), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_DATE_LONG: // {DATE_LONG} + FormatYmdString(builder, args.GetNextParameter(), next_substr_case_index); + next_substr_case_index = 0; + break; - case SCC_VOLUME_SHORT: { // {VOLUME_SHORT} - assert(_settings_game.locale.units_volume < lengthof(_units_volume)); - const auto &x = _units_volume[_settings_game.locale.units_volume]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_DATE_ISO: // {DATE_ISO} + FormatTinyOrISODate(builder, args.GetNextParameter(), STR_FORMAT_DATE_ISO); + break; - case SCC_VOLUME_LONG: { // {VOLUME_LONG} - assert(_settings_game.locale.units_volume < lengthof(_units_volume)); - const auto &x = _units_volume[_settings_game.locale.units_volume]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.l), tmp_params); - break; - } + case SCC_FORCE: { // {FORCE} + assert(_settings_game.locale.units_force < lengthof(_units_force)); + const auto &x = _units_force[_settings_game.locale.units_force]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); + break; + } - case SCC_WEIGHT_SHORT: { // {WEIGHT_SHORT} - assert(_settings_game.locale.units_weight < lengthof(_units_weight)); - const auto &x = _units_weight[_settings_game.locale.units_weight]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.s), tmp_params); - break; - } + case SCC_HEIGHT: { // {HEIGHT} + assert(_settings_game.locale.units_height < lengthof(_units_height)); + const auto &x = _units_height[_settings_game.locale.units_height]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); + break; + } - case SCC_WEIGHT_LONG: { // {WEIGHT_LONG} - assert(_settings_game.locale.units_weight < lengthof(_units_weight)); - const auto &x = _units_weight[_settings_game.locale.units_weight]; - auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); - FormatString(builder, GetStringPtr(x.l), tmp_params); - break; - } + case SCC_POWER: { // {POWER} + assert(_settings_game.locale.units_power < lengthof(_units_power)); + const auto &x = _units_power[_settings_game.locale.units_power]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); + break; + } - case SCC_COMPANY_NAME: { // {COMPANY} - const Company *c = Company::GetIfValid(args.GetNextParameter()); - if (c == nullptr) break; + case SCC_POWER_TO_WEIGHT: { // {POWER_TO_WEIGHT} + auto setting = _settings_game.locale.units_power * 3u + _settings_game.locale.units_weight; + assert(setting < lengthof(_units_power_to_weight)); + const auto &x = _units_power_to_weight[setting]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); + break; + } - if (!c->name.empty()) { - auto tmp_params = MakeParameters(c->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - auto tmp_params = MakeParameters(c->name_2); - GetStringWithArgs(builder, c->name_1, tmp_params); + case SCC_VELOCITY: { // {VELOCITY} + int64_t arg = args.GetNextParameter(); + // Unpack vehicle type from packed argument to get desired units. + VehicleType vt = static_cast(GB(arg, 56, 8)); + byte units = GetVelocityUnits(vt); + assert(units < lengthof(_units_velocity)); + const auto &x = _units_velocity[units]; + auto tmp_params = MakeParameters(ConvertKmhishSpeedToDisplaySpeed(GB(arg, 0, 56), vt), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); + break; } - break; - } - case SCC_COMPANY_NUM: { // {COMPANY_NUM} - CompanyID company = args.GetNextParameter(); + case SCC_VOLUME_SHORT: { // {VOLUME_SHORT} + assert(_settings_game.locale.units_volume < lengthof(_units_volume)); + const auto &x = _units_volume[_settings_game.locale.units_volume]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); + break; + } - /* Nothing is added for AI or inactive companies */ - if (Company::IsValidHumanID(company)) { - auto tmp_params = MakeParameters(company + 1); - GetStringWithArgs(builder, STR_FORMAT_COMPANY_NUM, tmp_params); + case SCC_VOLUME_LONG: { // {VOLUME_LONG} + assert(_settings_game.locale.units_volume < lengthof(_units_volume)); + const auto &x = _units_volume[_settings_game.locale.units_volume]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.l), tmp_params); + break; } - break; - } - case SCC_DEPOT_NAME: { // {DEPOT} - VehicleType vt = args.GetNextParameter(); - if (vt == VEH_AIRCRAFT) { - auto tmp_params = MakeParameters(args.GetNextParameter()); - GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_AIRCRAFT, tmp_params); + case SCC_WEIGHT_SHORT: { // {WEIGHT_SHORT} + assert(_settings_game.locale.units_weight < lengthof(_units_weight)); + const auto &x = _units_weight[_settings_game.locale.units_weight]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } - const Depot *d = Depot::Get(args.GetNextParameter()); - if (!d->name.empty()) { - auto tmp_params = MakeParameters(d->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - auto tmp_params = MakeParameters(d->town->index, d->town_cn + 1); - GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_TRAIN + 2 * vt + (d->town_cn == 0 ? 0 : 1), tmp_params); + case SCC_WEIGHT_LONG: { // {WEIGHT_LONG} + assert(_settings_game.locale.units_weight < lengthof(_units_weight)); + const auto &x = _units_weight[_settings_game.locale.units_weight]; + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + FormatString(builder, GetStringPtr(x.l), tmp_params); + break; } - break; - } - case SCC_ENGINE_NAME: { // {ENGINE} - int64_t arg = args.GetNextParameter(); - const Engine *e = Engine::GetIfValid(static_cast(arg)); - if (e == nullptr) break; + case SCC_COMPANY_NAME: { // {COMPANY} + const Company *c = Company::GetIfValid(args.GetNextParameter()); + if (c == nullptr) break; - if (!e->name.empty() && e->IsEnabled()) { - auto tmp_params = MakeParameters(e->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + if (!c->name.empty()) { + auto tmp_params = MakeParameters(c->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + auto tmp_params = MakeParameters(c->name_2); + GetStringWithArgs(builder, c->name_1, tmp_params); + } break; } - if (HasBit(e->info.callback_mask, CBM_VEHICLE_NAME)) { - uint16_t callback = GetVehicleCallback(CBID_VEHICLE_NAME, static_cast(arg >> 32), 0, e->index, nullptr); - /* Not calling ErrorUnknownCallbackResult due to being inside string processing. */ - if (callback != CALLBACK_FAILED && callback < 0x400) { - const GRFFile *grffile = e->GetGRF(); - assert(grffile != nullptr); + case SCC_COMPANY_NUM: { // {COMPANY_NUM} + CompanyID company = args.GetNextParameter(); - StartTextRefStackUsage(grffile, 6); - ArrayStringParameters<6> tmp_params; - GetStringWithArgs(builder, GetGRFStringID(grffile->grfid, 0xD000 + callback), tmp_params); - StopTextRefStackUsage(); + /* Nothing is added for AI or inactive companies */ + if (Company::IsValidHumanID(company)) { + auto tmp_params = MakeParameters(company + 1); + GetStringWithArgs(builder, STR_FORMAT_COMPANY_NUM, tmp_params); + } + break; + } + case SCC_DEPOT_NAME: { // {DEPOT} + VehicleType vt = args.GetNextParameter(); + if (vt == VEH_AIRCRAFT) { + auto tmp_params = MakeParameters(args.GetNextParameter()); + GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_AIRCRAFT, tmp_params); break; } + + const Depot *d = Depot::Get(args.GetNextParameter()); + if (!d->name.empty()) { + auto tmp_params = MakeParameters(d->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + auto tmp_params = MakeParameters(d->town->index, d->town_cn + 1); + GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_TRAIN + 2 * vt + (d->town_cn == 0 ? 0 : 1), tmp_params); + } + break; } - auto tmp_params = ArrayStringParameters<0>(); - GetStringWithArgs(builder, e->info.string_id, tmp_params); - break; - } + case SCC_ENGINE_NAME: { // {ENGINE} + int64_t arg = args.GetNextParameter(); + const Engine *e = Engine::GetIfValid(static_cast(arg)); + if (e == nullptr) break; - case SCC_GROUP_NAME: { // {GROUP} - const Group *g = Group::GetIfValid(args.GetNextParameter()); - if (g == nullptr) break; + if (!e->name.empty() && e->IsEnabled()) { + auto tmp_params = MakeParameters(e->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + break; + } - if (!g->name.empty()) { - auto tmp_params = MakeParameters(g->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - auto tmp_params = MakeParameters(g->index); - GetStringWithArgs(builder, STR_FORMAT_GROUP_NAME, tmp_params); - } - break; - } + if (HasBit(e->info.callback_mask, CBM_VEHICLE_NAME)) { + uint16_t callback = GetVehicleCallback(CBID_VEHICLE_NAME, static_cast(arg >> 32), 0, e->index, nullptr); + /* Not calling ErrorUnknownCallbackResult due to being inside string processing. */ + if (callback != CALLBACK_FAILED && callback < 0x400) { + const GRFFile *grffile = e->GetGRF(); + assert(grffile != nullptr); + + StartTextRefStackUsage(grffile, 6); + ArrayStringParameters<6> tmp_params; + GetStringWithArgs(builder, GetGRFStringID(grffile->grfid, 0xD000 + callback), tmp_params); + StopTextRefStackUsage(); + + break; + } + } - case SCC_INDUSTRY_NAME: { // {INDUSTRY} - const Industry *i = Industry::GetIfValid(args.GetNextParameter()); - if (i == nullptr) break; - - static bool use_cache = true; - if (use_cache) { // Use cached version if first call - AutoRestoreBackup cache_backup(use_cache, false); - builder += i->GetCachedName(); - } else if (_scan_for_gender_data) { - /* Gender is defined by the industry type. - * STR_FORMAT_INDUSTRY_NAME may have the town first, so it would result in the gender of the town name */ auto tmp_params = ArrayStringParameters<0>(); - FormatString(builder, GetStringPtr(GetIndustrySpec(i->type)->name), tmp_params, next_substr_case_index); - } else { - /* First print the town name and the industry type name. */ - auto tmp_params = MakeParameters(i->town->index, GetIndustrySpec(i->type)->name); - FormatString(builder, GetStringPtr(STR_FORMAT_INDUSTRY_NAME), tmp_params, next_substr_case_index); + GetStringWithArgs(builder, e->info.string_id, tmp_params); + break; } - next_substr_case_index = 0; - break; - } - case SCC_PRESIDENT_NAME: { // {PRESIDENT_NAME} - const Company *c = Company::GetIfValid(args.GetNextParameter()); - if (c == nullptr) break; + case SCC_GROUP_NAME: { // {GROUP} + const Group *g = Group::GetIfValid(args.GetNextParameter()); + if (g == nullptr) break; - if (!c->president_name.empty()) { - auto tmp_params = MakeParameters(c->president_name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - auto tmp_params = MakeParameters(c->president_name_2); - GetStringWithArgs(builder, c->president_name_1, tmp_params); + if (!g->name.empty()) { + auto tmp_params = MakeParameters(g->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + auto tmp_params = MakeParameters(g->index); + GetStringWithArgs(builder, STR_FORMAT_GROUP_NAME, tmp_params); + } + break; } - break; - } - case SCC_STATION_NAME: { // {STATION} - StationID sid = args.GetNextParameter(); - const Station *st = Station::GetIfValid(sid); + case SCC_INDUSTRY_NAME: { // {INDUSTRY} + const Industry *i = Industry::GetIfValid(args.GetNextParameter()); + if (i == nullptr) break; + + static bool use_cache = true; + if (use_cache) { // Use cached version if first call + AutoRestoreBackup cache_backup(use_cache, false); + builder += i->GetCachedName(); + } else if (_scan_for_gender_data) { + /* Gender is defined by the industry type. + * STR_FORMAT_INDUSTRY_NAME may have the town first, so it would result in the gender of the town name */ + auto tmp_params = ArrayStringParameters<0>(); + FormatString(builder, GetStringPtr(GetIndustrySpec(i->type)->name), tmp_params, next_substr_case_index); + } else { + /* First print the town name and the industry type name. */ + auto tmp_params = MakeParameters(i->town->index, GetIndustrySpec(i->type)->name); + FormatString(builder, GetStringPtr(STR_FORMAT_INDUSTRY_NAME), tmp_params, next_substr_case_index); + } + next_substr_case_index = 0; + break; + } - if (st == nullptr) { - /* The station doesn't exist anymore. The only place where we might - * be "drawing" an invalid station is in the case of cargo that is - * in transit. */ - auto tmp_params = ArrayStringParameters<0>(); - GetStringWithArgs(builder, STR_UNKNOWN_STATION, tmp_params); + case SCC_PRESIDENT_NAME: { // {PRESIDENT_NAME} + const Company *c = Company::GetIfValid(args.GetNextParameter()); + if (c == nullptr) break; + + if (!c->president_name.empty()) { + auto tmp_params = MakeParameters(c->president_name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + auto tmp_params = MakeParameters(c->president_name_2); + GetStringWithArgs(builder, c->president_name_1, tmp_params); + } break; } - static bool use_cache = true; - if (use_cache) { // Use cached version if first call - AutoRestoreBackup cache_backup(use_cache, false); - builder += st->GetCachedName(); - } else if (!st->name.empty()) { - auto tmp_params = MakeParameters(st->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - StringID string_id = st->string_id; - if (st->indtype != IT_INVALID) { - /* Special case where the industry provides the name for the station */ - const IndustrySpec *indsp = GetIndustrySpec(st->indtype); - - /* Industry GRFs can change which might remove the station name and - * thus cause very strange things. Here we check for that before we - * actually set the station name. */ - if (indsp->station_name != STR_NULL && indsp->station_name != STR_UNDEFINED) { - string_id = indsp->station_name; - } + case SCC_STATION_NAME: { // {STATION} + StationID sid = args.GetNextParameter(); + const Station *st = Station::GetIfValid(sid); + + if (st == nullptr) { + /* The station doesn't exist anymore. The only place where we might + * be "drawing" an invalid station is in the case of cargo that is + * in transit. */ + auto tmp_params = ArrayStringParameters<0>(); + GetStringWithArgs(builder, STR_UNKNOWN_STATION, tmp_params); + break; } - auto tmp_params = MakeParameters(STR_TOWN_NAME, st->town->index, st->index); - GetStringWithArgs(builder, string_id, tmp_params); - } - break; - } + static bool use_cache = true; + if (use_cache) { // Use cached version if first call + AutoRestoreBackup cache_backup(use_cache, false); + builder += st->GetCachedName(); + } else if (!st->name.empty()) { + auto tmp_params = MakeParameters(st->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + StringID string_id = st->string_id; + if (st->indtype != IT_INVALID) { + /* Special case where the industry provides the name for the station */ + const IndustrySpec *indsp = GetIndustrySpec(st->indtype); + + /* Industry GRFs can change which might remove the station name and + * thus cause very strange things. Here we check for that before we + * actually set the station name. */ + if (indsp->station_name != STR_NULL && indsp->station_name != STR_UNDEFINED) { + string_id = indsp->station_name; + } + } - case SCC_TOWN_NAME: { // {TOWN} - const Town *t = Town::GetIfValid(args.GetNextParameter()); - if (t == nullptr) break; - - static bool use_cache = true; - if (use_cache) { // Use cached version if first call - AutoRestoreBackup cache_backup(use_cache, false); - builder += t->GetCachedName(); - } else if (!t->name.empty()) { - auto tmp_params = MakeParameters(t->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - GetTownName(builder, t); + auto tmp_params = MakeParameters(STR_TOWN_NAME, st->town->index, st->index); + GetStringWithArgs(builder, string_id, tmp_params); + } + break; } - break; - } - case SCC_WAYPOINT_NAME: { // {WAYPOINT} - Waypoint *wp = Waypoint::GetIfValid(args.GetNextParameter()); - if (wp == nullptr) break; - - if (!wp->name.empty()) { - auto tmp_params = MakeParameters(wp->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - auto tmp_params = MakeParameters(wp->town->index, wp->town_cn + 1); - StringID string_id = ((wp->string_id == STR_SV_STNAME_BUOY) ? STR_FORMAT_BUOY_NAME : STR_FORMAT_WAYPOINT_NAME); - if (wp->town_cn != 0) string_id++; - GetStringWithArgs(builder, string_id, tmp_params); + case SCC_TOWN_NAME: { // {TOWN} + const Town *t = Town::GetIfValid(args.GetNextParameter()); + if (t == nullptr) break; + + static bool use_cache = true; + if (use_cache) { // Use cached version if first call + AutoRestoreBackup cache_backup(use_cache, false); + builder += t->GetCachedName(); + } else if (!t->name.empty()) { + auto tmp_params = MakeParameters(t->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + GetTownName(builder, t); + } + break; } - break; - } - case SCC_VEHICLE_NAME: { // {VEHICLE} - const Vehicle *v = Vehicle::GetIfValid(args.GetNextParameter()); - if (v == nullptr) break; - - if (!v->name.empty()) { - auto tmp_params = MakeParameters(v->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else if (v->group_id != DEFAULT_GROUP) { - /* The vehicle has no name, but is member of a group, so print group name */ - auto tmp_params = MakeParameters(v->group_id, v->unitnumber); - GetStringWithArgs(builder, STR_FORMAT_GROUP_VEHICLE_NAME, tmp_params); - } else { - auto tmp_params = MakeParameters(v->unitnumber); - - StringID string_id; - switch (v->type) { - default: string_id = STR_INVALID_VEHICLE; break; - case VEH_TRAIN: string_id = STR_SV_TRAIN_NAME; break; - case VEH_ROAD: string_id = STR_SV_ROAD_VEHICLE_NAME; break; - case VEH_SHIP: string_id = STR_SV_SHIP_NAME; break; - case VEH_AIRCRAFT: string_id = STR_SV_AIRCRAFT_NAME; break; + case SCC_WAYPOINT_NAME: { // {WAYPOINT} + Waypoint *wp = Waypoint::GetIfValid(args.GetNextParameter()); + if (wp == nullptr) break; + + if (!wp->name.empty()) { + auto tmp_params = MakeParameters(wp->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + auto tmp_params = MakeParameters(wp->town->index, wp->town_cn + 1); + StringID string_id = ((wp->string_id == STR_SV_STNAME_BUOY) ? STR_FORMAT_BUOY_NAME : STR_FORMAT_WAYPOINT_NAME); + if (wp->town_cn != 0) string_id++; + GetStringWithArgs(builder, string_id, tmp_params); } + break; + } - GetStringWithArgs(builder, string_id, tmp_params); + case SCC_VEHICLE_NAME: { // {VEHICLE} + const Vehicle *v = Vehicle::GetIfValid(args.GetNextParameter()); + if (v == nullptr) break; + + if (!v->name.empty()) { + auto tmp_params = MakeParameters(v->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else if (v->group_id != DEFAULT_GROUP) { + /* The vehicle has no name, but is member of a group, so print group name */ + auto tmp_params = MakeParameters(v->group_id, v->unitnumber); + GetStringWithArgs(builder, STR_FORMAT_GROUP_VEHICLE_NAME, tmp_params); + } else { + auto tmp_params = MakeParameters(v->unitnumber); + + StringID string_id; + switch (v->type) { + default: string_id = STR_INVALID_VEHICLE; break; + case VEH_TRAIN: string_id = STR_SV_TRAIN_NAME; break; + case VEH_ROAD: string_id = STR_SV_ROAD_VEHICLE_NAME; break; + case VEH_SHIP: string_id = STR_SV_SHIP_NAME; break; + case VEH_AIRCRAFT: string_id = STR_SV_AIRCRAFT_NAME; break; + } + + GetStringWithArgs(builder, string_id, tmp_params); + } + break; } - break; - } - case SCC_SIGN_NAME: { // {SIGN} - const Sign *si = Sign::GetIfValid(args.GetNextParameter()); - if (si == nullptr) break; + case SCC_SIGN_NAME: { // {SIGN} + const Sign *si = Sign::GetIfValid(args.GetNextParameter()); + if (si == nullptr) break; - if (!si->name.empty()) { - auto tmp_params = MakeParameters(si->name); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); - } else { - auto tmp_params = ArrayStringParameters<0>(); - GetStringWithArgs(builder, STR_DEFAULT_SIGN_NAME, tmp_params); + if (!si->name.empty()) { + auto tmp_params = MakeParameters(si->name); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); + } else { + auto tmp_params = ArrayStringParameters<0>(); + GetStringWithArgs(builder, STR_DEFAULT_SIGN_NAME, tmp_params); + } + break; } - break; - } - case SCC_STATION_FEATURES: { // {STATIONFEATURES} - StationGetSpecialString(builder, args.GetNextParameter()); - break; - } + case SCC_STATION_FEATURES: { // {STATIONFEATURES} + StationGetSpecialString(builder, args.GetNextParameter()); + break; + } - case SCC_COLOUR: { // {COLOUR} - StringControlCode scc = (StringControlCode)(SCC_BLUE + args.GetNextParameter()); - if (IsInsideMM(scc, SCC_BLUE, SCC_COLOUR)) builder.Utf8Encode(scc); - break; - } + case SCC_COLOUR: { // {COLOUR} + StringControlCode scc = (StringControlCode)(SCC_BLUE + args.GetNextParameter()); + if (IsInsideMM(scc, SCC_BLUE, SCC_COLOUR)) builder.Utf8Encode(scc); + break; + } - default: - builder.Utf8Encode(b); - break; + default: + builder.Utf8Encode(b); + break; + } + } catch (std::out_of_range &e) { + Debug(misc, 0, "FormatString: {}", e.what()); + builder += "(invalid parameter)"; } } } diff --git a/src/strings_func.h b/src/strings_func.h index bb2e5476d52b4..4fe2746e8a17a 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -23,7 +23,7 @@ * @param str String identifier * @return StringTab from \a str */ -static inline StringTab GetStringTab(StringID str) +inline StringTab GetStringTab(StringID str) { StringTab result = (StringTab)(str >> TAB_SIZE_BITS); if (result >= TEXT_TAB_NEWGRF_START) return TEXT_TAB_NEWGRF_START; @@ -36,7 +36,7 @@ static inline StringTab GetStringTab(StringID str) * @param str String identifier * @return StringIndex from \a str */ -static inline uint GetStringIndex(StringID str) +inline uint GetStringIndex(StringID str) { return str - (GetStringTab(str) << TAB_SIZE_BITS); } @@ -47,7 +47,7 @@ static inline uint GetStringIndex(StringID str) * @param index StringIndex * @return StringID composed from \a tab and \a index */ -static inline StringID MakeStringID(StringTab tab, uint index) +inline StringID MakeStringID(StringTab tab, uint index) { if (tab == TEXT_TAB_NEWGRF_START) { assert(index < TAB_SIZE_NEWGRF); @@ -72,7 +72,7 @@ uint ConvertDisplaySpeedToKmhishSpeed(uint speed, VehicleType type); * @param type Type of vehicle for parameter. * @return Bit-packed velocity and vehicle type, for use with SetDParam(). */ -static inline int64_t PackVelocity(uint speed, VehicleType type) +inline int64_t PackVelocity(uint speed, VehicleType type) { /* Vehicle type is a byte, so packed into the top 8 bits of the 64-bit * parameter, although only values from 0-3 are relevant. */ diff --git a/src/strings_internal.h b/src/strings_internal.h index e9e4b1921ab22..6584827e78287 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -39,20 +39,13 @@ class StringParameters { public: /** * Create a new StringParameters instance that can reference part of the data of - * the given partent instance. + * the given parent instance. */ StringParameters(StringParameters &parent, size_t size) : parent(&parent), parameters(parent.parameters.subspan(parent.offset, size)) {} - ~StringParameters() - { - if (this->parent != nullptr) { - this->parent->offset += this->parameters.size(); - } - } - void PrepareForNextRun(); void SetTypeOfNextParameter(char32_t type) { this->next_type = type; } @@ -81,6 +74,17 @@ class StringParameters { this->offset = offset; } + /** + * Advance the offset within the string from where to return the next result of + * \c GetInt64 or \c GetInt32. + * @param advance The amount to advance the offset by. + */ + void AdvanceOffset(size_t advance) + { + this->offset += advance; + assert(this->offset <= this->parameters.size()); + } + /** * Get the next parameter from our parameters. * This updates the offset, so the next time this is called the next parameter @@ -91,7 +95,7 @@ class StringParameters { T GetNextParameter() { auto ptr = GetNextParameterPointer(); - return static_cast(ptr == nullptr ? 0 : ptr->data); + return static_cast(ptr->data); } /** @@ -103,7 +107,6 @@ class StringParameters { const char *GetNextParameterString() { auto ptr = GetNextParameterPointer(); - if (ptr == nullptr) return nullptr; return ptr->string != nullptr ? ptr->string->c_str() : ptr->string_view; } @@ -225,7 +228,7 @@ class ArrayStringParameters : public StringParameters { return *this; } - ArrayStringParameters(const ArrayStringParameters& other) = delete; + ArrayStringParameters(const ArrayStringParameters &other) = delete; ArrayStringParameters& operator=(const ArrayStringParameters &other) = delete; }; diff --git a/src/table/settings/game_settings.ini b/src/table/settings/game_settings.ini index 7c4fdf51c9e56..7902d17a4ce90 100644 --- a/src/table/settings/game_settings.ini +++ b/src/table/settings/game_settings.ini @@ -78,6 +78,13 @@ str = STR_CONFIG_SETTING_SERVICEATHELIPAD strhelp = STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT cat = SC_EXPERT +[SDT_BOOL] +var = order.station_length_loading_penalty +def = true +str = STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY +strhelp = STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT +cat = SC_EXPERT + [SDT_BOOL] var = order.gradual_loading from = SLV_40 diff --git a/src/thread.h b/src/thread.h index 67140644c71f9..336a0317bea78 100644 --- a/src/thread.h +++ b/src/thread.h @@ -74,7 +74,7 @@ inline bool StartNewThread(std::thread *thr, const char *name, TFn&& _Fx, TArgs& } return true; - } catch (const std::system_error& e) { + } catch (const std::system_error &e) { /* Something went wrong, the system we are running on might not support threads. */ Debug(misc, 1, "Can't create thread '{}': {}", name, e.what()); } diff --git a/src/tile_cmd.h b/src/tile_cmd.h index ff56b35aebef9..01d116e302797 100644 --- a/src/tile_cmd.h +++ b/src/tile_cmd.h @@ -179,7 +179,7 @@ VehicleEnterTileStatus VehicleEnterTile(Vehicle *v, TileIndex tile, int x, int y void ChangeTileOwner(TileIndex tile, Owner old_owner, Owner new_owner); void GetTileDesc(TileIndex tile, TileDesc *td); -static inline void AddAcceptedCargo(TileIndex tile, CargoArray &acceptance, CargoTypes *always_accepted) +inline void AddAcceptedCargo(TileIndex tile, CargoArray &acceptance, CargoTypes *always_accepted) { AddAcceptedCargoProc *proc = _tile_type_procs[GetTileType(tile)]->add_accepted_cargo_proc; if (proc == nullptr) return; @@ -187,21 +187,21 @@ static inline void AddAcceptedCargo(TileIndex tile, CargoArray &acceptance, Carg proc(tile, acceptance, always_accepted == nullptr ? &dummy : always_accepted); } -static inline void AddProducedCargo(TileIndex tile, CargoArray &produced) +inline void AddProducedCargo(TileIndex tile, CargoArray &produced) { AddProducedCargoProc *proc = _tile_type_procs[GetTileType(tile)]->add_produced_cargo_proc; if (proc == nullptr) return; proc(tile, produced); } -static inline void AnimateTile(TileIndex tile) +inline void AnimateTile(TileIndex tile) { AnimateTileProc *proc = _tile_type_procs[GetTileType(tile)]->animate_tile_proc; assert(proc != nullptr); proc(tile); } -static inline bool ClickTile(TileIndex tile) +inline bool ClickTile(TileIndex tile) { ClickTileProc *proc = _tile_type_procs[GetTileType(tile)]->click_tile_proc; if (proc == nullptr) return false; diff --git a/src/tile_map.h b/src/tile_map.h index 4111bfbd6b127..6ec6609e6b71a 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -39,7 +39,7 @@ debug_inline static uint TileHeight(Tile tile) * @param y Y coordinate of the tile, may be outside the map. * @return The height in the same unit as TileHeight. */ -static inline uint TileHeightOutsideMap(int x, int y) +inline uint TileHeightOutsideMap(int x, int y) { return TileHeight(TileXY(Clamp(x, 0, Map::MaxX()), Clamp(y, 0, Map::MaxY()))); } @@ -54,7 +54,7 @@ static inline uint TileHeightOutsideMap(int x, int y) * @pre tile < Map::Size() * @pre height <= MAX_TILE_HEIGHT */ -static inline void SetTileHeight(Tile tile, uint height) +inline void SetTileHeight(Tile tile, uint height) { assert(tile < Map::Size()); assert(height <= MAX_TILE_HEIGHT); @@ -69,7 +69,7 @@ static inline void SetTileHeight(Tile tile, uint height) * @param tile The tile to get the height * @return The height of the tile in pixel */ -static inline uint TilePixelHeight(Tile tile) +inline uint TilePixelHeight(Tile tile) { return TileHeight(tile) * TILE_HEIGHT; } @@ -81,7 +81,7 @@ static inline uint TilePixelHeight(Tile tile) * @param y Y coordinate of the tile, may be outside the map. * @return The height in pixels in the same unit as TilePixelHeight. */ -static inline uint TilePixelHeightOutsideMap(int x, int y) +inline uint TilePixelHeightOutsideMap(int x, int y) { return TileHeightOutsideMap(x, y) * TILE_HEIGHT; } @@ -106,7 +106,7 @@ debug_inline static TileType GetTileType(Tile tile) * @return Whether the tile is in the interior of the map * @pre tile < Map::Size() */ -static inline bool IsInnerTile(Tile tile) +inline bool IsInnerTile(Tile tile) { assert(tile < Map::Size()); @@ -128,7 +128,7 @@ static inline bool IsInnerTile(Tile tile) * @pre tile < Map::Size() * @pre type MP_VOID <=> tile is on the south-east or south-west edge. */ -static inline void SetTileType(Tile tile, TileType type) +inline void SetTileType(Tile tile, TileType type) { assert(tile < Map::Size()); /* VOID tiles (and no others) are exactly allowed at the lower left and right @@ -158,7 +158,7 @@ debug_inline static bool IsTileType(Tile tile, TileType type) * @param tile The tile to check * @return True if the tile is on the map and not one of MP_VOID. */ -static inline bool IsValidTile(Tile tile) +inline bool IsValidTile(Tile tile) { return tile < Map::Size() && !IsTileType(tile, MP_VOID); } @@ -175,7 +175,7 @@ static inline bool IsValidTile(Tile tile) * @pre IsValidTile(tile) * @pre The type of the tile must not be MP_HOUSE and MP_INDUSTRY */ -static inline Owner GetTileOwner(Tile tile) +inline Owner GetTileOwner(Tile tile) { assert(IsValidTile(tile)); assert(!IsTileType(tile, MP_HOUSE)); @@ -195,7 +195,7 @@ static inline Owner GetTileOwner(Tile tile) * @pre IsValidTile(tile) * @pre The type of the tile must not be MP_HOUSE and MP_INDUSTRY */ -static inline void SetTileOwner(Tile tile, Owner owner) +inline void SetTileOwner(Tile tile, Owner owner) { assert(IsValidTile(tile)); assert(!IsTileType(tile, MP_HOUSE)); @@ -211,7 +211,7 @@ static inline void SetTileOwner(Tile tile, Owner owner) * @param owner The owner to check against * @return True if a tile belongs the the given owner */ -static inline bool IsTileOwner(Tile tile, Owner owner) +inline bool IsTileOwner(Tile tile, Owner owner) { return GetTileOwner(tile) == owner; } @@ -222,7 +222,7 @@ static inline bool IsTileOwner(Tile tile, Owner owner) * @param type the new type * @pre tile < Map::Size() */ -static inline void SetTropicZone(Tile tile, TropicZone type) +inline void SetTropicZone(Tile tile, TropicZone type) { assert(tile < Map::Size()); assert(!IsTileType(tile, MP_VOID) || type == TROPICZONE_NORMAL); @@ -235,7 +235,7 @@ static inline void SetTropicZone(Tile tile, TropicZone type) * @pre tile < Map::Size() * @return the zone type */ -static inline TropicZone GetTropicZone(Tile tile) +inline TropicZone GetTropicZone(Tile tile) { assert(tile < Map::Size()); return (TropicZone)GB(tile.type(), 0, 2); @@ -247,7 +247,7 @@ static inline TropicZone GetTropicZone(Tile tile) * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION) * @return frame number */ -static inline byte GetAnimationFrame(Tile t) +inline byte GetAnimationFrame(Tile t) { assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION)); return t.m7(); @@ -259,7 +259,7 @@ static inline byte GetAnimationFrame(Tile t) * @param frame the new frame number * @pre IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION) */ -static inline void SetAnimationFrame(Tile t, byte frame) +inline void SetAnimationFrame(Tile t, byte frame) { assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_INDUSTRY) ||IsTileType(t, MP_STATION)); t.m7() = frame; @@ -277,7 +277,7 @@ bool IsTileFlat(TileIndex tile, int *h = nullptr); * @param h If not \c nullptr, pointer to storage of z height * @return Slope of the tile, except for the HALFTILE part */ -static inline Slope GetTilePixelSlope(TileIndex tile, int *h) +inline Slope GetTilePixelSlope(TileIndex tile, int *h) { Slope s = GetTileSlope(tile, h); if (h != nullptr) *h *= TILE_HEIGHT; @@ -291,7 +291,7 @@ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h); * @param tile Tile to compute height of * @return Minimum height of the tile */ -static inline int GetTilePixelZ(TileIndex tile) +inline int GetTilePixelZ(TileIndex tile) { return GetTileZ(tile) * TILE_HEIGHT; } @@ -301,7 +301,7 @@ static inline int GetTilePixelZ(TileIndex tile) * @param tile Tile to compute height of * @return Maximum height of the tile */ -static inline int GetTileMaxPixelZ(TileIndex tile) +inline int GetTileMaxPixelZ(TileIndex tile) { return GetTileMaxZ(tile) * TILE_HEIGHT; } @@ -313,7 +313,7 @@ static inline int GetTileMaxPixelZ(TileIndex tile) * @param y The Y coordinate * @return The hash of the tile */ -static inline uint TileHash(uint x, uint y) +inline uint TileHash(uint x, uint y) { uint hash = x >> 4; hash ^= x >> 6; @@ -331,7 +331,7 @@ static inline uint TileHash(uint x, uint y) * @param y The Y coordinate * @return The last two bits from hash of the tile */ -static inline uint TileHash2Bit(uint x, uint y) +inline uint TileHash2Bit(uint x, uint y) { return GB(TileHash(x, y), 0, 2); } diff --git a/src/tile_type.h b/src/tile_type.h index 83c1a7460b831..261fe58fc28e8 100644 --- a/src/tile_type.h +++ b/src/tile_type.h @@ -92,6 +92,6 @@ static_assert(sizeof(TileIndex) == 4); /** * The very nice invalid tile marker */ -static inline constexpr TileIndex INVALID_TILE = TileIndex{ (uint32_t)-1 }; +inline constexpr TileIndex INVALID_TILE = TileIndex{ (uint32_t)-1 }; #endif /* TILE_TYPE_H */ diff --git a/src/tilematrix_type.hpp b/src/tilematrix_type.hpp index ee5792ea241e4..006267b5bd1da 100644 --- a/src/tilematrix_type.hpp +++ b/src/tilematrix_type.hpp @@ -78,7 +78,7 @@ class TileMatrix { * Get the total covered area. * @return The area covered by the matrix. */ - const TileArea& GetArea() const + const TileArea &GetArea() const { return this->area; } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 4ca6ad53834cc..29317749622ca 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -145,9 +145,9 @@ static const int CTMN_SPECTATOR = -3; ///< Show a company window as spectator * Pop up a generic company list menu. * @param w The toolbar window. * @param widget The button widget id. - * @param grey A bitbask of which items to mark as disabled. + * @param grey A bitmask of which companies to mark as disabled. */ -static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, int grey = 0) +static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey = 0) { DropDownList list; @@ -370,8 +370,8 @@ static CallBackFunction MenuClickSaveLoad(int index = 0) switch (index) { case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break; case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break; - case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_SAVE); break; - case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break; + case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_SAVE); break; + case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP, SLO_LOAD); break; case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break; case SLEME_EXIT_GAME: HandleExitGameRequest(); break; } @@ -728,10 +728,10 @@ static CallBackFunction MenuClickIndustry(int index) static void ToolbarVehicleClick(Window *w, VehicleType veh) { - int dis = ~0; + CompanyMask dis = 0; - for (const Vehicle *v : Vehicle::Iterate()) { - if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner); + for (const Company *c : Company::Iterate()) { + if (c->group_all[veh].num_vehicle == 0) SetBit(dis, c->index); } PopupMainCompanyToolbMenu(w, WID_TN_VEHICLE_START + veh, dis); } diff --git a/src/town.h b/src/town.h index 459d843313767..81dddd2621285 100644 --- a/src/town.h +++ b/src/town.h @@ -304,7 +304,7 @@ void MakeDefaultName(T *obj) * Converts original town ticks counters to plain game ticks. Note that * tick 0 is a valid tick so actual amount is one more than the counter value. */ -static inline uint16_t TownTicksToGameTicks(uint16_t ticks) +inline uint16_t TownTicksToGameTicks(uint16_t ticks) { return (std::min(ticks, MAX_TOWN_GROWTH_TICKS) + 1) * Ticks::TOWN_GROWTH_TICKS - 1; } diff --git a/src/town_map.h b/src/town_map.h index 7b43f4197cf47..c7683ae9bc1ca 100644 --- a/src/town_map.h +++ b/src/town_map.h @@ -20,7 +20,7 @@ * @pre IsTileType(t, MP_HOUSE) or IsTileType(t, MP_ROAD) but not a road depot * @return TownID */ -static inline TownID GetTownIndex(Tile t) +inline TownID GetTownIndex(Tile t) { assert(IsTileType(t, MP_HOUSE) || (IsTileType(t, MP_ROAD) && !IsRoadDepot(t))); return t.m2(); @@ -32,7 +32,7 @@ static inline TownID GetTownIndex(Tile t) * @param index the index of the town * @pre IsTileType(t, MP_HOUSE) or IsTileType(t, MP_ROAD) but not a road depot */ -static inline void SetTownIndex(Tile t, TownID index) +inline void SetTownIndex(Tile t, TownID index) { assert(IsTileType(t, MP_HOUSE) || (IsTileType(t, MP_ROAD) && !IsRoadDepot(t))); t.m2() = index; @@ -45,7 +45,7 @@ static inline void SetTownIndex(Tile t, TownID index) * @pre IsTileType(t, MP_HOUSE) * @return house type */ -static inline HouseID GetCleanHouseType(Tile t) +inline HouseID GetCleanHouseType(Tile t) { assert(IsTileType(t, MP_HOUSE)); return t.m4() | (GB(t.m3(), 6, 1) << 8); @@ -57,7 +57,7 @@ static inline HouseID GetCleanHouseType(Tile t) * @pre IsTileType(t, MP_HOUSE) * @return house type */ -static inline HouseID GetHouseType(Tile t) +inline HouseID GetHouseType(Tile t) { return GetTranslatedHouseID(GetCleanHouseType(t)); } @@ -68,7 +68,7 @@ static inline HouseID GetHouseType(Tile t) * @param house_id the new house type * @pre IsTileType(t, MP_HOUSE) */ -static inline void SetHouseType(Tile t, HouseID house_id) +inline void SetHouseType(Tile t, HouseID house_id) { assert(IsTileType(t, MP_HOUSE)); t.m4() = GB(house_id, 0, 8); @@ -80,7 +80,7 @@ static inline void SetHouseType(Tile t, HouseID house_id) * @param t the tile * @return has destination */ -static inline bool LiftHasDestination(Tile t) +inline bool LiftHasDestination(Tile t) { return HasBit(t.m7(), 0); } @@ -91,7 +91,7 @@ static inline bool LiftHasDestination(Tile t) * @param t the tile * @param dest new destination */ -static inline void SetLiftDestination(Tile t, byte dest) +inline void SetLiftDestination(Tile t, byte dest) { SetBit(t.m7(), 0); SB(t.m7(), 1, 3, dest); @@ -102,7 +102,7 @@ static inline void SetLiftDestination(Tile t, byte dest) * @param t the tile * @return destination */ -static inline byte GetLiftDestination(Tile t) +inline byte GetLiftDestination(Tile t) { return GB(t.m7(), 1, 3); } @@ -113,7 +113,7 @@ static inline byte GetLiftDestination(Tile t) * and the destination. * @param t the tile */ -static inline void HaltLift(Tile t) +inline void HaltLift(Tile t) { SB(t.m7(), 0, 4, 0); } @@ -123,7 +123,7 @@ static inline void HaltLift(Tile t) * @param t the tile * @return position, from 0 to 36 */ -static inline byte GetLiftPosition(Tile t) +inline byte GetLiftPosition(Tile t) { return GB(t.m6(), 2, 6); } @@ -133,7 +133,7 @@ static inline byte GetLiftPosition(Tile t) * @param t the tile * @param pos position, from 0 to 36 */ -static inline void SetLiftPosition(Tile t, byte pos) +inline void SetLiftPosition(Tile t, byte pos) { SB(t.m6(), 2, 6, pos); } @@ -143,7 +143,7 @@ static inline void SetLiftPosition(Tile t, byte pos) * @param t the tile * @return true if it is, false if it is not */ -static inline bool IsHouseCompleted(Tile t) +inline bool IsHouseCompleted(Tile t) { assert(IsTileType(t, MP_HOUSE)); return HasBit(t.m3(), 7); @@ -154,7 +154,7 @@ static inline bool IsHouseCompleted(Tile t) * @param t the tile * @param status */ -static inline void SetHouseCompleted(Tile t, bool status) +inline void SetHouseCompleted(Tile t, bool status) { assert(IsTileType(t, MP_HOUSE)); SB(t.m3(), 7, 1, !!status); @@ -181,7 +181,7 @@ static inline void SetHouseCompleted(Tile t, bool status) * @pre IsTileType(t, MP_HOUSE) * @return the building stage of the house */ -static inline byte GetHouseBuildingStage(Tile t) +inline byte GetHouseBuildingStage(Tile t) { assert(IsTileType(t, MP_HOUSE)); return IsHouseCompleted(t) ? (byte)TOWN_HOUSE_COMPLETED : GB(t.m5(), 3, 2); @@ -193,7 +193,7 @@ static inline byte GetHouseBuildingStage(Tile t) * @pre IsTileType(t, MP_HOUSE) * @return the construction stage of the house */ -static inline byte GetHouseConstructionTick(Tile t) +inline byte GetHouseConstructionTick(Tile t) { assert(IsTileType(t, MP_HOUSE)); return IsHouseCompleted(t) ? 0 : GB(t.m5(), 0, 3); @@ -206,7 +206,7 @@ static inline byte GetHouseConstructionTick(Tile t) * @param t the tile of the house to increment the construction stage of * @pre IsTileType(t, MP_HOUSE) */ -static inline void IncHouseConstructionTick(Tile t) +inline void IncHouseConstructionTick(Tile t) { assert(IsTileType(t, MP_HOUSE)); AB(t.m5(), 0, 5, 1); @@ -224,7 +224,7 @@ static inline void IncHouseConstructionTick(Tile t) * @param t the tile of this house * @pre IsTileType(t, MP_HOUSE) && IsHouseCompleted(t) */ -static inline void ResetHouseAge(Tile t) +inline void ResetHouseAge(Tile t) { assert(IsTileType(t, MP_HOUSE) && IsHouseCompleted(t)); t.m5() = 0; @@ -235,7 +235,7 @@ static inline void ResetHouseAge(Tile t) * @param t the tile of this house * @pre IsTileType(t, MP_HOUSE) */ -static inline void IncrementHouseAge(Tile t) +inline void IncrementHouseAge(Tile t) { assert(IsTileType(t, MP_HOUSE)); if (IsHouseCompleted(t) && t.m5() < 0xFF) t.m5()++; @@ -247,7 +247,7 @@ static inline void IncrementHouseAge(Tile t) * @pre IsTileType(t, MP_HOUSE) * @return year */ -static inline TimerGameCalendar::Year GetHouseAge(Tile t) +inline TimerGameCalendar::Year GetHouseAge(Tile t) { assert(IsTileType(t, MP_HOUSE)); return IsHouseCompleted(t) ? t.m5() : 0; @@ -260,7 +260,7 @@ static inline TimerGameCalendar::Year GetHouseAge(Tile t) * @param random the new random bits * @pre IsTileType(t, MP_HOUSE) */ -static inline void SetHouseRandomBits(Tile t, byte random) +inline void SetHouseRandomBits(Tile t, byte random) { assert(IsTileType(t, MP_HOUSE)); t.m1() = random; @@ -273,7 +273,7 @@ static inline void SetHouseRandomBits(Tile t, byte random) * @pre IsTileType(t, MP_HOUSE) * @return random bits */ -static inline byte GetHouseRandomBits(Tile t) +inline byte GetHouseRandomBits(Tile t) { assert(IsTileType(t, MP_HOUSE)); return t.m1(); @@ -286,7 +286,7 @@ static inline byte GetHouseRandomBits(Tile t) * @param triggers the activated triggers * @pre IsTileType(t, MP_HOUSE) */ -static inline void SetHouseTriggers(Tile t, byte triggers) +inline void SetHouseTriggers(Tile t, byte triggers) { assert(IsTileType(t, MP_HOUSE)); SB(t.m3(), 0, 5, triggers); @@ -299,7 +299,7 @@ static inline void SetHouseTriggers(Tile t, byte triggers) * @pre IsTileType(t, MP_HOUSE) * @return triggers */ -static inline byte GetHouseTriggers(Tile t) +inline byte GetHouseTriggers(Tile t) { assert(IsTileType(t, MP_HOUSE)); return GB(t.m3(), 0, 5); @@ -311,7 +311,7 @@ static inline byte GetHouseTriggers(Tile t) * @pre IsTileType(t, MP_HOUSE) * @return time remaining */ -static inline byte GetHouseProcessingTime(Tile t) +inline byte GetHouseProcessingTime(Tile t) { assert(IsTileType(t, MP_HOUSE)); return GB(t.m6(), 2, 6); @@ -323,7 +323,7 @@ static inline byte GetHouseProcessingTime(Tile t) * @param time the time to be set * @pre IsTileType(t, MP_HOUSE) */ -static inline void SetHouseProcessingTime(Tile t, byte time) +inline void SetHouseProcessingTime(Tile t, byte time) { assert(IsTileType(t, MP_HOUSE)); SB(t.m6(), 2, 6, time); @@ -334,7 +334,7 @@ static inline void SetHouseProcessingTime(Tile t, byte time) * @param t the house tile * @pre IsTileType(t, MP_HOUSE) */ -static inline void DecHouseProcessingTime(Tile t) +inline void DecHouseProcessingTime(Tile t) { assert(IsTileType(t, MP_HOUSE)); t.m6() -= 1 << 2; @@ -350,7 +350,7 @@ static inline void DecHouseProcessingTime(Tile t) * @param random_bits required for newgrf houses * @pre IsTileType(t, MP_CLEAR) */ -static inline void MakeHouseTile(Tile t, TownID tid, byte counter, byte stage, HouseID type, byte random_bits) +inline void MakeHouseTile(Tile t, TownID tid, byte counter, byte stage, HouseID type, byte random_bits) { assert(IsTileType(t, MP_CLEAR)); diff --git a/src/track_func.h b/src/track_func.h index ab70a8cdfd97c..0c23707b68de1 100644 --- a/src/track_func.h +++ b/src/track_func.h @@ -25,7 +25,7 @@ using SetTrackdirBitIterator = SetBitIterator; * @return true if the given value is a valid track. * @note Use this in an assert() */ -static inline bool IsValidTrack(Track track) +inline bool IsValidTrack(Track track) { return track < TRACK_END; } @@ -37,7 +37,7 @@ static inline bool IsValidTrack(Track track) * @return true if the given value is a valid Trackdir * @note Use this in an assert() */ -static inline bool IsValidTrackdirForRoadVehicle(Trackdir trackdir) +inline bool IsValidTrackdirForRoadVehicle(Trackdir trackdir) { return trackdir < TRACKDIR_END; } @@ -49,7 +49,7 @@ static inline bool IsValidTrackdirForRoadVehicle(Trackdir trackdir) * @return true if the given value is a valid Trackdir * @note Use this in an assert() */ -static inline bool IsValidTrackdir(Trackdir trackdir) +inline bool IsValidTrackdir(Trackdir trackdir) { return trackdir != INVALID_TRACKDIR && ((1 << trackdir & TRACKDIR_BIT_MASK) != TRACKDIR_BIT_NONE); } @@ -63,7 +63,7 @@ static inline bool IsValidTrackdir(Trackdir trackdir) * @param a the axis to convert * @return the track corresponding to the axis */ -static inline Track AxisToTrack(Axis a) +inline Track AxisToTrack(Axis a) { assert(IsValidAxis(a)); return (Track)a; @@ -74,7 +74,7 @@ static inline Track AxisToTrack(Axis a) * @param track the track to convert * @return the converted TrackBits value of the track */ -static inline TrackBits TrackToTrackBits(Track track) +inline TrackBits TrackToTrackBits(Track track) { assert(IsValidTrack(track)); return (TrackBits)(1 << track); @@ -85,7 +85,7 @@ static inline TrackBits TrackToTrackBits(Track track) * @param a the axis to convert * @return the converted TrackBits value of the axis */ -static inline TrackBits AxisToTrackBits(Axis a) +inline TrackBits AxisToTrackBits(Axis a) { return TrackToTrackBits(AxisToTrack(a)); } @@ -96,7 +96,7 @@ static inline TrackBits AxisToTrackBits(Axis a) * @param corner The corner of a tile. * @return The TrackBits of the track in the corner. */ -static inline TrackBits CornerToTrackBits(Corner corner) +inline TrackBits CornerToTrackBits(Corner corner) { extern const TrackBits _corner_to_trackbits[]; assert(IsValidCorner(corner)); @@ -108,7 +108,7 @@ static inline TrackBits CornerToTrackBits(Corner corner) * @param trackdir the track direction to convert * @return the converted TrackdirBits value */ -static inline TrackdirBits TrackdirToTrackdirBits(Trackdir trackdir) +inline TrackdirBits TrackdirToTrackdirBits(Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); return (TrackdirBits)(1 << trackdir); @@ -128,7 +128,7 @@ static inline TrackdirBits TrackdirToTrackdirBits(Trackdir trackdir) * @return The first Track from the TrackBits value * @see FindFirstTrack */ -static inline Track RemoveFirstTrack(TrackBits *tracks) +inline Track RemoveFirstTrack(TrackBits *tracks) { if (*tracks != TRACK_BIT_NONE && *tracks != INVALID_TRACK_BIT) { assert((*tracks & ~TRACK_BIT_MASK) == TRACK_BIT_NONE); @@ -153,7 +153,7 @@ static inline Track RemoveFirstTrack(TrackBits *tracks) * @return The first Trackdir from the TrackdirBits value * @see FindFirstTrackdir */ -static inline Trackdir RemoveFirstTrackdir(TrackdirBits *trackdirs) +inline Trackdir RemoveFirstTrackdir(TrackdirBits *trackdirs) { if (*trackdirs != TRACKDIR_BIT_NONE && *trackdirs != INVALID_TRACKDIR_BIT) { assert((*trackdirs & ~TRACKDIR_BIT_MASK) == TRACKDIR_BIT_NONE); @@ -174,7 +174,7 @@ static inline Trackdir RemoveFirstTrackdir(TrackdirBits *trackdirs) * @return The first Track found or INVALID_TRACK * @see RemoveFirstTrack */ -static inline Track FindFirstTrack(TrackBits tracks) +inline Track FindFirstTrack(TrackBits tracks) { return (tracks != TRACK_BIT_NONE && tracks != INVALID_TRACK_BIT) ? (Track)FIND_FIRST_BIT(tracks) : INVALID_TRACK; } @@ -190,7 +190,7 @@ static inline Track FindFirstTrack(TrackBits tracks) * @return The Track from the value or INVALID_TRACK * @pre tracks must contains only one Track or be INVALID_TRACK_BIT */ -static inline Track TrackBitsToTrack(TrackBits tracks) +inline Track TrackBitsToTrack(TrackBits tracks) { assert(tracks == INVALID_TRACK_BIT || (tracks != TRACK_BIT_NONE && KillFirstBit(tracks & TRACK_BIT_MASK) == TRACK_BIT_NONE)); return tracks != INVALID_TRACK_BIT ? (Track)FIND_FIRST_BIT(tracks & TRACK_BIT_MASK) : INVALID_TRACK; @@ -208,7 +208,7 @@ static inline Track TrackBitsToTrack(TrackBits tracks) * @pre trackdirs must not be INVALID_TRACKDIR_BIT * @see RemoveFirstTrackdir */ -static inline Trackdir FindFirstTrackdir(TrackdirBits trackdirs) +inline Trackdir FindFirstTrackdir(TrackdirBits trackdirs) { assert((trackdirs & ~TRACKDIR_BIT_MASK) == TRACKDIR_BIT_NONE); return (trackdirs != TRACKDIR_BIT_NONE) ? (Trackdir)FindFirstBit2x64(trackdirs) : INVALID_TRACKDIR; @@ -228,7 +228,7 @@ static inline Trackdir FindFirstTrackdir(TrackdirBits trackdirs) * @param t the track to convert * @return the opposite track */ -static inline Track TrackToOppositeTrack(Track t) +inline Track TrackToOppositeTrack(Track t) { assert(IsValidTrack(t)); return (Track)(t ^ 1); @@ -244,7 +244,7 @@ static inline Track TrackToOppositeTrack(Track t) * @return The reverse trackdir * @pre trackdir must not be INVALID_TRACKDIR */ -static inline Trackdir ReverseTrackdir(Trackdir trackdir) +inline Trackdir ReverseTrackdir(Trackdir trackdir) { assert(IsValidTrackdirForRoadVehicle(trackdir)); return (Trackdir)(trackdir ^ 8); @@ -259,7 +259,7 @@ static inline Trackdir ReverseTrackdir(Trackdir trackdir) * @param trackdir The trackdir value * @return The Track which is used in the value */ -static inline Track TrackdirToTrack(Trackdir trackdir) +inline Track TrackdirToTrack(Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); return (Track)(trackdir & 0x7); @@ -276,7 +276,7 @@ static inline Track TrackdirToTrack(Trackdir trackdir) * @param track The given Track * @return The Trackdir from the given Track */ -static inline Trackdir TrackToTrackdir(Track track) +inline Trackdir TrackToTrackdir(Track track) { assert(IsValidTrack(track)); return (Trackdir)track; @@ -291,7 +291,7 @@ static inline Trackdir TrackToTrackdir(Track track) * @param track The track to get the TrackdirBits from * @return The TrackdirBits which the selected tracks */ -static inline TrackdirBits TrackToTrackdirBits(Track track) +inline TrackdirBits TrackToTrackdirBits(Track track) { Trackdir td = TrackToTrackdir(track); return (TrackdirBits)(TrackdirToTrackdirBits(td) | TrackdirToTrackdirBits(ReverseTrackdir(td))); @@ -305,7 +305,7 @@ static inline TrackdirBits TrackToTrackdirBits(Track track) * @param bits The TrackdirBits to get the TrackBits from * @return The TrackBits */ -static inline TrackBits TrackdirBitsToTrackBits(TrackdirBits bits) +inline TrackBits TrackdirBitsToTrackBits(TrackdirBits bits) { return (TrackBits)((bits | (bits >> 8)) & TRACK_BIT_MASK); } @@ -316,7 +316,7 @@ static inline TrackBits TrackdirBitsToTrackBits(TrackdirBits bits) * @param bits The TrackBits * @return The TrackdirBits containing of bits in both directions. */ -static inline TrackdirBits TrackBitsToTrackdirBits(TrackBits bits) +inline TrackdirBits TrackBitsToTrackdirBits(TrackBits bits) { return (TrackdirBits)(bits * 0x101); } @@ -326,7 +326,7 @@ static inline TrackdirBits TrackBitsToTrackdirBits(TrackBits bits) * @param tracks The track bits. * @param track The track to check. */ -static inline bool HasTrack(TrackBits tracks, Track track) +inline bool HasTrack(TrackBits tracks, Track track) { assert(IsValidTrack(track)); return HasBit(tracks, track); @@ -337,7 +337,7 @@ static inline bool HasTrack(TrackBits tracks, Track track) * @param trackdirs The trackdir bits. * @param trackdir The trackdir to check. */ -static inline bool HasTrackdir(TrackdirBits trackdirs, Trackdir trackdir) +inline bool HasTrackdir(TrackdirBits trackdirs, Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); return HasBit(trackdirs, trackdir); @@ -349,7 +349,7 @@ static inline bool HasTrackdir(TrackdirBits trackdirs, Trackdir trackdir) * @param ts The TrackStatus returned by GetTileTrackStatus() * @return the present trackdirs */ -static inline TrackdirBits TrackStatusToTrackdirBits(TrackStatus ts) +inline TrackdirBits TrackStatusToTrackdirBits(TrackStatus ts) { return (TrackdirBits)(ts & TRACKDIR_BIT_MASK); } @@ -360,7 +360,7 @@ static inline TrackdirBits TrackStatusToTrackdirBits(TrackStatus ts) * @param ts The TrackStatus returned by GetTileTrackStatus() * @return the present tracks */ -static inline TrackBits TrackStatusToTrackBits(TrackStatus ts) +inline TrackBits TrackStatusToTrackBits(TrackStatus ts) { return TrackdirBitsToTrackBits(TrackStatusToTrackdirBits(ts)); } @@ -373,7 +373,7 @@ static inline TrackBits TrackStatusToTrackBits(TrackStatus ts) * @param ts The TrackStatus returned by GetTileTrackStatus() * @return the The trackdirs that are blocked by red-signals */ -static inline TrackdirBits TrackStatusToRedSignals(TrackStatus ts) +inline TrackdirBits TrackStatusToRedSignals(TrackStatus ts) { return (TrackdirBits)((ts >> 16) & TRACKDIR_BIT_MASK); } @@ -385,7 +385,7 @@ static inline TrackdirBits TrackStatusToRedSignals(TrackStatus ts) * @param red_signals red signals * @return the TrackStatus representing the given information */ -static inline TrackStatus CombineTrackStatus(TrackdirBits trackdirbits, TrackdirBits red_signals) +inline TrackStatus CombineTrackStatus(TrackdirBits trackdirbits, TrackdirBits red_signals) { return (TrackStatus)(trackdirbits | (red_signals << 16)); } @@ -400,7 +400,7 @@ static inline TrackStatus CombineTrackStatus(TrackdirBits trackdirbits, Trackdir * @param trackdir The given trackdir * @return The next Trackdir value of the next tile. */ -static inline Trackdir NextTrackdir(Trackdir trackdir) +inline Trackdir NextTrackdir(Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); extern const Trackdir _next_trackdir[TRACKDIR_END]; @@ -417,7 +417,7 @@ static inline Trackdir NextTrackdir(Trackdir trackdir) * @param track The given track * @return The TrackBits with the tracks marked which cross the given track by 90 deg. */ -static inline TrackBits TrackCrossesTracks(Track track) +inline TrackBits TrackCrossesTracks(Track track) { assert(IsValidTrack(track)); extern const TrackBits _track_crosses_tracks[TRACK_END]; @@ -436,7 +436,7 @@ static inline TrackBits TrackCrossesTracks(Track track) * @param trackdir The given track direction * @return The direction which points to the resulting tile if following the Trackdir */ -static inline DiagDirection TrackdirToExitdir(Trackdir trackdir) +inline DiagDirection TrackdirToExitdir(Trackdir trackdir) { assert(IsValidTrackdirForRoadVehicle(trackdir)); extern const DiagDirection _trackdir_to_exitdir[TRACKDIR_END]; @@ -458,7 +458,7 @@ static inline DiagDirection TrackdirToExitdir(Trackdir trackdir) * @param diagdir The DiagDirection to apply on * @return The resulting track direction or INVALID_TRACKDIR if not possible. */ -static inline Trackdir TrackExitdirToTrackdir(Track track, DiagDirection diagdir) +inline Trackdir TrackExitdirToTrackdir(Track track, DiagDirection diagdir) { assert(IsValidTrack(track)); assert(IsValidDiagDirection(diagdir)); @@ -483,7 +483,7 @@ static inline Trackdir TrackExitdirToTrackdir(Track track, DiagDirection diagdir * @param diagdir The direction to "come from" * @return the resulting Trackdir or INVALID_TRACKDIR if not possible. */ -static inline Trackdir TrackEnterdirToTrackdir(Track track, DiagDirection diagdir) +inline Trackdir TrackEnterdirToTrackdir(Track track, DiagDirection diagdir) { assert(IsValidTrack(track)); assert(IsValidDiagDirection(diagdir)); @@ -495,7 +495,7 @@ static inline Trackdir TrackEnterdirToTrackdir(Track track, DiagDirection diagdi * Maps a track and a full (8-way) direction to the trackdir that represents * the track running in the given direction. */ -static inline Trackdir TrackDirectionToTrackdir(Track track, Direction dir) +inline Trackdir TrackDirectionToTrackdir(Track track, Direction dir) { assert(IsValidTrack(track)); assert(IsValidDirection(dir)); @@ -509,7 +509,7 @@ static inline Trackdir TrackDirectionToTrackdir(Track track, Direction dir) * @param diagdir The direction * @return The resulting Track */ -static inline Track DiagDirToDiagTrack(DiagDirection diagdir) +inline Track DiagDirToDiagTrack(DiagDirection diagdir) { assert(IsValidDiagDirection(diagdir)); return (Track)(diagdir & 1); @@ -521,7 +521,7 @@ static inline Track DiagDirToDiagTrack(DiagDirection diagdir) * @param diagdir The direction * @return The resulting TrackBits */ -static inline TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir) +inline TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir) { assert(IsValidDiagDirection(diagdir)); return TrackToTrackBits(DiagDirToDiagTrack(diagdir)); @@ -534,7 +534,7 @@ static inline TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir) * @param diagdir The direction * @return The resulting Trackdir direction */ -static inline Trackdir DiagDirToDiagTrackdir(DiagDirection diagdir) +inline Trackdir DiagDirToDiagTrackdir(DiagDirection diagdir) { assert(IsValidDiagDirection(diagdir)); extern const Trackdir _dir_to_diag_trackdir[DIAGDIR_END]; @@ -552,7 +552,7 @@ static inline Trackdir DiagDirToDiagTrackdir(DiagDirection diagdir) * @return The TrackdirBits which can be used from the given direction * @see DiagdirReachesTracks */ -static inline TrackdirBits DiagdirReachesTrackdirs(DiagDirection diagdir) +inline TrackdirBits DiagdirReachesTrackdirs(DiagDirection diagdir) { assert(IsValidDiagDirection(diagdir)); extern const TrackdirBits _exitdir_reaches_trackdirs[DIAGDIR_END]; @@ -570,7 +570,7 @@ static inline TrackdirBits DiagdirReachesTrackdirs(DiagDirection diagdir) * @return The tracks which can be used * @see DiagdirReachesTrackdirs */ -static inline TrackBits DiagdirReachesTracks(DiagDirection diagdir) { return TrackdirBitsToTrackBits(DiagdirReachesTrackdirs(diagdir)); } +inline TrackBits DiagdirReachesTracks(DiagDirection diagdir) { return TrackdirBitsToTrackBits(DiagdirReachesTrackdirs(diagdir)); } /** * Maps a trackdir to the trackdirs that can be reached from it (ie, when @@ -581,7 +581,7 @@ static inline TrackBits DiagdirReachesTracks(DiagDirection diagdir) { return Tra * @param trackdir The track direction which will be leaved * @return The track directions which can be used from this direction (in the next tile) */ -static inline TrackdirBits TrackdirReachesTrackdirs(Trackdir trackdir) +inline TrackdirBits TrackdirReachesTrackdirs(Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); extern const TrackdirBits _exitdir_reaches_trackdirs[DIAGDIR_END]; @@ -603,7 +603,7 @@ static inline TrackdirBits TrackdirReachesTrackdirs(Trackdir trackdir) * @param trackdir The track direction * @return The TrackdirBits which are (more or less) 90 deg turns. */ -static inline TrackdirBits TrackdirCrossesTrackdirs(Trackdir trackdir) +inline TrackdirBits TrackdirCrossesTrackdirs(Trackdir trackdir) { assert(IsValidTrackdirForRoadVehicle(trackdir)); extern const TrackdirBits _track_crosses_trackdirs[TRACK_END]; @@ -616,7 +616,7 @@ static inline TrackdirBits TrackdirCrossesTrackdirs(Trackdir trackdir) * @param track The given track to check * @return true if diagonal, else false */ -static inline bool IsDiagonalTrack(Track track) +inline bool IsDiagonalTrack(Track track) { assert(IsValidTrack(track)); return (track == TRACK_X) || (track == TRACK_Y); @@ -628,7 +628,7 @@ static inline bool IsDiagonalTrack(Track track) * @param trackdir The given trackdir * @return true if the trackdir use a diagonal track */ -static inline bool IsDiagonalTrackdir(Trackdir trackdir) +inline bool IsDiagonalTrackdir(Trackdir trackdir) { assert(IsValidTrackdir(trackdir)); return IsDiagonalTrack(TrackdirToTrack(trackdir)); @@ -642,7 +642,7 @@ static inline bool IsDiagonalTrackdir(Trackdir trackdir) * @param bits The tracks present. * @return Whether the tracks present overlap in any way. */ -static inline bool TracksOverlap(TrackBits bits) +inline bool TracksOverlap(TrackBits bits) { /* With no, or only one track, there is no overlap */ if (bits == TRACK_BIT_NONE || KillFirstBit(bits) == TRACK_BIT_NONE) return false; @@ -659,7 +659,7 @@ static inline bool TracksOverlap(TrackBits bits) * @param track The track to test * @return true if the track is already in the tracks or overlaps the tracks. */ -static inline bool TrackOverlapsTracks(TrackBits tracks, Track track) +inline bool TrackOverlapsTracks(TrackBits tracks, Track track) { if (HasBit(tracks, track)) return true; return TracksOverlap(tracks | TrackToTrackBits(track)); @@ -670,7 +670,7 @@ static inline bool TrackOverlapsTracks(TrackBits tracks, Track track) * @param dir the trackdir to check * @return true if it is a reversing road trackdir */ -static inline bool IsReversingRoadTrackdir(Trackdir dir) +inline bool IsReversingRoadTrackdir(Trackdir dir) { assert(IsValidTrackdirForRoadVehicle(dir)); return (dir & 0x07) >= 6; @@ -681,7 +681,7 @@ static inline bool IsReversingRoadTrackdir(Trackdir dir) * @param dir the trackdir to check * @return true if it is a straight road trackdir */ -static inline bool IsStraightRoadTrackdir(Trackdir dir) +inline bool IsStraightRoadTrackdir(Trackdir dir) { assert(IsValidTrackdirForRoadVehicle(dir)); return (dir & 0x06) == 0; @@ -697,7 +697,7 @@ static inline bool IsStraightRoadTrackdir(Trackdir dir) * @param dir The trackdir of interest. * @return true iff the track goes upwards. */ -static inline bool IsUphillTrackdir(Slope slope, Trackdir dir) +inline bool IsUphillTrackdir(Slope slope, Trackdir dir) { assert(IsValidTrackdirForRoadVehicle(dir)); extern const TrackdirBits _uphill_trackdirs[]; @@ -711,7 +711,7 @@ static inline bool IsUphillTrackdir(Slope slope, Trackdir dir) * @param track vehicle track bits * @return side of tile the vehicle will leave */ -static inline DiagDirection VehicleExitDir(Direction direction, TrackBits track) +inline DiagDirection VehicleExitDir(Direction direction, TrackBits track) { static const TrackBits state_dir_table[DIAGDIR_END] = { TRACK_BIT_RIGHT, TRACK_BIT_LOWER, TRACK_BIT_LEFT, TRACK_BIT_UPPER }; diff --git a/src/transparency.h b/src/transparency.h index 0c59dd1d7146c..2d1816ea130d0 100644 --- a/src/transparency.h +++ b/src/transparency.h @@ -45,7 +45,7 @@ extern byte _display_opt; * * @param to the structure which transparency option is ask for */ -static inline bool IsTransparencySet(TransparencyOption to) +inline bool IsTransparencySet(TransparencyOption to) { return (HasBit(_transparency_opt, to) && _game_mode != GM_MENU); } @@ -56,7 +56,7 @@ static inline bool IsTransparencySet(TransparencyOption to) * * @param to the structure which invisibility option is ask for */ -static inline bool IsInvisibilitySet(TransparencyOption to) +inline bool IsInvisibilitySet(TransparencyOption to) { return (HasBit(_transparency_opt & _invisibility_opt, to) && _game_mode != GM_MENU); } @@ -66,7 +66,7 @@ static inline bool IsInvisibilitySet(TransparencyOption to) * * @param to the transparency option to be toggled */ -static inline void ToggleTransparency(TransparencyOption to) +inline void ToggleTransparency(TransparencyOption to) { ToggleBit(_transparency_opt, to); } @@ -76,7 +76,7 @@ static inline void ToggleTransparency(TransparencyOption to) * * @param to the structure which invisibility option is toggle */ -static inline void ToggleInvisibility(TransparencyOption to) +inline void ToggleInvisibility(TransparencyOption to) { ToggleBit(_invisibility_opt, to); } @@ -88,7 +88,7 @@ static inline void ToggleInvisibility(TransparencyOption to) * * @param to the object type which invisibility option to toggle */ -static inline void ToggleInvisibilityWithTransparency(TransparencyOption to) +inline void ToggleInvisibilityWithTransparency(TransparencyOption to) { if (IsInvisibilitySet(to)) { ClrBit(_invisibility_opt, to); @@ -104,13 +104,13 @@ static inline void ToggleInvisibilityWithTransparency(TransparencyOption to) * * @param to the transparency option to be locked or unlocked */ -static inline void ToggleTransparencyLock(TransparencyOption to) +inline void ToggleTransparencyLock(TransparencyOption to) { ToggleBit(_transparency_lock, to); } /** Set or clear all non-locked transparency options */ -static inline void ResetRestoreAllTransparency() +inline void ResetRestoreAllTransparency() { /* if none of the non-locked options are set */ if ((_transparency_opt & ~_transparency_lock) == 0) { diff --git a/src/tree_map.h b/src/tree_map.h index 9bed461a5174c..3992b47a751fe 100644 --- a/src/tree_map.h +++ b/src/tree_map.h @@ -70,7 +70,7 @@ enum TreeGround { * @return The treetype of the given tile with trees * @pre Tile t must be of type MP_TREES */ -static inline TreeType GetTreeType(Tile t) +inline TreeType GetTreeType(Tile t) { assert(IsTileType(t, MP_TREES)); return (TreeType)t.m3(); @@ -85,7 +85,7 @@ static inline TreeType GetTreeType(Tile t) * @return The groundtype of the tile * @pre Tile must be of type MP_TREES */ -static inline TreeGround GetTreeGround(Tile t) +inline TreeGround GetTreeGround(Tile t) { assert(IsTileType(t, MP_TREES)); return (TreeGround)GB(t.m2(), 6, 3); @@ -110,7 +110,7 @@ static inline TreeGround GetTreeGround(Tile t) * @pre Tile must be of type MP_TREES * @see GetTreeCount */ -static inline uint GetTreeDensity(Tile t) +inline uint GetTreeDensity(Tile t) { assert(IsTileType(t, MP_TREES)); return GB(t.m2(), 4, 2); @@ -127,7 +127,7 @@ static inline uint GetTreeDensity(Tile t) * @param d The density to save with * @pre Tile must be of type MP_TREES */ -static inline void SetTreeGroundDensity(Tile t, TreeGround g, uint d) +inline void SetTreeGroundDensity(Tile t, TreeGround g, uint d) { assert(IsTileType(t, MP_TREES)); // XXX incomplete SB(t.m2(), 4, 2, d); @@ -146,7 +146,7 @@ static inline void SetTreeGroundDensity(Tile t, TreeGround g, uint d) * @return The number of trees (1-4) * @pre Tile must be of type MP_TREES */ -static inline uint GetTreeCount(Tile t) +inline uint GetTreeCount(Tile t) { assert(IsTileType(t, MP_TREES)); return GB(t.m5(), 6, 2) + 1; @@ -163,7 +163,7 @@ static inline uint GetTreeCount(Tile t) * @param c The value to add (or reduce) on the tree-count value * @pre Tile must be of type MP_TREES */ -static inline void AddTreeCount(Tile t, int c) +inline void AddTreeCount(Tile t, int c) { assert(IsTileType(t, MP_TREES)); // XXX incomplete t.m5() += c << 6; @@ -178,7 +178,7 @@ static inline void AddTreeCount(Tile t, int c) * @return The tree growth status * @pre Tile must be of type MP_TREES */ -static inline uint GetTreeGrowth(Tile t) +inline uint GetTreeGrowth(Tile t) { assert(IsTileType(t, MP_TREES)); return GB(t.m5(), 0, 3); @@ -193,7 +193,7 @@ static inline uint GetTreeGrowth(Tile t) * @param a The value to add on the tree growth status * @pre Tile must be of type MP_TREES */ -static inline void AddTreeGrowth(Tile t, int a) +inline void AddTreeGrowth(Tile t, int a) { assert(IsTileType(t, MP_TREES)); // XXX incomplete t.m5() += a; @@ -209,7 +209,7 @@ static inline void AddTreeGrowth(Tile t, int a) * @param g The new value * @pre Tile must be of type MP_TREES */ -static inline void SetTreeGrowth(Tile t, uint g) +inline void SetTreeGrowth(Tile t, uint g) { assert(IsTileType(t, MP_TREES)); // XXX incomplete SB(t.m5(), 0, 3, g); @@ -227,7 +227,7 @@ static inline void SetTreeGrowth(Tile t, uint g) * @param ground the ground type * @param density the density (not the number of trees) */ -static inline void MakeTree(Tile t, TreeType type, uint count, uint growth, TreeGround ground, uint density) +inline void MakeTree(Tile t, TreeType type, uint count, uint growth, TreeGround ground, uint density) { SetTileType(t, MP_TREES); SetTileOwner(t, OWNER_NONE); diff --git a/src/tunnel_map.h b/src/tunnel_map.h index 757d988ac763f..cecdfcd2c1a41 100644 --- a/src/tunnel_map.h +++ b/src/tunnel_map.h @@ -20,7 +20,7 @@ * @pre IsTileType(t, MP_TUNNELBRIDGE) * @return true if and only if this tile is a tunnel (entrance) */ -static inline bool IsTunnel(Tile t) +inline bool IsTunnel(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); return !HasBit(t.m5(), 7); @@ -31,7 +31,7 @@ static inline bool IsTunnel(Tile t) * @param t the tile that might be a tunnel * @return true if and only if this tile is a tunnel (entrance) */ -static inline bool IsTunnelTile(Tile t) +inline bool IsTunnelTile(Tile t) { return IsTileType(t, MP_TUNNELBRIDGE) && IsTunnel(t); } @@ -47,7 +47,7 @@ bool IsTunnelInWayDir(TileIndex tile, int z, DiagDirection dir); * @param d the direction facing out of the tunnel * @param r the road type used in the tunnel */ -static inline void MakeRoadTunnel(Tile t, Owner o, DiagDirection d, RoadType road_rt, RoadType tram_rt) +inline void MakeRoadTunnel(Tile t, Owner o, DiagDirection d, RoadType road_rt, RoadType tram_rt) { SetTileType(t, MP_TUNNELBRIDGE); SetTileOwner(t, o); @@ -70,7 +70,7 @@ static inline void MakeRoadTunnel(Tile t, Owner o, DiagDirection d, RoadType roa * @param d the direction facing out of the tunnel * @param r the rail type used in the tunnel */ -static inline void MakeRailTunnel(Tile t, Owner o, DiagDirection d, RailType r) +inline void MakeRailTunnel(Tile t, Owner o, DiagDirection d, RailType r) { SetTileType(t, MP_TUNNELBRIDGE); SetTileOwner(t, o); diff --git a/src/tunnelbridge.h b/src/tunnelbridge.h index 1e35f891cffc3..424fb5f42e9d6 100644 --- a/src/tunnelbridge.h +++ b/src/tunnelbridge.h @@ -22,7 +22,7 @@ void MarkBridgeDirty(TileIndex tile); * @param end The end of the tunnel or bridge. * @return length of bridge/tunnel middle */ -static inline uint GetTunnelBridgeLength(TileIndex begin, TileIndex end) +inline uint GetTunnelBridgeLength(TileIndex begin, TileIndex end) { int x1 = TileX(begin); int y1 = TileY(begin); @@ -38,7 +38,7 @@ static inline uint GetTunnelBridgeLength(TileIndex begin, TileIndex end) * @param end The end of the tunnel or bridge. * @param owner The new owner to set */ -static inline void SetTunnelBridgeOwner(TileIndex begin, TileIndex end, Owner owner) +inline void SetTunnelBridgeOwner(TileIndex begin, TileIndex end, Owner owner) { SetTileOwner(begin, owner); SetTileOwner(end, owner); diff --git a/src/tunnelbridge_map.h b/src/tunnelbridge_map.h index 3f1779ffa635c..efd0454ab1590 100644 --- a/src/tunnelbridge_map.h +++ b/src/tunnelbridge_map.h @@ -23,7 +23,7 @@ * @pre IsTileType(t, MP_TUNNELBRIDGE) * @return the above mentioned direction */ -static inline DiagDirection GetTunnelBridgeDirection(Tile t) +inline DiagDirection GetTunnelBridgeDirection(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); return (DiagDirection)GB(t.m5(), 0, 2); @@ -36,7 +36,7 @@ static inline DiagDirection GetTunnelBridgeDirection(Tile t) * @pre IsTileType(t, MP_TUNNELBRIDGE) * @return the transport type in the tunnel/bridge */ -static inline TransportType GetTunnelBridgeTransportType(Tile t) +inline TransportType GetTunnelBridgeTransportType(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); return (TransportType)GB(t.m5(), 2, 2); @@ -49,7 +49,7 @@ static inline TransportType GetTunnelBridgeTransportType(Tile t) * @pre IsTileType(t, MP_TUNNELBRIDGE) * @return true if and only if the tile is in a snowy/desert area */ -static inline bool HasTunnelBridgeSnowOrDesert(Tile t) +inline bool HasTunnelBridgeSnowOrDesert(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); return HasBit(t.m7(), 5); @@ -63,7 +63,7 @@ static inline bool HasTunnelBridgeSnowOrDesert(Tile t) * not in snow and not in desert false * @pre IsTileType(t, MP_TUNNELBRIDGE) */ -static inline void SetTunnelBridgeSnowOrDesert(Tile t, bool snow_or_desert) +inline void SetTunnelBridgeSnowOrDesert(Tile t, bool snow_or_desert) { assert(IsTileType(t, MP_TUNNELBRIDGE)); SB(t.m7(), 5, 1, snow_or_desert); @@ -75,7 +75,7 @@ static inline void SetTunnelBridgeSnowOrDesert(Tile t, bool snow_or_desert) * @pre IsTileType(t, MP_TUNNELBRIDGE) * @return other end */ -static inline TileIndex GetOtherTunnelBridgeEnd(Tile t) +inline TileIndex GetOtherTunnelBridgeEnd(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); return IsTunnel(t) ? GetOtherTunnelEnd(t) : GetOtherBridgeEnd(t); @@ -88,7 +88,7 @@ static inline TileIndex GetOtherTunnelBridgeEnd(Tile t) * @param t the tile * @return reservation state */ -static inline bool HasTunnelBridgeReservation(Tile t) +inline bool HasTunnelBridgeReservation(Tile t) { assert(IsTileType(t, MP_TUNNELBRIDGE)); assert(GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL); @@ -101,7 +101,7 @@ static inline bool HasTunnelBridgeReservation(Tile t) * @param t the tile * @param b the reservation state */ -static inline void SetTunnelBridgeReservation(Tile t, bool b) +inline void SetTunnelBridgeReservation(Tile t, bool b) { assert(IsTileType(t, MP_TUNNELBRIDGE)); assert(GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL); @@ -114,7 +114,7 @@ static inline void SetTunnelBridgeReservation(Tile t, bool b) * @param t the tile * @return reserved track bits */ -static inline TrackBits GetTunnelBridgeReservationTrackBits(Tile t) +inline TrackBits GetTunnelBridgeReservationTrackBits(Tile t) { return HasTunnelBridgeReservation(t) ? DiagDirToDiagTrackBits(GetTunnelBridgeDirection(t)) : TRACK_BIT_NONE; } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 386b956b4fbb1..b4b6a53de002c 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1222,21 +1222,40 @@ Vehicle *CheckClickOnVehicle(const Viewport *vp, int x, int y) x = ScaleByZoom(x, vp->zoom) + vp->virtual_left; y = ScaleByZoom(y, vp->zoom) + vp->virtual_top; - for (Vehicle *v : Vehicle::Iterate()) { - if ((v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) == 0 && - x >= v->coord.left && x <= v->coord.right && - y >= v->coord.top && y <= v->coord.bottom) { - - dist = std::max( - abs(((v->coord.left + v->coord.right) >> 1) - x), - abs(((v->coord.top + v->coord.bottom) >> 1) - y) - ); - - if (dist < best_dist) { - found = v; - best_dist = dist; + /* Border size of MAX_VEHICLE_PIXEL_xy */ + const int xb = MAX_VEHICLE_PIXEL_X * ZOOM_LVL_BASE; + const int yb = MAX_VEHICLE_PIXEL_Y * ZOOM_LVL_BASE; + + /* The hash area to scan */ + int xl = GEN_HASHX(x - xb); + int xu = GEN_HASHX(x); + int yl = GEN_HASHY(y - yb); + int yu = GEN_HASHY(y); + + for (int hy = yl;; hy = (hy + GEN_HASHY_INC) & GEN_HASHY_MASK) { + for (int hx = xl;; hx = (hx + GEN_HASHX_INC) & GEN_HASHX_MASK) { + Vehicle *v = _vehicle_viewport_hash[hx + hy]; // already masked & 0xFFF + + while (v != nullptr) { + if ((v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) == 0 && + x >= v->coord.left && x <= v->coord.right && + y >= v->coord.top && y <= v->coord.bottom) { + + dist = std::max( + abs(((v->coord.left + v->coord.right) >> 1) - x), + abs(((v->coord.top + v->coord.bottom) >> 1) - y) + ); + + if (dist < best_dist) { + found = v; + best_dist = dist; + } + } + v = v->hash_viewport_next; } + if (hx == xu) break; } + if (hy == yu) break; } return found; @@ -3026,7 +3045,7 @@ uint32_t Vehicle::GetDisplayMaxWeight() const { uint32_t max_weight = 0; - for (const Vehicle* u = this; u != nullptr; u = u->Next()) { + for (const Vehicle *u = this; u != nullptr; u = u->Next()) { max_weight += u->GetMaxWeight(); } diff --git a/src/vehicle_base.h b/src/vehicle_base.h index cd0ac70aae5bc..b1ddea8a61e4d 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -1017,8 +1017,8 @@ struct Vehicle : VehiclePool::PoolItem<&_vehicle_pool>, BaseVehicle, BaseConsist */ struct OrderIterator { typedef Order value_type; - typedef Order* pointer; - typedef Order& reference; + typedef Order *pointer; + typedef Order &reference; typedef size_t difference_type; typedef std::forward_iterator_tag iterator_category; diff --git a/src/vehicle_func.h b/src/vehicle_func.h index 06268b4abb00c..7595c9478bd85 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -85,7 +85,7 @@ Direction GetDirectionTowards(const Vehicle *v, int x, int y); * @param type Vehicle type being queried. * @return Vehicle type is buildable by a company. */ -static inline bool IsCompanyBuildableVehicleType(VehicleType type) +inline bool IsCompanyBuildableVehicleType(VehicleType type) { switch (type) { case VEH_TRAIN: @@ -103,7 +103,7 @@ static inline bool IsCompanyBuildableVehicleType(VehicleType type) * @param v Vehicle being queried. * @return Vehicle is buildable by a company. */ -static inline bool IsCompanyBuildableVehicleType(const BaseVehicle *v) +inline bool IsCompanyBuildableVehicleType(const BaseVehicle *v) { return IsCompanyBuildableVehicleType(v->type); } @@ -120,42 +120,42 @@ extern const StringID _veh_refit_msg_table[]; extern const StringID _send_to_depot_msg_table[]; /* Functions to find the right command for certain vehicle type */ -static inline StringID GetCmdBuildVehMsg(VehicleType type) +inline StringID GetCmdBuildVehMsg(VehicleType type) { return _veh_build_msg_table[type]; } -static inline StringID GetCmdBuildVehMsg(const BaseVehicle *v) +inline StringID GetCmdBuildVehMsg(const BaseVehicle *v) { return GetCmdBuildVehMsg(v->type); } -static inline StringID GetCmdSellVehMsg(VehicleType type) +inline StringID GetCmdSellVehMsg(VehicleType type) { return _veh_sell_msg_table[type]; } -static inline StringID GetCmdSellVehMsg(const BaseVehicle *v) +inline StringID GetCmdSellVehMsg(const BaseVehicle *v) { return GetCmdSellVehMsg(v->type); } -static inline StringID GetCmdRefitVehMsg(VehicleType type) +inline StringID GetCmdRefitVehMsg(VehicleType type) { return _veh_refit_msg_table[type]; } -static inline StringID GetCmdRefitVehMsg(const BaseVehicle *v) +inline StringID GetCmdRefitVehMsg(const BaseVehicle *v) { return GetCmdRefitVehMsg(v->type); } -static inline StringID GetCmdSendToDepotMsg(VehicleType type) +inline StringID GetCmdSendToDepotMsg(VehicleType type) { return _send_to_depot_msg_table[type]; } -static inline StringID GetCmdSendToDepotMsg(const BaseVehicle *v) +inline StringID GetCmdSendToDepotMsg(const BaseVehicle *v) { return GetCmdSendToDepotMsg(v->type); } diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 8d352815506d0..f78258078026a 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -70,7 +70,7 @@ void ShowVehicleListWindow(CompanyID company, VehicleType vehicle_type, TileInde * @param type the vehicle type to look at * @return the height */ -static inline uint GetVehicleHeight(VehicleType type) +inline uint GetVehicleHeight(VehicleType type) { return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24; } @@ -93,7 +93,7 @@ VehicleCellSize GetVehicleImageCellSize(VehicleType type, EngineImageType image_ * @return corresponding window class * @note works only for company buildable vehicle types */ -static inline WindowClass GetWindowClassForVehicleType(VehicleType vt) +inline WindowClass GetWindowClassForVehicleType(VehicleType vt) { switch (vt) { default: NOT_REACHED(); diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index b7cbbb22b97f4..1f53986599d27 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -10,6 +10,7 @@ #include "stdafx.h" #include "train.h" #include "vehiclelist.h" +#include "vehiclelist_func.h" #include "group.h" #include "safeguards.h" @@ -116,17 +117,11 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli switch (vli.type) { case VL_STATION_LIST: - for (const Vehicle *v : Vehicle::Iterate()) { - if (v->type == vli.vtype && v->IsPrimaryVehicle()) { - for (const Order *order : v->Orders()) { - if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT) || order->IsType(OT_IMPLICIT)) - && order->GetDestination() == vli.index) { - list->push_back(v); - break; - } - } - } - } + FindVehiclesWithOrder( + [&vli](const Vehicle *v) { return v->type == vli.vtype; }, + [&vli](const Order *order) { return (order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT) || order->IsType(OT_IMPLICIT)) && order->GetDestination() == vli.index; }, + [&list](const Vehicle *v) { list->push_back(v); } + ); break; case VL_SHARED_ORDERS: { @@ -161,16 +156,11 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli break; case VL_DEPOT_LIST: - for (const Vehicle *v : Vehicle::Iterate()) { - if (v->type == vli.vtype && v->IsPrimaryVehicle()) { - for (const Order *order : v->Orders()) { - if (order->IsType(OT_GOTO_DEPOT) && !(order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && order->GetDestination() == vli.index) { - list->push_back(v); - break; - } - } - } - } + FindVehiclesWithOrder( + [&vli](const Vehicle *v) { return v->type == vli.vtype; }, + [&vli](const Order *order) { return order->IsType(OT_GOTO_DEPOT) && !(order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && order->GetDestination() == vli.index; }, + [&list](const Vehicle *v) { list->push_back(v); } + ); break; default: return false; diff --git a/src/vehiclelist_func.h b/src/vehiclelist_func.h new file mode 100644 index 0000000000000..464bde2ff7f7e --- /dev/null +++ b/src/vehiclelist_func.h @@ -0,0 +1,46 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file vehiclelist_func.h Functions and type for generating vehicle lists. */ + +#ifndef VEHICLELIST_FUNC_H +#define VEHICLELIST_FUNC_H + +#include "order_base.h" +#include "vehicle_base.h" + +/** + * Find vehicles matching an order. + * This can be used, e.g. to find all vehicles that stop at a particular station. + * @param veh_pred Vehicle selection predicate. This is called only for the first vehicle using the order list. + * @param ord_pred Order selection predicate. + * @param veh_func Called for each vehicle that matches both vehicle and order predicates. + **/ +template +void FindVehiclesWithOrder(VehiclePredicate veh_pred, OrderPredicate ord_pred, VehicleFunc veh_func) +{ + for (const OrderList *orderlist : OrderList::Iterate()) { + + /* We assume all vehicles sharing an order list match the condition. */ + const Vehicle *v = orderlist->GetFirstSharedVehicle(); + if (!veh_pred(v)) continue; + + /* Vehicle is a candidate, search for a matching order. */ + for (const Order *order = orderlist->GetFirstOrder(); order != nullptr; order = order->next) { + + if (!ord_pred(order)) continue; + + /* An order matches, we can add all shared vehicles to the list. */ + for (; v != nullptr; v = v->NextShared()) { + veh_func(v); + } + break; + } + } +} + +#endif /* VEHICLELIST_FUNC_H */ diff --git a/src/video/cocoa/cocoa_ogl.h b/src/video/cocoa/cocoa_ogl.h index b8a06c3bae8c5..16f0f11900e6d 100644 --- a/src/video/cocoa/cocoa_ogl.h +++ b/src/video/cocoa/cocoa_ogl.h @@ -52,7 +52,7 @@ class VideoDriver_CocoaOpenGL : public VideoDriver_Cocoa { void *GetVideoPointer() override; void ReleaseVideoPointer() override; - NSView* AllocateDrawView() override; + NSView *AllocateDrawView() override; }; class FVideoDriver_CocoaOpenGL : public DriverFactoryBase { diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 8606a902bcc4e..2244f992044b7 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -78,7 +78,7 @@ class VideoDriver_Cocoa : public VideoDriver { bool MakeWindow(int width, int height); - virtual NSView* AllocateDrawView() = 0; + virtual NSView *AllocateDrawView() = 0; /** Get a pointer to the video buffer. */ virtual void *GetVideoPointer() = 0; @@ -121,7 +121,7 @@ class VideoDriver_CocoaQuartz : public VideoDriver_Cocoa { void Paint() override; void CheckPaletteAnim() override; - NSView* AllocateDrawView() override; + NSView *AllocateDrawView() override; void *GetVideoPointer() override { return this->buffer_depth == 8 ? this->pixel_buffer : this->window_buffer; } }; diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 0be6745b0c49b..23979b4ef486c 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -400,7 +400,7 @@ behavior |= NSWindowCollectionBehaviorFullScreenPrimary; [ this->window setCollectionBehavior:behavior ]; - NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowZoomButton ]; + NSButton *fullscreenButton = [ this->window standardWindowButton:NSWindowZoomButton ]; [ fullscreenButton setAction:@selector(toggleFullScreen:) ]; [ fullscreenButton setTarget:this->window ]; } diff --git a/src/viewport_func.h b/src/viewport_func.h index 0367c44ffb4b6..d5a69deb9128c 100644 --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -43,7 +43,7 @@ void HandleZoomMessage(Window *w, const Viewport *vp, WidgetID widget_zoom_in, W * @param w Window owning the viewport. * @pre \a how should not be #ZOOM_NONE. */ -static inline void MaxZoomInOut(ZoomStateChange how, Window *w) +inline void MaxZoomInOut(ZoomStateChange how, Window *w) { while (DoZoomInOutWindow(how, w)) {}; } @@ -88,7 +88,7 @@ void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_heigh * @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.) * @ingroup dirty */ -static inline void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0) +inline void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0) { MarkTileDirtyByTile(tile, bridge_level_offset, TileHeight(tile)); } diff --git a/src/void_map.h b/src/void_map.h index de658585c18fb..e8e031be79835 100644 --- a/src/void_map.h +++ b/src/void_map.h @@ -16,7 +16,7 @@ * Make a nice void tile ;) * @param t the tile to make void */ -static inline void MakeVoid(Tile t) +inline void MakeVoid(Tile t) { SetTileType(t, MP_VOID); SetTileHeight(t, 0); diff --git a/src/water.h b/src/water.h index cd2db3c926640..8829d7700fe8c 100644 --- a/src/water.h +++ b/src/water.h @@ -49,7 +49,7 @@ bool IsWateredTile(TileIndex tile, Direction from); * @param num Number of canal tiles. * @return Total cost. */ -static inline Money CanalMaintenanceCost(uint32_t num) +inline Money CanalMaintenanceCost(uint32_t num) { return (_price[PR_INFRASTRUCTURE_WATER] * num * (1 + IntSqrt(num))) >> 6; // 6 bits scaling. } diff --git a/src/water_map.h b/src/water_map.h index ec6be4c68f76a..e32780d39d6d1 100644 --- a/src/water_map.h +++ b/src/water_map.h @@ -57,7 +57,7 @@ enum WaterClass : byte { * @param wc The value to check * @return true if the given value is a valid water class. */ -static inline bool IsValidWaterClass(WaterClass wc) +inline bool IsValidWaterClass(WaterClass wc) { return wc < WATER_CLASS_INVALID; } @@ -83,7 +83,7 @@ bool IsPossibleDockingTile(Tile t); * @param t Water tile to query. * @return Water tile type at the tile. */ -static inline WaterTileType GetWaterTileType(Tile t) +inline WaterTileType GetWaterTileType(Tile t) { assert(IsTileType(t, MP_WATER)); @@ -101,7 +101,7 @@ static inline WaterTileType GetWaterTileType(Tile t) * @param t Tile to query. * @return True if the tiletype has a waterclass. */ -static inline bool HasTileWaterClass(Tile t) +inline bool HasTileWaterClass(Tile t) { return IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_TREES); } @@ -112,7 +112,7 @@ static inline bool HasTileWaterClass(Tile t) * @pre IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT) * @return Water class at the tile. */ -static inline WaterClass GetWaterClass(Tile t) +inline WaterClass GetWaterClass(Tile t) { assert(HasTileWaterClass(t)); return (WaterClass)GB(t.m1(), 5, 2); @@ -124,7 +124,7 @@ static inline WaterClass GetWaterClass(Tile t) * @param wc New water class. * @pre IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT) */ -static inline void SetWaterClass(Tile t, WaterClass wc) +inline void SetWaterClass(Tile t, WaterClass wc) { assert(HasTileWaterClass(t)); SB(t.m1(), 5, 2, wc); @@ -136,7 +136,7 @@ static inline void SetWaterClass(Tile t, WaterClass wc) * @pre IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT) * @return true iff on water */ -static inline bool IsTileOnWater(Tile t) +inline bool IsTileOnWater(Tile t) { return (GetWaterClass(t) != WATER_CLASS_INVALID); } @@ -147,7 +147,7 @@ static inline bool IsTileOnWater(Tile t) * @return \c true if any type of clear water like ocean, river, or canal. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsWater(Tile t) +inline bool IsWater(Tile t) { return GetWaterTileType(t) == WATER_TILE_CLEAR; } @@ -158,7 +158,7 @@ static inline bool IsWater(Tile t) * @return \c true if it is a sea water tile. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsSea(Tile t) +inline bool IsSea(Tile t) { return IsWater(t) && GetWaterClass(t) == WATER_CLASS_SEA; } @@ -169,7 +169,7 @@ static inline bool IsSea(Tile t) * @return \c true if it is a canal tile. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsCanal(Tile t) +inline bool IsCanal(Tile t) { return IsWater(t) && GetWaterClass(t) == WATER_CLASS_CANAL; } @@ -180,7 +180,7 @@ static inline bool IsCanal(Tile t) * @return \c true if it is a river water tile. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsRiver(Tile t) +inline bool IsRiver(Tile t) { return IsWater(t) && GetWaterClass(t) == WATER_CLASS_RIVER; } @@ -190,7 +190,7 @@ static inline bool IsRiver(Tile t) * @param t Tile to query. * @return \c true if it is a plain water tile. */ -static inline bool IsWaterTile(Tile t) +inline bool IsWaterTile(Tile t) { return IsTileType(t, MP_WATER) && IsWater(t); } @@ -201,7 +201,7 @@ static inline bool IsWaterTile(Tile t) * @return \c true if it is a sea water tile. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsCoast(Tile t) +inline bool IsCoast(Tile t) { return GetWaterTileType(t) == WATER_TILE_COAST; } @@ -211,7 +211,7 @@ static inline bool IsCoast(Tile t) * @param t Tile to query. * @return \c true if it is a coast. */ -static inline bool IsCoastTile(Tile t) +inline bool IsCoastTile(Tile t) { return (IsTileType(t, MP_WATER) && IsCoast(t)) || (IsTileType(t, MP_TREES) && GetWaterClass(t) != WATER_CLASS_INVALID); } @@ -222,7 +222,7 @@ static inline bool IsCoastTile(Tile t) * @return \c true if it is a ship depot tile. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsShipDepot(Tile t) +inline bool IsShipDepot(Tile t) { return GetWaterTileType(t) == WATER_TILE_DEPOT; } @@ -232,7 +232,7 @@ static inline bool IsShipDepot(Tile t) * @param t Tile to query. * @return \c true if it is a ship depot tile. */ -static inline bool IsShipDepotTile(Tile t) +inline bool IsShipDepotTile(Tile t) { return IsTileType(t, MP_WATER) && IsShipDepot(t); } @@ -243,7 +243,7 @@ static inline bool IsShipDepotTile(Tile t) * @return Axis of the depot. * @pre IsShipDepotTile(t) */ -static inline Axis GetShipDepotAxis(Tile t) +inline Axis GetShipDepotAxis(Tile t) { assert(IsShipDepotTile(t)); return (Axis)GB(t.m5(), WBL_DEPOT_AXIS, 1); @@ -255,7 +255,7 @@ static inline Axis GetShipDepotAxis(Tile t) * @return Part of the depot. * @pre IsShipDepotTile(t) */ -static inline DepotPart GetShipDepotPart(Tile t) +inline DepotPart GetShipDepotPart(Tile t) { assert(IsShipDepotTile(t)); return (DepotPart)GB(t.m5(), WBL_DEPOT_PART, 1); @@ -267,7 +267,7 @@ static inline DepotPart GetShipDepotPart(Tile t) * @return Direction of the depot. * @pre IsShipDepotTile(t) */ -static inline DiagDirection GetShipDepotDirection(Tile t) +inline DiagDirection GetShipDepotDirection(Tile t) { return XYNSToDiagDir(GetShipDepotAxis(t), GetShipDepotPart(t)); } @@ -278,7 +278,7 @@ static inline DiagDirection GetShipDepotDirection(Tile t) * @return Tile containing the other section of the depot. * @pre IsShipDepotTile(t) */ -static inline TileIndex GetOtherShipDepotTile(Tile t) +inline TileIndex GetOtherShipDepotTile(Tile t) { return TileIndex(t) + (GetShipDepotPart(t) != DEPOT_PART_NORTH ? -1 : 1) * (GetShipDepotAxis(t) != AXIS_X ? TileDiffXY(0, 1) : TileDiffXY(1, 0)); } @@ -289,7 +289,7 @@ static inline TileIndex GetOtherShipDepotTile(Tile t) * @return The northern tile of the depot. * @pre IsShipDepotTile(t) */ -static inline TileIndex GetShipDepotNorthTile(Tile t) +inline TileIndex GetShipDepotNorthTile(Tile t) { assert(IsShipDepot(t)); TileIndex tile2 = GetOtherShipDepotTile(t); @@ -303,7 +303,7 @@ static inline TileIndex GetShipDepotNorthTile(Tile t) * @return \c true if it is a water lock tile. * @pre IsTileType(t, MP_WATER) */ -static inline bool IsLock(Tile t) +inline bool IsLock(Tile t) { return GetWaterTileType(t) == WATER_TILE_LOCK; } @@ -314,7 +314,7 @@ static inline bool IsLock(Tile t) * @return Direction of the lock. * @pre IsTileType(t, MP_WATER) && IsLock(t) */ -static inline DiagDirection GetLockDirection(Tile t) +inline DiagDirection GetLockDirection(Tile t) { assert(IsLock(t)); return (DiagDirection)GB(t.m5(), WBL_LOCK_ORIENT_BEGIN, WBL_LOCK_ORIENT_COUNT); @@ -326,7 +326,7 @@ static inline DiagDirection GetLockDirection(Tile t) * @return The part. * @pre IsTileType(t, MP_WATER) && IsLock(t) */ -static inline byte GetLockPart(Tile t) +inline byte GetLockPart(Tile t) { assert(IsLock(t)); return GB(t.m5(), WBL_LOCK_PART_BEGIN, WBL_LOCK_PART_COUNT); @@ -338,7 +338,7 @@ static inline byte GetLockPart(Tile t) * @return Random bits of the tile. * @pre IsTileType(t, MP_WATER) */ -static inline byte GetWaterTileRandomBits(Tile t) +inline byte GetWaterTileRandomBits(Tile t) { assert(IsTileType(t, MP_WATER)); return t.m4(); @@ -350,7 +350,7 @@ static inline byte GetWaterTileRandomBits(Tile t) * @return true iff the tile has water at the ground. * @note Coast tiles are not considered waterish, even if there is water on a halftile. */ -static inline bool HasTileWaterGround(Tile t) +inline bool HasTileWaterGround(Tile t) { return HasTileWaterClass(t) && IsTileOnWater(t) && !IsCoastTile(t); } @@ -361,7 +361,7 @@ static inline bool HasTileWaterGround(Tile t) * @param t the tile * @param b the docking tile state */ -static inline void SetDockingTile(Tile t, bool b) +inline void SetDockingTile(Tile t, bool b) { assert(IsTileType(t, MP_WATER) || IsTileType(t, MP_RAILWAY) || IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)); SB(t.m1(), 7, 1, b ? 1 : 0); @@ -371,7 +371,7 @@ static inline void SetDockingTile(Tile t, bool b) * Checks whether the tile is marked as a dockling tile. * @return true iff the tile is marked as a docking tile. */ -static inline bool IsDockingTile(Tile t) +inline bool IsDockingTile(Tile t) { return (IsTileType(t, MP_WATER) || IsTileType(t, MP_RAILWAY) || IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)) && HasBit(t.m1(), 7); } @@ -381,7 +381,7 @@ static inline bool IsDockingTile(Tile t) * Helper function to make a coast tile. * @param t The tile to change into water */ -static inline void MakeShore(Tile t) +inline void MakeShore(Tile t) { SetTileType(t, MP_WATER); SetTileOwner(t, OWNER_WATER); @@ -402,7 +402,7 @@ static inline void MakeShore(Tile t) * @param wc The class of water the tile has to be * @param random_bits Eventual random bits to be set for this tile */ -static inline void MakeWater(Tile t, Owner o, WaterClass wc, uint8_t random_bits) +inline void MakeWater(Tile t, Owner o, WaterClass wc, uint8_t random_bits) { SetTileType(t, MP_WATER); SetTileOwner(t, o); @@ -420,7 +420,7 @@ static inline void MakeWater(Tile t, Owner o, WaterClass wc, uint8_t random_bits * Make a sea tile. * @param t The tile to change into sea */ -static inline void MakeSea(Tile t) +inline void MakeSea(Tile t) { MakeWater(t, OWNER_WATER, WATER_CLASS_SEA, 0); } @@ -430,7 +430,7 @@ static inline void MakeSea(Tile t) * @param t The tile to change into river * @param random_bits Random bits to be set for this tile */ -static inline void MakeRiver(Tile t, uint8_t random_bits) +inline void MakeRiver(Tile t, uint8_t random_bits) { MakeWater(t, OWNER_WATER, WATER_CLASS_RIVER, random_bits); } @@ -441,7 +441,7 @@ static inline void MakeRiver(Tile t, uint8_t random_bits) * @param o The owner of the canal * @param random_bits Random bits to be set for this tile */ -static inline void MakeCanal(Tile t, Owner o, uint8_t random_bits) +inline void MakeCanal(Tile t, Owner o, uint8_t random_bits) { assert(o != OWNER_WATER); MakeWater(t, o, WATER_CLASS_CANAL, random_bits); @@ -456,7 +456,7 @@ static inline void MakeCanal(Tile t, Owner o, uint8_t random_bits) * @param a Axis of the depot. * @param original_water_class Original water class. */ -static inline void MakeShipDepot(Tile t, Owner o, DepotID did, DepotPart part, Axis a, WaterClass original_water_class) +inline void MakeShipDepot(Tile t, Owner o, DepotID did, DepotPart part, Axis a, WaterClass original_water_class) { SetTileType(t, MP_WATER); SetTileOwner(t, o); @@ -479,7 +479,7 @@ static inline void MakeShipDepot(Tile t, Owner o, DepotID did, DepotPart part, A * @param original_water_class Original water class. * @see MakeLock */ -static inline void MakeLockTile(Tile t, Owner o, LockPart part, DiagDirection dir, WaterClass original_water_class) +inline void MakeLockTile(Tile t, Owner o, LockPart part, DiagDirection dir, WaterClass original_water_class) { SetTileType(t, MP_WATER); SetTileOwner(t, o); @@ -502,7 +502,7 @@ static inline void MakeLockTile(Tile t, Owner o, LockPart part, DiagDirection di * @param wc_upper Original water class of the upper part. * @param wc_middle Original water class of the middle part. */ -static inline void MakeLock(Tile t, Owner o, DiagDirection d, WaterClass wc_lower, WaterClass wc_upper, WaterClass wc_middle) +inline void MakeLock(Tile t, Owner o, DiagDirection d, WaterClass wc_lower, WaterClass wc_upper, WaterClass wc_middle) { TileIndexDiff delta = TileOffsByDiagDir(d); Tile lower_tile = TileIndex(t) - delta; diff --git a/src/widget_type.h b/src/widget_type.h index 1f831090e250c..ef7b38c65a3d8 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -909,7 +909,7 @@ class NWidgetLeaf : public NWidgetCore { * @param step Stepsize of the widget. * @return Biggest possible size of the widget, assuming that \a base may only be incremented by \a step size steps. */ -static inline uint ComputeMaxSize(uint base, uint max_space, uint step) +inline uint ComputeMaxSize(uint base, uint max_space, uint step) { if (base >= max_space || step == 0) return base; if (step == 1) return max_space; @@ -1057,7 +1057,7 @@ struct NWidgetPart { * @param dy Vertical resize step. 0 means no vertical resizing. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetResize(int16_t dx, int16_t dy) +inline NWidgetPart SetResize(int16_t dx, int16_t dy) { NWidgetPart part; @@ -1074,7 +1074,7 @@ static inline NWidgetPart SetResize(int16_t dx, int16_t dy) * @param y Vertical minimal size. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetMinimalSize(int16_t x, int16_t y) +inline NWidgetPart SetMinimalSize(int16_t x, int16_t y) { NWidgetPart part; @@ -1092,7 +1092,7 @@ static inline NWidgetPart SetMinimalSize(int16_t x, int16_t y) * @param size Font size of text. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetMinimalTextLines(uint8_t lines, uint8_t spacing, FontSize size = FS_NORMAL) +inline NWidgetPart SetMinimalTextLines(uint8_t lines, uint8_t spacing, FontSize size = FS_NORMAL) { NWidgetPart part; @@ -1110,7 +1110,7 @@ static inline NWidgetPart SetMinimalTextLines(uint8_t lines, uint8_t spacing, Fo * @param size Font size to draw string within widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetTextStyle(TextColour colour, FontSize size = FS_NORMAL) +inline NWidgetPart SetTextStyle(TextColour colour, FontSize size = FS_NORMAL) { NWidgetPart part; @@ -1126,7 +1126,7 @@ static inline NWidgetPart SetTextStyle(TextColour colour, FontSize size = FS_NOR * @param align Alignment of text/image within widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetAlignment(StringAlignment align) +inline NWidgetPart SetAlignment(StringAlignment align) { NWidgetPart part; @@ -1142,7 +1142,7 @@ static inline NWidgetPart SetAlignment(StringAlignment align) * @param fill_y Vertical filling step from minimal size. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetFill(uint fill_x, uint fill_y) +inline NWidgetPart SetFill(uint fill_x, uint fill_y) { NWidgetPart part; @@ -1158,7 +1158,7 @@ static inline NWidgetPart SetFill(uint fill_x, uint fill_y) * (horizontal, vertical, WWT_FRAME, WWT_INSET, or WWT_PANEL). * @ingroup NestedWidgetParts */ -static inline NWidgetPart EndContainer() +inline NWidgetPart EndContainer() { NWidgetPart part; @@ -1173,7 +1173,7 @@ static inline NWidgetPart EndContainer() * @param tip Tooltip of the widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetDataTip(uint32_t data, StringID tip) +inline NWidgetPart SetDataTip(uint32_t data, StringID tip) { NWidgetPart part; @@ -1191,7 +1191,7 @@ static inline NWidgetPart SetDataTip(uint32_t data, StringID tip) * @param tip Tooltip of the widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetMatrixDataTip(uint8_t cols, uint8_t rows, StringID tip) +inline NWidgetPart SetMatrixDataTip(uint8_t cols, uint8_t rows, StringID tip) { return SetDataTip((rows << MAT_ROW_START) | (cols << MAT_COL_START), tip); } @@ -1205,7 +1205,7 @@ static inline NWidgetPart SetMatrixDataTip(uint8_t cols, uint8_t rows, StringID * @param left The padding left of the widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left) +inline NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left) { NWidgetPart part; @@ -1223,7 +1223,7 @@ static inline NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, * @param r The padding around the widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetPadding(const RectPadding &padding) +inline NWidgetPart SetPadding(const RectPadding &padding) { NWidgetPart part; @@ -1241,7 +1241,7 @@ static inline NWidgetPart SetPadding(const RectPadding &padding) * @param padding The padding to use for all directions. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetPadding(uint8_t padding) +inline NWidgetPart SetPadding(uint8_t padding) { return SetPadding(padding, padding, padding, padding); } @@ -1253,7 +1253,7 @@ static inline NWidgetPart SetPadding(uint8_t padding) * @param post The amount of space after the last widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post) +inline NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post) { NWidgetPart part; @@ -1272,7 +1272,7 @@ static inline NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post) * @param post The ratio of space after the last widget. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetPIPRatio(uint8_t ratio_pre, uint8_t ratio_inter, uint8_t ratio_post) +inline NWidgetPart SetPIPRatio(uint8_t ratio_pre, uint8_t ratio_inter, uint8_t ratio_post) { NWidgetPart part; @@ -1291,7 +1291,7 @@ static inline NWidgetPart SetPIPRatio(uint8_t ratio_pre, uint8_t ratio_inter, ui * @param index Widget index of the scrollbar. * @ingroup NestedWidgetParts */ -static inline NWidgetPart SetScrollbar(WidgetID index) +inline NWidgetPart SetScrollbar(WidgetID index) { NWidgetPart part; @@ -1310,7 +1310,7 @@ static inline NWidgetPart SetScrollbar(WidgetID index) * Child widgets must have a index bigger than the parent index. * @ingroup NestedWidgetParts */ -static inline NWidgetPart NWidget(WidgetType tp, Colours col, int idx = -1) +inline NWidgetPart NWidget(WidgetType tp, Colours col, int idx = -1) { NWidgetPart part; @@ -1327,7 +1327,7 @@ static inline NWidgetPart NWidget(WidgetType tp, Colours col, int idx = -1) * @param cont_flags Flags for the containers (#NWID_HORIZONTAL and #NWID_VERTICAL). * @ingroup NestedWidgetParts */ -static inline NWidgetPart NWidget(WidgetType tp, NWidContainerFlags cont_flags = NC_NONE) +inline NWidgetPart NWidget(WidgetType tp, NWidContainerFlags cont_flags = NC_NONE) { NWidgetPart part; @@ -1342,7 +1342,7 @@ static inline NWidgetPart NWidget(WidgetType tp, NWidContainerFlags cont_flags = * @param func_ptr Pointer to function that returns the tree. * @ingroup NestedWidgetParts */ -static inline NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr) +inline NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr) { NWidgetPart part; diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 2a079b5e736e5..c3aad63bd1329 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -117,12 +117,12 @@ class DropDownString : public TBase { } /** - * Natural sorting comparator function for DropDownList::sort(). - * @param first Left side of comparison. - * @param second Right side of comparison. - * @return true if \a first precedes \a second. - * @warning All items in the list need to be derivates of DropDownListStringItem. - */ + * Natural sorting comparator function for DropDownList::sort(). + * @param first Left side of comparison. + * @param second Right side of comparison. + * @return true if \a first precedes \a second. + * @warning All items in the list need to be derivates of DropDownListStringItem. + */ static bool NatSortFunc(std::unique_ptr const &first, std::unique_ptr const &second) { const std::string &str1 = static_cast(first.get())->string; diff --git a/src/window.cpp b/src/window.cpp index 8f99f252a4fcb..0c22944151e29 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -166,7 +166,7 @@ void WindowDesc::LoadFromConfig() /** * Sort WindowDesc by ini_key. */ -static bool DescSorter(WindowDesc* const &a, WindowDesc* const &b) +static bool DescSorter(WindowDesc * const &a, WindowDesc * const &b) { if (a->ini_key != nullptr && b->ini_key != nullptr) return strcmp(a->ini_key, b->ini_key) < 0; return a->ini_key != nullptr; diff --git a/src/window_gui.h b/src/window_gui.h index b1bc06306c1ae..1243239c6ae98 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -70,7 +70,7 @@ struct WidgetDimensions { /* widget.cpp */ void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, FrameFlags flags); -static inline void DrawFrameRect(const Rect &r, Colours colour, FrameFlags flags) +inline void DrawFrameRect(const Rect &r, Colours colour, FrameFlags flags) { DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, flags); } diff --git a/src/zoom_func.h b/src/zoom_func.h index abcc050d25c30..faaddbc49bcf6 100644 --- a/src/zoom_func.h +++ b/src/zoom_func.h @@ -19,7 +19,7 @@ * @param zoom zoom level to shift to * @return shifted value */ -static inline int ScaleByZoom(int value, ZoomLevel zoom) +inline int ScaleByZoom(int value, ZoomLevel zoom) { return value << zoom; } @@ -31,7 +31,7 @@ static inline int ScaleByZoom(int value, ZoomLevel zoom) * @param zoom zoom level to shift to * @return shifted value */ -static inline int UnScaleByZoom(int value, ZoomLevel zoom) +inline int UnScaleByZoom(int value, ZoomLevel zoom) { return (value + (1 << zoom) - 1) >> zoom; } @@ -42,7 +42,7 @@ static inline int UnScaleByZoom(int value, ZoomLevel zoom) * @param zoom zoom level to shift to * @return shifted value */ -static inline int AdjustByZoom(int value, int zoom) +inline int AdjustByZoom(int value, int zoom) { return zoom < 0 ? UnScaleByZoom(value, ZoomLevel(-zoom)) : ScaleByZoom(value, ZoomLevel(zoom)); } @@ -53,7 +53,7 @@ static inline int AdjustByZoom(int value, int zoom) * @param zoom zoom level to shift to * @return shifted value */ -static inline int ScaleByZoomLower(int value, ZoomLevel zoom) +inline int ScaleByZoomLower(int value, ZoomLevel zoom) { return value << zoom; } @@ -64,7 +64,7 @@ static inline int ScaleByZoomLower(int value, ZoomLevel zoom) * @param zoom zoom level to shift to * @return shifted value */ -static inline int UnScaleByZoomLower(int value, ZoomLevel zoom) +inline int UnScaleByZoomLower(int value, ZoomLevel zoom) { return value >> zoom; } @@ -74,7 +74,7 @@ static inline int UnScaleByZoomLower(int value, ZoomLevel zoom) * @param value Pixel amount at #ZOOM_LVL_BEGIN (full zoom in). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size). */ -static inline int UnScaleGUI(int value) +inline int UnScaleGUI(int value) { return UnScaleByZoom(value, ZOOM_LVL_GUI); } @@ -84,7 +84,7 @@ static inline int UnScaleGUI(int value) * @param value zoom level to scale * @return scaled zoom level */ -static inline ZoomLevel ScaleZoomGUI(ZoomLevel value) +inline ZoomLevel ScaleZoomGUI(ZoomLevel value) { return std::clamp(ZoomLevel(value + (ZOOM_LVL_GUI - ZOOM_LVL_OUT_4X)), ZOOM_LVL_MIN, ZOOM_LVL_MAX); } @@ -94,7 +94,7 @@ static inline ZoomLevel ScaleZoomGUI(ZoomLevel value) * @param value zoom level to scale * @return un-scaled zoom level */ -static inline ZoomLevel UnScaleZoomGUI(ZoomLevel value) +inline ZoomLevel UnScaleZoomGUI(ZoomLevel value) { return std::clamp(ZoomLevel(value - (ZOOM_LVL_GUI - ZOOM_LVL_OUT_4X)), ZOOM_LVL_MIN, ZOOM_LVL_MAX); } @@ -104,7 +104,7 @@ static inline ZoomLevel UnScaleZoomGUI(ZoomLevel value) * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size). */ -static inline int ScaleSpriteTrad(int value) +inline int ScaleSpriteTrad(int value) { return UnScaleGUI(value * ZOOM_LVL_BASE); } @@ -114,7 +114,7 @@ static inline int ScaleSpriteTrad(int value) * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size). */ -static inline int ScaleGUITrad(int value) +inline int ScaleGUITrad(int value) { return value * _gui_scale / 100; }