Merge branch 'master' into jgrpp

# Conflicts:
#	config.lib
#	projects/openttd_vs140.vcxproj
#	projects/openttd_vs140.vcxproj.filters
#	projects/openttd_vs141.vcxproj
#	projects/openttd_vs141.vcxproj.filters
#	projects/openttd_vs142.vcxproj
#	projects/openttd_vs142.vcxproj.filters
#	src/aircraft_cmd.cpp
#	src/base_station_base.h
#	src/core/pool_type.hpp
#	src/disaster_vehicle.cpp
#	src/economy.cpp
#	src/engine.cpp
#	src/group.h
#	src/group_cmd.cpp
#	src/group_gui.cpp
#	src/lang/english.txt
#	src/lang/german.txt
#	src/linkgraph/linkgraph_gui.cpp
#	src/network/network_command.cpp
#	src/network/network_server.cpp
#	src/openttd.cpp
#	src/order_cmd.cpp
#	src/road_cmd.cpp
#	src/saveload/afterload.cpp
#	src/saveload/cargopacket_sl.cpp
#	src/saveload/linkgraph_sl.cpp
#	src/saveload/order_sl.cpp
#	src/saveload/station_sl.cpp
#	src/saveload/town_sl.cpp
#	src/saveload/vehicle_sl.cpp
#	src/screenshot.cpp
#	src/screenshot.h
#	src/settings_gui.cpp
#	src/settings_type.h
#	src/smallmap_gui.cpp
#	src/station.cpp
#	src/station_cmd.cpp
#	src/table/settings.ini
#	src/toolbar_gui.cpp
#	src/town_cmd.cpp
#	src/train.h
#	src/train_cmd.cpp
#	src/train_gui.cpp
#	src/vehicle.cpp
#	src/vehicle_base.h
#	src/vehiclelist.cpp
#	src/window_type.h
pull/128/head
Jonathan G Rennison 4 years ago
commit 7960db35f2

@ -1,3 +1,28 @@
1.10.0-beta2 (2019-12-25)
------------------------------------------------------------------------
- Feature: [Script] More error mappings (#7857)
- Feature: Ctrl+Click on a vehicle in the vehicle group window selects and scrolls to the vehicle's group (#7800)
- Feature: Ctrl+Click on the vehicle details button in the vehicle view window opens the vehicle group window focused on the vehicle (#7800)
- Feature: Add a button to the vehicle advisory news window to open the vehicle's group window (#7800)
- Feature: Ctrl+Click on a vehicle in the vehicle list window opens the vehicle group window focused on the vehicle's group (#7800)
- Fix: Custom sea level default value is now equal to minimum value (#7866)
- Fix: [NewGRF] Various tracktype fixes (#7863)
- Fix: Infrastructure total update when removing tram road stop (#7856)
- Fix #7847: Use ViewportSign coordinates for sign Kdtree coordinates (#7849)
- Fix #7836: Check coherency of NewGRF parameter min/max (#7840)
- Fix #7673: [Script] Allow removal of custom town text (#7834)
- Fix: Crash when displaying an error message at map edges (#7833)
- Fix #7783, #7816: [SDL2] Fix input handling in edit context (#7825)
- Fix #7697: Tile query on HQs did not display cargo correctly (#7824)
- Fix #7820: Possible game crash when removing oil rig (#7821)
- Fix #7606: Rare crash when trying to clean up a crashed script (#7819)
- Fix #7784: [SDL2] up/down/home/end key behaviour (#7815)
- Fix #7631: 16 out cargo support for industry directory (#7809)
- Fix #7646: Crash on random map generation failure (#7805)
- Fix #7430: Only reset time since pickup when train visits station if it has room to load (#7595)
- Fix #5405: Aircraft could route to depots outside their range (#7104)
1.10.0-beta1 (2019-10-29)
------------------------------------------------------------------------
- Feature: Configurable minimum age for companies before allowing share trading (#7780)

@ -1609,12 +1609,20 @@ make_cflags_and_ldflags() {
# extensions in a way that breaks build with at least ICC.
# This requires -O1 or more, so debug level 3 (-O0) is excluded.
CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
if [ "$os" = "MINGW" ]; then
# Prevent undefined references when _FORTIFY_SOURCE > 0
LDFLAGS="$LDFLAGS -fstack-protector"
fi
fi
cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null`
if [ -n "$cc_build_is_gcc" ]; then
# Add -O1 and fortify source to the tools needed for building, on gcc
CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1"
if [ "$os" = "MINGW" ]; then
# Prevent undefined references when _FORTIFY_SOURCE > 0
LDFLAGS_BUILD="$LDFLAGS_BUILD -fstack-protector"
fi
elif [ -n "`basename "$cc_build" | grep "clang" 2>/dev/null`" ]; then
# Add -O1 to the tools needed for building, on clang
CFLAGS_BUILD="$CFLAGS_BUILD -O1"

@ -1,6 +1,6 @@
OpenTTD's known bugs
Last updated: 2019-10-29
Release version: 1.10.0-beta1
Last updated: 2019-12-25
Release version: 1.10.0-beta2
------------------------------------------------------------------------

@ -1,3 +1,9 @@
openttd (1.10.0~beta2-0) unstable; urgency=low
* New upstream release 1.10.0-beta2
-- OpenTTD <info@openttd.org> Wed, 25 Dec 2019 00:00:00 +0000
openttd (1.10.0~beta1-0) unstable; urgency=low
* New upstream release 1.10.0-beta1

@ -17,9 +17,9 @@
#
Name: openttd
Version: 1.10.beta1
Version: 1.10.beta2
Release: 0
%define srcver 1.10.0-beta1
%define srcver 1.10.0-beta2
Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe
License: GPL-2.0
Group: Amusements/Games/Strategy/Other

@ -2,8 +2,8 @@
!define APPV_MAJOR 1
!define APPV_MINOR 10
!define APPV_MAINT 0
!define APPV_BUILD 0
!define APPV_EXTRA "-beta1"
!define APPV_BUILD 1
!define APPV_EXTRA "-beta2"
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version

@ -420,6 +420,7 @@
<ClCompile Include="..\src\rev.cpp" />
<ClCompile Include="..\src\road.cpp" />
<ClCompile Include="..\src\roadstop.cpp" />
<ClCompile Include="..\src\screenshot_gui.cpp" />
<ClCompile Include="..\src\screenshot.cpp" />
<ClCompile Include="..\src\settings.cpp" />
<ClCompile Include="..\src\signal.cpp" />
@ -649,8 +650,10 @@
<ClInclude Include="..\src\safeguards.h" />
<ClInclude Include="..\src\scope.h" />
<ClInclude Include="..\src\screenshot.h" />
<ClInclude Include="..\src\screenshot_gui.h" />
<ClInclude Include="..\src\sound\sdl_s.h" />
<ClInclude Include="..\src\video\sdl_v.h" />
<ClInclude Include="..\src\video\sdl2_v.h" />
<ClInclude Include="..\src\schdispatch.h" />
<ClInclude Include="..\src\settings_func.h" />
<ClInclude Include="..\src\settings_gui.h" />
@ -886,6 +889,7 @@
<ClInclude Include="..\src\widgets\plans_widget.h" />
<ClInclude Include="..\src\widgets\rail_widget.h" />
<ClInclude Include="..\src\widgets\road_widget.h" />
<ClInclude Include="..\src\widgets\screenshot_widget.h" />
<ClInclude Include="..\src\widgets\settings_widget.h" />
<ClInclude Include="..\src\widgets\sign_widget.h" />
<ClInclude Include="..\src\widgets\smallmap_widget.h" />
@ -1382,6 +1386,7 @@
<ClCompile Include="..\src\video\dedicated_v.cpp" />
<ClCompile Include="..\src\video\null_v.cpp" />
<ClCompile Include="..\src\video\sdl_v.cpp" />
<ClCompile Include="..\src\video\sdl2_v.cpp" />
<ClCompile Include="..\src\video\win32_v.cpp" />
<ClCompile Include="..\src\music\dmusic.cpp" />
<ClCompile Include="..\src\music\null_m.cpp" />
@ -1389,6 +1394,7 @@
<ClCompile Include="..\src\music\win32_m.cpp" />
<ClCompile Include="..\src\sound\null_s.cpp" />
<ClCompile Include="..\src\sound\sdl_s.cpp" />
<ClCompile Include="..\src\sound\sdl2_s.cpp" />
<ClCompile Include="..\src\sound\win32_s.cpp" />
<ClCompile Include="..\src\sound\xaudio2_s.cpp" />
<ClCompile Include="..\src\os\windows\crashlog_win.cpp" />

@ -354,6 +354,9 @@
<ClCompile Include="..\src\roadstop.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\screenshot_gui.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\screenshot.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -1041,12 +1044,18 @@
<ClInclude Include="..\src\screenshot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\screenshot_gui.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sound\sdl_s.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\sdl_v.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\sdl2_v.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\schdispatch.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -1752,6 +1761,9 @@
<ClInclude Include="..\src\widgets\road_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="..\src\widgets\screenshot_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="..\src\widgets\settings_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
@ -3240,6 +3252,9 @@
<ClCompile Include="..\src\video\sdl_v.cpp">
<Filter>Video</Filter>
</ClCompile>
<ClCompile Include="..\src\video\sdl2_v.cpp">
<Filter>Video</Filter>
</ClCompile>
<ClCompile Include="..\src\video\win32_v.cpp">
<Filter>Video</Filter>
</ClCompile>
@ -3261,6 +3276,9 @@
<ClCompile Include="..\src\sound\sdl_s.cpp">
<Filter>Sound</Filter>
</ClCompile>
<ClCompile Include="..\src\sound\sdl2_s.cpp">
<Filter>Sound</Filter>
</ClCompile>
<ClCompile Include="..\src\sound\win32_s.cpp">
<Filter>Sound</Filter>
</ClCompile>

@ -420,6 +420,7 @@
<ClCompile Include="..\src\rev.cpp" />
<ClCompile Include="..\src\road.cpp" />
<ClCompile Include="..\src\roadstop.cpp" />
<ClCompile Include="..\src\screenshot_gui.cpp" />
<ClCompile Include="..\src\screenshot.cpp" />
<ClCompile Include="..\src\settings.cpp" />
<ClCompile Include="..\src\signal.cpp" />
@ -649,8 +650,10 @@
<ClInclude Include="..\src\safeguards.h" />
<ClInclude Include="..\src\scope.h" />
<ClInclude Include="..\src\screenshot.h" />
<ClInclude Include="..\src\screenshot_gui.h" />
<ClInclude Include="..\src\sound\sdl_s.h" />
<ClInclude Include="..\src\video\sdl_v.h" />
<ClInclude Include="..\src\video\sdl2_v.h" />
<ClInclude Include="..\src\schdispatch.h" />
<ClInclude Include="..\src\settings_func.h" />
<ClInclude Include="..\src\settings_gui.h" />
@ -886,6 +889,7 @@
<ClInclude Include="..\src\widgets\plans_widget.h" />
<ClInclude Include="..\src\widgets\rail_widget.h" />
<ClInclude Include="..\src\widgets\road_widget.h" />
<ClInclude Include="..\src\widgets\screenshot_widget.h" />
<ClInclude Include="..\src\widgets\settings_widget.h" />
<ClInclude Include="..\src\widgets\sign_widget.h" />
<ClInclude Include="..\src\widgets\smallmap_widget.h" />
@ -1382,6 +1386,7 @@
<ClCompile Include="..\src\video\dedicated_v.cpp" />
<ClCompile Include="..\src\video\null_v.cpp" />
<ClCompile Include="..\src\video\sdl_v.cpp" />
<ClCompile Include="..\src\video\sdl2_v.cpp" />
<ClCompile Include="..\src\video\win32_v.cpp" />
<ClCompile Include="..\src\music\dmusic.cpp" />
<ClCompile Include="..\src\music\null_m.cpp" />
@ -1389,6 +1394,7 @@
<ClCompile Include="..\src\music\win32_m.cpp" />
<ClCompile Include="..\src\sound\null_s.cpp" />
<ClCompile Include="..\src\sound\sdl_s.cpp" />
<ClCompile Include="..\src\sound\sdl2_s.cpp" />
<ClCompile Include="..\src\sound\win32_s.cpp" />
<ClCompile Include="..\src\sound\xaudio2_s.cpp" />
<ClCompile Include="..\src\os\windows\crashlog_win.cpp" />

@ -354,6 +354,9 @@
<ClCompile Include="..\src\roadstop.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\screenshot_gui.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\screenshot.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -1041,12 +1044,18 @@
<ClInclude Include="..\src\screenshot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\screenshot_gui.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sound\sdl_s.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\sdl_v.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\sdl2_v.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\schdispatch.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -1752,6 +1761,9 @@
<ClInclude Include="..\src\widgets\road_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="..\src\widgets\screenshot_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="..\src\widgets\settings_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
@ -3240,6 +3252,9 @@
<ClCompile Include="..\src\video\sdl_v.cpp">
<Filter>Video</Filter>
</ClCompile>
<ClCompile Include="..\src\video\sdl2_v.cpp">
<Filter>Video</Filter>
</ClCompile>
<ClCompile Include="..\src\video\win32_v.cpp">
<Filter>Video</Filter>
</ClCompile>
@ -3261,6 +3276,9 @@
<ClCompile Include="..\src\sound\sdl_s.cpp">
<Filter>Sound</Filter>
</ClCompile>
<ClCompile Include="..\src\sound\sdl2_s.cpp">
<Filter>Sound</Filter>
</ClCompile>
<ClCompile Include="..\src\sound\win32_s.cpp">
<Filter>Sound</Filter>
</ClCompile>

@ -420,6 +420,7 @@
<ClCompile Include="..\src\rev.cpp" />
<ClCompile Include="..\src\road.cpp" />
<ClCompile Include="..\src\roadstop.cpp" />
<ClCompile Include="..\src\screenshot_gui.cpp" />
<ClCompile Include="..\src\screenshot.cpp" />
<ClCompile Include="..\src\settings.cpp" />
<ClCompile Include="..\src\signal.cpp" />
@ -649,8 +650,10 @@
<ClInclude Include="..\src\safeguards.h" />
<ClInclude Include="..\src\scope.h" />
<ClInclude Include="..\src\screenshot.h" />
<ClInclude Include="..\src\screenshot_gui.h" />
<ClInclude Include="..\src\sound\sdl_s.h" />
<ClInclude Include="..\src\video\sdl_v.h" />
<ClInclude Include="..\src\video\sdl2_v.h" />
<ClInclude Include="..\src\schdispatch.h" />
<ClInclude Include="..\src\settings_func.h" />
<ClInclude Include="..\src\settings_gui.h" />
@ -886,6 +889,7 @@
<ClInclude Include="..\src\widgets\plans_widget.h" />
<ClInclude Include="..\src\widgets\rail_widget.h" />
<ClInclude Include="..\src\widgets\road_widget.h" />
<ClInclude Include="..\src\widgets\screenshot_widget.h" />
<ClInclude Include="..\src\widgets\settings_widget.h" />
<ClInclude Include="..\src\widgets\sign_widget.h" />
<ClInclude Include="..\src\widgets\smallmap_widget.h" />
@ -1382,6 +1386,7 @@
<ClCompile Include="..\src\video\dedicated_v.cpp" />
<ClCompile Include="..\src\video\null_v.cpp" />
<ClCompile Include="..\src\video\sdl_v.cpp" />
<ClCompile Include="..\src\video\sdl2_v.cpp" />
<ClCompile Include="..\src\video\win32_v.cpp" />
<ClCompile Include="..\src\music\dmusic.cpp" />
<ClCompile Include="..\src\music\null_m.cpp" />
@ -1389,6 +1394,7 @@
<ClCompile Include="..\src\music\win32_m.cpp" />
<ClCompile Include="..\src\sound\null_s.cpp" />
<ClCompile Include="..\src\sound\sdl_s.cpp" />
<ClCompile Include="..\src\sound\sdl2_s.cpp" />
<ClCompile Include="..\src\sound\win32_s.cpp" />
<ClCompile Include="..\src\sound\xaudio2_s.cpp" />
<ClCompile Include="..\src\os\windows\crashlog_win.cpp" />

@ -354,6 +354,9 @@
<ClCompile Include="..\src\roadstop.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\screenshot_gui.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\screenshot.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -1041,12 +1044,18 @@
<ClInclude Include="..\src\screenshot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\screenshot_gui.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sound\sdl_s.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\sdl_v.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\video\sdl2_v.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\schdispatch.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -1752,6 +1761,9 @@
<ClInclude Include="..\src\widgets\road_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="..\src\widgets\screenshot_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
<ClInclude Include="..\src\widgets\settings_widget.h">
<Filter>Widgets</Filter>
</ClInclude>
@ -3240,6 +3252,9 @@
<ClCompile Include="..\src\video\sdl_v.cpp">
<Filter>Video</Filter>
</ClCompile>
<ClCompile Include="..\src\video\sdl2_v.cpp">
<Filter>Video</Filter>
</ClCompile>
<ClCompile Include="..\src\video\win32_v.cpp">
<Filter>Video</Filter>
</ClCompile>
@ -3261,6 +3276,9 @@
<ClCompile Include="..\src\sound\sdl_s.cpp">
<Filter>Sound</Filter>
</ClCompile>
<ClCompile Include="..\src\sound\sdl2_s.cpp">
<Filter>Sound</Filter>
</ClCompile>
<ClCompile Include="..\src\sound\win32_s.cpp">
<Filter>Sound</Filter>
</ClCompile>

@ -82,6 +82,7 @@ rail.cpp
rev.cpp
road.cpp
roadstop.cpp
screenshot_gui.cpp
screenshot.cpp
settings.cpp
signal.cpp
@ -337,6 +338,7 @@ roadveh.h
safeguards.h
scope.h
screenshot.h
screenshot_gui.h
sound/sdl_s.h
video/sdl_v.h
video/sdl2_v.h
@ -597,6 +599,7 @@ widgets/osk_widget.h
widgets/plans_widget.h
widgets/rail_widget.h
widgets/road_widget.h
widgets/screenshot_widget.h
widgets/settings_widget.h
widgets/sign_widget.h
widgets/smallmap_widget.h

@ -77,8 +77,7 @@
if ((AI::frame_counter & ((1 << (4 - _settings_game.difficulty.competitor_speed)) - 1)) != 0) return;
Backup<CompanyID> cur_company(_current_company, FILE_LINE);
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->is_ai) {
SCOPE_INFO_FMT([&], "AI::GameLoop: %i: %s (v%d)\n", (int)c->index, c->ai_info->GetName(), c->ai_info->GetVersion());
PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index));
@ -157,8 +156,7 @@
/* It might happen there are no companies .. than we have nothing to loop */
if (Company::GetPoolSize() == 0) return;
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->is_ai) AI::Stop(c->index);
}
}

@ -1052,8 +1052,7 @@ struct AIDebugWindow : public Window {
ai_debug_company = INVALID_COMPANY;
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->is_ai) {
ChangeToAI(c->index);
return;
@ -1312,8 +1311,7 @@ struct AIDebugWindow : public Window {
if ((_pause_mode & PM_PAUSED_NORMAL) == PM_PAUSED_NORMAL) {
bool all_unpaused = !Game::IsPaused();
if (all_unpaused) {
Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->is_ai && AI::IsPaused(c->index)) {
all_unpaused = false;
break;
@ -1552,8 +1550,7 @@ void ShowAIDebugWindowIfAIError()
/* Network clients can't debug AIs. */
if (_networking && !_network_server) return;
Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->is_ai && c->ai_instance->IsDead()) {
ShowAIDebugWindow(c->index);
break;

@ -137,11 +137,6 @@ struct Aircraft FINAL : public SpecializedVehicle<Aircraft, VEH_AIRCRAFT> {
}
};
/**
* Macro for iterating over all aircraft.
*/
#define FOR_ALL_AIRCRAFT(var) FOR_ALL_VEHICLES_OF_TYPE(Aircraft, var)
void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result);
Station *GetTargetAirportIfValid(const Aircraft *v);

@ -121,7 +121,6 @@ enum HelicopterRotorStates {
*/
static StationID FindNearestHangar(const Aircraft *v)
{
const Station *st;
uint best = 0;
StationID index = INVALID_STATION;
TileIndex vtile = TileVirtXYClampedToMap(v->x_pos, v->y_pos);
@ -142,7 +141,7 @@ static StationID FindNearestHangar(const Aircraft *v)
}
}
FOR_ALL_STATIONS(st) {
for (const Station *st : Station::Iterate()) {
if (!IsInfraUsageAllowed(VEH_AIRCRAFT, v->owner, st->owner) || !(st->facilities & FACIL_AIRPORT) || !st->airport.HasHangar()) continue;
const AirportFTAClass *afc = st->airport.GetFTA();
@ -2187,8 +2186,7 @@ void UpdateAirplanesOnNewStation(const Station *st)
const AirportFTAClass *ap = st->airport.GetFTA();
Direction rotation = st->airport.tile == INVALID_TILE ? DIR_N : st->airport.rotation;
Aircraft *v;
FOR_ALL_AIRCRAFT(v) {
for (Aircraft *v : Aircraft::Iterate()) {
if (!v->IsNormalAircraft() || v->targetairport != st->index) continue;
assert(v->state == FLYING);

@ -41,7 +41,4 @@ struct EngineRenew : EngineRenewPool::PoolItem<&_enginerenew_pool> {
~EngineRenew() {}
};
#define FOR_ALL_ENGINE_RENEWS_FROM(var, start) FOR_ALL_ITEMS_FROM(EngineRenew, enginerenew_index, var, start)
#define FOR_ALL_ENGINE_RENEWS(var) FOR_ALL_ENGINE_RENEWS_FROM(var, 0)
#endif /* AUTOREPLACE_BASE_H */

@ -124,8 +124,7 @@ class ReplaceVehicleWindow : public Window {
GUIEngineList *list = &this->engines[side];
list->clear();
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, type) {
for (const Engine *e : Engine::IterateType(type)) {
if (!draw_left && !this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
switch (type) {

@ -187,8 +187,6 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> {
void FillCachedName();
};
#define FOR_ALL_BASE_STATIONS(var) FOR_ALL_ITEMS_FROM(BaseStation, station_index, var, 0)
/**
* Class defining several overloaded accessors so we don't
* have to cast base stations that often
@ -276,10 +274,13 @@ struct SpecializedStation : public BaseStation {
assert(IsExpected(st));
return (const T *)st;
}
};
#define FOR_ALL_BASE_STATIONS_OF_TYPE(name, var) \
for (size_t station_index = 0; var = nullptr, station_index < name::GetPoolSize(); station_index++) \
if ((var = name::GetIfValid(station_index)) != nullptr)
/**
* Returns an iterable ensemble of all valid stations of type T
* @param from index of the first station to consider
* @return an iterable ensemble of all valid stations of type T
*/
static Pool::IterateWrapper<T> Iterate(size_t from = 0) { return Pool::IterateWrapper<T>(from); }
};
#endif /* BASE_STATION_BASE_H */

@ -11,7 +11,7 @@
#include "base_media_base.h"
#include "blitter/factory.hpp"
#if defined(WITH_FREETYPE)
#if defined(WITH_FREETYPE) || defined(WITH_UNISCRIBE)
#include "core/geometry_func.hpp"
#include "fontcache.h"
@ -218,7 +218,7 @@ bool HandleBootstrap()
if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure;
/* If there is no network or no freetype, then there is nothing we can do. Go straight to failure. */
#if defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(_WIN32) || defined(__APPLE__))
#if (defined(_WIN32) && defined(WITH_UNISCRIBE)) || (defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(__APPLE__)))
if (!_network_available) goto failure;
/* First tell the game we're bootstrapping. */
@ -262,6 +262,6 @@ bool HandleBootstrap()
/* Failure to get enough working to get a graphics set. */
failure:
usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD. See section 4.1 of README.md.");
usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD. See section 1.4 of README.md.");
return false;
}

@ -1278,8 +1278,7 @@ struct BuildVehicleWindow : Window {
* Also check to see if the previously selected engine is still available,
* and if not, reset selection to INVALID_ENGINE. This could be the case
* when engines become obsolete and are removed */
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
for (const Engine *e : Engine::IterateType(VEH_TRAIN)) {
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
const RailVehicleInfo *rvi = &e->u.rail;
@ -1322,8 +1321,7 @@ struct BuildVehicleWindow : Window {
this->eng_list.clear();
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) {
for (const Engine *e : Engine::IterateType(VEH_ROAD)) {
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue;
@ -1342,8 +1340,7 @@ struct BuildVehicleWindow : Window {
EngineID sel_id = INVALID_ENGINE;
this->eng_list.clear();
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_SHIP) {
for (const Engine *e : Engine::IterateType(VEH_SHIP)) {
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue;
@ -1367,8 +1364,7 @@ struct BuildVehicleWindow : Window {
* Also check to see if the previously selected plane is still available,
* and if not, reset selection to INVALID_ENGINE. This could be the case
* when planes become obsolete and are removed */
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_AIRCRAFT) {
for (const Engine *e : Engine::IterateType(VEH_AIRCRAFT)) {
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_company)) continue;

@ -272,8 +272,7 @@ void CargoPacket::PayDeferredPayments()
*/
/* static */ void CargoPacket::InvalidateAllFrom(SourceType src_type, SourceID src)
{
CargoPacket *cp;
FOR_ALL_CARGOPACKETS(cp) {
for (CargoPacket *cp : CargoPacket::Iterate()) {
if (cp->source_type == src_type && cp->source_id == src) cp->source_id = INVALID_SOURCE;
}
}
@ -284,8 +283,7 @@ void CargoPacket::PayDeferredPayments()
*/
/* static */ void CargoPacket::InvalidateAllFrom(StationID sid)
{
CargoPacket *cp;
FOR_ALL_CARGOPACKETS(cp) {
for (CargoPacket *cp : CargoPacket::Iterate()) {
if (cp->source == sid) cp->source = INVALID_STATION;
}
}

@ -206,19 +206,6 @@ public:
static bool ValidateDeferredCargoPayments();
};
/**
* Iterate over all _valid_ cargo packets from the given start.
* @param var Variable used as "iterator".
* @param start Cargo packet ID of the first packet to iterate over.
*/
#define FOR_ALL_CARGOPACKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(CargoPacket, cargopacket_index, var, start)
/**
* Iterate over all _valid_ cargo packets from the begin of the pool.
* @param var Variable used as "iterator".
*/
#define FOR_ALL_CARGOPACKETS(var) FOR_ALL_CARGOPACKETS_FROM(var, 0)
/**
* Simple collection class for a list of cargo packets.
* @tparam Tinst Actual instantiation of this cargo list.

@ -140,6 +140,7 @@ CommandProc CmdFoundTown;
CommandProc CmdRenameTown;
CommandProc CmdDoTownAction;
CommandProc CmdTownGrowthRate;
CommandProc CmdTownRating;
CommandProc CmdTownCargoGoal;
CommandProc CmdTownSetText;
CommandProc CmdExpandTown;
@ -361,6 +362,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdDoTownAction, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DO_TOWN_ACTION
DEF_CMD(CmdTownCargoGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_CARGO_GOAL
DEF_CMD(CmdTownGrowthRate, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_GROWTH_RATE
DEF_CMD(CmdTownRating, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_RATING
DEF_CMD(CmdTownSetText, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_SET_TEXT
DEF_CMD(CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_EXPAND_TOWN
DEF_CMD(CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DELETE_TOWN

@ -305,6 +305,7 @@ enum Commands {
CMD_DO_TOWN_ACTION, ///< do a action from the town detail window (like advertises or bribe)
CMD_TOWN_CARGO_GOAL, ///< set the goal of a cargo for a town
CMD_TOWN_GROWTH_RATE, ///< set the town growth rate
CMD_TOWN_RATING, ///< set rating of a company in a town
CMD_TOWN_SET_TEXT, ///< set the custom text of a town
CMD_EXPAND_TOWN, ///< expand a town
CMD_DELETE_TOWN, ///< delete a town

@ -171,9 +171,6 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties {
static void PostDestructor(size_t index);
};
#define FOR_ALL_COMPANIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Company, company_index, var, start)
#define FOR_ALL_COMPANIES(var) FOR_ALL_COMPANIES_FROM(var, 0)
Money CalculateCompanyValue(const Company *c, bool including_loan = true);
extern uint _next_competitor_start;

@ -268,8 +268,7 @@ void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst)
/** Update the landscaping limits per company. */
void UpdateLandscapingLimits()
{
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
c->terraform_limit = min(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint32)_settings_game.construction.terraform_frame_burst << 16);
c->clear_limit = min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16);
c->tree_limit = min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16);
@ -366,8 +365,7 @@ static void GenerateCompanyName(Company *c)
verify_name:;
/* No companies must have this name already */
Company *cc;
FOR_ALL_COMPANIES(cc) {
for (const Company *cc : Company::Iterate()) {
if (cc->name_1 == str && cc->name_2 == strp) goto bad_town_name;
}
@ -453,8 +451,7 @@ static Colours GenerateCompanyColour()
}
/* Move the colours that look similar to each company's colour to the side */
Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
Colours pcolour = (Colours)c->colour;
for (uint i = 0; i < COLOUR_END; i++) {
@ -500,8 +497,7 @@ restart:;
GetString(buffer, STR_PRESIDENT_NAME, lastof(buffer));
if (Utf8StringLength(buffer) >= MAX_LENGTH_PRESIDENT_NAME_CHARS) continue;
Company *cc;
FOR_ALL_COMPANIES(cc) {
for (const Company *cc : Company::Iterate()) {
if (c != cc) {
/* Reserve extra space so even overlength president names can be compared. */
char buffer2[(MAX_LENGTH_PRESIDENT_NAME_CHARS + 1) * MAX_CHAR_LENGTH];
@ -527,8 +523,7 @@ void ResetCompanyLivery(Company *c)
c->livery[scheme].colour2 = c->colour;
}
Group *g;
FOR_ALL_GROUPS(g) {
for (Group *g : Group::Iterate()) {
if (g->owner == c->index) {
g->livery.in_use = 0;
g->livery.colour1 = c->colour;
@ -606,11 +601,9 @@ static bool MaybeStartNewCompany()
{
if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false;
Company *c;
/* count number of competitors */
uint n = 0;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->is_ai) n++;
}
@ -679,11 +672,11 @@ static void HandleBankruptcyTakeover(Company *c)
/* Did we ask everyone for bankruptcy? If so, bail out. */
if (c->bankrupt_asked == MAX_UVALUE(CompanyMask)) return;
Company *c2, *best = nullptr;
Company *best = nullptr;
int32 best_performance = -1;
/* Ask the company with the highest performance history first */
FOR_ALL_COMPANIES(c2) {
for (Company *c2 : Company::Iterate()) {
if (c2->bankrupt_asked == 0 && // Don't ask companies going bankrupt themselves
!HasBit(c->bankrupt_asked, c2->index) &&
best_performance < c2->old_economy[1].performance_history &&
@ -745,10 +738,8 @@ void OnTick_Companies()
*/
void CompaniesYearlyLoop()
{
Company *c;
/* Copy statistics */
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
memmove(&c->yearly_expenses[1], &c->yearly_expenses[0], sizeof(c->yearly_expenses) - sizeof(c->yearly_expenses[0]));
memset(&c->yearly_expenses[0], 0, sizeof(c->yearly_expenses[0]));
SetWindowDirty(WC_FINANCES, c->index);
@ -756,7 +747,7 @@ void CompaniesYearlyLoop()
if (_settings_client.gui.show_finances && _local_company != COMPANY_SPECTATOR) {
ShowCompanyFinances(_local_company);
c = Company::Get(_local_company);
Company *c = Company::Get(_local_company);
if (c->num_valid_stat_ent > 5 && c->old_economy[0].performance_history < c->old_economy[4].performance_history) {
if (_settings_client.sound.new_year) SndPlayFx(SND_01_BAD_YEAR);
} else {
@ -988,8 +979,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
/* Ensure no two companies have the same primary colour */
if (scheme == LS_DEFAULT && !second) {
const Company *cc;
FOR_ALL_COMPANIES(cc) {
for (const Company *cc : Company::Iterate()) {
if (cc != c && cc->colour == colour) return CMD_ERROR;
}
}
@ -1052,8 +1042,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
InvalidateWindowData(WC_SMALLMAP, 0, 1);
/* Company colour data is indirectly cached. */
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (Vehicle *v : Vehicle::Iterate()) {
if (v->owner == _current_company) v->InvalidateNewGRFCache();
}
@ -1070,9 +1059,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
*/
static bool IsUniqueCompanyName(const char *name)
{
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->name != nullptr && strcmp(c->name, name) == 0) return false;
}
@ -1115,9 +1102,7 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
*/
static bool IsUniquePresidentName(const char *name)
{
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->president_name != nullptr && strcmp(c->president_name, name) == 0) return false;
}

@ -578,7 +578,7 @@ private:
/* Disallow other company colours for the primary colour */
if (this->livery_class < LC_GROUP_RAIL && HasBit(this->sel, LS_DEFAULT) && primary) {
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->index != _local_company) SetBit(used_colours, c->colour);
}
}
@ -662,8 +662,7 @@ private:
GUIGroupList list;
VehicleType vtype = (VehicleType)(this->livery_class - LC_GROUP_RAIL);
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->owner == owner && g->vehicle_type == vtype) {
list.push_back(g);
}
@ -754,8 +753,7 @@ public:
}
/* And group names */
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->owner == (CompanyID)this->window_number) {
SetDParam(0, g->index);
d = maxdim(d, GetStringBoundingBox(STR_GROUP_NAME));
@ -1829,8 +1827,7 @@ struct CompanyInfrastructureWindow : Window
this->roadtypes = ROADTYPES_NONE;
/* Find the used railtypes. */
Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
for (const Engine *e : Engine::IterateType(VEH_TRAIN)) {
if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
this->railtypes |= GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes;
@ -1840,7 +1837,7 @@ struct CompanyInfrastructureWindow : Window
this->railtypes = AddDateIntroducedRailTypes(this->railtypes, MAX_DAY);
/* Find the used roadtypes. */
FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) {
for (const Engine *e : Engine::IterateType(VEH_ROAD)) {
if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
this->roadtypes |= GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes;
@ -2419,9 +2416,7 @@ struct CompanyWindow : Window
break;
case WID_C_DESC_OWNERS: {
const Company *c2;
FOR_ALL_COMPANIES(c2) {
for (const Company *c2 : Company::Iterate()) {
SetDParamMaxValue(0, 75);
SetDParam(1, c2->index);
@ -2523,10 +2518,9 @@ struct CompanyWindow : Window
}
case WID_C_DESC_OWNERS: {
const Company *c2;
uint y = r.top;
FOR_ALL_COMPANIES(c2) {
for (const Company *c2 : Company::Iterate()) {
uint amt = GetAmountOwnedBy(c, c2->index);
if (amt != 0) {
SetDParam(0, amt * 25);

@ -1207,9 +1207,8 @@ DEF_CONSOLE_CMD(ConStartAI)
}
int n = 0;
Company *c;
/* Find the next free slot */
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->index != n) break;
n++;
}
@ -1413,10 +1412,11 @@ DEF_CONSOLE_CMD(ConAlias)
DEF_CONSOLE_CMD(ConScreenShot)
{
if (argc == 0) {
IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | giant | no_con] [file name]'");
IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | giant | no_con | minimap] [file name]'");
IConsoleHelp("'big' makes a zoomed-in screenshot of the visible area, 'giant' makes a screenshot of the "
"whole map, 'no_con' hides the console to create the screenshot. 'big' or 'giant' "
"screenshots are always drawn without console");
"screenshots are always drawn without console. "
"'minimap' makes a top-viewed minimap screenshot of whole world which represents one tile by one pixel.");
return true;
}
@ -1434,6 +1434,10 @@ DEF_CONSOLE_CMD(ConScreenShot)
/* screenshot giant [filename] */
type = SC_WORLD;
if (argc > 2) name = argv[2];
} else if (strcmp(argv[1], "minimap") == 0) {
/* screenshot minimap [filename] */
type = SC_MINIMAP;
if (argc > 2) name = argv[2];
} else if (strcmp(argv[1], "no_con") == 0) {
/* screenshot no_con [filename] */
IConsoleClose();
@ -1470,7 +1474,7 @@ DEF_CONSOLE_CMD(ConMinimap)
name = argv[2];
}
SaveMinimap(name);
MakeMinimapWorldScreenshot(name);
return true;
}
@ -1621,8 +1625,7 @@ DEF_CONSOLE_CMD(ConCompanies)
return true;
}
Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
/* Grab the company name */
char company_name[512];
SetDParam(0, c->index);
@ -1971,15 +1974,13 @@ DEF_CONSOLE_CMD(ConResetBlockedHeliports)
}
unsigned int count = 0;
Station *st;
FOR_ALL_STATIONS(st) {
for (Station *st : Station::Iterate()) {
if (st->airport.tile == INVALID_TILE) continue;
if (st->airport.HasHangar()) continue;
if (!st->airport.flags) continue;
bool occupied = false;
const Aircraft *a;
FOR_ALL_AIRCRAFT(a) {
for (const Aircraft *a : Aircraft::Iterate()) {
if (a->targetairport == st->index && a->state != FLYING) {
occupied = true;
break;

@ -12,6 +12,7 @@
#include "smallvec_type.hpp"
#include "enum_type.hpp"
#include <functional>
/** Various types of a pool. */
enum PoolType {
@ -137,6 +138,49 @@ struct Pool : PoolBase {
return ret;
}
/**
* Iterator to iterate all valid T of a pool
* @tparam T Type of the class/struct that is going to be iterated
*/
template <class T>
struct PoolIterator {
typedef T value_type;
typedef T* pointer;
typedef T& reference;
typedef size_t difference_type;
typedef std::forward_iterator_tag iterator_category;
explicit PoolIterator(size_t index, std::function<bool(size_t)> filter = nullptr) : index(index), filter(filter)
{
if (this->filter == nullptr) this->filter = [](size_t) { return true; };
this->ValidateIndex();
};
bool operator==(const PoolIterator &other) const { return this->index == other.index; }
bool operator!=(const PoolIterator &other) const { return !(*this == other); }
T * operator*() const { return T::Get(this->index); }
PoolIterator & operator++() { this->index++; this->ValidateIndex(); return *this; }
private:
size_t index;
std::function<bool(size_t)> filter;
void ValidateIndex() { while (this->index < T::GetPoolSize() && !(T::IsValidID(this->index) && this->filter(this->index))) this->index++; }
};
/*
* Iterable ensemble of all valid T
* @tparam T Type of the class/struct that is going to be iterated
*/
template <class T>
struct IterateWrapper {
size_t from;
std::function<bool(size_t)> filter;
IterateWrapper(size_t from = 0, std::function<bool(size_t)> filter = nullptr) : from(from), filter(filter) {}
PoolIterator<T> begin() { return PoolIterator<T>(this->from, this->filter); }
PoolIterator<T> end() { return PoolIterator<T>(T::GetPoolSize()); }
bool empty() { return this->begin() == this->end(); }
};
/**
* Base class for all PoolItems
* @tparam Tpool The pool this item is going to be part of
@ -145,6 +189,9 @@ struct Pool : PoolBase {
struct PoolItem {
Tindex index; ///< Index of this pool item
/** Type of the pool this item is going to be part of */
typedef struct Pool<Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero> Pool;
/**
* Allocates space for new Titem
* @param size size of Titem
@ -292,6 +339,13 @@ struct Pool : PoolBase {
* @note it's called only when CleaningPool()
*/
static inline void PreCleanPool() { }
/**
* Returns an iterable ensemble of all valid Titem
* @param from index of the first Titem to consider
* @return an iterable ensemble of all valid Titem
*/
static Pool::IterateWrapper<Titem> Iterate(size_t from = 0) { return Pool::IterateWrapper<Titem>(from); }
};
private:
@ -319,10 +373,4 @@ private:
void FreeItem(size_t index);
};
#define FOR_ALL_ITEMS_FROM(type, iter, var, start) \
for (size_t iter = start; var = nullptr, iter < type::GetPoolSize(); iter++) \
if ((var = type::Get(iter)) != nullptr)
#define FOR_ALL_ITEMS(type, iter, var) FOR_ALL_ITEMS_FROM(type, iter, var, 0)
#endif /* POOL_TYPE_HPP */

@ -16,7 +16,7 @@
/* rdtsc for MSC_VER, uses simple inline assembly, or _rdtsc
* from external win64.asm because VS2005 does not support inline assembly */
#if defined(_MSC_VER) && !defined(RDTSC_AVAILABLE)
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) && !defined(RDTSC_AVAILABLE)
#include <intrin.h>
uint64 ottd_rdtsc()
{
@ -85,7 +85,7 @@ uint64 ottd_rdtsc() {return 0;}
* Other platforms/architectures don't have CPUID, so zero the info and then
* most (if not all) of the features are set as if they do not exist.
*/
#if defined(_MSC_VER)
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
void ottd_cpuid(int info[4], int type)
{
__cpuid(info, type);

@ -232,8 +232,7 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
}
buffer += seprintf(buffer, last, "AI Configuration (local: %i) (current: %i):\n", (int)_local_company, (int)_current_company);
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->ai_info == nullptr) {
buffer += seprintf(buffer, last, " %2i: Human\n", (int)c->index);
} else {

@ -38,6 +38,8 @@ YearMonthDay _game_load_cur_date_ymd;
DateFract _game_load_date_fract;
uint8 _game_load_tick_skip_counter;
int32 _old_ending_year_slv_105; ///< Old ending year for savegames before SLV_105
/**
* Set the date.
* @param date New date
@ -216,21 +218,18 @@ static void OnNewYear()
if (_cur_year == _settings_client.gui.semaphore_build_before) ResetSignalVariant();
/* check if we reached end of the game */
if (_cur_year == ORIGINAL_END_YEAR) {
/* check if we reached end of the game (end of ending year) */
if (_cur_year == _settings_game.game_creation.ending_year + 1) {
ShowEndGameChart();
/* check if we reached the maximum year, decrement dates by a year */
} else if (_cur_year == MAX_YEAR + 1) {
Vehicle *v;
int days_this_year;
_cur_year--;
days_this_year = IsLeapYear(_cur_year) ? DAYS_IN_LEAP_YEAR : DAYS_IN_YEAR;
_date -= days_this_year;
FOR_ALL_VEHICLES(v) v->date_of_last_service -= days_this_year;
LinkGraph *lg;
FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(-days_this_year);
for (Vehicle *v : Vehicle::Iterate()) v->date_of_last_service -= days_this_year;
for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year);
/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out
* all of them if the date is set back, else those messages will hang for ever */

@ -87,6 +87,8 @@ static const Year MIN_YEAR = 0;
/** The default starting year */
static const Year DEF_START_YEAR = 1950;
/** The default scoring end year */
static const Year DEF_END_YEAR = ORIGINAL_END_YEAR - 1;
/**
* MAX_YEAR, nicely rounded value of the number of years that can

@ -144,8 +144,7 @@ protected:
CompanyMask companies = 0;
int unitnumber_max[4] = { -1, -1, -1, -1 };
const Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->type < 4 && this->show_types[v->type] && v->IsPrimaryVehicle()) {
const Order *order;

@ -44,7 +44,4 @@ struct Depot : DepotPool::PoolItem<&_depot_pool> {
}
};
#define FOR_ALL_DEPOTS_FROM(var, start) FOR_ALL_ITEMS_FROM(Depot, depot_index, var, start)
#define FOR_ALL_DEPOTS(var) FOR_ALL_DEPOTS_FROM(var, 0)
#endif /* DEPOT_BASE_H */

@ -28,9 +28,7 @@
*/
static bool IsUniqueDepotName(const char *name)
{
const Depot *d;
FOR_ALL_DEPOTS(d) {
for (const Depot *d : Depot::Iterate()) {
if (d->name != nullptr && strcmp(d->name, name) == 0) return false;
}

@ -172,8 +172,7 @@ static void InitBlocksizeForVehicles(VehicleType type, EngineImageType image_typ
int max_extend_right = 0;
uint max_height = 0;
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, type) {
for (const Engine *e : Engine::IterateType(type)) {
if (!e->IsEnabled()) continue;
EngineID eid = e->index;
@ -224,8 +223,7 @@ void InitDepotWindowBlockSizes()
_consistent_train_width = TRAININFO_DEFAULT_VEHICLE_WIDTH;
bool first = true;
const Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
for (const Engine *e : Engine::IterateType(VEH_TRAIN)) {
if (!e->IsEnabled()) continue;
uint w = TRAININFO_DEFAULT_VEHICLE_WIDTH;

@ -352,8 +352,7 @@ static bool DisasterTick_Ufo(DisasterVehicle *v)
v->current_order.SetDestination(1);
uint n = 0; // Total number of targetable road vehicles.
RoadVehicle *u;
FOR_ALL_ROADVEHICLES(u) {
for (const RoadVehicle *u : RoadVehicle::Iterate()) {
if (u->IsFrontEngine()) n++;
}
@ -364,14 +363,16 @@ static bool DisasterTick_Ufo(DisasterVehicle *v)
}
n = RandomRange(n); // Choose one of them.
FOR_ALL_ROADVEHICLES(u) {
for (const RoadVehicle *u : RoadVehicle::Iterate()) {
/* Find (n+1)-th road vehicle. */
if (u->IsFrontEngine() && (n-- == 0)) break;
if (u->IsFrontEngine() && (n-- == 0)) {
/* Target it. */
v->dest_tile = u->index;
v->age = 0;
break;
}
}
/* Target it. */
v->dest_tile = u->index;
v->age = 0;
return true;
} else {
/* Target a vehicle */
@ -562,8 +563,7 @@ static bool DisasterTick_Big_Ufo(DisasterVehicle *v)
v->current_order.SetDestination(2);
Vehicle *target;
FOR_ALL_VEHICLES(target) {
for (Vehicle *target : Vehicle::Iterate()) {
if (target->IsGroundVehicle() && !HasBit(target->subtype, GVSF_VIRTUAL)) {
if (Delta(target->x_pos, v->x_pos) + Delta(target->y_pos, v->y_pos) <= 12 * (int)TILE_SIZE) {
target->breakdown_ctr = 5;
@ -733,8 +733,7 @@ static void Disaster_Zeppeliner_Init()
/* Pick a random place, unless we find a small airport */
int x = TileX(Random()) * TILE_SIZE + TILE_SIZE / 2;
Station *st;
FOR_ALL_STATIONS(st) {
for (const Station *st : Station::Iterate()) {
if (st->airport.tile != INVALID_TILE && (st->airport.type == AT_SMALL || st->airport.type == AT_LARGE)) {
x = (TileX(st->airport.tile) + 2) * TILE_SIZE;
break;
@ -775,9 +774,9 @@ static void Disaster_Airplane_Init()
{
if (!Vehicle::CanAllocateItem(2)) return;
Industry *i, *found = nullptr;
Industry *found = nullptr;
FOR_ALL_INDUSTRIES(i) {
for (Industry *i : Industry::Iterate()) {
if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_AIRPLANE_ATTACKS) &&
(found == nullptr || Chance16(1, 2))) {
found = i;
@ -803,9 +802,9 @@ static void Disaster_Helicopter_Init()
{
if (!Vehicle::CanAllocateItem(3)) return;
Industry *i, *found = nullptr;
Industry *found = nullptr;
FOR_ALL_INDUSTRIES(i) {
for (Industry *i : Industry::Iterate()) {
if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CHOPPER_ATTACKS) &&
(found == nullptr || Chance16(1, 2))) {
found = i;
@ -896,9 +895,7 @@ static void Disaster_CoalMine_Init()
uint m;
for (m = 0; m < 15; m++) {
const Industry *i;
FOR_ALL_INDUSTRIES(i) {
for (const Industry *i : Industry::Iterate()) {
if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CAN_SUBSIDENCE) && --index < 0) {
SetDParam(0, i->town->index);
AddTileNewsItem(STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE, NT_ACCIDENT, i->location.tile + TileDiffXY(1, 1)); // keep the news, even when the mine closes
@ -979,8 +976,7 @@ void ReleaseDisastersTargetingIndustry(IndustryID i)
{
if (!_disaster_vehicle_count) return;
DisasterVehicle *v;
FOR_ALL_DISASTERVEHICLES(v) {
for (DisasterVehicle *v : DisasterVehicle::Iterate()) {
/* primary disaster vehicles that have chosen target */
if (v->subtype == ST_AIRPLANE || v->subtype == ST_HELICOPTER) {
/* if it has chosen target, and it is this industry (yes, dest_tile is IndustryID here), set order to "leaving map peacefully" */
@ -997,8 +993,7 @@ void ReleaseDisastersTargetingVehicle(VehicleID vehicle)
{
if (!_disaster_vehicle_count) return;
DisasterVehicle *v;
FOR_ALL_DISASTERVEHICLES(v) {
for (DisasterVehicle *v : DisasterVehicle::Iterate()) {
/* primary disaster vehicles that have chosen target */
if (v->subtype == ST_SMALL_UFO) {
if (v->current_order.GetDestination() != 0 && v->dest_tile == vehicle) {

@ -51,10 +51,4 @@ struct DisasterVehicle FINAL : public SpecializedVehicle<DisasterVehicle, VEH_DI
bool Tick();
};
/**
* Iterate over disaster vehicles.
* @param var The variable used to iterate over.
*/
#define FOR_ALL_DISASTERVEHICLES(var) FOR_ALL_VEHICLES_OF_TYPE(DisasterVehicle, var)
#endif /* DISASTER_VEHICLE_H */

@ -117,17 +117,15 @@ Money CalculateCompanyValue(const Company *c, bool including_loan)
{
Owner owner = c->index;
Station *st;
uint num = 0;
FOR_ALL_STATIONS(st) {
for (const Station *st : Station::Iterate()) {
if (st->owner == owner) num += CountBits((byte)st->facilities);
}
Money value = num * _price[PR_STATION_VALUE] * 25;
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->owner != owner) continue;
if (HasBit(v->subtype, GVSF_VIRTUAL)) continue;
@ -163,12 +161,11 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Count vehicles */
{
Vehicle *v;
Money min_profit = 0;
bool min_profit_first = true;
uint num = 0;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->owner != owner) continue;
if (IsCompanyBuildableVehicleType(v->type) && v->IsPrimaryVehicle() && !HasBit(v->subtype, GVSF_VIRTUAL)) {
if (v->profit_last_year > 0) num++; // For the vehicle score only count profitable vehicles
@ -194,9 +191,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Count stations */
{
uint num = 0;
const Station *st;
FOR_ALL_STATIONS(st) {
for (const Station *st : Station::Iterate()) {
/* Only count stations that are actually serviced */
if (st->owner == owner && (st->time_since_load <= 20 || st->time_since_unload <= 20)) num += CountBits((byte)st->facilities);
}
@ -303,8 +298,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
* There are no spectators in single player, so we must pick some other company. */
assert(!_networking);
Backup<CompanyID> cur_company2(_current_company, FILE_LINE);
Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->index != old_owner) {
SetLocalCompany(c->index);
break;
@ -316,16 +310,13 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
ClearOrderDestinationRefcountMap();
Town *t;
assert(old_owner != new_owner);
{
Company *c;
uint i;
/* See if the old_owner had shares in other companies */
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
for (i = 0; i < 4; i++) {
if (c->share_owners[i] == old_owner) {
/* Sell his shares */
@ -339,7 +330,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
/* Sell all the shares that people have on this company */
Backup<CompanyID> cur_company2(_current_company, FILE_LINE);
c = Company::Get(old_owner);
const Company *c = Company::Get(old_owner);
for (i = 0; i < 4; i++) {
cur_company2.Change(c->share_owners[i]);
if (_current_company != INVALID_OWNER) {
@ -360,8 +351,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
Company::Get(old_owner)->money = UINT64_MAX >> 2; // jackpot ;p
}
Subsidy *s;
FOR_ALL_SUBSIDIES(s) {
for (Subsidy *s : Subsidy::Iterate()) {
if (s->awarded == old_owner) {
if (new_owner == INVALID_OWNER) {
delete s;
@ -373,7 +363,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (new_owner == INVALID_OWNER) RebuildSubsidisedSourceAndDestinationCache();
/* Take care of rating and transport rights in towns */
FOR_ALL_TOWNS(t) {
for (Town *t : Town::Iterate()) {
/* If a company takes over, give the ratings to that company. */
if (new_owner != INVALID_OWNER) {
if (HasBit(t->have_ratings, old_owner)) {
@ -403,8 +393,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
}
{
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (Vehicle *v : Vehicle::Iterate()) {
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
if (new_owner == INVALID_OWNER) {
if (v->Previous() == nullptr) {
@ -429,8 +418,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (new_owner == INVALID_OWNER) {
RemoveAllGroupsForCompany(old_owner);
} else {
Group *g;
FOR_ALL_GROUPS(g) {
for (Group *g : Group::Iterate()) {
if (g->owner == old_owner) g->owner = new_owner;
}
}
@ -456,8 +444,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
old_company->settings.vehicle.servint_ispercent = new_company->settings.vehicle.servint_ispercent;
}
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (Vehicle *v : Vehicle::Iterate()) {
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
assert(new_owner != INVALID_OWNER);
@ -503,11 +490,9 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
/* Change ownership of template vehicles */
if (new_owner == INVALID_OWNER) {
TemplateVehicle *tv;
FOR_ALL_TEMPLATES(tv) {
for (TemplateVehicle *tv : TemplateVehicle::Iterate()) {
if (tv->owner == old_owner && tv->Prev() == nullptr) {
TemplateReplacement *tr;
FOR_ALL_TEMPLATE_REPLACEMENTS(tr) {
for (TemplateReplacement *tr : TemplateReplacement::Iterate()) {
if (tr->Template() == tv->index) {
delete tr;
}
@ -516,8 +501,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
}
}
} else {
TemplateVehicle *tv;
FOR_ALL_TEMPLATES(tv) {
for (TemplateVehicle *tv : TemplateVehicle::Iterate()) {
if (tv->owner == old_owner) tv->owner = new_owner;
}
}
@ -549,8 +533,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (new_owner != INVALID_OWNER) Company::Get(new_owner)->infrastructure.airport += Company::Get(old_owner)->infrastructure.airport;
/* convert owner of stations (including deleted ones, but excluding buoys) */
Station *st;
FOR_ALL_STATIONS(st) {
for (Station *st : Station::Iterate()) {
if (st->owner == old_owner) {
/* if a company goes bankrupt, set owner to OWNER_NONE so the sign doesn't disappear immediately
* also, drawing station window would cause reading invalid company's colour */
@ -559,29 +542,25 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
}
/* do the same for waypoints (we need to do this here so deleted waypoints are converted too) */
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
for (Waypoint *wp : Waypoint::Iterate()) {
if (wp->owner == old_owner) {
wp->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner;
}
}
Sign *si;
FOR_ALL_SIGNS(si) {
for (Sign *si : Sign::Iterate()) {
if (si->owner == old_owner) si->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner;
}
/* Remove Game Script created Goals, CargoMonitors and Story pages. */
Goal *g;
FOR_ALL_GOALS(g) {
for (Goal *g : Goal::Iterate()) {
if (g->company == old_owner) delete g;
}
ClearCargoPickupMonitoring(old_owner);
ClearCargoDeliveryMonitoring(old_owner);
StoryPage *sp;
FOR_ALL_STORY_PAGES(sp) {
for (StoryPage *sp : StoryPage::Iterate()) {
if (sp->company == old_owner) delete sp;
}
@ -702,23 +681,21 @@ static void CompanyCheckBankrupt(Company *c)
static void CompaniesGenStatistics()
{
/* Check for bankruptcy each month */
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
CompanyCheckBankrupt(c);
}
Backup<CompanyID> cur_company(_current_company, FILE_LINE);
if (!_settings_game.economy.infrastructure_maintenance) {
Station *st;
FOR_ALL_STATIONS(st) {
for (const Station *st : Station::Iterate()) {
cur_company.Change(st->owner);
CommandCost cost(EXPENSES_PROPERTY, _price[PR_STATION_VALUE] >> 1);
SubtractMoneyFromCompany(cost);
}
} else {
/* Improved monthly infrastructure costs. */
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
cur_company.Change(c->index);
CommandCost cost(EXPENSES_PROPERTY);
@ -744,7 +721,7 @@ static void CompaniesGenStatistics()
/* Only run the economic statics and update company stats every 3rd month (1st of quarter). */
if (!HasBit(1 << 0 | 1 << 3 | 1 << 6 | 1 << 9, _cur_month)) return;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
/* Drop the oldest history off the end */
std::copy_backward(c->old_economy, c->old_economy + MAX_HISTORY_QUARTERS - 1, c->old_economy + MAX_HISTORY_QUARTERS);
c->old_economy[0] = c->cur_economy;
@ -877,10 +854,8 @@ void RecomputePrices()
/** Let all companies pay the monthly interest on their loan. */
static void CompaniesPayInterest()
{
const Company *c;
Backup<CompanyID> cur_company(_current_company, FILE_LINE);
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
cur_company.Change(c->index);
/* Over a year the paid interest should be "loan * interest percentage",
@ -1979,53 +1954,59 @@ static void LoadUnloadVehicle(Vehicle *front)
/* if last speed is 0, we treat that as if no vehicle has ever visited the station. */
ge->last_speed = min(t, 255);
ge->last_age = min(_cur_year - front->build_year, 255);
ge->time_since_pickup = 0;
assert(v->cargo_cap >= v->cargo.StoredCount());
/* If there's goods waiting at the station, and the vehicle
* has capacity for it, load it on the vehicle. */
/* Capacity available for loading more cargo. */
uint cap_left = v->cargo_cap - v->cargo.StoredCount();
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) {
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v));
uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy, next_station.Get(v->cargo_type));
if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) {
/* Remember if there are reservations left so that we don't stop
* loading before they're loaded. */
SetBit(reservation_left, v->cargo_type);
}
/* Store whether the maximum possible load amount was loaded or not.*/
if (loaded == cap_left) {
SetBit(full_load_amount, v->cargo_type);
} else {
ClrBit(full_load_amount, v->cargo_type);
}
/* TODO: Regarding this, when we do gradual loading, we
* should first unload all vehicles and then start
* loading them. Since this will cause
* VEHICLE_TRIGGER_EMPTY to be called at the time when
* the whole vehicle chain is really totally empty, the
* completely_emptied assignment can then be safely
* removed; that's how TTDPatch behaves too. --pasky */
if (loaded > 0) {
completely_emptied = false;
anything_loaded = true;
st->time_since_load = 0;
ge->last_vehicle_type = v->type;
if (cap_left > 0) {
/* If vehicle can load cargo, reset time_since_pickup. */
ge->time_since_pickup = 0;
/* If there's goods waiting at the station, and the vehicle
* has capacity for it, load it on the vehicle. */
if ((v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) {
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v));
uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy, next_station.Get(v->cargo_type));
if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) {
/* Remember if there are reservations left so that we don't stop
* loading before they're loaded. */
SetBit(reservation_left, v->cargo_type);
}
if (ge->cargo.TotalCount() == 0) {
TriggerStationRandomisation(st, st->xy, SRT_CARGO_TAKEN, v->cargo_type);
TriggerStationAnimation(st, st->xy, SAT_CARGO_TAKEN, v->cargo_type);
AirportAnimationTrigger(st, AAT_STATION_CARGO_TAKEN, v->cargo_type);
/* Store whether the maximum possible load amount was loaded or not.*/
if (loaded == cap_left) {
SetBit(full_load_amount, v->cargo_type);
} else {
ClrBit(full_load_amount, v->cargo_type);
}
new_load_unload_ticks += loaded;
/* TODO: Regarding this, when we do gradual loading, we
* should first unload all vehicles and then start
* loading them. Since this will cause
* VEHICLE_TRIGGER_EMPTY to be called at the time when
* the whole vehicle chain is really totally empty, the
* completely_emptied assignment can then be safely
* removed; that's how TTDPatch behaves too. --pasky */
if (loaded > 0) {
completely_emptied = false;
anything_loaded = true;
st->time_since_load = 0;
ge->last_vehicle_type = v->type;
if (ge->cargo.TotalCount() == 0) {
TriggerStationRandomisation(st, st->xy, SRT_CARGO_TAKEN, v->cargo_type);
TriggerStationAnimation(st, st->xy, SAT_CARGO_TAKEN, v->cargo_type);
AirportAnimationTrigger(st, AAT_STATION_CARGO_TAKEN, v->cargo_type);
}
new_load_unload_ticks += loaded;
dirty_vehicle = dirty_station = true;
dirty_vehicle = dirty_station = true;
}
}
}

@ -47,17 +47,4 @@ struct CargoPayment : CargoPaymentPool::PoolItem<&_cargo_payment_pool> {
void SetCargo(CargoID ct) { this->ct = ct; }
};
/**
* Iterate over all cargo payments from a given start position.
* @param var The variable used for iterating.
* @param start The start of the iteration.
*/
#define FOR_ALL_CARGO_PAYMENTS_FROM(var, start) FOR_ALL_ITEMS_FROM(CargoPayment, cargo_payment_index, var, start)
/**
* Iterate over all cargo payments.
* @param var The variable used for iterating.
*/
#define FOR_ALL_CARGO_PAYMENTS(var) FOR_ALL_CARGO_PAYMENTS_FROM(var, 0)
#endif /* ECONOMY_BASE_H */

@ -37,10 +37,4 @@ struct EffectVehicle FINAL : public SpecializedVehicle<EffectVehicle, VEH_EFFECT
void RemoveEffectVehicleFromTickCache();
};
/**
* Iterate over disaster vehicles.
* @param var The variable used to iterate over.
*/
#define FOR_ALL_EFFECTVEHICLES(var) FOR_ALL_VEHICLES_OF_TYPE(EffectVehicle, var)
#endif /* EFFECTVEHICLE_BASE_H */

@ -693,8 +693,6 @@ void DrawRailCatenary(const TileInfo *ti)
bool SettingsDisableElrail(int32 p1)
{
Company *c;
Train *t;
bool disable = (p1 != 0);
/* we will now walk through all electric train engines and change their railtypes if it is the wrong one*/
@ -702,8 +700,7 @@ bool SettingsDisableElrail(int32 p1)
const RailType new_railtype = disable ? RAILTYPE_RAIL : RAILTYPE_ELECTRIC;
/* walk through all train engines */
Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
for (Engine *e : Engine::IterateType(VEH_TRAIN)) {
RailVehicleInfo *rv_info = &e->u.rail;
/* if it is an electric rail engine and its railtype is the wrong one */
if (rv_info->engclass == 2 && rv_info->railtype == old_railtype) {
@ -715,7 +712,7 @@ bool SettingsDisableElrail(int32 p1)
/* when disabling elrails, make sure that all existing trains can run on
* normal rail too */
if (disable) {
FOR_ALL_TRAINS(t) {
for (Train *t : Train::Iterate()) {
if (t->railtype == RAILTYPE_ELECTRIC) {
/* this railroad vehicle is now compatible only with elrail,
* so add there also normal rail compatibility */
@ -727,14 +724,14 @@ bool SettingsDisableElrail(int32 p1)
}
/* Fix the total power and acceleration for trains */
FOR_ALL_TRAINS(t) {
for (Train *t : Train::Iterate()) {
/* power and acceleration is cached only for front engines */
if (t->IsFrontEngine()) {
t->ConsistChanged(CCF_TRACK);
}
}
FOR_ALL_COMPANIES(c) c->avail_railtypes = GetCompanyRailtypes(c->index);
for (Company *c : Company::Iterate()) c->avail_railtypes = GetCompanyRailtypes(c->index);
/* This resets the _last_built_railtype, which will be invalid for electric
* rails. It may have unintended consequences if that function is ever

@ -536,8 +536,7 @@ EngineID EngineOverrideManager::GetID(VehicleType type, uint16 grf_local_id, uin
*/
bool EngineOverrideManager::ResetToCurrentNewGRFConfig()
{
const Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (IsCompanyBuildableVehicleType(v)) return false;
}
@ -628,8 +627,7 @@ void SetYearEngineAgingStops()
/* Determine last engine aging year, default to 2050 as previously. */
_year_engine_aging_stops = 2050;
const Engine *e;
FOR_ALL_ENGINES(e) {
for (const Engine *e : Engine::Iterate()) {
const EngineInfo *ei = &e->info;
/* Exclude certain engines */
@ -704,17 +702,15 @@ void StartupOneEngine(Engine *e, Date aging_date)
*/
void StartupEngines()
{
Engine *e;
/* Aging of vehicles stops, so account for that when starting late */
const Date aging_date = min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1));
FOR_ALL_ENGINES(e) {
for (Engine *e : Engine::Iterate()) {
StartupOneEngine(e, aging_date);
}
/* Update the bitmasks for the vehicle lists */
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
c->avail_railtypes = GetCompanyRailtypes(c->index);
c->avail_roadtypes = GetCompanyRoadTypes(c->index);
}
@ -773,14 +769,12 @@ static CompanyID GetPreviewCompany(Engine *e)
CargoTypes cargomask = e->type != VEH_TRAIN ? GetUnionOfArticulatedRefitMasks(e->index, true) : ALL_CARGOTYPES;
int32 best_hist = -1;
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
if (c->block_preview == 0 && !HasBit(e->preview_asked, c->index) &&
c->old_economy[0].performance_history > best_hist) {
/* Check whether the company uses similar vehicles */
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->owner != c->index || v->type != e->type || HasBit(v->subtype, GVSF_VIRTUAL)) continue;
if (!v->GetEngine()->CanCarryCargo() || !HasBit(cargomask, v->cargo_type)) continue;
@ -816,16 +810,14 @@ static bool IsVehicleTypeDisabled(VehicleType type, bool ai)
/** Daily check to offer an exclusive engine preview to the companies. */
void EnginesDailyLoop()
{
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date);
c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes, _date);
}
if (_cur_year >= _year_engine_aging_stops) return;
Engine *e;
FOR_ALL_ENGINES(e) {
for (Engine *e : Engine::Iterate()) {
EngineID i = e->index;
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) {
if (e->preview_company != INVALID_COMPANY) {
@ -861,8 +853,7 @@ void EnginesDailyLoop()
*/
void ClearEnginesHiddenFlagOfCompany(CompanyID cid)
{
Engine *e;
FOR_ALL_ENGINES(e) {
for (Engine *e : Engine::Iterate()) {
SB(e->company_hidden, cid, 1, 0);
}
}
@ -917,14 +908,12 @@ CommandCost CmdWantEnginePreview(TileIndex tile, DoCommandFlag flags, uint32 p1,
*/
static void NewVehicleAvailable(Engine *e)
{
Vehicle *v;
Company *c;
EngineID index = e->index;
/* In case the company didn't build the vehicle during the intro period,
* prevent that company from getting future intro periods for a while. */
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) {
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
uint block_preview = c->block_preview;
if (!HasBit(e->company_avail, c->index)) continue;
@ -932,7 +921,7 @@ static void NewVehicleAvailable(Engine *e)
/* We assume the user did NOT build it.. prove me wrong ;) */
c->block_preview = 20;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if ((v->type == VEH_TRAIN && !HasBit(v->subtype, GVSF_VIRTUAL)) || v->type == VEH_ROAD || v->type == VEH_SHIP ||
(v->type == VEH_AIRCRAFT && Aircraft::From(v)->IsNormalAircraft())) {
if (v->owner == c->index && v->engine_type == index) {
@ -958,11 +947,11 @@ static void NewVehicleAvailable(Engine *e)
/* maybe make another rail type available */
RailType railtype = e->u.rail.railtype;
assert(railtype < RAILTYPE_END);
FOR_ALL_COMPANIES(c) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
for (Company *c : Company::Iterate()) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
} else if (e->type == VEH_ROAD) {
/* maybe make another road type available */
assert(e->u.road.roadtype < ROADTYPE_END);
FOR_ALL_COMPANIES(c) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
for (Company* c : Company::Iterate()) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
}
/* Only broadcast event if AIs are able to build this vehicle type. */
@ -987,8 +976,7 @@ static void NewVehicleAvailable(Engine *e)
void EnginesMonthlyLoop()
{
if (_cur_year < _year_engine_aging_stops) {
Engine *e;
FOR_ALL_ENGINES(e) {
for (Engine *e : Engine::Iterate()) {
/* Age the vehicle */
if ((e->flags & ENGINE_AVAILABLE) && e->age != MAX_DAY) {
e->age++;
@ -1029,9 +1017,7 @@ void EnginesMonthlyLoop()
*/
static bool IsUniqueEngineName(const char *name)
{
const Engine *e;
FOR_ALL_ENGINES(e) {
for (const Engine *e : Engine::Iterate()) {
if (e->name != nullptr && strcmp(e->name, name) == 0) return false;
}
@ -1152,10 +1138,9 @@ bool IsEngineRefittable(EngineID engine)
*/
void CheckEngines()
{
const Engine *e;
Date min_date = INT32_MAX;
FOR_ALL_ENGINES(e) {
for (const Engine *e : Engine::Iterate()) {
if (!e->IsEnabled()) continue;
/* We have an available engine... yay! */

@ -142,6 +142,17 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
}
uint32 GetGRFID() const;
/**
* Returns an iterable ensemble of all valid engines of the given type
* @param vt the VehicleType for engines to be valid
* @param from index of the first engine to consider
* @return an iterable ensemble of all valid engines of the given type
*/
static Pool::IterateWrapper<Engine> IterateType(VehicleType vt, size_t from = 0)
{
return Pool::IterateWrapper<Engine>(from, [vt](size_t index) { return Engine::Get(index)->type == vt; });
}
};
struct EngineIDMapping {
@ -166,11 +177,6 @@ struct EngineOverrideManager : std::vector<EngineIDMapping> {
extern EngineOverrideManager _engine_mngr;
#define FOR_ALL_ENGINES_FROM(var, start) FOR_ALL_ITEMS_FROM(Engine, engine_index, var, start)
#define FOR_ALL_ENGINES(var) FOR_ALL_ENGINES_FROM(var, 0)
#define FOR_ALL_ENGINES_OF_TYPE(e, engine_type) FOR_ALL_ENGINES(e) if (e->type == engine_type)
static inline const EngineInfo *EngInfo(EngineID e)
{
return &Engine::Get(e)->info;

@ -273,8 +273,9 @@ private:
AbstractFileType abstract_filetype; /// Type of file to select.
SaveLoadOperation fop; ///< File operation to perform.
FileList fios_items; ///< Save game list.
FiosItem o_dir;
FiosItem o_dir; ///< Original dir (home dir for this browser)
const FiosItem *selected; ///< Selected game in #fios_items, or \c nullptr.
const FiosItem *highlighted; ///< Item in fios_items highlighted by mouse pointer, or \c nullptr.
Scrollbar *vscroll;
StringFilter string_filter; ///< Filter for available games.
@ -449,6 +450,8 @@ public:
if (item == this->selected) {
GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE);
} else if (item == this->highlighted) {
GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_VERY_DARK_BLUE);
}
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[GetDetailedFileType(item->type)]);
y += this->resize.step_height;
@ -729,6 +732,33 @@ public:
}
}
void OnMouseLoop() override
{
const Point pt{ _cursor.pos.x - this->left, _cursor.pos.y - this->top };
const int widget = GetWidgetFromPos(this, pt.x, pt.y);
if (widget == WID_SL_DRIVES_DIRECTORIES_LIST) {
int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WD_FRAMERECT_TOP);
if (y == INT_MAX) return;
/* Get the corresponding non-filtered out item from the list */
int i = 0;
while (i <= y) {
if (!this->fios_items_shown[i]) y++;
i++;
}
const FiosItem *file = this->fios_items.Get(y);
if (file != this->highlighted) {
this->highlighted = file;
this->SetWidgetDirty(WID_SL_DRIVES_DIRECTORIES_LIST);
}
} else if (this->highlighted != nullptr) {
this->highlighted = nullptr;
this->SetWidgetDirty(WID_SL_DRIVES_DIRECTORIES_LIST);
}
}
EventState OnKeyPress(WChar key, uint16 keycode) override
{
if (keycode == WKC_ESC) {

@ -318,7 +318,7 @@ static void SetColourRemap(TextColour colour)
* would be invisible at best, but it actually makes it illegible. */
bool no_shade = (colour & TC_NO_SHADE) != 0 || colour == TC_BLACK;
bool raw_colour = (colour & TC_IS_PALETTE_COLOUR) != 0;
colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR);
colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR | TC_FORCED);
_string_colourremap[1] = raw_colour ? (byte)colour : _string_colourmap[colour];
_string_colourremap[2] = no_shade ? 0 : 1;

@ -232,6 +232,7 @@ static const uint8 PC_VERY_LIGHT_YELLOW = 0x45; ///< Almost-white yel
static const uint8 PC_GREEN = 0xD0; ///< Green palette colour.
static const uint8 PC_VERY_DARK_BLUE = 0x9A; ///< Almost-black blue palette colour.
static const uint8 PC_DARK_BLUE = 0x9D; ///< Dark blue palette colour.
static const uint8 PC_LIGHT_BLUE = 0x98; ///< Light blue palette colour.

@ -46,7 +46,7 @@ struct FontState {
inline void SetColour(TextColour c)
{
assert(c >= TC_BLUE && c <= TC_BLACK);
this->cur_colour = c;
if ((this->cur_colour & TC_FORCED) == 0) this->cur_colour = c;
}
/**

@ -267,6 +267,7 @@ enum TextColour {
TC_IS_PALETTE_COLOUR = 0x100, ///< Colour value is already a real palette colour index, not an index of a StringColour.
TC_NO_SHADE = 0x200, ///< Do not add shading to this text colour.
TC_FORCED = 0x400, ///< Ignore colour changes from strings.
};
DECLARE_ENUM_AS_BIT_SET(TextColour)

@ -37,7 +37,4 @@ struct Goal : GoalPool::PoolItem<&_goal_pool> {
inline ~Goal() { free(this->text); free(this->progress); }
};
#define FOR_ALL_GOALS_FROM(var, start) FOR_ALL_ITEMS_FROM(Goal, goal_index, var, start)
#define FOR_ALL_GOALS(var) FOR_ALL_GOALS_FROM(var, 0)
#endif /* GOAL_BASE_H */

@ -66,8 +66,7 @@ struct GoalListWindow : public Window {
int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GOAL_LIST, WD_FRAMERECT_TOP);
int num = 0;
const Goal *s;
FOR_ALL_GOALS(s) {
for (const Goal *s : Goal::Iterate()) {
if (s->company == INVALID_COMPANY) {
y--;
if (y == 0) {
@ -86,7 +85,7 @@ struct GoalListWindow : public Window {
y -= 2; // "Company specific goals:" line.
if (y < 0) return;
FOR_ALL_GOALS(s) {
for (const Goal *s : Goal::Iterate()) {
if (s->company == this->window_number) {
y--;
if (y == 0) {
@ -158,8 +157,7 @@ struct GoalListWindow : public Window {
/* Count number of (non) awarded goals. */
uint num_global = 0;
uint num_company = 0;
const Goal *s;
FOR_ALL_GOALS(s) {
for (const Goal *s : Goal::Iterate()) {
if (s->company == INVALID_COMPANY) {
num_global++;
} else if (s->company == this->window_number) {
@ -207,8 +205,7 @@ struct GoalListWindow : public Window {
bool rtl = _current_text_dir == TD_RTL;
uint num = 0;
const Goal *s;
FOR_ALL_GOALS(s) {
for (const Goal *s : Goal::Iterate()) {
if (global_section ? s->company == INVALID_COMPANY : (s->company == this->window_number && s->company != INVALID_COMPANY)) {
if (IsInsideMM(pos, 0, cap)) {
switch (column) {
@ -278,8 +275,7 @@ struct GoalListWindow : public Window {
/* Calculate progress column width. */
uint max_width = 0;
Goal *s;
FOR_ALL_GOALS(s) {
for (const Goal *s : Goal::Iterate()) {
if (s->progress != nullptr) {
SetDParamStr(0, s->progress);
StringID str = s->completed ? STR_GOALS_PROGRESS_COMPLETE : STR_GOALS_PROGRESS;

@ -567,8 +567,7 @@ public:
}
byte nums = 0;
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
nums = min(this->num_vert_lines, max(nums, c->num_valid_stat_ent));
}
@ -592,7 +591,7 @@ public:
int numd = 0;
for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) {
c = Company::GetIfValid(k);
const Company *c = Company::GetIfValid(k);
if (c != nullptr) {
this->colours[numd] = _colour_gradient[c->colour][6];
for (int j = this->num_on_x_axis, i = 0; --j >= 0;) {
@ -1136,8 +1135,7 @@ private:
this->companies.clear();
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
this->companies.push_back(c);
}
@ -1219,8 +1217,7 @@ public:
this->icon_width = d.width + 2;
this->line_height = max<int>(d.height + 2, FONT_HEIGHT_NORMAL);
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
SetDParam(0, c->index);
SetDParam(1, c->index);
SetDParam(2, _performance_titles[widest_title]);
@ -1299,8 +1296,7 @@ struct PerformanceRatingDetailWindow : Window {
{
/* Update all company stats with the current data
* (this is because _score_info is not saved to a savegame) */
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
UpdateCompanyRatingAndValue(c, false);
}
@ -1497,8 +1493,7 @@ struct PerformanceRatingDetailWindow : Window {
}
if (this->company == INVALID_COMPANY) {
const Company *c;
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
this->company = c->index;
break;
}

@ -100,10 +100,6 @@ static inline bool IsTopLevelGroupID(GroupID index)
return index == DEFAULT_GROUP || index == ALL_GROUP;
}
#define FOR_ALL_GROUPS_FROM(var, start) FOR_ALL_ITEMS_FROM(Group, group_index, var, start)
#define FOR_ALL_GROUPS(var) FOR_ALL_GROUPS_FROM(var, 0)
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type);

@ -103,8 +103,7 @@ void GroupStatistics::Clear()
/* static */ void GroupStatistics::UpdateAfterLoad()
{
/* Set up the engine count for all companies */
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
for (VehicleType type = VEH_BEGIN; type < VEH_COMPANY_END; type++) {
c->group_all[type].Clear();
c->group_default[type].Clear();
@ -112,20 +111,18 @@ void GroupStatistics::Clear()
}
/* Recalculate */
Group *g;
FOR_ALL_GROUPS(g) {
for (Group *g : Group::Iterate()) {
g->statistics.Clear();
}
const Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (!v->IsEngineCountable()) continue;
GroupStatistics::CountEngine(v, 1);
if (v->IsPrimaryVehicle()) GroupStatistics::CountVehicle(v, 1);
}
FOR_ALL_COMPANIES(c) {
for (const Company *c : Company::Iterate()) {
GroupStatistics::UpdateAutoreplace(c->index);
}
}
@ -191,8 +188,7 @@ void GroupStatistics::Clear()
/* static */ void GroupStatistics::UpdateProfits()
{
/* Set up the engine count for all companies */
Company *c;
FOR_ALL_COMPANIES(c) {
for (Company *c : Company::Iterate()) {
for (VehicleType type = VEH_BEGIN; type < VEH_COMPANY_END; type++) {
c->group_all[type].ClearProfits();
c->group_default[type].ClearProfits();
@ -200,13 +196,11 @@ void GroupStatistics::Clear()
}
/* Recalculate */
Group *g;
FOR_ALL_GROUPS(g) {
for (Group *g : Group::Iterate()) {
g->statistics.ClearProfits();
}
const Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->IsPrimaryVehicle() && v->age > VEHICLE_PROFIT_MIN_AGE && !HasBit(v->subtype, GVSF_VIRTUAL)) GroupStatistics::VehicleReachedProfitAge(v);
}
}
@ -225,8 +219,7 @@ void GroupStatistics::Clear()
}
/* Recalculate */
Group *g;
FOR_ALL_GROUPS(g) {
for (Group *g : Group::Iterate()) {
if (g->owner != company) continue;
g->statistics.ClearAutoreplace();
}
@ -280,8 +273,7 @@ const Livery *GetParentLivery(const Group *g)
void PropagateChildLivery(const Group *g)
{
/* Company colour data is indirectly cached. */
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (Vehicle *v : Vehicle::Iterate()) {
if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) {
for (Vehicle *u = v; u != nullptr; u = u->Next()) {
u->colourmap = PAL_NONE;
@ -290,8 +282,7 @@ void PropagateChildLivery(const Group *g)
}
}
Group *cg;
FOR_ALL_GROUPS(cg) {
for (Group *cg : Group::Iterate()) {
if (cg->parent == g->index) {
if (!HasBit(cg->livery.in_use, 0)) cg->livery.colour1 = g->livery.colour1;
if (!HasBit(cg->livery.in_use, 1)) cg->livery.colour2 = g->livery.colour2;
@ -380,8 +371,7 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
DoCommand(0, p1, 0, flags, CMD_REMOVE_ALL_VEHICLES_GROUP);
/* Delete sub-groups */
Group *gp;
FOR_ALL_GROUPS(gp) {
for (const Group *gp : Group::Iterate()) {
if (gp->parent == g->index) {
DoCommand(0, gp->index, 0, flags, CMD_DELETE_GROUP);
}
@ -394,10 +384,9 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
/* If we set an autoreplace for the group we delete, remove it. */
if (_current_company < MAX_COMPANIES) {
Company *c;
EngineRenew *er;
c = Company::Get(_current_company);
FOR_ALL_ENGINE_RENEWS(er) {
for (EngineRenew *er : EngineRenew::Iterate()) {
if (er->group_id == g->index) RemoveEngineReplacementForCompany(c, er->from, g->index, flags);
}
}
@ -640,11 +629,9 @@ CommandCost CmdAddSharedVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32
if (!Group::IsValidID(id_g) || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR;
if (flags & DC_EXEC) {
Vehicle *v;
/* Find the first front engine which belong to the group id_g
* then add all shared vehicles of this front engine to the group id_g */
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->type == type && v->IsPrimaryVehicle()) {
if (v->group_id != id_g) continue;
@ -680,10 +667,8 @@ CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint3
if (g == nullptr || g->owner != _current_company) return CMD_ERROR;
if (flags & DC_EXEC) {
Vehicle *v;
/* Find each Vehicle that belongs to the group old_g and add it to the default group */
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->IsPrimaryVehicle()) {
if (v->group_id != old_g) continue;
@ -745,8 +730,7 @@ static void SetGroupReplaceProtection(Group *g, bool protect)
{
g->replace_protection = protect;
Group *pg;
FOR_ALL_GROUPS(pg) {
for (Group *pg : Group::Iterate()) {
if (pg->parent == g->index) SetGroupReplaceProtection(pg, protect);
}
}
@ -859,8 +843,7 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e)
{
uint count = 0;
const Engine *e = Engine::Get(id_e);
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->parent == id_g) count += GetGroupNumEngines(company, g->index, id_e);
}
return count + GroupStatistics::Get(company, id_g, e->type).num_engines[id_e];
@ -877,8 +860,7 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e)
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
{
uint count = 0;
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->parent == id_g) count += GetGroupNumVehicle(company, g->index, type);
}
return count + GroupStatistics::Get(company, id_g, type).num_vehicle;
@ -895,8 +877,7 @@ uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type)
{
uint count = 0;
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->parent == id_g) count += GetGroupNumProfitVehicle(company, g->index, type);
}
return count + GroupStatistics::Get(company, id_g, type).num_profit_vehicle;
@ -913,8 +894,7 @@ uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type)
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type)
{
Money sum = 0;
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->parent == id_g) sum += GetGroupProfitLastYear(company, g->index, type);
}
return sum + GroupStatistics::Get(company, id_g, type).profit_last_year;
@ -922,9 +902,7 @@ Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type)
void RemoveAllGroupsForCompany(const CompanyID company)
{
Group *g;
FOR_ALL_GROUPS(g) {
for (Group *g : Group::Iterate()) {
if (company == g->owner) {
DeleteTemplateReplacementsByGroupID(g->index);
delete g;

@ -190,8 +190,7 @@ private:
bool enable_expand_all = false;
bool enable_collapse_all = false;
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->owner == owner && g->vehicle_type == this->vli.vtype) {
list.push_back(g);
if (g->parent != INVALID_GROUP) {
@ -361,8 +360,7 @@ private:
void SetAllGroupsFoldState(bool folded)
{
const Group *g;
FOR_ALL_GROUPS(g) {
for (const Group *g : Group::Iterate()) {
if (g->owner == this->owner && g->vehicle_type == this->vli.vtype) {
if (g->parent != INVALID_GROUP) {
Group::Get(g->parent)->folded = folded;
@ -406,6 +404,7 @@ public:
this->groups.ForceRebuild();
this->groups.NeedResort();
this->BuildGroupList(vli.company);
this->group_sb->SetCount((uint)this->groups.size());
this->GetWidget<NWidgetCore>(WID_GL_CAPTION)->widget_data = STR_VEHICLE_LIST_TRAIN_CAPTION + this->vli.vtype;
this->GetWidget<NWidgetCore>(WID_GL_LIST_VEHICLE)->tool_tip = STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP + this->vli.vtype;
@ -785,6 +784,10 @@ public:
this->vehicle_sel = v->index;
if (_ctrl_pressed) {
this->SelectGroup(v->group_id);
}
SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this);
SetMouseCursorVehicle(v, EIT_IN_LIST);
_cursor.vehchain = true;
@ -1078,6 +1081,35 @@ public:
{
if (this->vehicle_sel == vehicle) ResetObjectToPlace();
}
/**
* Selects the specified group in the list
*
* @param g_id The ID of the group to be selected
*/
void SelectGroup(const GroupID g_id)
{
if (g_id == INVALID_GROUP || g_id == this->vli.index) return;
this->vli.index = g_id;
if (g_id != ALL_GROUP && g_id != DEFAULT_GROUP) {
const Group *g = Group::Get(g_id);
int id_g = find_index(this->groups, g);
// The group's branch is maybe collapsed, so try to expand it
if (id_g == -1) {
for (auto pg = Group::GetIfValid(g->parent); pg != nullptr; pg = Group::GetIfValid(pg->parent)) {
pg->folded = false;
}
this->groups.ForceRebuild();
this->BuildGroupList(this->owner);
id_g = find_index(this->groups, g);
}
this->group_sb->ScrollTowards(id_g);
}
this->vehicles.ForceRebuild();
this->SetDirty();
}
};
@ -1099,18 +1131,31 @@ static WindowDesc _train_group_desc(
* Show the group window for the given company and vehicle type.
* @param company The company to show the window for.
* @param vehicle_type The type of vehicle to show it for.
* @param group The group to be selected. Defaults to INVALID_GROUP.
* @param need_existing_window Whether the existing window is needed. Defaults to false.
*/
void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type)
void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group = INVALID_GROUP, bool need_existing_window = false)
{
if (!Company::IsValidID(company)) return;
WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack();
const WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack();
VehicleGroupWindow *w;
if (vehicle_type == VEH_TRAIN) {
AllocateWindowDescFront<VehicleGroupWindow>(&_train_group_desc, num);
w = AllocateWindowDescFront<VehicleGroupWindow>(&_train_group_desc, num, need_existing_window);
} else {
_other_group_desc.cls = GetWindowClassForVehicleType(vehicle_type);
AllocateWindowDescFront<VehicleGroupWindow>(&_other_group_desc, num);
w = AllocateWindowDescFront<VehicleGroupWindow>(&_other_group_desc, num, need_existing_window);
}
if (w != nullptr) w->SelectGroup(group);
}
/**
* Show the group window for the given vehicle.
* @param v The vehicle to show the window for.
*/
void ShowCompanyGroupForVehicle(const Vehicle *v)
{
ShowCompanyGroup(v->owner, v->type, v->group_id, true);
}
/**

@ -13,7 +13,8 @@
#include "company_type.h"
#include "vehicle_type.h"
void ShowCompanyGroup(CompanyID company, VehicleType veh);
void ShowCompanyGroup(CompanyID company, VehicleType veh, GroupID group = INVALID_GROUP, bool need_existing_window = false);
void ShowCompanyGroupForVehicle(const Vehicle *v);
void DeleteGroupHighlightOfVehicle(const Vehicle *v);
#endif /* GROUP_GUI_H */

@ -87,13 +87,12 @@ static bool HighScoreSorter(const Company * const &a, const Company * const &b)
*/
int8 SaveHighScoreValueNetwork()
{
const Company *c;
const Company *cl[MAX_COMPANIES];
uint count = 0;
int8 company = -1;
/* Sort all active companies with the highest score first */
FOR_ALL_COMPANIES(c) cl[count++] = c;
for (const Company *c : Company::Iterate()) cl[count++] = c;
std::sort(std::begin(cl), std::begin(cl) + count, HighScoreSorter);

@ -38,10 +38,15 @@ static const KeycodeNames _keycode_to_name[] = {
{"META", WKC_META},
{"GLOBAL", WKC_GLOBAL_HOTKEY},
{"ESC", WKC_ESC},
{"DEL", WKC_DELETE},
{"BACKSPACE", WKC_BACKSPACE},
{"INS", WKC_INSERT},
{"DEL", WKC_DELETE},
{"PAGEUP", WKC_PAGEUP},
{"PAGEDOWN", WKC_PAGEDOWN},
{"END", WKC_END},
{"HOME", WKC_HOME},
{"RETURN", WKC_RETURN},
{"BACKQUOTE", WKC_BACKQUOTE},
{"SPACE", WKC_SPACE},
{"F1", WKC_F1},
{"F2", WKC_F2},
{"F3", WKC_F3},
@ -54,11 +59,24 @@ static const KeycodeNames _keycode_to_name[] = {
{"F10", WKC_F10},
{"F11", WKC_F11},
{"F12", WKC_F12},
{"BACKQUOTE", WKC_BACKQUOTE},
{"PAUSE", WKC_PAUSE},
{"COMMA", WKC_COMMA},
{"NUM_PLUS", WKC_NUM_PLUS},
{"NUM_DIV", WKC_NUM_DIV},
{"NUM_MUL", WKC_NUM_MUL},
{"NUM_MINUS", WKC_NUM_MINUS},
{"NUM_PLUS", WKC_NUM_PLUS},
{"NUM_ENTER", WKC_NUM_ENTER},
{"NUM_DOT", WKC_NUM_DECIMAL},
{"/", WKC_SLASH},
{";", WKC_SEMICOLON},
{"=", WKC_EQUALS},
{"[", WKC_L_BRACKET},
{"\\", WKC_BACKSLASH},
{"]", WKC_R_BRACKET},
{"'", WKC_SINGLEQUOTE},
{",", WKC_COMMA},
{"COMMA", WKC_COMMA}, // legacy variant, should be below ","
{".", WKC_PERIOD},
{"-", WKC_MINUS},
{"PAGE_UP", WKC_PAGEUP},
{"PAGE_DOWN", WKC_PAGEDOWN},

@ -179,9 +179,6 @@ void ReleaseDisastersTargetingIndustry(IndustryID);
bool IsTileForestIndustry(TileIndex tile);
#define FOR_ALL_INDUSTRIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Industry, industry_index, var, start)
#define FOR_ALL_INDUSTRIES(var) FOR_ALL_INDUSTRIES_FROM(var, 0)
/** Data for managing the number of industries of a single industry type. */
struct IndustryTypeBuildData {
uint32 probability; ///< Relative probability of building this industry.

@ -1206,8 +1206,7 @@ void OnTick_Industry()
if (_game_mode == GM_EDITOR) return;
Industry *i;
FOR_ALL_INDUSTRIES(i) {
for (Industry *i : Industry::Iterate()) {
ProduceIndustryGoods(i);
}
}
@ -1394,8 +1393,7 @@ static CommandCost FindTownForIndustry(TileIndex tile, int type, Town **t)
if (_settings_game.economy.multiple_industry_per_town) return CommandCost();
const Industry *i;
FOR_ALL_INDUSTRIES(i) {
for (const Industry *i : Industry::Iterate()) {
if (i->type == (byte)type && i->town == *t) {
*t = nullptr;
return_cmd_error(STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN);
@ -1639,11 +1637,11 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags,
static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int type)
{
const IndustrySpec *indspec = GetIndustrySpec(type);
const Industry *i = nullptr;
/* 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;
TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax);
TILE_AREA_LOOP(atile, tile_area) {
if (GetTileType(atile) == MP_INDUSTRY) {
@ -1661,7 +1659,7 @@ static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int t
return CommandCost();
}
FOR_ALL_INDUSTRIES(i) {
for (const Industry *i : Industry::Iterate()) {
/* Within 14 tiles from another industry is considered close */
if (DistanceMax(tile, i->location.tile) > 14) continue;
@ -1834,6 +1832,11 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
break;
}
CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile);
/* Industries without "unlimited" cargo types support depend on the specific order/slots of cargo types.
* They need to be able to blank out specific slots without aborting the callback sequence,
* and solve this by returning undefined cargo indexes. Skip these. */
if (cargo == CT_INVALID && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) continue;
/* Verify valid cargo */
if (std::find(indspec->accepts_cargo, endof(indspec->accepts_cargo), cargo) == endof(indspec->accepts_cargo)) {
/* Cargo not in spec, error in NewGRF */
ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res);
@ -1861,6 +1864,9 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
break;
}
CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile);
/* Allow older GRFs to skip slots. */
if (cargo == CT_INVALID && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) continue;
/* Verify valid cargo */
if (std::find(indspec->produced_cargo, endof(indspec->produced_cargo), cargo) == endof(indspec->produced_cargo)) {
/* Cargo not in spec, error in NewGRF */
ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res);
@ -2337,9 +2343,7 @@ void Industry::FillCachedName()
void ClearAllIndustryCachedNames()
{
Industry *ind;
FOR_ALL_INDUSTRIES(ind) {
for (Industry *ind : Industry::Iterate()) {
ind->cached_name.reset();
}
}
@ -2534,9 +2538,8 @@ static int WhoCanServiceIndustry(Industry *ind)
{
if (ind->stations_near.size() == 0) return 0; // No stations found at all => nobody services
const Vehicle *v;
int result = 0;
FOR_ALL_VEHICLES(v) {
for (const Vehicle *v : Vehicle::Iterate()) {
/* Is it worthwhile to try this vehicle? */
if (v->owner != _local_company && result != 0) continue;
@ -2863,8 +2866,7 @@ void IndustryMonthlyLoop()
_industry_builder.MonthlyLoop();
Industry *i;
FOR_ALL_INDUSTRIES(i) {
for (Industry *i : Industry::Iterate()) {
UpdateIndustryStatistics(i);
if (i->prod_level == PRODLEVEL_CLOSURE) {
delete i;

@ -1167,6 +1167,8 @@ static const NWidgetPart _nested_industry_directory_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_ID_DROPDOWN_ORDER), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_DROPDOWN_CRITERIA), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_FILTER_BY_ACC_CARGO), SetMinimalSize(225, 12), SetFill(0, 1), SetDataTip(STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER, STR_TOOLTIP_FILTER_CRITERIA),
NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_FILTER_BY_PROD_CARGO), SetMinimalSize(225, 12), SetFill(0, 1), SetDataTip(STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER, STR_TOOLTIP_FILTER_CRITERIA),
NWidget(WWT_PANEL, COLOUR_BROWN), SetResize(1, 0), EndContainer(),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_BROWN, WID_ID_INDUSTRY_LIST), SetDataTip(0x0, STR_INDUSTRY_DIRECTORY_LIST_CAPTION), SetResize(1, 1), SetScrollbar(WID_ID_SCROLLBAR), EndContainer(),
@ -1178,7 +1180,68 @@ static const NWidgetPart _nested_industry_directory_widgets[] = {
EndContainer(),
};
typedef GUIList<const Industry*> GUIIndustryList;
typedef GUIList<const Industry *, const std::pair<CargoID, CargoID> &> GUIIndustryList;
/** Special cargo filter criteria */
enum CargoFilterSpecialType {
CF_ANY = CT_NO_REFIT, ///< Show all industries (i.e. no filtering)
CF_NONE = CT_INVALID, ///< Show only industries which do not produce/accept cargo
};
/** Cargo filter functions */
/**
* Check whether an industry accepts and produces a certain cargo pair.
* @param industry The industry whose cargoes will being checked.
* @param cargoes The accepted and produced cargo pair to look for.
* @return bool Whether the given cargoes accepted and produced by the industry.
*/
static bool CDECL CargoFilter(const Industry * const *industry, const std::pair<CargoID, CargoID> &cargoes)
{
auto accepted_cargo = cargoes.first;
auto produced_cargo = cargoes.second;
bool accepted_cargo_matches;
switch (accepted_cargo) {
case CF_ANY:
accepted_cargo_matches = true;
break;
case CF_NONE:
accepted_cargo_matches = std::all_of(std::begin((*industry)->accepts_cargo), std::end((*industry)->accepts_cargo), [](CargoID cargo) {
return cargo == CT_INVALID;
});
break;
default:
const auto &ac = (*industry)->accepts_cargo;
accepted_cargo_matches = std::find(std::begin(ac), std::end(ac), accepted_cargo) != std::end(ac);
break;
}
bool produced_cargo_matches;
switch (produced_cargo) {
case CF_ANY:
produced_cargo_matches = true;
break;
case CF_NONE:
produced_cargo_matches = std::all_of(std::begin((*industry)->produced_cargo), std::end((*industry)->produced_cargo), [](CargoID cargo) {
return cargo == CT_INVALID;
});
break;
default:
const auto &pc = (*industry)->produced_cargo;
produced_cargo_matches = std::find(std::begin(pc), std::end(pc), produced_cargo) != std::end(pc);
break;
}
return accepted_cargo_matches && produced_cargo_matches;
}
static GUIIndustryList::FilterFunction * const _filter_funcs[] = { &CargoFilter };
/**
@ -1197,25 +1260,107 @@ protected:
GUIIndustryList industries;
Scrollbar *vscroll;
CargoID cargo_filter[NUM_CARGO + 2]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE
StringID cargo_filter_texts[NUM_CARGO + 3]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID
CargoID produced_cargo_filter_criteria; ///< Selected produced cargo filter
CargoID accepted_cargo_filter_criteria; ///< Selected accepted cargo filter
/**
* Set cargo filter list item index.
* @param index The index of the cargo to be set
*/
void SetProducedCargoFilterIndex(int index)
{
if (this->produced_cargo_filter_criteria != index) {
this->produced_cargo_filter_criteria = index;
/* deactivate filter if criteria is 'Show All', activate it otherwise */
bool is_filtering_necessary = this->cargo_filter[this->produced_cargo_filter_criteria] != CF_ANY || this->cargo_filter[this->accepted_cargo_filter_criteria] != CF_ANY;
this->industries.SetFilterState(is_filtering_necessary);
this->industries.SetFilterType(0);
this->industries.ForceRebuild();
}
}
/**
* Set cargo filter list item index.
* @param index The index of the cargo to be set
*/
void SetAcceptedCargoFilterIndex(int index)
{
if (this->accepted_cargo_filter_criteria != index) {
this->accepted_cargo_filter_criteria = index;
/* deactivate filter if criteria is 'Show All', activate it otherwise */
bool is_filtering_necessary = this->cargo_filter[this->produced_cargo_filter_criteria] != CF_ANY || this->cargo_filter[this->accepted_cargo_filter_criteria] != CF_ANY;
this->industries.SetFilterState(is_filtering_necessary);
this->industries.SetFilterType(0);
this->industries.ForceRebuild();
}
}
/**
* Populate the filter list and set the cargo filter criteria.
*/
void SetCargoFilterArray()
{
uint filter_items = 0;
/* Add item for disabling filtering. */
this->cargo_filter[filter_items] = CF_ANY;
this->cargo_filter_texts[filter_items] = STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES;
this->produced_cargo_filter_criteria = filter_items;
this->accepted_cargo_filter_criteria = filter_items;
filter_items++;
/* Add item for industries not producing anything, e.g. power plants */
this->cargo_filter[filter_items] = CF_NONE;
this->cargo_filter_texts[filter_items] = STR_INDUSTRY_DIRECTORY_FILTER_NONE;
filter_items++;
/* Collect available cargo types for filtering. */
const CargoSpec *cs;
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
this->cargo_filter[filter_items] = cs->Index();
this->cargo_filter_texts[filter_items] = cs->name;
filter_items++;
}
/* Terminate the filter list. */
this->cargo_filter_texts[filter_items] = INVALID_STRING_ID;
this->industries.SetFilterFuncs(_filter_funcs);
bool is_filtering_necessary = this->cargo_filter[this->produced_cargo_filter_criteria] != CF_ANY || this->cargo_filter[this->accepted_cargo_filter_criteria] != CF_ANY;
this->industries.SetFilterState(is_filtering_necessary);
}
/** (Re)Build industries list */
void BuildSortIndustriesList()
{
if (this->industries.NeedRebuild()) {
this->industries.clear();
const Industry *i;
FOR_ALL_INDUSTRIES(i) {
for (const Industry *i : Industry::Iterate()) {
this->industries.push_back(i);
}
this->industries.shrink_to_fit();
this->industries.RebuildDone();
this->vscroll->SetCount((uint)this->industries.size()); // Update scrollbar as well.
}
if (!this->industries.Sort()) return;
IndustryDirectoryWindow::last_industry = nullptr; // Reset name sorter sort cache
this->SetWidgetDirty(WID_ID_INDUSTRY_LIST); // Set the modified widget dirty
auto filter = std::make_pair(this->cargo_filter[this->accepted_cargo_filter_criteria],
this->cargo_filter[this->produced_cargo_filter_criteria]);
this->industries.Filter(filter);
this->industries.Sort();
this->vscroll->SetCount((uint)this->industries.size()); // Update scrollbar as well.
this->SetDirty();
}
/**
@ -1318,6 +1463,18 @@ protected:
return std::get<3>(a) > std::get<3>(b);
});
/* If the produced cargo filter is active then move the filtered cargo to the beginning of the list,
* because this is the one the player interested in, and that way it is not hidden in the 'n' more cargos */
const CargoID cid = this->cargo_filter[this->produced_cargo_filter_criteria];
if (cid != CF_ANY && cid != CF_NONE) {
auto filtered_ci = std::find_if(cargos.begin(), cargos.end(), [cid](const CargoInfo& ci) -> bool {
return std::get<0>(ci) == cid;
});
if (filtered_ci != cargos.end()) {
std::rotate(cargos.begin(), filtered_ci, filtered_ci + 1);
}
}
/* Display first 3 cargos */
for (size_t j = 0; j < min<size_t>(3, cargos.size()); j++) {
CargoInfo ci = cargos[j];
@ -1360,9 +1517,26 @@ public:
this->last_sorting = this->industries.GetListing();
}
void OnInit() override
{
this->SetCargoFilterArray();
}
void SetStringParameters(int widget) const override
{
if (widget == WID_ID_DROPDOWN_CRITERIA) SetDParam(0, IndustryDirectoryWindow::sorter_names[this->industries.SortType()]);
switch (widget) {
case WID_ID_DROPDOWN_CRITERIA:
SetDParam(0, IndustryDirectoryWindow::sorter_names[this->industries.SortType()]);
break;
case WID_ID_FILTER_BY_ACC_CARGO:
SetDParam(0, this->cargo_filter_texts[this->accepted_cargo_filter_criteria]);
break;
case WID_ID_FILTER_BY_PROD_CARGO:
SetDParam(0, this->cargo_filter_texts[this->produced_cargo_filter_criteria]);
break;
}
}
void DrawWidget(const Rect &r, int widget) const override
@ -1379,8 +1553,17 @@ public:
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_DIRECTORY_NONE);
break;
}
TextColour tc;
const CargoID acf_cid = this->cargo_filter[this->accepted_cargo_filter_criteria];
for (uint i = this->vscroll->GetPosition(); i < this->industries.size(); i++) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, this->GetIndustryString(this->industries[i]));
tc = TC_FROMSTRING;
if (acf_cid != CF_ANY && acf_cid != CF_NONE) {
Industry *ind = const_cast<Industry *>(this->industries[i]);
if (IndustryTemporarilyRefusesCargo(ind, acf_cid)) {
tc = TC_GREY | TC_FORCED;
}
}
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, this->GetIndustryString(this->industries[i]), tc);
y += this->resize.step_height;
if (++n == this->vscroll->GetCapacity()) break; // max number of industries in 1 window
@ -1440,6 +1623,14 @@ public:
ShowDropDownMenu(this, IndustryDirectoryWindow::sorter_names, this->industries.SortType(), WID_ID_DROPDOWN_CRITERIA, 0, 0);
break;
case WID_ID_FILTER_BY_ACC_CARGO: // Cargo filter dropdown
ShowDropDownMenu(this, this->cargo_filter_texts, this->accepted_cargo_filter_criteria, WID_ID_FILTER_BY_ACC_CARGO, 0, 0);
break;
case WID_ID_FILTER_BY_PROD_CARGO: // Cargo filter dropdown
ShowDropDownMenu(this, this->cargo_filter_texts, this->produced_cargo_filter_criteria, WID_ID_FILTER_BY_PROD_CARGO, 0, 0);
break;
case WID_ID_INDUSTRY_LIST: {
uint p = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_ID_INDUSTRY_LIST, WD_FRAMERECT_TOP);
if (p < this->industries.size()) {
@ -1456,9 +1647,26 @@ public:
void OnDropdownSelect(int widget, int index) override
{
if (this->industries.SortType() != index) {
this->industries.SetSortType(index);
this->BuildSortIndustriesList();
switch (widget) {
case WID_ID_DROPDOWN_CRITERIA: {
if (this->industries.SortType() != index) {
this->industries.SetSortType(index);
this->BuildSortIndustriesList();
}
break;
}
case WID_ID_FILTER_BY_ACC_CARGO: {
this->SetAcceptedCargoFilterIndex(index);
this->BuildSortIndustriesList();
break;
}
case WID_ID_FILTER_BY_PROD_CARGO: {
this->SetProducedCargoFilterIndex(index);
this->BuildSortIndustriesList();
break;
}
}
}

@ -198,8 +198,7 @@ static void FixAllReservations()
{
/* if this function is called, we can safely assume that sharing of rails is being switched off */
assert(!_settings_game.economy.infrastructure_sharing[VEH_TRAIN]);
Train *v;
FOR_ALL_TRAINS(v) {
for (Train *v : Train::Iterate()) {
if (!v->IsPrimaryVehicle() || (v->vehstatus & VS_CRASHED) != 0 || HasBit(v->subtype, GVSF_VIRTUAL)) continue;
/* It might happen that the train reserved additional tracks,
* but FollowTrainReservation can't detect those because they are no longer reachable.
@ -241,8 +240,7 @@ bool CheckSharingChangePossible(VehicleType type)
if (_settings_game.economy.infrastructure_sharing[type]) return true;
StringID error_message = STR_NULL;
Vehicle *v;
FOR_ALL_VEHICLES(v) {
for (Vehicle *v : Vehicle::Iterate()) {
if (type != v->type || HasBit(v->subtype, GVSF_VIRTUAL)) continue;
if (v->Previous() != nullptr) continue;
@ -288,9 +286,10 @@ void HandleSharingCompanyDeletion(Owner owner)
{
YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK);
Vehicle *v = nullptr;
SCOPE_INFO_FMT([&v], "HandleSharingCompanyDeletion: veh: %s", scope_dumper().VehicleInfo(v));
FOR_ALL_VEHICLES(v) {
Vehicle *si_v = nullptr;
SCOPE_INFO_FMT([&si_v], "HandleSharingCompanyDeletion: veh: %s", scope_dumper().VehicleInfo(si_v));
for (Vehicle *v : Vehicle::Iterate()) {
si_v = v;
if (!IsCompanyBuildableVehicleType(v) || v->Previous() != nullptr) continue;
/* vehicle position */
if (v->owner == owner || !VehiclePositionIsAllowed(v, owner)) {

@ -471,9 +471,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Skakel terminaal
STR_ABOUT_MENU_AI_DEBUG :AI/Spel skript ontfout
STR_ABOUT_MENU_SCREENSHOT :Skermskoot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ten volle vergrote skermskoot
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Basiese groote skermskoot
STR_ABOUT_MENU_GIANT_SCREENSHOT :Hele kaart Skermkiekie (Ctrl+G)
STR_ABOUT_MENU_ABOUT_OPENTTD :Oor 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :"Sprite" rigter
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :skakel beperkte bokse
@ -857,6 +854,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuwe {STRING} nou beskikbaar! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} aanvaar nie meer {STRING} nie
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} aanvaar nie meer {STRING} of {STRING} nie
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} aanvaar nou {STRING}
@ -3999,6 +3997,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Kies bel
STR_AI_LIST_CANCEL :{BLACK}Kanseleer
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Moenie skrif verander nie
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION_AI :AI

@ -446,9 +446,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :توقل كونسول
STR_ABOUT_MENU_AI_DEBUG :مكتشف اخطاء الذكاء الصناعي
STR_ABOUT_MENU_SCREENSHOT :صورة من الشاشة - Ctrl-S -
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :صورة للشاشة مصغرة
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :تقريب الشاشة القياسي
STR_ABOUT_MENU_GIANT_SCREENSHOT :صورة كبيرة لكامل الخريطة -Ctrl-G -
STR_ABOUT_MENU_ABOUT_OPENTTD :حول 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :موائم العفريتات
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :اضهار /اخفاء مربح الحوارات/الخيارات
@ -825,6 +822,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_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} لم تعد تقبل {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}لم تعد تقبل {STRING} او {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} الآن تقبل {STRING}
@ -3486,6 +3484,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت
STR_AI_LIST_CANCEL :{BLACK} الغاء
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي
# AI Parameters
STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق
STR_AI_SETTINGS_RESET :{BLACK} اعادة ضبط

@ -464,9 +464,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsola aktibatu
STR_ABOUT_MENU_AI_DEBUG :IA/Joko script-aren garbitzailea
STR_ABOUT_MENU_SCREENSHOT :Pantailan dagoenaren argazkia hartu (Ctrl+S)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pantailan dagoenaren argazkia hartu zoom-a guztiz erabiliz
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :zoom lehenetsikoarekin pantaila-argazkia
STR_ABOUT_MENU_GIANT_SCREENSHOT :Mapa osoaren argazkia hartu (Ctrl+G)
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'-ri buruz
STR_ABOUT_MENU_SPRITE_ALIGNER :"Sprit" lerrokatzailea
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Kaxen neurriak aldatu
@ -846,6 +843,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} berri bat orain erabilgarri! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ez du gehiago {STRING} onartzen
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ez du gehiago {STRING} edo {STRING} onartzen
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} orain {STRING} onartzen du
@ -3874,6 +3872,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Piztutak
STR_AI_LIST_CANCEL :{BLACK}Ezeztatu
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ez aldatu script-a
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametroak
STR_AI_SETTINGS_CAPTION_AI :IA

@ -783,9 +783,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Кансоль
STR_ABOUT_MENU_AI_DEBUG :Наладка штучнага інтэлекту (ШІ/AI) / скрыптоў
STR_ABOUT_MENU_SCREENSHOT :Здымак экрана (Ctrl+S)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Здымак экрана ў макс. набліжэньні
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Павялiчаны здымак экрана па змоўчаньнi
STR_ABOUT_MENU_GIANT_SCREENSHOT :Здымак усёй мапы (Ctrl+G)
STR_ABOUT_MENU_ABOUT_OPENTTD :Аб гульні OpenTTD
STR_ABOUT_MENU_SPRITE_ALIGNER :Выраўноўваньне спрайтаў
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Пераключыць абмежавальныя рамкі
@ -1173,6 +1170,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_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} больш не прымае {STRING.acc}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} больш не прымае {STRING.acc} ды {STRING.acc}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} цяпер прымае {STRING.acc}
@ -4383,6 +4381,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Выбр
STR_AI_LIST_CANCEL :{BLACK}Скасаваць
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не змяняць скрыпт
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}Параметры {STRING}
STR_AI_SETTINGS_CAPTION_AI :ШI

@ -471,9 +471,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Alternar console
STR_ABOUT_MENU_AI_DEBUG :Depurar IA/Script do jogo
STR_ABOUT_MENU_SCREENSHOT :Captura de tela
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ampliado em captura de tela
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura de tela em ampliação padrão
STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de tela do mapa inteiro
STR_ABOUT_MENU_SHOW_FRAMERATE :Exibir taxa de quadros
STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de "sprites"
@ -863,6 +860,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} já está disponível! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} não aceita mais {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} não aceita mais {STRING} ou {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} agora aceita {STRING}
@ -4073,6 +4071,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selecion
STR_AI_LIST_CANCEL :{BLACK}Cancelar
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros
STR_AI_SETTINGS_CAPTION_AI :{G=f}IA

@ -471,9 +471,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Показване/скриване на конзола
STR_ABOUT_MENU_AI_DEBUG :ИИ дебъг
STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Напълно увеличен в кадъра.
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Увеличение по подразбиране
STR_ABOUT_MENU_GIANT_SCREENSHOT :Огромен Screenshot
STR_ABOUT_MENU_SHOW_FRAMERATE :Показване на честотата на кадрите
STR_ABOUT_MENU_ABOUT_OPENTTD :Относно 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Подравнител на спрайтове
@ -854,6 +851,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_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} вече не приема {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} вече не приема {STRING} или {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} вече приема {STRING}
@ -3976,6 +3974,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Избе
STR_AI_LIST_CANCEL :{BLACK}Отмени
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не променяй AI
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри
STR_AI_SETTINGS_CAPTION_AI :AI

@ -474,9 +474,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Commuta la consola
STR_ABOUT_MENU_AI_DEBUG :Depuració de les IA i l'script de partida
STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura de pantalla amb el zoom màxim
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura de pantalla amb el zoom predeterminat
STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de pantalla de tot el mapa
STR_ABOUT_MENU_SHOW_FRAMERATE :Mostra els fotogrames per segon
STR_ABOUT_MENU_ABOUT_OPENTTD :Quant a l'OpenTTD
STR_ABOUT_MENU_SPRITE_ALIGNER :Alineador de sprites
@ -866,6 +863,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}No{G u va} {STRING} disponible! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ja no accepta més {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ja no accepta més {STRING} ni {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ara accepta {STRING}
@ -4118,6 +4116,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio
STR_AI_LIST_CANCEL :{BLACK}Cancel·la
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No canviïs l'script.
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}Paràmetres {STRING}
STR_AI_SETTINGS_CAPTION_AI :de la IA

@ -574,9 +574,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Otvori konzolu
STR_ABOUT_MENU_AI_DEBUG :Debugiranje UI-ja/Skripte igre
STR_ABOUT_MENU_SCREENSHOT :Slika zaslona
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zumirano do kraja na slici zaslona
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standardno zumiranje slike zaslona
STR_ABOUT_MENU_GIANT_SCREENSHOT :Slika zaslona cijele karte
STR_ABOUT_MENU_SHOW_FRAMERATE :Prikaži broj sličica u sekundi
STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnanje spritea
@ -966,6 +963,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novi {STRING} je sada dostupan! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} više ne prihvaća {STRING.aku}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} više ne prihvaća {STRING.aku} ili {STRING.aku}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} od sada prihvaća {STRING.aku}
@ -1650,6 +1648,8 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabil
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kada je uključeno, promjene u industrijskoj proizvodnji su češće ali u manjim rasponima. Ova postavka obično nema efekta ukoliko su industrije postavljene iz nekog NewGRF-a
STR_CONFIG_SETTING_ALLOW_SHARES :Dopusti kupovanje udjela u drugim tvrtkama: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kada je uključeno, dopušta se kupnja i prodaja dionica tvrtki. Dionice će postati dostupne samo za tvrtke određene starosti
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Najmanja starost tvrtke za trgovanje udjelima: {STRING}
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Odredite najmanju starost tvtke da bi drugi mogli kupovati i prodavati dionice.
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Postotak dobiti za dionicu koji se plaća kod sustava feedera: {STRING}
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Postotak prihoda koji će biti predan srednjim dionicama prijevoza feeder sustavima, daje više kontrole nad prihodima
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Kod povlačenja, postavi signale svakih: {STRING}
@ -3213,6 +3213,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Preimenuj grad
# Town local authority window
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Lokalna samouprava grada {TOWN}a
STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona
STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Pokaži područje sa granicama lokalne vlasti
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ocjene prijevoznih tvrtki:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Dostupne radnje:
@ -3483,7 +3485,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC
# Industry directory
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrije
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ništa -
STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% prevezeno){BLACK}
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} više...
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Imena industrija - za centriranje pogleda klikni na ime. Ctrl+klik otvara novi prozor sa lokacijom industrije
# Industry view
@ -4259,6 +4266,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Odaberi
STR_AI_LIST_CANCEL :{BLACK}Odustani
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemoj mijenjati skriptu
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri
STR_AI_SETTINGS_CAPTION_AI :UI

@ -553,9 +553,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobrazit nebo skrýt konzoli
STR_ABOUT_MENU_AI_DEBUG :Ladění AI / herních skriptů
STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot v plném přiblížení
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot ve výchozím přiblížení
STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot celé mapy
STR_ABOUT_MENU_SHOW_FRAMERATE :Zobrazit počet snímků za sekundu
STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Zarovnávání spritů
@ -957,6 +954,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G ý á é í é é á} {STRING} k dispozici! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} už dále nepřijímá {STRING.acc}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} už dále nepřijímá {STRING.acc} ani {STRING.acc}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nyní přijímá {STRING.acc}
@ -4261,6 +4259,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vybrat o
STR_AI_LIST_CANCEL :{BLACK}Zrušit
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Neměňte skript
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry
STR_AI_SETTINGS_CAPTION_AI :AI

@ -475,9 +475,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Tænd/Sluk konsol
STR_ABOUT_MENU_AI_DEBUG :Computerspiller/spilscript debug
STR_ABOUT_MENU_SCREENSHOT :Skærmbillede (Ctrl-S)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fuldt zoomet skærmbillede
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard zoom skærmbillede
STR_ABOUT_MENU_GIANT_SCREENSHOT :Kæmpe skærmbillede (Ctrl-G)
STR_ABOUT_MENU_SHOW_FRAMERATE :Vis spilhastighed
STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Spritejustering
@ -867,6 +864,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} er nu tilgængelig! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} accepterer ikke længere {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} accepterer ikke længere {STRING} eller {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} accepterer nu {STRING}
@ -4123,6 +4121,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vælg ma
STR_AI_LIST_CANCEL :{BLACK}Afbryd
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skift ikke script'et
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre
STR_AI_SETTINGS_CAPTION_AI :AI

@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Console in-uitschakelen
STR_ABOUT_MENU_AI_DEBUG :Probleemoplossing AI/spelscript
STR_ABOUT_MENU_SCREENSHOT :Schermfoto
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermfoto
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermfoto met standaardzoom
STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermfoto van de hele kaart
STR_ABOUT_MENU_SHOW_FRAMERATE :Framesnelheid weergeven
STR_ABOUT_MENU_ABOUT_OPENTTD :Over 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-uitlijner
@ -870,6 +867,8 @@ 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}Nieuw {STRING} nu beschikbaar! - {ENGINE}
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Groepsvenster openen met focus op groep van voertuig
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} accepteert geen {STRING} meer
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} accepteert geen {STRING} of {STRING} meer
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} accepteert voortaan {STRING}
@ -4172,6 +4171,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Gemarkee
STR_AI_LIST_CANCEL :{BLACK}Annuleren
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script niet wijzigen
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION_AI :AI

@ -484,9 +484,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console
STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug
STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fully zoomed in screenshot
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot
STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot
STR_ABOUT_MENU_SHOW_FRAMERATE :Show frame rate
STR_ABOUT_MENU_SHOW_TOGGLE_MODIFIER_KEYS :Modifier key window
STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD'
@ -880,6 +877,8 @@ 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}New {STRING} now available! - {ENGINE}
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Open the group window focused on the vehicle's group
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING}
@ -1344,6 +1343,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Show extra info
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Display the population of towns in their label on the map
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Thickness of lines in graphs: {STRING2}
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the line in the graphs. A thin line is more precisely readable, a thicker line is easier to see and colours are easier to distinguish
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from.
STR_CONFIG_SETTING_SHOW_TRAIN_LENGTH_IN_DETAILS :Show train length in details: {STRING2}
STR_CONFIG_SETTING_SHOW_TRAIN_LENGTH_IN_DETAILS_HELPTEXT :Show train length in the vehicle details window
STR_CONFIG_SETTING_SHOW_VEHICLE_GROUP_IN_DETAILS :Show vehicle group in details: {STRING2}
@ -1370,9 +1371,6 @@ STR_CONFIG_SETTING_OPEN_VEHICLE_GUI_CLONE_SHARE_HELPTEXT :When enabled, o
STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES :Enable signals on bridges/tunnels advanced modes: {STRING2}
STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES_HELPTEXT :Enables use of advanced modes of signal simulation on bridges and tunnels. When disabled, bridges/tunnels which are not already in an advanced mode cannot be changed to an advanced mode, however other players may choose to enable this setting and use an advanced mode.
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :When enabled the name of the NewGRF which the selected vehicle comes from displayed at the bottom of the build vehicle window
STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING2}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargos and town growth requirements. NewGRF and Game Scripts allow finer control though
STR_CONFIG_SETTING_LAND_GENERATOR :Land generator: {STRING2}
@ -1701,6 +1699,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Full
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Coloured news appears in: {STRING2}
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Year that the newspaper announcements get printed in colour. Before this year, it uses monochrome black/white
STR_CONFIG_SETTING_STARTING_YEAR :Starting year: {STRING2}
STR_CONFIG_SETTING_ENDING_YEAR :Scoring end year: {STRING2}
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never
STR_CONFIG_SETTING_SMOOTH_ECONOMY :Enable smooth economy (more, smaller changes): {STRING2}
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :When enabled, industry production changes more often, and in smaller steps. This setting has usually no effect, if industry types are provided by a NewGRF
STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying shares from other companies: {STRING2}
@ -4070,6 +4072,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST
STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING4}, {STRING4}, {STRING4}
STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING4}, {STRING4}, {STRING4} and {NUM} more...
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industry names - click on name to centre main view on industry. Ctrl+Click opens a new viewport on industry location
STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Accepted cargo: {SILVER}{STRING}
STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produced cargo: {SILVER}{STRING}
STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :All cargo types
STR_INDUSTRY_DIRECTORY_FILTER_NONE :None
# Industry view
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
@ -5039,6 +5045,14 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Select h
STR_AI_LIST_CANCEL :{BLACK}Cancel
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script
STR_SCREENSHOT_CAPTION :{WHITE}Take a screenshot
STR_SCREENSHOT_SCREENSHOT :{BLACK}Normal screenshot
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Fully zoomed in screenshot
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Default zoom screenshot
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole map screenshot
STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION_AI :AI

@ -461,9 +461,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console
STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug
STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zoomed in screenshot
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot
STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot
STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Toggle bounding boxes
@ -847,6 +844,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}New {STRING} now available! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING}
@ -3949,6 +3947,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Select h
STR_AI_LIST_CANCEL :{BLACK}Cancel
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION_AI :AI

@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console
STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug
STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fully zoomed in screenshot
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot
STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot
STR_ABOUT_MENU_SHOW_FRAMERATE :Show frame rate
STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner
@ -870,6 +867,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}New {STRING} now available! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING}
@ -4163,6 +4161,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Select h
STR_AI_LIST_CANCEL :{BLACK}Cancel
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION_AI :AI

@ -464,9 +464,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Baskuligi Konzolon
STR_ABOUT_MENU_AI_DEBUG :AI/Ludo skripto sencimigo
STR_ABOUT_MENU_SCREENSHOT :Ekranfoto
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pligrandiga ekranfoto
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Ekranfoto defaŭlte zoma
STR_ABOUT_MENU_GIANT_SCREENSHOT :Tuta karto ekranfoto
STR_ABOUT_MENU_ABOUT_OPENTTD :Pri 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Bildeto-liniigilo
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Montri/ne montri limigujo
@ -844,6 +841,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}Nova {STRING} nun haveblas! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ne plu akceptas {STRING.n}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ne plu akceptas {STRING.n} aŭ {STRING.n}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nun akceptas {STRING.n}
@ -3386,6 +3384,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Elekti e
STR_AI_LIST_CANCEL :{BLACK}Nuligi
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne ŝanĝu AI-on
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametroj
STR_AI_SETTINGS_CAPTION_AI :AI

@ -527,9 +527,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Lülita konsool sisse/välja
STR_ABOUT_MENU_AI_DEBUG :Arvutivea otsing
STR_ABOUT_MENU_SCREENSHOT :Ekraanitõmmis
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suurendatud ekraanitõmmis
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Tavasuurendusega ekraanitõmmis
STR_ABOUT_MENU_GIANT_SCREENSHOT :Terve kaardi ekraanitõmmis
STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner
@ -914,6 +911,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}Uus {STRING} saadaval! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Jaam {STATION} ei võta enam vastu veost {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Jaam {STATION} ei võta enam vastu veoseid {STRING}, ega {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Jaam {STATION} võtab nüüd vastu veost {STRING}
@ -4091,6 +4089,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vali esi
STR_AI_LIST_CANCEL :{BLACK}Loobu
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ära skripti muuda
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameetrid
STR_AI_SETTINGS_CAPTION_AI :Tehismõistus

@ -448,9 +448,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Console opið ella lukka
STR_ABOUT_MENU_AI_DEBUG :AI/Spæl script debug
STR_ABOUT_MENU_SCREENSHOT :Skermmynd
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suma in skermmynd
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Vanliga suma skermmynd
STR_ABOUT_MENU_GIANT_SCREENSHOT :Skermmynd av øllum kortinum
STR_ABOUT_MENU_SHOW_FRAMERATE :Vís mynda títtleika
STR_ABOUT_MENU_ABOUT_OPENTTD :Um 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner
@ -828,6 +825,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}Nýtt {STRING} til sølu! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tekur ikki longur ímóti {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tekur ikki longur ímóti hvørki {STRING} ella {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} tekur nú ímóti {STRING}
@ -3526,6 +3524,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vel undi
STR_AI_LIST_CANCEL :{BLACK}Angra
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikki broyta scripti
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametur
STR_AI_SETTINGS_CAPTION_AI :AI

@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsoli
STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/peliskriptin virheenjäljitys
STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Täysin lähennetty kuvakaappaus
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Kuvakaappaus oletuslähennystasolla
STR_ABOUT_MENU_GIANT_SCREENSHOT :Koko kartan kuvakaappaus
STR_ABOUT_MENU_SHOW_FRAMERATE :Näytä kuvataajuus
STR_ABOUT_MENU_ABOUT_OPENTTD :Tietoja OpenTTD:stä
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-kohdistaja
@ -870,6 +867,8 @@ 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}Uusi {STRING} on nyt saatavilla! {ENGINE}
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Avaa ryhmäikkuna kulkuneuvon ryhmään kohdistettuna
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING}.
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING} tai {STRING}.
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ottaa nyt vastaan {STRING}.
@ -1313,6 +1312,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kunnan
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kuntien asukasluvut kartalla
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Viivojen paksuus kuvaajissa: {STRING}
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys kuvaajissa. Ohut viiva on tarkasti luettavissa kun taas paksumpi viiva on helpompi nähdä ja sen värit ovat helpommin havaittavissa
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF:n nimi liikennevälineikkunassa
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää liikennevälinevalikoimaikkunaan rivin, joka näyttää, mistä NewGRF:stä valittu liikenneväline on peräisin.
STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun
@ -1550,6 +1551,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Täysi
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Värilliset uutiset ilmestyvät: {STRING}
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Vuosi, jonka jälkeen sanomalehdet ovat värillisiä. Ennen tätä vuotta sanomalehdet käyttävät mustavalkoisia kuvia
STR_CONFIG_SETTING_STARTING_YEAR :Aloitusvuosi: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR :Pistelaskun päättymisvuosi: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Pelin päättymisvuosi pisteiden laskemista varten. Tämän vuoden lopussa talletetaan yhtiön pistemäärä ja näytetään ennätysluettelo; pelaajat voivat jatkaa pelaamista tämän jälkeenkin.{}Jos päättymisvuosi on ennen alkamisvuotta, ennätyksiä ei näytetä koskaan.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ei koskaan
STR_CONFIG_SETTING_SMOOTH_ECONOMY :Tasainen talous (enemmän pieniä muutoksia): {STRING}
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Mikäli käytössä, teollisuuden tuotanto muuttuu useammin ja vähemmän kerrallaan. Tällä asetuksella ei ole yleensä vaikutusta mikäli teollisuustyypit ovat NewGRF:n tarjoamia
STR_CONFIG_SETTING_ALLOW_SHARES :Salli toisten yhtiöiden osakkeiden ostaminen: {STRING}
@ -4172,6 +4177,14 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Valitse
STR_AI_LIST_CANCEL :{BLACK}Peruuta
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Älä vaihda skriptiä
STR_SCREENSHOT_CAPTION :{WHITE}Ota kuvakaappaus
STR_SCREENSHOT_SCREENSHOT :{BLACK}Tavallinen kuvakaappaus
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Täysin lähennetty kuvakaappaus
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Kuvakaappaus oletuslähennyksellä
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Koko kartan kuvakaappaus
STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeuskartan kuvakaappaus
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pienoiskartan kuvakaappaus
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrit
STR_AI_SETTINGS_CAPTION_AI :Tekoäly

@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Afficher/Cacher la console
STR_ABOUT_MENU_AI_DEBUG :Débogage de scripts
STR_ABOUT_MENU_SCREENSHOT :Copie d'écran
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Copie d'écran au zoom maximum
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Copie d'écran au zoom par défaut
STR_ABOUT_MENU_GIANT_SCREENSHOT :Copie d'écran de la carte entière
STR_ABOUT_MENU_SHOW_FRAMERATE :Afficher la fréquence d'images
STR_ABOUT_MENU_ABOUT_OPENTTD :À propos d'OpenTTD
STR_ABOUT_MENU_SPRITE_ALIGNER :Alignement de sprite
@ -871,6 +868,8 @@ 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}Nouv{G 0 eau el elle} {STRING} disponible{NBSP}! - {ENGINE}
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ouvrir la fenêtre de groupe de ce véhicule
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} n'accepte plus {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} n'accepte plus {STRING} ou {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} accepte désormais {STRING}
@ -1551,6 +1550,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Complet
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Les journaux en couleur apparaissent en{NBSP}: {STRING}
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Année à partir de laquelle les annonces des journaux sont imprimées en couleur. Avant cette année ils sont en noir et blanc
STR_CONFIG_SETTING_STARTING_YEAR :Année de départ{NBSP}: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR :Année de fin du jeu{NBSP}: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :À la fin de cette année, le score de la compagnie est enregistré et la fenêtre des meilleurs scores est affichée. Il est quand même possible de continuer de jouer après, mais le score ne sera pas enregistré.{}Si le jeu commence après cette année, les meilleurs scores ne sont jamais affichés.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Jamais
STR_CONFIG_SETTING_SMOOTH_ECONOMY :Permettre une économie stable (petits changements plus nombreux){NBSP}: {STRING}
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Lorsqu'il est activé, la production des industries change plus souvent, et plus faiblement. Ce paramètre est généralement sans effets si les types d'industries sont fournis par un NewGRF
STR_CONFIG_SETTING_ALLOW_SHARES :Permettre d'acheter des actions d'autres compagnies{NBSP}: {STRING}
@ -4173,6 +4176,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Sélecti
STR_AI_LIST_CANCEL :{BLACK}Annuler
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne pas modifier le script
STR_SCREENSHOT_CAPTION :{WHITE}Faire une capture d'écran
STR_SCREENSHOT_SCREENSHOT :{BLACK}Capture d'écran normale
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Capture d'écran au zoom maximum
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Capture d'écran sans zoom
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Capture d'écran de toute la carte
STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Capture d'écran de la carte d'altitude
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paramètres
STR_AI_SETTINGS_CAPTION_AI :IA

@ -658,9 +658,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Toglaich a' chonsoil
STR_ABOUT_MENU_AI_DEBUG :Dì-bhugaich IF/sgriobt geama
STR_ABOUT_MENU_SCREENSHOT :Glacadh-sgrìn
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Glacadh-sgrìn le sùmadh a-steach as motha
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Glacadh-sgrìn le sùmadh a-steach bunaiteach
STR_ABOUT_MENU_GIANT_SCREENSHOT :Glacadh-sgrìn leis a' mhapa shlàn
STR_ABOUT_MENU_ABOUT_OPENTTD :Mu dheidhinn “OpenTTD"
STR_ABOUT_MENU_SPRITE_ALIGNER :Co-thaobhaichear nan sprite
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Toglaich bogsaichean-iadhaidh
@ -1061,6 +1058,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}Tha {STRING} ùr ri fhaighinn a-nis! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Cha ghabh {STATION} ri {STRING} tuilleadh
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Cha ghabh {STATION} ri {STRING} no {STRING} tuilleadh
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Gabhaidh {STATION} ri {STRING} a-nis
@ -4293,6 +4291,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Cleachd
STR_AI_LIST_CANCEL :{BLACK}Sguir dheth
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Na atharraich an sgriobt
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}Paramadairean aig {STRING}
STR_AI_SETTINGS_CAPTION_AI :IF

@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :(Des)Activar consola
STR_ABOUT_MENU_AI_DEBUG :Depuración IA/script do xogo
STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Achegar área capturada
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zoom de captura de pantalla por defecto
STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de pantalla do mapa completo
STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar frame rate
STR_ABOUT_MENU_ABOUT_OPENTTD :Acerca de 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Aliñador de sprites
@ -871,6 +868,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}Nova {STRING} dispoñíbel! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} xa non acepta máis {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} xa non acepta máis {STRING} nin {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} agora acepta {STRING}
@ -4173,6 +4171,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio
STR_AI_LIST_CANCEL :{BLACK}Cancelar
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non cambia-lo script
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parámetros
STR_AI_SETTINGS_CAPTION_AI :IA

@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsole öffnen/schließen
STR_ABOUT_MENU_AI_DEBUG :KI / Skript-Debug
STR_ABOUT_MENU_SCREENSHOT :Screenshot (Standard: Strg+S)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot in Nahaufnahme
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot mit normalem Zoom
STR_ABOUT_MENU_GIANT_SCREENSHOT :Riesiger Screenshot (Standard: Strg+G)
STR_ABOUT_MENU_SHOW_FRAMERATE :Bildwiederholrate anzeigen
STR_ABOUT_MENU_ABOUT_OPENTTD :Über OpenTTD
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-Ausrichtung
@ -873,6 +870,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}Neue{G r "" s ""} {STRING} jetzt erhältlich! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} nimmt kein{G "en" "e" "" "e"} {STRING} mehr an
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} nimmt kein{G "en" "e" "" "e"} {STRING} und kein{G "en" "e" "" "e"} {STRING} mehr an
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nimmt jetzt auch {STRING} an
@ -1002,6 +1000,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doppelt
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Vierfach
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doppelt
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisgrafiken
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zu benutzendes Set an Basisgrafiken auswählen
@ -1185,6 +1184,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Landschaftsbau
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Erlaube Erdbauarbeiten unter Gebäuden oder Infrastruktur ohne sie zu entfernen
STR_CONFIG_SETTING_CATCHMENT :Verschiedene Stationstypen haben unterschiedlich große Einzugsgebiete: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Wird diese Option eingeschaltet, besitzen unterschiedliche Stationsarten bzw. Flughäfen unterschiedlich große Einzugsgebiete
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Falls aktiv, können Industrien mit integrierter Haltestelle (wie Ölbohrtürme) auch von nahegelegenen Stationen der Spieler bedient werden. Falls inaktive, können diese Industrien ausschließlich mittels ihrer eigenen Stationen bedient werden. Die integrierten Stationen bedienen dabei keine anderen Industrien in der Nähe
STR_CONFIG_SETTING_CATCHMENT_INCREASE :Vergrößere das Stationseinzugsgebiet: {STRING}
STR_CONFIG_SETTING_CATCHMENT_INCREASE_HELPTEXT :Vergrößere das Stationseinzugsgebiet um die angegebene Anzahl an Kacheln
STR_CONFIG_SETTING_EXTRADYNAMITE :Entfernung von weiteren Straßen, Brücken usw. erlauben: {STRING}
@ -1567,6 +1567,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :KI im Mehrspiel
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaube die Teilnahme von Computerspielern im Mehrspielermodus
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Rechenoperationen, bevor das Skript angehalten wird: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximale Anzahl Rechenschritte, die ein Skript in einer Runde zur Verfügung hat
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximaler Arbeitsspeicher pro Script: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wie viel Arbeitsspeicher ein Script maximal benutzen darf bevor es terminiert wird. Diese Wert muss eventuell vergrößert werden für größere Maps.
STR_CONFIG_SETTING_SHARING_RAIL :Aktiviere Sharing für Eisenbahnnetze: {STRING}
STR_CONFIG_SETTING_SHARING_ROAD :Aktiviere Sharing für Haltestellen, Ladeplätze und Depots: {STRING}
@ -1691,6 +1693,8 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Erlaube Spieler
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verboten
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaubt
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaubt, mit wählbarem Straßenbauplan
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratisch (orginal)
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear
STR_CONFIG_SETTING_TOWN_CARGO_FACTOR :Faktor für die Erzeugung von städtischer Fracht (weniger < 0 < mehr): {STRING}
STR_CONFIG_SETTING_TOWN_CARGO_FACTOR_HELPTEXT :Passagiere, Post und andere städtische Frachtproduktion wird um ungefähr 2^Faktor (exponentiell) skaliert.
@ -2239,6 +2243,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Trennen
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist geschützt. Passwort eingeben:
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt. Passwort eingeben:
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Teilnehmerliste
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Teilnehmerliste
@ -2816,6 +2821,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Straßen
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Zwischen Bau und Abriss der Straße umschalten
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Zwischen Bau und Abriss von Straßenbahngleisen umschalten
STR_ROAD_NAME_ROAD :Straße
STR_ROAD_NAME_TRAM :Straßenbahngleis
# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Ausrichtung Depot
@ -3035,6 +3042,7 @@ STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STR
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Gleistyp: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Höchstgeschwindigkeit Schiene: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Höchstgeschwindigkeit Straße: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Höchstgeschwindigkeit Straßenbahn: {LTBLUE}{VELOCITY}
# Description of land area of different tiles
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Felsen
@ -3165,6 +3173,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Bilder/s
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Bilder/s
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Bilder/s
STR_FRAMERATE_BYTES_BAD :{RED}{BYTES}
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
@ -3180,6 +3189,7 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik-R
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK}Kartenansichten:
STR_FRAMERATE_VIDEO :{BLACK}Videoausgabe:
STR_FRAMERATE_SOUND :{BLACK}Sound-Abmischung:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Script:
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Spielschleife
@ -3528,6 +3538,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Stadt umbenenne
# Town local authority window
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Stadtverwaltung {TOWN}
STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zone
STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zeige Zone der Stadtverwaltung
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Bewertung der Transportfirma:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Verfügbare Maßnahmen:
@ -3894,6 +3906,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Keine -
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING}
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienamen - Klick auf den Namen zentriert Hauptansicht auf die Industrie. Strg+Klick öffnet neue Zusatzansicht zentriert auf die Industrie
# Industry view
@ -3975,6 +3988,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungruppierte St
STR_GROUP_DEFAULT_SHIPS :Ungruppierte Schiffe
STR_GROUP_DEFAULT_AIRCRAFTS :Ungruppierte Flugzeuge
STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA})
STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen - Klick auf eine Gruppe zeigt Liste aller Fahrzeuge der Gruppe an
STR_GROUP_CREATE_TOOLTIP :{BLACK}Neue Gruppe erstellen
@ -4025,6 +4039,7 @@ STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Zuv
STR_PURCHASE_INFO_COST :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Gewicht: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT})
STR_PURCHASE_INFO_COST_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Geschw.: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (Kosten der Umrüstung: {GOLD}{CURRENCY_LONG}{BLACK}) Geschwindigkeit: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazität: {GOLD}{CARGO_LONG}, {CARGO_LONG}
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Angetriebene Waggons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Umrüstbar auf: {GOLD}{STRING}
@ -4165,6 +4180,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Nachrich
STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Wir haben {G "einen" "eine" "ein" ""} neue{G n "" s ""} {0:STRING} entwickelt.{}Besteht Interesse, {G 0 den die das die} {0:STRING} ein Jahr lang exklusiv zu nutzen, so dass wir die Funktionen testen können, bevor {G 0 er sie es sie} allgemein zur Verfügung gestellt {G 0 wird wird wird werden}?
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=w}Lokomotive
STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Elektrifizierte Lokomotive
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=w}Einschienenbahn
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=w}Magnetschwebebahn
@ -4218,6 +4234,7 @@ STR_REPLACE_ELRAIL_VEHICLES :elektrische Sch
STR_REPLACE_MONORAIL_VEHICLES :Einschienenbahn
STR_REPLACE_MAGLEV_VEHICLES :Magnetschwebebahn
STR_REPLACE_TRAM_VEHICLES :Straßenbahnfahrzeuge
STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon-Entfernung: {ORANGE}{STRING}
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ursprüngliche Länge des Zugs beibehalten, indem (vorne beginnend) Waggons entfernt werden, falls das Ersetzen der Lokomotive den Zug verlängern würde
@ -4777,6 +4794,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Ausgewä
STR_AI_LIST_CANCEL :{BLACK}Abbrechen
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript nicht wechseln
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter
STR_AI_SETTINGS_CAPTION_AI :KI
@ -5098,6 +5116,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Diese St
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Straßenbahngleise können hier nicht entfernt werden...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...hier ist keine Straße
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...hier ist kein Straßenbahngleis
STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden...
# Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden...

@ -534,9 +534,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Εναλλαγή κονσόλας
STR_ABOUT_MENU_AI_DEBUG :Αποσφαλμάτωση AI και δέσμης ενεργειών παιχνιδιού
STR_ABOUT_MENU_SCREENSHOT :Στιγμιότυπο οθόνης
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Στιγμιότυπο οθόνης μέγιστης μεγέθυνσης
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Στιγμιότυπο οθόνης τυπικής μεγέθυνσης
STR_ABOUT_MENU_GIANT_SCREENSHOT :Στιγμιότυπο οθόνης για ολό τον χάρτη
STR_ABOUT_MENU_SHOW_FRAMERATE :Εμφάνιση ρυθμού καρέ
STR_ABOUT_MENU_ABOUT_OPENTTD :Σχετικά με το 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Ευθυγραμμιστής στοιχεών
@ -972,6 +969,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_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Ο σταθμός {STATION} δεν δέχεται πια {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Ο σταθμός {STATION} δεν δέχεται πια ούτε {STRING} ούτε {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Ο σταθμός {STATION} τώρα δέχεται {STRING}
@ -4244,6 +4242,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Αποδ
STR_AI_LIST_CANCEL :{BLACK}Άκυρωση
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Να μην γίνει αλλαγή δέσμης ενεργειών
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Παράμετροι
STR_AI_SETTINGS_CAPTION_AI :AI

@ -484,9 +484,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :פתח/סגור קונסולה
STR_ABOUT_MENU_AI_DEBUG :דיבאג של סקריפטים של בינה מלאכותית או של המשחק
STR_ABOUT_MENU_SCREENSHOT :צילום מסך
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :צילום מסך בהגדלה מלאה
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :ברירת מחדל של תקריב צילום מסך
STR_ABOUT_MENU_GIANT_SCREENSHOT :צילום מסך ענק
STR_ABOUT_MENU_SHOW_FRAMERATE :הצג קצב פריימים
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'{NBSP}אודות
STR_ABOUT_MENU_SPRITE_ALIGNER :מיישר ספרייטים
@ -874,6 +871,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_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} אינה מקבלת יותר {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} אינה מקבלת יותר {STRING} או {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} מקבלת כעת {STRING}
@ -4072,6 +4070,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} בחר
STR_AI_LIST_CANCEL :{BLACK}בטל
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}אל תשנה את התסריט
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} פרמטרים
STR_AI_SETTINGS_CAPTION_AI :שחקן מחשב

@ -541,9 +541,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Átváltás konzolra
STR_ABOUT_MENU_AI_DEBUG :MI / Játékszkript nyomkövetés
STR_ABOUT_MENU_SCREENSHOT :Képmentés
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Teljes nagyítású képmentés
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Alapértelmezett nagyítású képmentés
STR_ABOUT_MENU_GIANT_SCREENSHOT :Képmentés teljes térképről
STR_ABOUT_MENU_SHOW_FRAMERATE :FPS ablak
STR_ABOUT_MENU_ABOUT_OPENTTD :Az 'OpenTTD'-ről
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite elhelyező
@ -934,6 +931,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Új {STRING} elérhető! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} többé nem fogad el {STRING.t}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} többé nem fogad el {STRING.t} és {STRING.t}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} most már elfogad {STRING.t}
@ -4230,6 +4228,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}A kijel
STR_AI_LIST_CANCEL :{BLACK}Mégsem
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne változtassa a szkriptet
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paraméterek
STR_AI_SETTINGS_CAPTION_AI :MI

@ -448,9 +448,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Kveikja á stýriskjá
STR_ABOUT_MENU_AI_DEBUG :Aflúsun gervigreindar/forskrifta
STR_ABOUT_MENU_SCREENSHOT :Skjámynd
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Súmuð inn skjáskot
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Taka skjáskot af súmi
STR_ABOUT_MENU_GIANT_SCREENSHOT :Risa skjámynd
STR_ABOUT_MENU_ABOUT_OPENTTD :Um 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Samstilla hreyfimynd
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Sýna/fela afmörkunar kassa
@ -827,6 +824,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}Ný {STRING} er nú fáanleg! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tekur ekki lengur við {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tekur ekki lengur við {STRING} eða {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} tekur nú við {STRING}
@ -3766,6 +3764,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Velja me
STR_AI_LIST_CANCEL :{BLACK}Hætta við
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Hætta við breytingar forskriftar
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} breytur
STR_AI_SETTINGS_CAPTION_AI :Gervigreindar

@ -472,9 +472,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Hidup/matikan Layar Konsol
STR_ABOUT_MENU_AI_DEBUG :Debug skrip AI
STR_ABOUT_MENU_SCREENSHOT :Ambil gambar
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ambil gambar dengan diperbesar
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Ambil gambar dengan perbesaran normal
STR_ABOUT_MENU_GIANT_SCREENSHOT :Ambil gambar keseluruhan peta
STR_ABOUT_MENU_SHOW_FRAMERATE :Tampilkan laju bingkai
STR_ABOUT_MENU_ABOUT_OPENTTD :Tentang 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Penjajar Sprite
@ -863,6 +860,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} jenis baru telah diluncurkan! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} atau {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} Sekarang menerima {STRING}
@ -4065,6 +4063,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pilih sk
STR_AI_LIST_CANCEL :{BLACK}Batal
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Jangan mengubah skrip AI
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter
STR_AI_SETTINGS_CAPTION_AI :AI

@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Scoránaigh consól
STR_ABOUT_MENU_AI_DEBUG :Dífhabhtú AI/Scripteanna Cluiche
STR_ABOUT_MENU_SCREENSHOT :Seat scáileáin
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Seat scáileáin zúmáilte isteach go hiomlán
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Seat scáileáin le zúm réamhshocraithe
STR_ABOUT_MENU_GIANT_SCREENSHOT :Seat scáileáin den léarscáil ar fad
STR_ABOUT_MENU_ABOUT_OPENTTD :Maidir le 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Ailínóir spriteanna
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Scoránaigh boscaí imill
@ -856,6 +853,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}Tá {STRING} nua ar fáil anois! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Ní ghlacann {STATION} le {STRING} a thuilleadh
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Ní ghlacann {STATION} le {STRING} ná le {STRING} a thuilleadh
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Glacann {STATION} le {STRING} anois
@ -3998,6 +3996,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Roghnaig
STR_AI_LIST_CANCEL :{BLACK}Cuir ar ceal
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ná hathraigh an AI
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}Paraiméadair {STRING}
STR_AI_SETTINGS_CAPTION_AI :AI

@ -480,9 +480,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Apri/chiudi console
STR_ABOUT_MENU_AI_DEBUG :Debug IA/Script
STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot con zoom massimo
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot con zoom predefinito
STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot intera mappa
STR_ABOUT_MENU_SHOW_FRAMERATE :Mostra frame rate
STR_ABOUT_MENU_ABOUT_OPENTTD :Informazioni su 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Strumento allineamento sprite
@ -872,6 +869,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}Nuov{G o o a} {STRING} disponibile! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} non accetta più {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} non accetta più {STRING} né {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} adesso accetta {STRING}
@ -4195,6 +4193,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Sceglie
STR_AI_LIST_CANCEL :{BLACK}Annulla
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non modifica lo script utilizzato
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}Parametri {STRING}
STR_AI_SETTINGS_CAPTION_AI :AI

@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR :―――――
STR_ABOUT_MENU_TOGGLE_CONSOLE :コンソールの表示切替
STR_ABOUT_MENU_AI_DEBUG :AI/ゲームスクリプトのデバッグ
STR_ABOUT_MENU_SCREENSHOT :スクリーンショット撮影(現在のズーム)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :スクリーンショット撮影(最大ズーム)
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :スクリーンショット撮影(標準ズーム)
STR_ABOUT_MENU_GIANT_SCREENSHOT :スクリーンショット撮影(マップ全体)
STR_ABOUT_MENU_ABOUT_OPENTTD :OpenTTDについて
STR_ABOUT_MENU_SPRITE_ALIGNER :スプライトを整列
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :バウンディングボックスの表示切替
@ -856,6 +853,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_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION}は今後{STRING}を受入れません
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}は今後{STRING}と{STRING}を受入れません
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION}は今後{STRING}を受入れます
@ -4065,6 +4063,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}選択
STR_AI_LIST_CANCEL :{BLACK}キャンセル
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}スクリプトを変更しません
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} パラメータ
STR_AI_SETTINGS_CAPTION_AI :AI

@ -484,9 +484,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :콘솔 켜기/끄기
STR_ABOUT_MENU_AI_DEBUG :인공지능/게임 스크립트 디버그
STR_ABOUT_MENU_SCREENSHOT :스크린샷 찍기
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :스크린샷 찍기 (지금 보고 있는 영역)
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :스크린샷 찍기 (창을 제외한 게임 화면만)
STR_ABOUT_MENU_GIANT_SCREENSHOT :스크린샷 찍기 (지도 전체)
STR_ABOUT_MENU_SHOW_FRAMERATE :프레임레이트 보기
STR_ABOUT_MENU_SHOW_TOGGLE_MODIFIER_KEYS :보조 키 창
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'에 대해서
@ -880,6 +877,8 @@ 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}{G 0 "을" "를"} 사용할 수 있습니다! - {ENGINE}
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}이 차량이 속한 차량 그룹 목록 열기
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION}에서 더 이상 {STRING}{G 1 "을" "를"} 받지 않습니다.
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}에서 더 이상 {STRING}/{STRING}{G 2 "을" "를"} 받지 않습니다.
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION}에서 이제 {STRING}{G 1 "을" "를"} 받을 수 있습니다.
@ -1701,6 +1700,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :전체 메시
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :컬러로 된 뉴스가 시작되는 해: {STRING}년
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :신문이 컬러로 나오게 되는 연도를 설정합니다. 이 연도 이전까지는 신문이 흑백으로 나옵니다.
STR_CONFIG_SETTING_STARTING_YEAR :시작 연도: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR :게임 종료 연도: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :점수를 기록할 게임 종료 연도를 설정합니다. 이 연도가 지나면, 회사의 점수가 고득점 순위표에 기록되어 표시됩니다. 하지만 플레이어는 계속해서 게임을 진행할 수 있습니다.{}이 값이 시작 연도보다 이전으로 설정되어 있다면, 고득점 순위표는 나타나지 않습니다.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :안 함
STR_CONFIG_SETTING_SMOOTH_ECONOMY :부드러운 경제 변화 사용 (자주, 조금씩 변화): {STRING}
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :이 설정을 켜면, 1차 산업시설의 생산량이 소량으로 자주 변하게 됩니다. NewGRF로 추가한 산업시설에는 적용되지 않습니다.
STR_CONFIG_SETTING_ALLOW_SHARES :다른 회사의 지분을 사는 것을 허용: {STRING}
@ -5039,6 +5042,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}선택
STR_AI_LIST_CANCEL :{BLACK}취소
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}인공지능 스크립트를 바꾸지 않습니다
STR_SCREENSHOT_CAPTION :{WHITE}스크린 샷 찍기
STR_SCREENSHOT_SCREENSHOT :{BLACK}일반 스크린 샷
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}최대 확대 스크린 샷 (UI 없음)
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}기본 확대 스크린 샷 (UI 없음)
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}지도 전체 스크린 샷
STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}높이맵 스크린 샷
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 매개 변수
STR_AI_SETTINGS_CAPTION_AI :인공지능
@ -5523,7 +5533,7 @@ STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... 경
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}경로를 공유할 수 없습니다...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}경로 공유를 중단할 수 없습니다...
STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}경로를 복사할 수 없습니다...
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... 이전의 목적지로부터 너무 멉니다
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... 이전 목적지에서 너무 멀리 떨어져 있습니다
STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... 항공기의 항속거리가 충분하지 않습니다.
# Timetable related errors

@ -661,9 +661,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Monstrare celareve consolam
STR_ABOUT_MENU_AI_DEBUG :Emendatio IA/Ludi scriptorum
STR_ABOUT_MENU_SCREENSHOT :Imago conspectus
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Imago conspectus maxime amplificata
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Imago conspectus solite amplificata
STR_ABOUT_MENU_GIANT_SCREENSHOT :Imago cunctae tabulae geographicae
STR_ABOUT_MENU_ABOUT_OPENTTD :De 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Norma spiritus
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Monstrare celareve arcas finitionum
@ -1052,6 +1049,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G us a um i ae a} {STRING} parabil{G 0 is is e es es ia}! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} non diutius {STRING.acc} accipit
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} non diutius {STRING.acc} {STRING.acc}que accipit
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nunc {STRING.acc} accipit
@ -4293,6 +4291,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Eligere
STR_AI_LIST_CANCEL :{BLACK}Cancellare
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non scriptum mutare
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametra
STR_AI_SETTINGS_CAPTION_AI :IA

@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Atvērt/aizvērt konsoli
STR_ABOUT_MENU_AI_DEBUG :MI/spēles skriptu atkļūdošana
STR_ABOUT_MENU_SCREENSHOT :Ekrānuzņēmums
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pilnībā pietuvināts ekrānuzņēmums
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Noklusējuma mēroga ekrānuzņēmums
STR_ABOUT_MENU_GIANT_SCREENSHOT :Visas kartes ekrānuzņēmums
STR_ABOUT_MENU_SHOW_FRAMERATE :Rādīt kadru ātrumu
STR_ABOUT_MENU_ABOUT_OPENTTD :Par 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Gariņu līdzinātājs
@ -855,6 +852,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Tagad ir pieejams jauns {STRING}! - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} vairs nepieņem {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} vairs nepieņem {STRING} vai {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} pieņem {STRING}
@ -3935,6 +3933,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Izvēlē
STR_AI_LIST_CANCEL :{BLACK}Atcelt
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemainīt skriptu
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametri
STR_AI_SETTINGS_CAPTION_AI :MI

@ -665,9 +665,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Perjungti konsolę
STR_ABOUT_MENU_AI_DEBUG :AI / GameScript derinimas
STR_ABOUT_MENU_SCREENSHOT :Ekrano nuotrauka
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ekrano nuotrauka iš arti
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Nepriartintas ekrano vaizdas
STR_ABOUT_MENU_GIANT_SCREENSHOT :Fotografuoti viso ekrano vaizdą
STR_ABOUT_MENU_ABOUT_OPENTTD :Apie „OpenTTD“
STR_ABOUT_MENU_SPRITE_ALIGNER :Spruklių lygiuoklė
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Rodyti/slėpti apvadus
@ -1061,6 +1058,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}Naujas{STRING} - {ENGINE}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} nebepriima {STRING}
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} nebepriima {STRING} arba {STRING}
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} jau priima {STRING}
@ -4273,6 +4271,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pasirink
STR_AI_LIST_CANCEL :{BLACK}Atšaukti
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nekeisti skripto
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrai
STR_AI_SETTINGS_CAPTION_AI :DI

@ -235,6 +235,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filterkr
STR_BUTTON_SORT_BY :{BLACK}Sortéier no
STR_BUTTON_LOCATION :{BLACK}Plaz
STR_BUTTON_RENAME :{BLACK}Ëmbenennen
STR_BUTTON_CATCHMENT :{BLACK}Reechwäit
STR_TOOLTIP_CATCHMENT :{BLACK}Reechwäit uweisen un/ausschalten
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fënster zoumaachen
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Fënstertitel - hei zéien fir d'Fënster ze bewegen
@ -263,6 +265,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Mat dës
STR_BUTTON_DEFAULT :{BLACK}Standard
STR_BUTTON_CANCEL :{BLACK}Ofbriechen
STR_BUTTON_OK :{BLACK}OK
STR_WARNING_PASSWORD_SECURITY :{YELLOW}Warnung: Server-Administratoren kënnen all Text aus desem Feld liesen.
# On screen keyboard window
STR_OSK_KEYBOARD_LAYOUT :§1234567890'^\qwertzuiopè¨asdfghjkléà yxcvbnm,.- .
@ -336,6 +339,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Vergréi
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Verklenger d'Sicht
STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Schinne bauen
STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Stroosse bauen
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Tramway bauen
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Schëffhafe bauen
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Fluchhafe bauen
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Landschafts-Toolbar opman fir Land ze erhéijen/senken, Beem planzen, etc.
@ -356,6 +360,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landscha
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stiederstellung
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieerstellung
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stroossebau
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramkonstruktioun
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Beem planzen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Schëld opstellen
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Objet plazéiren. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
@ -473,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsole un/aus
STR_ABOUT_MENU_AI_DEBUG :KI / Spill-Script Debug
STR_ABOUT_MENU_SCREENSHOT :Screenshot (Ctrl+S)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Voll eragezoomte Screenshot
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard Zoom Screenshot
STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot vun der ganzer Kaart
STR_ABOUT_MENU_SHOW_FRAMERATE :Biller pro Sekonn uweisen
STR_ABOUT_MENU_ABOUT_OPENTTD :Iwwert 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite Alignéirer
@ -790,11 +792,11 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC
STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Bierger feieren . . .{}Éischt Schëff kënnt zu {STATION} un!
STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Bierger feieren . . .{}Éischte Fliger kënnt zu {STATION} un!
STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Zuchakzident!{}{COMMA} Leit stiewen an der Explosioun nom Akzident
STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Stroossenakzident!{}Fuerer stierft an der Explosioun no Akzident mat Zuch
STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Stroossegefierakzident!{}{COMMA} Leit stiewen an der Explosioun no Akzident mam Zuch
STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Fligerakzident!{}{COMMA} Leit stiewen an der Explosioun bei {STATION}
STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Fligerakzident!{}Fliger hat kee Bensin méi, {COMMA} Leit stiewen an Explosioun!
STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Zuchaccident!{}{COMMA} Leit stiewen an der Explosioun nom Accident
STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Stroossenaccident!{}Fuerer stierft an der Explosioun no Accident mat Zuch
STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Stroossegefieraccident!{}{COMMA} Leit stiewen an der Explosioun no Accident mam Zuch
STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Fligeraccident!{}{COMMA} Leit stiewen an der Explosioun bei {STATION}
STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Fligeraccident!{}Fliger hat kee Bensin méi, {COMMA} Leit stiewen an Explosioun!
STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Zeppelinkatastroph zu {STATION}!
STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Stroossegefier bei 'UFO'-Zesummestouss zerstéiert!
@ -865,6 +867,8 @@ 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}Neie/Neit {STRING} verfügbar! - {ENGINE}
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Maach d'Gruppefenster op, fokusséiert op der Gefiergrupp
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} akzeptéiert {STRING} net méi
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} akzeptéiert {STRING} oder {STRING} net méi
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} akzeptéiert elo {STRING}
@ -884,9 +888,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Usiicht {COMMA}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopéiert op d'Usiicht
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Ännert d'Usiicht
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopéiert d'Plaz vun der globaler Usiicht op des Usiicht
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Vun der Usiicht drasetzen
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Haptusiicht änneren
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Setzt d'Plaz vun dëser Usiicht op déi global Usiicht
# Game options window
@ -931,6 +935,9 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Georgesche Lari
STR_GAME_OPTIONS_CURRENCY_IRR :Iranësche Rial (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Neie Russesche Rubel (RUB)
STR_GAME_OPTIONS_CURRENCY_MXN :Mexikanesche Peso (MXN)
STR_GAME_OPTIONS_CURRENCY_NTD :New Taiwan Dollar (NTD)
STR_GAME_OPTIONS_CURRENCY_CNY :Chinesesch Renminbi (CNY)
STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Stroossegefierer
@ -1177,12 +1184,13 @@ STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Wielt aus, wéi
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximal Kaartenhéicht: {STRING}
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Setzt déi maximal erlabten Héicht fir Bierger op dëser Kaart
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kanns d'maximal Kaartenhéischt net op dësen Wäert setzen. Op manst ee Bierg op der Kaart ass méi héich
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kanns d'maximal Kaartenhéicht net op dëse Wäert setzen. Op manst ee Bierg op der Kaart ass méi héich
STR_CONFIG_SETTING_AUTOSLOPE :Erlaabt Landformung ënnert Gebaier, Stroossen, etc.: {STRING}
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Erlaabt Terraintransformatioun ënnert Gebaier an Schinnen ouni dës ewechzehuelen
STR_CONFIG_SETTING_CATCHMENT :Erlaabt méi realistësch Einzugsberäicher: {STRING}
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Statiounen a Fluchhäfen hunn verschidde grouss Einzugsberäicher
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Gare vun der Firma kënnen Industrie beliwwere mat neutrale Statiounen: {STRING}
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Wann ugeschalt dierefen Industrien mat agebaute Statiounen (z.b Buerinselen) och vu Firmestatiounen déi an der Géigend gebaut goufen beliwwert ginn. Wann ausgeschalt, dierfen se just vun den agebaute Statioune benotzt ginn. An der Géigend gebaute Firmestatiounen wärten se net benotzen an déi agebaute Statiounen beliwweren och keen ausser d'Industrie selwer.
STR_CONFIG_SETTING_EXTRADYNAMITE :Erlaabt d'Ewechhuelen vu méi Stroossen, Brécken, etc. vun der Stad: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Mach et méi einfach fir Infrastruktur oder Gebaier ewechzehuelen déi enger Stad gehéiren
STR_CONFIG_SETTING_TRAIN_LENGTH :Maximal Längt vun Zich: {STRING}
@ -1199,8 +1207,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steigung vun en
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hangsteigung fir Stroossegefierer: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steigung vun engem Hang fir Stroossegefierer. Méi grouss Wäerter mécht et méi schwéier den Hang ropzefueren
STR_CONFIG_SETTING_FORBID_90_DEG :Verbidd Zich an Schëffer fir 90°-Kéieren ze maachen: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90°-Kéieren entsti wann eng horizontal Spur direkt op eng vertikal trëfft, sou dass den Zuch misst ëm 90 Grad dréinen fir op dat nächst Stéck ze kommen, amplaz vun den üblechen 45 Grad. Dëst zielt och fir d'Weeër vu Schëffer
STR_CONFIG_SETTING_FORBID_90_DEG :Verbidd Zich fir 90°-Kéieren ze maachen: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90°-Kéieren entsti wann eng horizontal Spur direkt op eng vertikal trëfft, sou dass den Zuch misst ëm 90 Grad dréinen fir op dat nächst Stéck ze kommen, amplaz vun den üblechen 45 Grad.
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Erlaabt Statiounen zesummen ze setzen och wann se net direkt uneneen leien: {STRING}
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Erlaabt Statiounsdeeler un eng Statioun unzehenken ouni déi existéiernd Statioun ze beréiren. Ctr+Klick fir déi nei Deeler unzehenken
STR_CONFIG_SETTING_INFLATION :Inflatioun: {STRING}
@ -1255,9 +1263,9 @@ STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Leet den Impakt
STR_CONFIG_SETTING_PLANE_SPEED :Fligergeschwindegkeetsfaktor: {STRING}
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Leet d'relativ Geschwindegkeet vu Fligeren am Verglach mat anere Gefierer fest, fir d'Akomme vum Transport vu Fligeren ze reduzéiren
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Unzuel Fligerakzidenter: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Leet d'Chance fir en Fligerakzident fest
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Keng
STR_CONFIG_SETTING_PLANE_CRASHES :Unzuel Fligeraccidenter: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Leet d'Chance fir enzoufällegen Fligeraccident fest.{}* Grouss Fligeren hunn emmer en Accidents-Risiko wann se op engem klenge Fluchhafen landen
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Keng*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzéiert
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Erlaabt d'Iwwerfueren vu Stopschëlder op Stroossen vun der Stad: {STRING}
@ -1269,6 +1277,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastrukturë
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wann ugeschalt, kaschten Infrastrukturen Ennerhaltskäschten. D'Käschten wuessen iwwerproportional zu der Netzwierkgréisst, an treffen sou grouss Firmen méi wéi klenger
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Firmefaarw um Start: {STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wiel d'Startfaarw vun der Firma
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Fluchhäfen lafen nie of: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wann ugeschalt, bleift all Fluchhafentyp säit senger Aféierung bestoen
@ -1314,8 +1323,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terraintyp: {ST
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Nëmmen TerraGenesis) Hiwwelegkeet vun der Landschaft
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedicht: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Definéiert wéivill Industrien generéiert sollen ginn an wéivill der während dem Spill sollen behalen ginn.
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximal Distanz vum Kaartenenn bis zu enger Uelegraffinerie: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Uelëgraffinerien ginn nëmmen um Rand gebaut, dat ass un der Küst fir Inselkaarten
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximal Distanz vum Kaarterand bis zu enger Uelegindustrie: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limitéiert wéi wäit vum Bord Uelegraffinerien an Buerinsele dierfe gebaut ginn. Op Inselkaarten garantéiert dest dass se um Rand gebaut ginn. Op Kaarten mat méi wéi 256 Felder, gett dese Wert skaléiert
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Schnéigrenz Héicht: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrolléiert ab welcher Héicht de Schnéi ufenkt an der subarktëscher Landschaft. Schnéi affektéiert och Industriegeneratioun an de Wuesstum vu Stied.
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Knubbelegkeet vum Terrain (nëmmen TerraGenesis) : {STRING}
@ -1356,6 +1365,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mof
STR_CONFIG_SETTING_SCROLLMODE :Usiicht-Scrollverhalen: {STRING}
STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalen beim Scrolle vun der Kaart
STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :D'Usiicht mat der rietser Maustast bewegen, Maus-Positioun gespaart
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Beweg d'Kaart mat der rietser Maustast, Maus-Positioun gespaart
STR_CONFIG_SETTING_SCROLLMODE_RMB :D'Kaart mat der rietser Maustast bewegen
STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart mat der lénker Maustast bewegen
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Feine Scrolling: {STRING}
@ -1441,8 +1451,8 @@ STR_CONFIG_SETTING_SOUND_CONFIRM :Konstruktioun:
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Spill Soundeffekter of wa Konstruktiounen an aner Aktiounen ausgefouert goufen
STR_CONFIG_SETTING_SOUND_CLICK :Kneppercherklicks: {STRING}
STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Beep beim Klicken vu Kneppercher
STR_CONFIG_SETTING_SOUND_DISASTER :Katastrophen/Akzidenter: {STRING}
STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Spill Soundeffekter vun Akzidenter a Katastrophen of
STR_CONFIG_SETTING_SOUND_DISASTER :Katastrophen/Accidenter: {STRING}
STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Spill Soundeffekter vun Accidenter a Katastrophen of
STR_CONFIG_SETTING_SOUND_VEHICLE :Gefierer: {STRING}
STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Spill Soundeffekter vu Gefierer of
STR_CONFIG_SETTING_SOUND_AMBIENT :Ambiance: {STRING}
@ -1478,6 +1488,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Erlaabt KI am M
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaabt Computergéigner a Multiplayer Spiller matzeman
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes befier de Script suspendéiert gëtt: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximal Unzuel u Rechenschrëtt déi e Script kann an engem Tuer man
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max Späicherverbrauch pro Script: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wéivill Späicher en eenzelne Script dierf benotzen befier en gezwongenerweis gestopt gëtt. Dese Wert muss eventuell erhéigt ginn fir grouss Kaarten.
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Revisiounsintervallen a Prozenter: {STRING}
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Wiel op eng Revisioun ausgeléist gëtt durch Zäit déi säit der leschter Revisioun vergangen ass oder well Zouverlessëgkeet en gewëssen Prozentsaz vun der maximaler Zouverlässëgkeet erofgaang ass
@ -1502,8 +1515,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ukonft vum éis
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Weis d'Zeitung wann dat éischt Gefier op enger eegener Statioun ukënnt
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ukonft vum éischten Gefier op enger Géigenspillerstatioun: {STRING}
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Weis d'Zeitung wann dat éischt Gefier op enger géignerescher Statioun ukënnt
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Akzidenter / Katastrophen: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Weis d'Zeitung wann Akzidenter oder Katastrophen passéiren
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Accidenter / Katastrophen: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Weis d'Zeitung wann Accidenter oder Katastrophe geschéien
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Firmeninformatiounen: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Weis d'Zeitung wann eng nei Firma opgeet, oder wann ee riskéiert Bankrott ze goen
STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Grënnung vun enger Industrie: {STRING}
@ -1536,10 +1549,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Ganz
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Faarweg News ab: {STRING}
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Joer vun dem uns d'Zeitung farweg erauskënnt. Firun dësem Joer ass se schwarz/wäiss
STR_CONFIG_SETTING_STARTING_YEAR :Startjoer: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR :End-Joer vum Scoring: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Joer wou d'Spill opgrond vum Scoring ophält. Um Enn vun desem Joer gëtt der Firma hiere Score gespäichert an an der Highscore-Lëscht ugewisen, mee de Spiller kann dono weider spillen.{}Wann dese Wert virum Startjoer ass, gëtt d'Highscorelëscht nie ugewisen.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie
STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gläichméisseg Wiertschaft aschalten (méi oft an kleng Wiessel): {STRING}
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wann ugeschalt, ännert d'Industrieproduktioun méi oft, an méi kléngen Schrëtter. Dës Astellung huet keng Auswierkung op NewGRF-Industrien
STR_CONFIG_SETTING_ALLOW_SHARES :Undeeler vun aaneren Firmen kafen: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wann ugeschalt, dierfen Aktien vu Firmen kaf an verkaf ginn. Aktien si just fir Firme verfügbar, déi en gewëssen Alter erreecht hunn
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimalt Firmenalter fir Aktien ze handelen: {STRING}
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Definéiert d'minimalt Alter vun enger Firma, befier anerer kënnen Undeeler un Aktien vun hier kafen.
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prozentsaz vum Etappenprofit den am Feeder-System bezuelt gëtt: {STRING}
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Prozentsaz vum Akommes déi un d'Zwëschenetappen an engem Feeder-System gi ginn, wat méi Kontroll iwwert d'Akommes erméiglegt
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Wa gezunn gëtt, setz en Signal all: {STRING}
@ -1571,7 +1590,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 Gitter
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Zoufälleg
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Stied däerfen Stroossen bauen: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Erlaabt Stied Stroossen ze bauen fir ze wuessen. Ausschalten fir d'Stiedréid dorun ze hënneren fir Stroossen selwer ze bauen
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Stied dierfen Barrièren bauen: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Stied dierfe Barrière bauen: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Wann dës Astellung ugeschalt ass, kënnen Stied Stroossen iwwert Schinne bauen
STR_CONFIG_SETTING_NOISE_LEVEL :Erlab e stadkontrolléierte Kaméidisniveau fir Fluchhäfen: {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Wann dës Astellung ausgeschalt ass, kënnen zwee Fluchhäfen an all Stad gebaut ginn. Wann dës Astellung ugeschalt ass, henkt et vun der Fluchhafengréisst, Distanz, Kaméidisniveau of wéivill Fluchhäfen kënne gebaut ginn
@ -1582,6 +1601,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaabt
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaabt, custom Stad-Layout
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Duerfwuerengeneratioun: {STRING}
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Wéivill Wuere produzéiert ginn, relativ zur Bevölkerung vum Duerf.{}Quadratesche Wuesstum: En duebel sou grousst Duerf, generéiert véier mol souvill Passagéier.{}Lineare Wuesstum: En duebel sou grousst Duerf, generéiert duebel souvill Passagéier.
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratesch (original)
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Bamplazéirung: {STRING}
@ -1700,7 +1720,7 @@ STR_CONFIG_SETTING_VEHICLES :{ORANGE}Gefiere
STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Physik
STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Routeplangung
STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Limitatiounen
STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Katastrophen / Akzidenter
STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Katastrophen / Accidenter
STR_CONFIG_SETTING_GENWORLD :{ORANGE}Welt Generatioun
STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Emwelt
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoritéiten
@ -1741,7 +1761,7 @@ STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... Spil
STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignoréiren Basis Grafik Set '{STRING}': net fonnt
STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignoréiren Basis Sound Set '{STRING}': net fonnt
STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignoréiren Basis Musik Set '{STRING}': net fonnt
STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Net genuch Mémoire
STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Net genuch Späicher
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Reservéirung vun {BYTES} Spritecache versot. De Spritecache gouf reduzéiert op {BYTES}. Dëst reduzéiert d'Performance vun OpenTTD. Fir Späicher ze spueren kann een probéiren 32bpp Grafiken auszeschalten an/oder Zoom-Eran Stufen
# Intro window
@ -1801,7 +1821,7 @@ STR_OSNAME_SUNOS :SunOS
# Abandon game
STR_ABANDON_GAME_CAPTION :{WHITE}Spill ofbriechen
STR_ABANDON_GAME_QUERY :{YELLOW}Bass du sécher dass du des Partie ofbrieche wëlls?
STR_ABANDON_GAME_QUERY :{YELLOW}Bass du sécher, dass du des Partie ofbrieche wëlls?
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Sécher dass du aus dësem Szenario eraus wëlls ?
# Cheat window
@ -1812,7 +1832,7 @@ STR_CHEAT_MONEY :{LTBLUE}Suen ë
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Als Firma {ORANGE}{COMMA} spillen
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magësche Bulldozer (Industrien ofrappen, onzerstéierbar Objeten): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnelle kënne sech kräizen: {ORANGE}{STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}Jet'en maachen net regelméisseg en Akzident op klenge Fluchhäfen: {ORANGE} {STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}Jete maache net regelméisseg en Accident op klenge Fluchhäfen: {ORANGE} {STRING}
STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Änner d'Maximalhéicht vu Bierger op der Kaart: {ORANGE}{NUM}
STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Änner d'Maximalhéicht vu Bierger op der Kaart
STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Gemässegt Klima Landschaft
@ -2084,6 +2104,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbindu
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ass geschützt. Passwuert aginn
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ass geschützt. Passwuert aginn
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spillerlëscht
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spillerlëscht
@ -2129,7 +2150,7 @@ STR_NETWORK_CHAT_ALL :[All] {STRING}:
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Text fir Chat aginn
# Network messages
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Keng Netzwierkgeräter fonnt oder compiléiert ouni ENABLE_NETWORK
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Keng Netzwierkgeräter fonnt
STR_NETWORK_ERROR_NOSERVER :{WHITE}Konnt keng Netzwierkspiller fannen
STR_NETWORK_ERROR_NOCONNECTION :{WHITE}De Server huet net op d'Ufro geäntwert
STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Konnt sech wéinst ënnerscheedlechen NewGRF net connectéieren
@ -2253,7 +2274,7 @@ STR_CONTENT_TYPE_NEWGRF :NewGRF
STR_CONTENT_TYPE_AI :KI
STR_CONTENT_TYPE_AI_LIBRARY :KI Librairie
STR_CONTENT_TYPE_SCENARIO :Szenario
STR_CONTENT_TYPE_HEIGHTMAP :Héischtekaart
STR_CONTENT_TYPE_HEIGHTMAP :Héichtekaart
STR_CONTENT_TYPE_BASE_SOUNDS :Basis Sounds
STR_CONTENT_TYPE_BASE_MUSIC :Basis Musik
STR_CONTENT_TYPE_GAME_SCRIPT :Spill-Script
@ -2296,6 +2317,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Cargo Fl
STR_LINKGRAPH_LEGEND_ALL :{BLACK}All
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Keng
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Wiel d'Firmen aus déi ugewise ginn
STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}onbenotzt
@ -2380,9 +2402,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combo-Si
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Wee-Signal (Elektresch){}E Wee-Signal erlaabt méi wéi engem Zuch an e Block eranzefueren, wann den Zuch e Wee op en Stop-Punkt reservéiren kann. Standard Wee-Signaler kënne vu béide Säiten duerchfuer ginn
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Einbahn-Wee-Signal (Elektresch){}En Einbahn-Signal erlaabt méi wéi een Zuch zur selwechter Zäit an engem Block ze sin, wann den Zuch en Wee op en sécheren Stop-Punkt reservéiren kann. Einbahn-Signaler kënnen net vun der falscher Säit duerchfuer ginn
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signal konvertéiren{}Wann gewielt, gëtt en geklickten Signal an dat gewielten Signal konvertéiert, Ctrl+Klick wiesselt tëscht de Varianten. Shift weist ongeféier Konvertéirungskäschten
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dicht vu Signaler beim Zéien
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distanz vu Signaler beim Zéien
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Setzt Signaldistanz erof
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Setzt Signaldicht erop
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Setzt Signaldistanz erop
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Zuchbréck auswielen
@ -2404,7 +2426,7 @@ STR_BRIDGE_TUBULAR_SILICON :Rouer, Silikon
STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Stroossebau
STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Tramkonstruktioun
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Baut Stroossen.Ctrl+Klick wiësselt tëscht Stroosse bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Tramschinne bauen. Ctrl+Klick wiësselt tëscht Tramschinne bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Tramwayschinne bauen. Ctrl+Klick wiësselt tëscht Tramwayschinne bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}D'Strooss mat der Bau-Automatik bauen. Ctrl wiësselt tëscht Stroossen bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Tramschinne mam "Autotram" Modus bauen. Ctrl wiesselt tëscht Tramschinne bauen/ofrappen. Shift wiesselt tëschtbauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Baut Stroossendepot (fir Gefierer ze kafen an ze flécken). Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
@ -2420,7 +2442,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Baut Str
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Tramtunnel bauen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Wiesselt bauen/ofrappen vu Stroossekonstruktiounen
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Wiesselt tëscht bauen/ofrappen beim Trambau
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertéier/upgrade den Typ vu Strooss. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konvertéiert/upgrade den Typ vun Tram. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
STR_ROAD_NAME_ROAD :Strooss
STR_ROAD_NAME_TRAM :Tramway
# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Ausriichtung vum Stroossendepot
@ -2521,7 +2547,7 @@ STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Setz d'L
STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Huel all Grondstécker vun der Firma ewech
STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Setz d'Landschaft zeréck
STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Bass du sécher dass du all Grondstécker vun der Firma ewechhuelen wëlls?
STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Bass du sécher, dass du all Grondstécker vun der Firma ewechhuele wëlls?
# Town generation window (SE)
STR_FOUND_TOWN_CAPTION :{WHITE}Staderstellung
@ -2605,8 +2631,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF:
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Akzeptéiert Wuer: {LTBLUE}
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Schinnentyp: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Stroossentyp: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tramtyp: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Schinne-Geschw.-Limit: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Stroosse-Geschw.-Limit: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tram-Geschw.-Limit: {LTBLUE}{VELOCITY}
# Description of land area of different tiles
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Fielsen
@ -2646,7 +2675,7 @@ STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Strooss mat Luu
STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Strooss mat Beem
STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Stroossendepot
STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Zuche/Stroosse-Barrière
STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Tram
STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Tramway
# Houses come directly from their building names
STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (gëtt gebaut)
@ -2708,6 +2737,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Biller pro Sekonn
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsrat: {STRING}
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Unzuel Gameticks déi pro Sekonn simuléiert ginn.
STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafikframerate: {STRING}
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Unzuel u Videobiller déi pro Sekonn gerendert ginn.
@ -2715,21 +2745,32 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuelle
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wéi séier d'Spill aktuell leeft, am Verglach mat der Geschw. vun der normaler Simulatioun.
STR_FRAMERATE_CURRENT :{WHITE}Aktuell
STR_FRAMERATE_AVERAGE :{WHITE}Mëttel
STR_FRAMERATE_MEMORYUSE :{WHITE}Späicher
STR_FRAMERATE_DATA_POINTS :{BLACK}Date baséiert op {COMMA} Miessungen
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Biller/s
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Biller/s
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Biller/s
STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES}
STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES}
STR_FRAMERATE_BYTES_BAD :{RED}{BYTES}
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
STR_FRAMERATE_GAMELOOP :{BLACK}Spill total:
STR_FRAMERATE_GL_TRAINS :{BLACK} Zuchticks:
STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefierer Ticken:
STR_FRAMERATE_GL_ECONOMY :{BLACK} Wuerenhandling:
STR_FRAMERATE_GL_TRAINS :{BLACK} Zuchticker:
STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefier-Ticker:
STR_FRAMERATE_GL_SHIPS :{BLACK} Schëffticker:
STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Fligerticker:
STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Weltticker:
STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Linkgrafik-Verzögerung:
STR_FRAMERATE_DRAWING :{BLACK}Grafikrendering:
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Welt-Usiichten:
STR_FRAMERATE_VIDEO :{BLACK}Video-output:
STR_FRAMERATE_SOUND :{BLACK}Soundmixing:
STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/KI Total:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Gamescript:
STR_FRAMERATE_AI :{BLACK} KI {NUM} {STRING}
@ -2737,10 +2778,12 @@ STR_FRAMERATE_AI :{BLACK} KI {N
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Spill-Loop
STR_FRAMETIME_CAPTION_GL_ECONOMY :Wuerenhandling
STR_FRAMETIME_CAPTION_GL_TRAINS :Zuchticks
STR_FRAMETIME_CAPTION_GL_TRAINS :Zuchticker
STR_FRAMETIME_CAPTION_GL_ROADVEHS :Stroossegefierer Ticken
STR_FRAMETIME_CAPTION_GL_SHIPS :Schëffticker
STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Weltticks
STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Fligerticker
STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Weltticker
STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Linkgrafik Verzögerung
STR_FRAMETIME_CAPTION_DRAWING :Grafikrendering
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Weltusiicht-Rendering
STR_FRAMETIME_CAPTION_VIDEO :Video-output
@ -2775,6 +2818,7 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-String:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Datei iwwerschreiwen
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Bass du sécher, dass du d'existéirend Datei iwwerschreiwe wëlls?
STR_SAVELOAD_OSKTITLE :{BLACK}Gëff dem Spillstand en Numm
@ -2802,7 +2846,7 @@ STR_MAPGEN_VARIETY :{BLACK}Vielfalt
STR_MAPGEN_GENERATE :{WHITE}Generéiren
# Strings for map borders at game generation
STR_MAPGEN_BORDER_TYPE :{BLACK}Kaartenenner:
STR_MAPGEN_BORDER_TYPE :{BLACK}Kaartenner:
STR_MAPGEN_NORTHWEST :{BLACK}Nordwest
STR_MAPGEN_NORTHEAST :{BLACK}Nordost
STR_MAPGEN_SOUTHEAST :{BLACK}Südost
@ -2895,6 +2939,7 @@ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette:
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (S)
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (S) / 32 bpp
STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W)
STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PARAMETER_NONE :Keng
@ -2978,6 +3023,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Ugefroten GRF R
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} gouf ausgeschalt vun {STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/onbekannten Sprite Layout Format (Sprite {3:NUM})
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zevill Elementer an der Eegeschaftewert-Lëscht (Sprite {3:NUM}, Eegeschaft {4:HEX})
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongültegen Industrie-production callback (sprite {3:NUM}, "{2:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Opgepasst!
@ -3009,6 +3055,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF '
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit Informatioun fir '{1:ENGINE}' ass anescht wéi an der Kaflëscht no der Constructioun. Dëst kann en Autoerneirung/-ersetzen Fehler oprufen
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' huet eng Endlosschläif am Production callback verursaacht
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} huet en onbekannten/invalid Resultat {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' huet en ongültegen Wuerentyp am Production-callback bei {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :<invalid Wuer>
@ -3075,6 +3122,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Stad ëmbenenne
# Town local authority window
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Gemeng {TOWN}
STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zone
STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Weis d'Zone vun de Gemengegrenzen
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Transportfirme-Bewäertung:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Verfügbar Aktiounen:
@ -3103,6 +3152,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}D'Gemen
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Ziler
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Ziler
STR_GOALS_SPECTATOR :Global Ziler
STR_GOALS_GLOBAL_TITLE :{BLACK}Global Ziler:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Keng -
@ -3333,6 +3383,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Schinnestécker:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaler
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Stroossestécker:
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Tramdeeler:
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Waasserfelder:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanäl
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Statiounen:
@ -3343,7 +3394,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC
# Industry directory
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Keng -
STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportéiert){BLACK}
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} an nach {NUM} méi...
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienimm - klick op en Numm fir d'Usiicht do drop ze zentréieren. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie
# Industry view
@ -3354,6 +3410,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréi
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
@ -3438,9 +3495,11 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nei Monorailgef
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nei Magnéitbunngefierer
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nei Stroossegefierer
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nei Tramgefierer
############ range for vehicle availability starts
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nei Zich
STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nei Stroossegefierer
STR_BUY_VEHICLE_SHIP_CAPTION :Nei Schëffer
STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Neie Fliger
############ range for vehicle availability ends
@ -3465,6 +3524,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazit
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Ugedriwwen Waggonen: {GOLD}+{POWER}{BLACK} Gewiicht: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Embaubar zu: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :All Wuerentyp
STR_PURCHASE_INFO_NONE :Keng
STR_PURCHASE_INFO_ALL_BUT :Alles ausser {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Zéikraaft: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Distanz: {GOLD}{COMMA} Felder
@ -3491,6 +3551,8 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft da
STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft den ungewielte Fliger. Shift+Klick weist ongeféier Käschten ouni Kaf
STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielten Zuch/Waggon kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf
STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielte Gefier kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf
STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielte Schëff kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf
STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielte Fliger kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf
STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ëmbenennen
@ -3603,10 +3665,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Meldung
STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Mir hunn elo en neien {STRING} gebaut - bass du dorun interesséiert dëst Gefier 1 Joer exklusiv ze notzen, fir ze testen op et komplett maarträif ass?
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :Lokomotiv
STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Elektresch Lokomotiv
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :Monorail Lokomotiv
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :Magnéitbunnlokomotiv
STR_ENGINE_PREVIEW_ROAD_VEHICLE :Stroossegefier
STR_ENGINE_PREVIEW_TRAM_VEHICLE :Tram-Gefier
STR_ENGINE_PREVIEW_AIRCRAFT :Fliger
STR_ENGINE_PREVIEW_SHIP :Schëff
@ -3648,14 +3712,18 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Wiessel
STR_REPLACE_ENGINES :Lokomotiven
STR_REPLACE_WAGONS :Waggonen
STR_REPLACE_ALL_RAILTYPE :All Zich
STR_REPLACE_ALL_ROADTYPE :All Stroossegefierer
STR_REPLACE_HELP_RAILTYPE :{BLACK}Wielt de Schinnentyp fir déi Lokomotiven ausgetosch ginn
STR_REPLACE_HELP_ROADTYPE :{BLACK}Wielt de Stroossentyp fir déi d'Maschinnen ausgetosch ginn
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Weist un wellech Lokomotiv vun der lénks ugewielter Lokomotiv ausgetosch soll ginn, wann et zoutrëfft
STR_REPLACE_RAIL_VEHICLES :Zich
STR_REPLACE_ELRAIL_VEHICLES :Elektresch Zich
STR_REPLACE_MONORAIL_VEHICLES :Monorail Gefierer
STR_REPLACE_MAGLEV_VEHICLES :Magnéitbunn Gefierer
STR_REPLACE_ROAD_VEHICLES :Stroossegefierer
STR_REPLACE_TRAM_VEHICLES :Tram-Gefierer
STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon raushuelen: {ORANGE}{STRING}
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Mécht dass d'automatescht Austauschen d'Längt vum Zuch behält, an dem e Waggonen (vu lénks un) wechhëllt, wann d'Lok den Zuch ze laang mécht
@ -3706,7 +3774,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Momentan
# Messages in the start stop button in the vehicle view
STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Lueden / Entlueden
STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Verloossen
STR_VEHICLE_STATUS_CRASHED :{RED}Akzident!
STR_VEHICLE_STATUS_CRASHED :{RED}Accident!
STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Pann
STR_VEHICLE_STATUS_STOPPED :{RED}Gestoppt
STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Stoppt, {VELOCITY}
@ -3995,7 +4063,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(fuer während
STR_TIMETABLE_STAY_FOR :an bleif fir {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :an ënnerwee während {STRING}
STR_TIMETABLE_DAYS :{COMMA}{NBSP}D{P ag eeg}
STR_TIMETABLE_TICKS :{COMMA}{NBSP}Tick{P "" en}
STR_TIMETABLE_TICKS :{COMMA}{NBSP}Tick{P "" er}
STR_TIMETABLE_TOTAL_TIME :{BLACK}Dësen Zäitplang brauch {STRING} fir faërdeg ze ginn
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Dësen Zäitplang brauch op manst {STRING} (net all geplangt)
@ -4107,6 +4175,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Wiel de
STR_AI_LIST_CANCEL :{BLACK}Ofbriechen
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script net änneren
STR_SCREENSHOT_CAPTION :{WHITE}E Screenshot maachen
STR_SCREENSHOT_SCREENSHOT :{BLACK}Normale Screenshot
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Voll gezoomte Screenshot
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Standard Zoom-Screenshot
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screenshot vun der ganzer Kaart
STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Héichtekaartscreenshot
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter
STR_AI_SETTINGS_CAPTION_AI :KI
@ -4201,7 +4276,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Matdeel
# Generic construction errors
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Ausserhalb vun der Kaart
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Ze noo um Rand vun der Kaart
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Ze no um Rand vun der Kaart
STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Net genuch Geld - des Aktioun kascht {CURRENCY_LONG}
STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}D'Land muss flaach sinn
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land ass an déi falsch Richtung geneigt
@ -4256,8 +4331,8 @@ STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Ka keng
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kann d'Stad net ëmbenennen...
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kann d'Stad hei net bauen...
STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kann d'Stad net vergréisseren...
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ze noo um Enn vun der Kaart
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ze noo un enger anerer Stad
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ze no um Rand vun der Kaart
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ze no un enger anerer Stad
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ze vill Stied
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... et ass keng Plaz méi op der Kaart
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Stied bauen keng Stroossen. Du kanns de Bau iwwert Astellungen->Economie->Stied aschalten
@ -4270,7 +4345,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... zevi
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kann keng Industrien bauen...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kann {STRING} net hei bauen...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kann deen Industrietyp hei net bauen...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... ze noo bei enger anerer Fabrik
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... ze no bei enger anerer Fabrik
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... muss fir d'éischt eng Stad bauen
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... nëmmen 1 pro Stad erlaabt
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... kann nëmmen an Stied mat op mannst 1200 Anwunner gebaut ginn
@ -4302,8 +4377,8 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Ze vill
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Ze vill Garesdeeler
STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Ze vill Busarrêten
STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Ze vill Camionsgaren
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ze noo un engem aanerem Hafen
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ze noo un engem aaneren Fluchhafen
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ze no un engem aaneren Hafen
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ze no un engem aanere Fluchhafen
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kann d'Statioun net ëmbenennen...
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... d'Strooss ass am Besëtz vun der Stad
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... Strooss geet an dei falsch Richtung
@ -4378,7 +4453,8 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signaler
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keng gëeegent Schinnen
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}D'Schinne musse fir d'éischt ewech
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}D'Strooss ass eng Einbahn oder blockéiert
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Barrièren si fir dësen Schinnentyp net erlaabt
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Barrière si fir dëse Schinnentyp net erlaabt
STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Barrière si fir dëse Stroossentyp net erlaabt
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kann d'Signaler hei net bauen...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kann d'Schinnen hei net bauen...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kann d'Schinnen hei net ewech huelen...
@ -4393,11 +4469,17 @@ STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kann de
STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Muss d'Strooss ewech huelen
STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... Einbahnstroossen kënnen keng Kräizung hunn
STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Kann d'Strooss hei net bauen...
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kann den Tram hei net bauen...
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kann Tramway hei net bauen...
STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kann d'Strooss hei net ewech huelen...
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kann den Tram net ewech huelen...
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kann den Tramway net ewech huelen...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... et ass keng Strooss do
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... et ass keen Tram do
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... et ass keen Tramway do
STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kann den Gefiertyp hei net konvertéiren...
STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kann den Tramwaytyp hei net konvertéiren...
STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Keng geeegent Strooss
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Kee passenden Tramway
STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... inkompatibel Strooss
STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... inkompatiblen Tramway
# Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kann hei keen Kanal bauen...

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save