Merge branch 'master' into jgrpp

# Conflicts:
#	cmake/CompileFlags.cmake
#	src/aircraft_cmd.cpp
#	src/blitter/32bpp_anim.cpp
#	src/cargopacket.cpp
#	src/cheat_gui.cpp
#	src/company_cmd.cpp
#	src/company_gui.cpp
#	src/core/pool_func.hpp
#	src/date.cpp
#	src/economy.cpp
#	src/error_gui.cpp
#	src/ground_vehicle.cpp
#	src/ground_vehicle.hpp
#	src/group_gui.cpp
#	src/industry_cmd.cpp
#	src/lang/dutch.txt
#	src/lang/french.txt
#	src/lang/german.txt
#	src/linkgraph/linkgraph_gui.cpp
#	src/linkgraph/mcf.cpp
#	src/network/network_content.cpp
#	src/network/network_server.cpp
#	src/network/network_udp.cpp
#	src/newgrf_engine.cpp
#	src/newgrf_station.cpp
#	src/order_cmd.cpp
#	src/order_gui.cpp
#	src/pathfinder/follow_track.hpp
#	src/pathfinder/yapf/yapf_common.hpp
#	src/saveload/saveload.cpp
#	src/settings_gui.cpp
#	src/station_cmd.cpp
#	src/station_kdtree.h
#	src/string_func.h
#	src/table/settings.ini
#	src/tgp.cpp
#	src/timetable_cmd.cpp
#	src/timetable_gui.cpp
#	src/toolbar_gui.cpp
#	src/town_cmd.cpp
#	src/train_cmd.cpp
#	src/train_gui.cpp
#	src/tree_gui.cpp
#	src/tunnelbridge_cmd.cpp
#	src/vehicle.cpp
#	src/vehicle_gui.cpp
#	src/video/sdl2_v.cpp
#	src/video/sdl_v.cpp
#	src/video/win32_v.cpp
#	src/viewport.cpp
#	src/viewport_sprite_sorter_sse4.cpp
#	src/window.cpp
pull/217/head
Jonathan G Rennison 3 years ago
commit b7ddd486cf

@ -44,4 +44,5 @@ Some things are not automated, and forgotten often. This list is a reminder for
* ai_changelog.hpp, gs_changelog.hpp need updating. * ai_changelog.hpp, gs_changelog.hpp need updating.
* The compatibility wrappers (compat_*.nut) need updating. * The compatibility wrappers (compat_*.nut) need updating.
* This PR affects the NewGRF API? (label 'needs review: NewGRF') * This PR affects the NewGRF API? (label 'needs review: NewGRF')
* newgrf_debug_data.h may need updating.
* [PR must be added to API tracker](https://wiki.openttd.org/en/Development/NewGRF/Specification%20Status) * [PR must be added to API tracker](https://wiki.openttd.org/en/Development/NewGRF/Specification%20Status)

@ -210,6 +210,18 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v2
# "restore-cache" which is done by "run-vcpkg" uses Windows tar.
# A git clone on windows marks a few files as read-only; when Windows tar
# tries to extract the cache over this folder, it fails, despite the files
# being identical. This failure shows up as an warning in the logs. We
# avoid this by simply removing the read-only mark from the git folder.
# In other words: this is a hack!
# See: https://github.com/lukka/run-vcpkg/issues/61
- name: Remove read-only flag from vcpkg git folder
shell: powershell
run: |
attrib -r "c:\vcpkg\.git\*.*" /s
- name: Prepare vcpkg (with cache) - name: Prepare vcpkg (with cache)
uses: lukka/run-vcpkg@v6 uses: lukka/run-vcpkg@v6
with: with:

@ -366,8 +366,10 @@ jobs:
include: include:
- arch: x64 - arch: x64
full_arch: x86_64 full_arch: x86_64
- arch: arm64
full_arch: arm64
runs-on: macos-11.0 runs-on: macos-10.15
env: env:
MACOSX_DEPLOYMENT_TARGET: 10.9 MACOSX_DEPLOYMENT_TARGET: 10.9
@ -381,11 +383,20 @@ jobs:
run: | run: |
tar -xf source.tar.gz --strip-components=1 tar -xf source.tar.gz --strip-components=1
# The following step can be removed and the default vcpkg installation
# (/usr/local/share/vcpkg) restored when the build VM is updated with a revision of
# vcpkg dating from roughly 01/01/2021 or later.
- name: Update vcpkg
run: |
cd /tmp
git clone https://github.com/Microsoft/vcpkg
- name: Prepare vcpkg (with cache) - name: Prepare vcpkg (with cache)
uses: lukka/run-vcpkg@v6 uses: lukka/run-vcpkg@v6
with: with:
vcpkgDirectory: '/usr/local/share/vcpkg' vcpkgDirectory: '/tmp/vcpkg'
doNotUpdateVcpkg: true doNotUpdateVcpkg: false
vcpkgGitCommitId: 2a42024b53ebb512fb5dd63c523338bf26c8489c
vcpkgArguments: 'freetype liblzma lzo' vcpkgArguments: 'freetype liblzma lzo'
vcpkgTriplet: '${{ matrix.arch }}-osx' vcpkgTriplet: '${{ matrix.arch }}-osx'
@ -418,7 +429,7 @@ jobs:
cmake ${GITHUB_WORKSPACE} \ cmake ${GITHUB_WORKSPACE} \
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ -DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \
-DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ -DCMAKE_TOOLCHAIN_FILE=/tmp/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
# EOF # EOF

@ -134,18 +134,20 @@ macro(compile_flags)
endif() endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
add_compile_options( if (NOT CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
-fno-stack-check
)
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-mno-sse4" NO_SSE4_FOUND)
if(NO_SSE4_FOUND)
add_compile_options( add_compile_options(
# Don't use SSE4 for general sources to increase compatibility. -fno-stack-check
-mno-sse4
) )
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-mno-sse4" NO_SSE4_FOUND)
if(NO_SSE4_FOUND)
add_compile_options(
# Don't use SSE4 for general sources to increase compatibility.
-mno-sse4
)
endif()
endif() endif()
endif() endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")

@ -74,23 +74,30 @@ list(LENGTH REGRESSION_EXPECTED REGRESSION_EXPECTED_LENGTH)
# Compare the output # Compare the output
foreach(RESULT IN LISTS REGRESSION_RESULT) foreach(RESULT IN LISTS REGRESSION_RESULT)
list(GET REGRESSION_EXPECTED ${ARGC} EXPECTED) unset(EXPECTED)
if(ARGC LESS REGRESSION_EXPECTED_LENGTH)
list(GET REGRESSION_EXPECTED ${ARGC} EXPECTED)
endif()
math(EXPR ARGC "${ARGC} + 1")
if(NOT RESULT STREQUAL EXPECTED) if(NOT RESULT STREQUAL EXPECTED)
message("${ARGC}: - ${EXPECTED}") message("${ARGC}: - ${EXPECTED}")
message("${ARGC}: + ${RESULT}'") message("${ARGC}: + ${RESULT}'")
set(ERROR YES) set(ERROR YES)
endif() endif()
math(EXPR ARGC "${ARGC} + 1")
endforeach() endforeach()
if(NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC) if(NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC)
math(EXPR MISSING "${REGRESSION_EXPECTED_LENGTH} - ${ARGC}") message("(${REGRESSION_EXPECTED_LENGTH} lines were expected but ${ARGC} were found)")
message("(${MISSING} more lines were expected than found)")
set(ERROR YES) set(ERROR YES)
endif() endif()
if(ERROR) if(ERROR)
message(FATAL_ERROR "Regression failed") # Ouput the regression result to a file
set(REGRESSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/regression_${REGRESSION_TEST}_output.txt")
string(REPLACE ";" "\n" REGRESSION_RESULT "${REGRESSION_RESULT}")
file(WRITE ${REGRESSION_FILE} "${REGRESSION_RESULT}")
message(FATAL_ERROR "Regression failed - Output in ${REGRESSION_FILE}")
endif() endif()

@ -332,7 +332,8 @@ function Regression::Cargo()
for (local i = -1; i < 15; i++) { for (local i = -1; i < 15; i++) {
print(" Cargo " + i); print(" Cargo " + i);
print(" IsValidCargo(): " + AICargo.IsValidCargo(i)); print(" IsValidCargo(): " + AICargo.IsValidCargo(i));
print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i)+ "'"); print(" GetName(): '" + AICargo.GetName(i) + "'");
print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i) + "'");
print(" IsFreight(): " + AICargo.IsFreight(i)); print(" IsFreight(): " + AICargo.IsFreight(i));
print(" HasCargoClass(): " + AICargo.HasCargoClass(i, AICargo.CC_PASSENGERS)); print(" HasCargoClass(): " + AICargo.HasCargoClass(i, AICargo.CC_PASSENGERS));
print(" GetTownEffect(): " + AICargo.GetTownEffect(i)); print(" GetTownEffect(): " + AICargo.GetTownEffect(i));
@ -428,29 +429,29 @@ function Regression::Company()
print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF)); print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(239, 76))); print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(239, 76)));
print(" GetLastErrorString(): " + AIError.GetLastErrorString()); print(" GetLastErrorString(): " + AIError.GetLastErrorString());
print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); print(" GetAutoRenewStatus(): " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); print(" SetAutoRenewStatus(true): " + AICompany.SetAutoRenewStatus(true));
print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); print(" GetAutoRenewStatus(): " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); print(" SetAutoRenewStatus(true): " + AICompany.SetAutoRenewStatus(true));
print(" SetAutoRenewStatus(false); " + AICompany.SetAutoRenewStatus(false)); print(" SetAutoRenewStatus(false): " + AICompany.SetAutoRenewStatus(false));
print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); print(" GetAutoRenewStatus(): " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); print(" GetAutoRenewMonths(): " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF));
print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); print(" SetAutoRenewMonths(-12): " + AICompany.SetAutoRenewMonths(-12));
print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); print(" GetAutoRenewMonths(): " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF));
print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); print(" SetAutoRenewMonths(-12): " + AICompany.SetAutoRenewMonths(-12));
print(" SetAutoRenewMonths(6); " + AICompany.SetAutoRenewMonths(6)); print(" SetAutoRenewMonths(6): " + AICompany.SetAutoRenewMonths(6));
print(" GetAutoRenewMoney(); " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); print(" GetAutoRenewMoney(): " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF));
print(" SetAutoRenewMoney(200000); " + AICompany.SetAutoRenewMoney(200000)); print(" SetAutoRenewMoney(200000): " + AICompany.SetAutoRenewMoney(200000));
print(" GetAutoRenewMoney(); " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); print(" GetAutoRenewMoney(): " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF));
print(" SetAutoRenewMoney(200000); " + AICompany.SetAutoRenewMoney(200000)); print(" SetAutoRenewMoney(200000): " + AICompany.SetAutoRenewMoney(200000));
print(" SetAutoRenewMoney(100000); " + AICompany.SetAutoRenewMoney(100000)); print(" SetAutoRenewMoney(100000): " + AICompany.SetAutoRenewMoney(100000));
for (local i = -1; i <= AICompany.EARLIEST_QUARTER; i++) { for (local i = -1; i <= AICompany.EARLIEST_QUARTER; i++) {
print(" Quarter: " + i); print(" Quarter: " + i);
print(" GetQuarterlyIncome(); " + AICompany.GetQuarterlyIncome(AICompany.COMPANY_SELF, i)); print(" GetQuarterlyIncome(): " + AICompany.GetQuarterlyIncome(AICompany.COMPANY_SELF, i));
print(" GetQuarterlyExpenses(); " + AICompany.GetQuarterlyExpenses(AICompany.COMPANY_SELF, i)); print(" GetQuarterlyExpenses(): " + AICompany.GetQuarterlyExpenses(AICompany.COMPANY_SELF, i));
print(" GetQuarterlyCargoDelivered(); " + AICompany.GetQuarterlyCargoDelivered(AICompany.COMPANY_SELF, i)); print(" GetQuarterlyCargoDelivered(): " + AICompany.GetQuarterlyCargoDelivered(AICompany.COMPANY_SELF, i));
print(" GetQuarterlyPerformanceRating(); " + AICompany.GetQuarterlyPerformanceRating(AICompany.COMPANY_SELF, i)); print(" GetQuarterlyPerformanceRating(): " + AICompany.GetQuarterlyPerformanceRating(AICompany.COMPANY_SELF, i));
print(" GetQuarterlyCompanyValue(); " + AICompany.GetQuarterlyCompanyValue(AICompany.COMPANY_SELF, i)); print(" GetQuarterlyCompanyValue(): " + AICompany.GetQuarterlyCompanyValue(AICompany.COMPANY_SELF, i));
} }
} }

@ -615,178 +615,178 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetCompanyHQ(): 33153 GetCompanyHQ(): 33153
BuildCompanyHQ(): false BuildCompanyHQ(): false
GetLastErrorString(): ERR_AREA_NOT_CLEAR GetLastErrorString(): ERR_AREA_NOT_CLEAR
GetAutoRenewStatus(); true GetAutoRenewStatus(): true
SetAutoRenewStatus(true); true SetAutoRenewStatus(true): true
GetAutoRenewStatus(); true GetAutoRenewStatus(): true
SetAutoRenewStatus(true); true SetAutoRenewStatus(true): true
SetAutoRenewStatus(false); true SetAutoRenewStatus(false): true
GetAutoRenewStatus(); false GetAutoRenewStatus(): false
GetAutoRenewMonths(); 6 GetAutoRenewMonths(): 6
SetAutoRenewMonths(-12); true SetAutoRenewMonths(-12): true
GetAutoRenewMonths(); -12 GetAutoRenewMonths(): -12
SetAutoRenewMonths(-12); true SetAutoRenewMonths(-12): true
SetAutoRenewMonths(6); true SetAutoRenewMonths(6): true
GetAutoRenewMoney(); 100000 GetAutoRenewMoney(): 100000
SetAutoRenewMoney(200000); true SetAutoRenewMoney(200000): true
GetAutoRenewMoney(); 200000 GetAutoRenewMoney(): 200000
SetAutoRenewMoney(200000); true SetAutoRenewMoney(200000): true
SetAutoRenewMoney(100000); true SetAutoRenewMoney(100000): true
Quarter: -1 Quarter: -1
GetQuarterlyIncome(); -1 GetQuarterlyIncome(): -1
GetQuarterlyExpenses(); -1 GetQuarterlyExpenses(): -1
GetQuarterlyCargoDelivered(); -1 GetQuarterlyCargoDelivered(): -1
GetQuarterlyPerformanceRating(); -1 GetQuarterlyPerformanceRating(): -1
GetQuarterlyCompanyValue(); -1 GetQuarterlyCompanyValue(): -1
Quarter: 0 Quarter: 0
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); -210 GetQuarterlyExpenses(): -210
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); -1 GetQuarterlyPerformanceRating(): -1
GetQuarterlyCompanyValue(); 1 GetQuarterlyCompanyValue(): 1
Quarter: 1 Quarter: 1
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 2 Quarter: 2
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 3 Quarter: 3
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 4 Quarter: 4
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 5 Quarter: 5
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 6 Quarter: 6
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 7 Quarter: 7
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 8 Quarter: 8
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 9 Quarter: 9
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 10 Quarter: 10
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 11 Quarter: 11
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 12 Quarter: 12
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 13 Quarter: 13
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 14 Quarter: 14
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 15 Quarter: 15
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 16 Quarter: 16
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 17 Quarter: 17
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 18 Quarter: 18
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 19 Quarter: 19
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 20 Quarter: 20
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 21 Quarter: 21
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 22 Quarter: 22
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 23 Quarter: 23
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
Quarter: 24 Quarter: 24
GetQuarterlyIncome(); 0 GetQuarterlyIncome(): 0
GetQuarterlyExpenses(); 0 GetQuarterlyExpenses(): 0
GetQuarterlyCargoDelivered(); 0 GetQuarterlyCargoDelivered(): 0
GetQuarterlyPerformanceRating(); 0 GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(); 0 GetQuarterlyCompanyValue(): 0
--AIAirport-- --AIAirport--
IsHangarTile(): false IsHangarTile(): false
@ -1109,6 +1109,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
--AICargo-- --AICargo--
Cargo -1 Cargo -1
IsValidCargo(): false IsValidCargo(): false
GetName(): '(null : 0x00000000)'
GetCargoLabel(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)'
IsFreight(): false IsFreight(): false
HasCargoClass(): false HasCargoClass(): false
@ -1120,6 +1121,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 0 Cargo 0
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Passengers'
GetCargoLabel(): 'PASS' GetCargoLabel(): 'PASS'
IsFreight(): false IsFreight(): false
HasCargoClass(): true HasCargoClass(): true
@ -1131,6 +1133,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 0 GetRoadVehicleTypeForCargo(): 0
Cargo 1 Cargo 1
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Coal'
GetCargoLabel(): 'COAL' GetCargoLabel(): 'COAL'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1142,6 +1145,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 2 Cargo 2
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Mail'
GetCargoLabel(): 'MAIL' GetCargoLabel(): 'MAIL'
IsFreight(): false IsFreight(): false
HasCargoClass(): false HasCargoClass(): false
@ -1153,6 +1157,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 3 Cargo 3
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Oil'
GetCargoLabel(): 'OIL_' GetCargoLabel(): 'OIL_'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1164,6 +1169,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 4 Cargo 4
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Livestock'
GetCargoLabel(): 'LVST' GetCargoLabel(): 'LVST'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1175,6 +1181,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 5 Cargo 5
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Goods'
GetCargoLabel(): 'GOOD' GetCargoLabel(): 'GOOD'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1186,6 +1193,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 6 Cargo 6
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Grain'
GetCargoLabel(): 'GRAI' GetCargoLabel(): 'GRAI'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1197,6 +1205,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 7 Cargo 7
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Wood'
GetCargoLabel(): 'WOOD' GetCargoLabel(): 'WOOD'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1208,6 +1217,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 8 Cargo 8
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Iron Ore'
GetCargoLabel(): 'IORE' GetCargoLabel(): 'IORE'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1219,6 +1229,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 9 Cargo 9
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Steel'
GetCargoLabel(): 'STEL' GetCargoLabel(): 'STEL'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1230,6 +1241,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 10 Cargo 10
IsValidCargo(): true IsValidCargo(): true
GetName(): 'Valuables'
GetCargoLabel(): 'VALU' GetCargoLabel(): 'VALU'
IsFreight(): true IsFreight(): true
HasCargoClass(): false HasCargoClass(): false
@ -1241,6 +1253,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 11 Cargo 11
IsValidCargo(): false IsValidCargo(): false
GetName(): '(null : 0x00000000)'
GetCargoLabel(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)'
IsFreight(): false IsFreight(): false
HasCargoClass(): false HasCargoClass(): false
@ -1252,6 +1265,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 12 Cargo 12
IsValidCargo(): false IsValidCargo(): false
GetName(): '(null : 0x00000000)'
GetCargoLabel(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)'
IsFreight(): false IsFreight(): false
HasCargoClass(): false HasCargoClass(): false
@ -1263,6 +1277,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 13 Cargo 13
IsValidCargo(): false IsValidCargo(): false
GetName(): '(null : 0x00000000)'
GetCargoLabel(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)'
IsFreight(): false IsFreight(): false
HasCargoClass(): false HasCargoClass(): false
@ -1274,6 +1289,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRoadVehicleTypeForCargo(): 1 GetRoadVehicleTypeForCargo(): 1
Cargo 14 Cargo 14
IsValidCargo(): false IsValidCargo(): false
GetName(): '(null : 0x00000000)'
GetCargoLabel(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)'
IsFreight(): false IsFreight(): false
HasCargoClass(): false HasCargoClass(): false
@ -7314,7 +7330,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false IsBuoyTile(): false
IsLockTile(): false IsLockTile(): false
IsCanalTile(): false IsCanalTile(): false
GetBankBalance(): 1999979664 GetBankBalance(): 1999979304
BuildWaterDepot(): true BuildWaterDepot(): true
BuildDock(): true BuildDock(): true
BuildBuoy(): true BuildBuoy(): true
@ -7327,7 +7343,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): true IsBuoyTile(): true
IsLockTile(): true IsLockTile(): true
IsCanalTile(): true IsCanalTile(): true
GetBankBalance(): 1999965040 GetBankBalance(): 1999964680
--AIWaypointList(BUOY)-- --AIWaypointList(BUOY)--
Count(): 1 Count(): 1
@ -7346,7 +7362,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false IsBuoyTile(): false
IsLockTile(): false IsLockTile(): false
IsCanalTile(): false IsCanalTile(): false
GetBankBalance(): 1999959645 GetBankBalance(): 1999959285
BuildWaterDepot(): true BuildWaterDepot(): true
BuildDock(): true BuildDock(): true

@ -1,14 +1,9 @@
/* /*
* see copyright notice in squirrel.h * see copyright notice in squirrel.h
*/ */
/*
* Needs to be first due to a squirrel header defining type() and type()
* being used in some versions of the headers included by algorithm.
*/
#include "../../../stdafx.h" #include "../../../stdafx.h"
#include <algorithm>
#include "sqpcheader.h" #include "sqpcheader.h"
#include "sqvm.h" #include "sqvm.h"
#include "sqstring.h" #include "sqstring.h"

@ -39,7 +39,7 @@ AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config)
* This is necessary because the ScriptConfig constructor will instead call * This is necessary because the ScriptConfig constructor will instead call
* ScriptConfig::AddRandomDeviation(). */ * ScriptConfig::AddRandomDeviation(). */
int start_date = config->GetSetting("start_date"); int start_date = config->GetSetting("start_date");
this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0); this->SetSetting("start_date", start_date != 0 ? std::max(1, this->GetSetting("start_date")) : 0);
} }
/* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source) /* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source)
@ -134,5 +134,5 @@ void AIConfig::AddRandomDeviation()
/* start_date = 0 is a special case, where random deviation does not occur. /* start_date = 0 is a special case, where random deviation does not occur.
* If start_date was not already 0, then a minimum value of 1 must apply. */ * If start_date was not already 0, then a minimum value of 1 must apply. */
this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0); this->SetSetting("start_date", start_date != 0 ? std::max(1, this->GetSetting("start_date")) : 0);
} }

@ -247,7 +247,7 @@ struct AIListWindow : public Window {
this->vscroll->SetCount((int)this->info_list->size() + 1); this->vscroll->SetCount((int)this->info_list->size() + 1);
/* selected goes from -1 .. length of ai list - 1. */ /* selected goes from -1 .. length of ai list - 1. */
this->selected = min(this->selected, this->vscroll->GetCount() - 2); this->selected = std::min(this->selected, this->vscroll->GetCount() - 2);
} }
}; };
@ -360,7 +360,7 @@ struct AISettingsWindow : public Window {
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{ {
if (widget == WID_AIS_BACKGROUND) { if (widget == WID_AIS_BACKGROUND) {
this->line_height = max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; this->line_height = std::max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
resize->width = 1; resize->width = 1;
resize->height = this->line_height; resize->height = this->line_height;
@ -890,9 +890,9 @@ struct AIConfigWindow : public Window {
case WID_AIC_INCREASE: { case WID_AIC_INCREASE: {
int new_value; int new_value;
if (widget == WID_AIC_DECREASE) { if (widget == WID_AIC_DECREASE) {
new_value = max(0, GetGameSettings().difficulty.max_no_competitors - 1); new_value = std::max(0, GetGameSettings().difficulty.max_no_competitors - 1);
} else { } else {
new_value = min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1); new_value = std::min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1);
} }
IConsoleSetSetting("difficulty.max_no_competitors", new_value); IConsoleSetSetting("difficulty.max_no_competitors", new_value);
break; break;
@ -1187,7 +1187,7 @@ struct AIDebugWindow : public Window {
this->autoscroll = this->vscroll->GetPosition() >= log->used - this->vscroll->GetCapacity(); this->autoscroll = this->vscroll->GetPosition() >= log->used - this->vscroll->GetCapacity();
} }
if (this->autoscroll) { if (this->autoscroll) {
int scroll_pos = max(0, log->used - this->vscroll->GetCapacity()); int scroll_pos = std::max(0, log->used - this->vscroll->GetCapacity());
if (scroll_pos != this->vscroll->GetPosition()) { if (scroll_pos != this->vscroll->GetPosition()) {
this->vscroll->SetPosition(scroll_pos); this->vscroll->SetPosition(scroll_pos);

@ -668,7 +668,7 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE,
if (v->breakdown_ctr == 1 && v->breakdown_type == BREAKDOWN_AIRCRAFT_SPEED) { if (v->breakdown_ctr == 1 && v->breakdown_type == BREAKDOWN_AIRCRAFT_SPEED) {
const uint broken_speed = v->breakdown_severity << 3; const uint broken_speed = v->breakdown_severity << 3;
if (broken_speed < speed_limit) hard_limit = false; if (broken_speed < speed_limit) hard_limit = false;
speed_limit = min(speed_limit, broken_speed); speed_limit = std::min(speed_limit, broken_speed);
} }
if (v->vcache.cached_max_speed < speed_limit) { if (v->vcache.cached_max_speed < speed_limit) {
@ -685,10 +685,10 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE,
* speeds to that aircraft do not get to taxi speed straight after * speeds to that aircraft do not get to taxi speed straight after
* touchdown. */ * touchdown. */
if (!hard_limit && v->cur_speed > speed_limit) { if (!hard_limit && v->cur_speed > speed_limit) {
speed_limit = v->cur_speed - max(1, ((v->cur_speed * v->cur_speed) / 16384) / _settings_game.vehicle.plane_speed); speed_limit = v->cur_speed - std::max(1, ((v->cur_speed * v->cur_speed) / 16384) / _settings_game.vehicle.plane_speed);
} }
spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit); spd = std::min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit);
/* updates statusbar only if speed have changed to save CPU time */ /* updates statusbar only if speed have changed to save CPU time */
if (spd != v->cur_speed) { if (spd != v->cur_speed) {
@ -751,7 +751,7 @@ void GetAircraftFlightLevelBounds(const Vehicle *v, int *min_level, int *max_lev
} }
/* Make faster planes fly higher so that they can overtake slower ones */ /* Make faster planes fly higher so that they can overtake slower ones */
base_altitude += min(20 * (v->vcache.cached_max_speed / 200) - 90, 0); base_altitude += std::min(20 * (v->vcache.cached_max_speed / 200) - 90, 0);
if (min_level != nullptr) *min_level = base_altitude + AIRCRAFT_MIN_FLYING_ALTITUDE; if (min_level != nullptr) *min_level = base_altitude + AIRCRAFT_MIN_FLYING_ALTITUDE;
if (max_level != nullptr) *max_level = base_altitude + AIRCRAFT_MAX_FLYING_ALTITUDE; if (max_level != nullptr) *max_level = base_altitude + AIRCRAFT_MAX_FLYING_ALTITUDE;
@ -870,8 +870,6 @@ static void MaybeCrashAirplane(Aircraft *v);
*/ */
static bool AircraftController(Aircraft *v) static bool AircraftController(Aircraft *v)
{ {
int count;
/* nullptr if station is invalid */ /* nullptr if station is invalid */
const Station *st = Station::GetIfValid(v->targetairport); const Station *st = Station::GetIfValid(v->targetairport);
/* INVALID_TILE if there is no station */ /* INVALID_TILE if there is no station */
@ -931,7 +929,7 @@ static bool AircraftController(Aircraft *v)
} }
} else { } else {
u->cur_speed = 32; u->cur_speed = 32;
count = UpdateAircraftSpeed(v); int count = UpdateAircraftSpeed(v);
if (count > 0) { if (count > 0) {
v->tile = 0; v->tile = 0;
@ -943,7 +941,7 @@ static bool AircraftController(Aircraft *v)
v->cur_speed = 0; v->cur_speed = 0;
return true; return true;
} }
SetAircraftPosition(v, v->x_pos, v->y_pos, min(v->z_pos + count, z_dest)); SetAircraftPosition(v, v->x_pos, v->y_pos, std::min(v->z_pos + count, z_dest));
} }
} }
return false; return false;
@ -989,12 +987,12 @@ static bool AircraftController(Aircraft *v)
} }
u->cur_speed += 4; u->cur_speed += 4;
} else { } else {
count = UpdateAircraftSpeed(v); int count = UpdateAircraftSpeed(v);
if (count > 0) { if (count > 0) {
if (v->z_pos > z) { if (v->z_pos > z) {
SetAircraftPosition(v, v->x_pos, v->y_pos, max(v->z_pos - count, z)); SetAircraftPosition(v, v->x_pos, v->y_pos, std::max(v->z_pos - count, z));
} else { } else {
SetAircraftPosition(v, v->x_pos, v->y_pos, min(v->z_pos + count, z)); SetAircraftPosition(v, v->x_pos, v->y_pos, std::min(v->z_pos + count, z));
} }
} else { } else {
v->UpdatePosition(); v->UpdatePosition();
@ -1042,16 +1040,23 @@ static bool AircraftController(Aircraft *v)
if (amd.flag & AMED_LAND) { speed_limit = SPEED_LIMIT_APPROACH; hard_limit = false; } if (amd.flag & AMED_LAND) { speed_limit = SPEED_LIMIT_APPROACH; hard_limit = false; }
if (amd.flag & AMED_BRAKE) { speed_limit = SPEED_LIMIT_TAXI; hard_limit = false; } if (amd.flag & AMED_BRAKE) { speed_limit = SPEED_LIMIT_TAXI; hard_limit = false; }
count = UpdateAircraftSpeed(v, speed_limit, hard_limit); int count = UpdateAircraftSpeed(v, speed_limit, hard_limit);
if (count == 0) return false; if (count == 0) return false;
/* If the plane will be a few subpixels away from the destination after
* this movement loop, start nudging him towards the exact position for
* the whole loop. Otherwise, heavily depending on the speed of the plane,
* it is possible we totally overshoot the target, causing the plane to
* make a loop, and trying again, and again, and again .. */
bool nudge_towards_target = static_cast<uint>(count) + 3 > dist;
if (v->turn_counter != 0) v->turn_counter--; if (v->turn_counter != 0) v->turn_counter--;
do { do {
GetNewVehiclePosResult gp; GetNewVehiclePosResult gp;
if (dist < 4 || (amd.flag & AMED_LAND)) { if (nudge_towards_target || (amd.flag & AMED_LAND)) {
/* move vehicle one pixel towards target */ /* move vehicle one pixel towards target */
gp.x = (v->x_pos != (x + amd.x)) ? gp.x = (v->x_pos != (x + amd.x)) ?
v->x_pos + ((x + amd.x > v->x_pos) ? 1 : -1) : v->x_pos + ((x + amd.x > v->x_pos) ? 1 : -1) :
@ -1144,7 +1149,7 @@ static bool AircraftController(Aircraft *v)
/* We're not flying below our destination, right? */ /* We're not flying below our destination, right? */
assert(airport_z <= z); assert(airport_z <= z);
int t = max(1U, dist - 4); int t = std::max(1U, dist - 4);
int delta = z - airport_z; int delta = z - airport_z;
/* Only start lowering when we're sufficiently close for a 1:1 glide */ /* Only start lowering when we're sufficiently close for a 1:1 glide */
@ -1428,7 +1433,7 @@ static void MaybeCrashAirplane(Aircraft *v)
} }
if (_settings_game.vehicle.improved_breakdowns && v->breakdown_ctr == 1 && v->breakdown_type == BREAKDOWN_AIRCRAFT_EM_LANDING) { if (_settings_game.vehicle.improved_breakdowns && v->breakdown_ctr == 1 && v->breakdown_type == BREAKDOWN_AIRCRAFT_EM_LANDING) {
/* Airplanes that are attempting an emergency landing have a 2% chance to crash */ /* Airplanes that are attempting an emergency landing have a 2% chance to crash */
prob = max<uint32>(prob, 0x10000 / 50); prob = std::max<uint32>(prob, 0x10000 / 50);
} }
if (GB(Random(), 0, 22) > prob) return; if (GB(Random(), 0, 22) > prob) return;

@ -71,6 +71,7 @@ struct BuildAirToolbarWindow : Window {
BuildAirToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) BuildAirToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc)
{ {
this->InitNested(window_number); this->InitNested(window_number);
this->OnInvalidateData();
if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this); if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
this->last_user_action = WIDGET_LIST_END; this->last_user_action = WIDGET_LIST_END;
} }
@ -90,7 +91,18 @@ struct BuildAirToolbarWindow : Window {
{ {
if (!gui_scope) return; if (!gui_scope) return;
if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) delete this; bool can_build = CanBuildVehicleInfrastructure(VEH_AIRCRAFT);
this->SetWidgetsDisabledState(!can_build,
WID_AT_AIRPORT,
WIDGET_LIST_END);
if (!can_build) {
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_AIR);
/* Show in the tooltip why this button is disabled. */
this->GetWidget<NWidgetCore>(WID_AT_AIRPORT)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE);
} else {
this->GetWidget<NWidgetCore>(WID_AT_AIRPORT)->SetToolTip(STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP);
}
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, int widget, int click_count) override
@ -160,7 +172,7 @@ struct BuildAirToolbarWindow : Window {
*/ */
static EventState AirportToolbarGlobalHotkeys(int hotkey) static EventState AirportToolbarGlobalHotkeys(int hotkey)
{ {
if (_game_mode != GM_NORMAL || !CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) return ES_NOT_HANDLED; if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED;
Window *w = ShowBuildAirToolbar(); Window *w = ShowBuildAirToolbar();
if (w == nullptr) return ES_NOT_HANDLED; if (w == nullptr) return ES_NOT_HANDLED;
return w->OnHotkey(hotkey); return w->OnHotkey(hotkey);
@ -314,7 +326,7 @@ public:
const AirportSpec *as = AirportSpec::Get(i); const AirportSpec *as = AirportSpec::Get(i);
if (!as->enabled) continue; if (!as->enabled) continue;
size->width = max(size->width, GetStringBoundingBox(as->name).width); size->width = std::max(size->width, GetStringBoundingBox(as->name).width);
} }
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;

@ -21,6 +21,8 @@
#include "vehiclelist.h" #include "vehiclelist.h"
#include "road.h" #include "road.h"
#include "ai/ai.hpp" #include "ai/ai.hpp"
#include "news_func.h"
#include "strings_func.h"
#include "table/strings.h" #include "table/strings.h"
@ -116,7 +118,7 @@ void CheckCargoCapacity(Vehicle *v)
assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP)); assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
if (dest->cargo.TotalCount() >= dest->cargo_cap || dest->cargo_type != src->cargo_type) continue; if (dest->cargo.TotalCount() >= dest->cargo_cap || dest->cargo_type != src->cargo_type) continue;
uint amount = min(to_spread, dest->cargo_cap - dest->cargo.TotalCount()); uint amount = std::min(to_spread, dest->cargo_cap - dest->cargo.TotalCount());
src->cargo.Shift(amount, &dest->cargo); src->cargo.Shift(amount, &dest->cargo);
to_spread -= amount; to_spread -= amount;
} }
@ -158,7 +160,7 @@ static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chai
} }
if (dest->cargo_type != src->cargo_type) continue; if (dest->cargo_type != src->cargo_type) continue;
uint amount = min(src->cargo.TotalCount(), dest->cargo_cap - dest->cargo.TotalCount()); uint amount = std::min(src->cargo.TotalCount(), dest->cargo_cap - dest->cargo.TotalCount());
if (amount <= 0) continue; if (amount <= 0) continue;
src->cargo.Shift(amount, &dest->cargo); src->cargo.Shift(amount, &dest->cargo);
@ -192,6 +194,29 @@ static bool VerifyAutoreplaceRefitForOrders(const Vehicle *v, EngineID engine_ty
return true; return true;
} }
/**
* Gets the index of the first refit order that is incompatible with the requested engine type
* @param v The vehicle to be replaced
* @param engine_type The type we want to replace with
* @return index of the incompatible order or -1 if none were found
*/
static int GetIncompatibleRefitOrderIdForAutoreplace(const Vehicle *v, EngineID engine_type)
{
CargoTypes union_refit_mask = GetUnionOfArticulatedRefitMasks(engine_type, false);
const Order *o;
const Vehicle *u = (v->type == VEH_TRAIN) ? v->First() : v;
const OrderList *orders = u->orders.list;
for (VehicleOrderID i = 0; i < orders->GetNumOrders(); i++) {
o = orders->GetOrderAt(i);
if (!o->IsRefit()) continue;
if (!HasBit(union_refit_mask, o->GetRefitCargo())) return i;
}
return -1;
}
/** /**
* Function to find what type of cargo to refit to when autoreplacing * Function to find what type of cargo to refit to when autoreplacing
* @param *v Original vehicle that is being replaced. * @param *v Original vehicle that is being replaced.
@ -298,7 +323,23 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic
/* Does it need to be refitted */ /* Does it need to be refitted */
CargoID refit_cargo = GetNewCargoTypeForReplace(old_veh, e, part_of_chain); CargoID refit_cargo = GetNewCargoTypeForReplace(old_veh, e, part_of_chain);
if (refit_cargo == CT_INVALID) return CommandCost(); // incompatible cargoes if (refit_cargo == CT_INVALID) {
SetDParam(0, old_veh->index);
int order_id = GetIncompatibleRefitOrderIdForAutoreplace(old_veh, e);
if (order_id != -1) {
/* Orders contained a refit order that is incompatible with the new vehicle. */
SetDParam(1, STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT);
SetDParam(2, order_id + 1); // 1-based indexing for display
} else {
/* Current cargo is incompatible with the new vehicle. */
SetDParam(1, STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO);
SetDParam(2, CargoSpec::Get(old_veh->cargo_type)->name);
}
AddVehicleAdviceNewsItem(STR_NEWS_VEHICLE_AUTORENEW_FAILED, old_veh->index);
return CommandCost();
}
/* Build the new vehicle */ /* Build the new vehicle */
cost = DoCommand(old_veh->tile, e | (CT_INVALID << 24), 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh)); cost = DoCommand(old_veh->tile, e | (CT_INVALID << 24), 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh));

@ -416,8 +416,8 @@ public:
case WID_RV_LEFT_MATRIX: case WID_RV_LEFT_MATRIX:
case WID_RV_RIGHT_MATRIX: { case WID_RV_RIGHT_MATRIX: {
int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1; int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1;
EngineID start = this->vscroll[side]->GetPosition(); // what is the offset for the start (scrolling) EngineID start = static_cast<EngineID>(this->vscroll[side]->GetPosition()); // what is the offset for the start (scrolling)
EngineID end = min(this->vscroll[side]->GetCapacity() + start, (uint)this->engines[side].size()); EngineID end = static_cast<EngineID>(std::min<size_t>(this->vscroll[side]->GetCapacity() + start, this->engines[side].size()));
/* Do the actual drawing */ /* Do the actual drawing */
DrawEngineList((VehicleType)this->window_number, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, DrawEngineList((VehicleType)this->window_number, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP,
@ -475,7 +475,7 @@ public:
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS); NWidgetBase *nwi = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS);
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted); nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted);
needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
} }
} }
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.

@ -84,7 +84,7 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
dst = dst_end - skip_left; dst = dst_end - skip_left;
dst_end = dst + width; dst_end = dst + width;
n = min<uint>(n - d, (uint)width); n = std::min<uint>(n - d, (uint)width);
goto draw; goto draw;
} }
dst += n; dst += n;
@ -103,7 +103,7 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
if (fast_path) { if (fast_path) {
n = *src_n++; n = *src_n++;
} else { } else {
n = min<uint>(*src_n++, (uint)(dst_end - dst)); n = std::min<uint>(*src_n++, (uint)(dst_end - dst));
} }
if (src_px->a == 0) { if (src_px->a == 0) {

@ -58,7 +58,7 @@ void Blitter_32bppSSE2_Anim::PaletteAnimate(const Palette &palette)
if (unlikely(x < 8 || colour_cmp_result != 0xFFFF || if (unlikely(x < 8 || colour_cmp_result != 0xFFFF ||
_mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) { _mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) {
/* slow path: < 8 pixels left or unexpected brightnesses */ /* slow path: < 8 pixels left or unexpected brightnesses */
for (int z = min<int>(x, 8); z != 0 ; z--) { for (int z = std::min<int>(x, 8); z != 0 ; z--) {
int value = _mm_extract_epi16(data, 0); int value = _mm_extract_epi16(data, 0);
uint8 colour = GB(value, 0, 8); uint8 colour = GB(value, 0, 8);
if (colour >= PALETTE_ANIM_START) { if (colour >= PALETTE_ANIM_START) {

@ -199,9 +199,9 @@ Colour Blitter_32bppBase::ReallyAdjustBrightness(Colour colour, uint8 brightness
/* Reduce overbright strength */ /* Reduce overbright strength */
ob /= 2; ob /= 2;
return Colour( return Colour(
r >= 255 ? 255 : min(r + ob * (255 - r) / 256, 255), r >= 255 ? 255 : std::min(r + ob * (255 - r) / 256, 255),
g >= 255 ? 255 : min(g + ob * (255 - g) / 256, 255), g >= 255 ? 255 : std::min(g + ob * (255 - g) / 256, 255),
b >= 255 ? 255 : min(b + ob * (255 - b) / 256, 255), b >= 255 ? 255 : std::min(b + ob * (255 - b) / 256, 255),
colour.a); colour.a);
} }

@ -83,7 +83,7 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL
dst = dst_end - bp->skip_left; dst = dst_end - bp->skip_left;
dst_end = dst + bp->width; dst_end = dst + bp->width;
n = min<uint>(n - d, (uint)bp->width); n = std::min(n - d, (uint)bp->width);
goto draw; goto draw;
} }
dst += n; dst += n;
@ -98,7 +98,7 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL
dst_end += bp->width; dst_end += bp->width;
while (dst < dst_end) { while (dst < dst_end) {
n = min<uint>(*src_n++, (uint)(dst_end - dst)); n = std::min<uint>(*src_n++, dst_end - dst);
if (src_px->a == 0) { if (src_px->a == 0) {
dst += n; dst += n;
@ -278,7 +278,7 @@ Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloc
zoom_max = ZOOM_LVL_NORMAL; zoom_max = ZOOM_LVL_NORMAL;
} else { } else {
zoom_min = _settings_client.gui.zoom_min; zoom_min = _settings_client.gui.zoom_min;
zoom_max = (ZoomLevel) min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR); zoom_max = (ZoomLevel) std::min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR);
if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_DRAW_SPR; if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_DRAW_SPR;
} }
@ -330,7 +330,7 @@ Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloc
if (src->m >= PALETTE_ANIM_START) flags &= ~SF_NO_ANIM; if (src->m >= PALETTE_ANIM_START) flags &= ~SF_NO_ANIM;
/* Get brightest value */ /* Get brightest value */
uint8 rgb_max = max(src->r, max(src->g, src->b)); uint8 rgb_max = std::max({src->r, src->g, src->b});
/* Black pixel (8bpp or old 32bpp image), so use default value */ /* Black pixel (8bpp or old 32bpp image), so use default value */
if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS; if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS;

@ -132,7 +132,7 @@ Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::Sprite *sprite, Allocato
dst[i].v = 0; dst[i].v = 0;
} else { } else {
/* Get brightest value */ /* Get brightest value */
uint8 rgb_max = max(src->r, max(src->g, src->b)); uint8 rgb_max = std::max({src->r, src->g, src->b});
/* Black pixel (8bpp or old 32bpp image), so use default value */ /* Black pixel (8bpp or old 32bpp image), so use default value */
if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS; if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS;

@ -80,7 +80,7 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::Sprite *sprite, Alloca
if (src->m >= PALETTE_ANIM_START) has_anim = true; if (src->m >= PALETTE_ANIM_START) has_anim = true;
/* Get brightest value (or default brightness if it's a black pixel). */ /* Get brightest value (or default brightness if it's a black pixel). */
const uint8 rgb_max = max(src->r, max(src->g, src->b)); const uint8 rgb_max = std::max({src->r, src->g, src->b});
dst_mv->v = (rgb_max == 0) ? Blitter_32bppBase::DEFAULT_BRIGHTNESS : rgb_max; dst_mv->v = (rgb_max == 0) ? Blitter_32bppBase::DEFAULT_BRIGHTNESS : rgb_max;
/* Pre-convert the mapping channel to a RGB value. */ /* Pre-convert the mapping channel to a RGB value. */

@ -80,7 +80,7 @@ void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Z
dst += trans; dst += trans;
width -= trans; width -= trans;
if (width <= 0 || pixels == 0) continue; if (width <= 0 || pixels == 0) continue;
pixels = min<uint>(pixels, (uint)width); pixels = std::min<uint>(pixels, width);
width -= pixels; width -= pixels;
switch (mode) { switch (mode) {
@ -132,7 +132,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca
zoom_max = ZOOM_LVL_NORMAL; zoom_max = ZOOM_LVL_NORMAL;
} else { } else {
zoom_min = _settings_client.gui.zoom_min; zoom_min = _settings_client.gui.zoom_min;
zoom_max = (ZoomLevel) min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR); zoom_max = (ZoomLevel) std::min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR);
if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_DRAW_SPR; if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_DRAW_SPR;
} }

@ -45,7 +45,7 @@ void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, in
return; return;
} }
int frac_diff = width * max(dx, dy); int frac_diff = width * std::max(dx, dy);
if (width > 1) { if (width > 1) {
/* compute frac_diff = width * sqrt(dx*dx + dy*dy) /* compute frac_diff = width * sqrt(dx*dx + dy*dy)
* Start interval: * Start interval:

@ -200,7 +200,7 @@ public:
} }
sprite_dim.height++; // Sprite is rendered one pixel down in the matrix field. sprite_dim.height++; // Sprite is rendered one pixel down in the matrix field.
text_dim.height++; // Allowing the bottom row pixels to be rendered on the edge of the matrix field. text_dim.height++; // Allowing the bottom row pixels to be rendered on the edge of the matrix field.
resize->height = max(sprite_dim.height, text_dim.height) + 2; // Max of both sizes + account for matrix edges. resize->height = std::max(sprite_dim.height, text_dim.height) + 2; // Max of both sizes + account for matrix edges.
this->bridgetext_offset = WD_MATRIX_LEFT + sprite_dim.width + 1; // Left edge of text, 1 pixel distance from the sprite. this->bridgetext_offset = WD_MATRIX_LEFT + sprite_dim.width + 1; // Left edge of text, 1 pixel distance from the sprite.
size->width = this->bridgetext_offset + text_dim.width + WD_MATRIX_RIGHT; size->width = this->bridgetext_offset + text_dim.width + WD_MATRIX_RIGHT;

@ -46,7 +46,7 @@
*/ */
uint GetEngineListHeight(VehicleType type) uint GetEngineListHeight(VehicleType type)
{ {
return max<uint>(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height); return std::max<uint>(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height);
} }
static const NWidgetPart _nested_build_vehicle_widgets[] = { static const NWidgetPart _nested_build_vehicle_widgets[] = {
@ -1581,7 +1581,7 @@ struct BuildVehicleWindow : Window {
case WID_BV_LIST: case WID_BV_LIST:
resize->height = GetEngineListHeight(this->vehicle_type); resize->height = GetEngineListHeight(this->vehicle_type);
size->height = 3 * resize->height; size->height = 3 * resize->height;
size->width = max(size->width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165); size->width = std::max(size->width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165);
break; break;
case WID_BV_PANEL: case WID_BV_PANEL:
@ -1616,7 +1616,18 @@ struct BuildVehicleWindow : Window {
{ {
switch (widget) { switch (widget) {
case WID_BV_LIST: case WID_BV_LIST:
DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->eng_list.size()), this->sel_engine, false, DEFAULT_GROUP); DrawEngineList(
this->vehicle_type,
r.left + WD_FRAMERECT_LEFT,
r.right - WD_FRAMERECT_RIGHT,
r.top + WD_FRAMERECT_TOP,
&this->eng_list,
this->vscroll->GetPosition(),
static_cast<uint16>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size())),
this->sel_engine,
false,
DEFAULT_GROUP
);
break; break;
case WID_BV_SORT_ASCENDING_DESCENDING: case WID_BV_SORT_ASCENDING_DESCENDING:
@ -1644,7 +1655,7 @@ struct BuildVehicleWindow : Window {
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_BV_PANEL); NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_BV_PANEL);
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te); nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te);
needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
} }
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
int resize = needed_height - this->details_height; int resize = needed_height - this->details_height;

@ -742,7 +742,7 @@ uint VehicleCargoList::Reassign(uint max_move, TileOrStationID)
{ {
static_assert(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); static_assert(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER);
static_assert(Tfrom - Tto == 1 || Tto - Tfrom == 1); static_assert(Tfrom - Tto == 1 || Tto - Tfrom == 1);
max_move = min(this->action_counts[Tfrom], max_move); max_move = std::min(this->action_counts[Tfrom], max_move);
this->action_counts[Tfrom] -= max_move; this->action_counts[Tfrom] -= max_move;
this->action_counts[Tto] += max_move; this->action_counts[Tto] += max_move;
return max_move; return max_move;
@ -758,7 +758,7 @@ uint VehicleCargoList::Reassign(uint max_move, TileOrStationID)
template<> template<>
uint VehicleCargoList::Reassign<VehicleCargoList::MTA_DELIVER, VehicleCargoList::MTA_TRANSFER>(uint max_move, TileOrStationID next_station) uint VehicleCargoList::Reassign<VehicleCargoList::MTA_DELIVER, VehicleCargoList::MTA_TRANSFER>(uint max_move, TileOrStationID next_station)
{ {
max_move = min(this->action_counts[MTA_DELIVER], max_move); max_move = std::min(this->action_counts[MTA_DELIVER], max_move);
uint sum = 0; uint sum = 0;
for (Iterator it(this->packets.begin()); sum < this->action_counts[MTA_TRANSFER] + max_move;) { for (Iterator it(this->packets.begin()); sum < this->action_counts[MTA_TRANSFER] + max_move;) {
@ -791,7 +791,7 @@ uint VehicleCargoList::Reassign<VehicleCargoList::MTA_DELIVER, VehicleCargoList:
*/ */
uint VehicleCargoList::Return(uint max_move, StationCargoList *dest, StationID next) uint VehicleCargoList::Return(uint max_move, StationCargoList *dest, StationID next)
{ {
max_move = min(this->action_counts[MTA_LOAD], max_move); max_move = std::min(this->action_counts[MTA_LOAD], max_move);
this->PopCargo(CargoReturn(this, dest, max_move, next)); this->PopCargo(CargoReturn(this, dest, max_move, next));
return max_move; return max_move;
} }
@ -804,7 +804,7 @@ uint VehicleCargoList::Return(uint max_move, StationCargoList *dest, StationID n
*/ */
uint VehicleCargoList::Shift(uint max_move, VehicleCargoList *dest) uint VehicleCargoList::Shift(uint max_move, VehicleCargoList *dest)
{ {
max_move = min(this->count, max_move); max_move = std::min(this->count, max_move);
this->PopCargo(CargoShift(this, dest, max_move)); this->PopCargo(CargoShift(this, dest, max_move));
return max_move; return max_move;
} }
@ -821,12 +821,12 @@ uint VehicleCargoList::Unload(uint max_move, StationCargoList *dest, CargoPaymen
{ {
uint moved = 0; uint moved = 0;
if (this->action_counts[MTA_TRANSFER] > 0) { if (this->action_counts[MTA_TRANSFER] > 0) {
uint move = min(this->action_counts[MTA_TRANSFER], max_move); uint move = std::min(this->action_counts[MTA_TRANSFER], max_move);
this->ShiftCargo(CargoTransfer(this, dest, move)); this->ShiftCargo(CargoTransfer(this, dest, move));
moved += move; moved += move;
} }
if (this->action_counts[MTA_TRANSFER] == 0 && this->action_counts[MTA_DELIVER] > 0 && moved < max_move) { if (this->action_counts[MTA_TRANSFER] == 0 && this->action_counts[MTA_DELIVER] > 0 && moved < max_move) {
uint move = min(this->action_counts[MTA_DELIVER], max_move - moved); uint move = std::min(this->action_counts[MTA_DELIVER], max_move - moved);
this->ShiftCargo(CargoDelivery(this, move, payment)); this->ShiftCargo(CargoDelivery(this, move, payment));
moved += move; moved += move;
} }
@ -841,7 +841,7 @@ uint VehicleCargoList::Unload(uint max_move, StationCargoList *dest, CargoPaymen
*/ */
uint VehicleCargoList::Truncate(uint max_move) uint VehicleCargoList::Truncate(uint max_move)
{ {
max_move = min(this->count, max_move); max_move = std::min(this->count, max_move);
if (max_move > this->ActionCount(MTA_KEEP)) this->KeepAll(); if (max_move > this->ActionCount(MTA_KEEP)) this->KeepAll();
this->PopCargo(CargoRemoval<VehicleCargoList>(this, max_move)); this->PopCargo(CargoRemoval<VehicleCargoList>(this, max_move));
return max_move; return max_move;
@ -857,7 +857,7 @@ uint VehicleCargoList::Truncate(uint max_move)
*/ */
uint VehicleCargoList::Reroute(uint max_move, VehicleCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge) uint VehicleCargoList::Reroute(uint max_move, VehicleCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge)
{ {
max_move = min(this->action_counts[MTA_TRANSFER], max_move); max_move = std::min(this->action_counts[MTA_TRANSFER], max_move);
this->ShiftCargoWithFrontInsert(VehicleCargoReroute(this, dest, max_move, avoid, avoid2, ge)); this->ShiftCargoWithFrontInsert(VehicleCargoReroute(this, dest, max_move, avoid, avoid2, ge));
return max_move; return max_move;
} }
@ -965,7 +965,7 @@ uint StationCargoList::AvailableViaCount(StationID next) const
*/ */
uint StationCargoList::Truncate(uint max_move, StationCargoAmountMap *cargo_per_source) uint StationCargoList::Truncate(uint max_move, StationCargoAmountMap *cargo_per_source)
{ {
max_move = min(max_move, this->count); max_move = std::min(max_move, this->count);
uint prev_count = this->count; uint prev_count = this->count;
uint moved = 0; uint moved = 0;
uint loop = 0; uint loop = 0;
@ -1036,7 +1036,7 @@ uint StationCargoList::Reserve(uint max_move, VehicleCargoList *dest, TileIndex
*/ */
uint StationCargoList::Load(uint max_move, VehicleCargoList *dest, TileIndex load_place, StationIDStack next_station) uint StationCargoList::Load(uint max_move, VehicleCargoList *dest, TileIndex load_place, StationIDStack next_station)
{ {
uint move = min(dest->ActionCount(VehicleCargoList::MTA_LOAD), max_move); uint move = std::min(dest->ActionCount(VehicleCargoList::MTA_LOAD), max_move);
if (move > 0) { if (move > 0) {
this->reserved_count -= move; this->reserved_count -= move;
dest->Reassign<VehicleCargoList::MTA_LOAD, VehicleCargoList::MTA_KEEP>(move); dest->Reassign<VehicleCargoList::MTA_LOAD, VehicleCargoList::MTA_KEEP>(move);

@ -12,7 +12,6 @@
#include "newgrf_cargo.h" #include "newgrf_cargo.h"
#include "string_func.h" #include "string_func.h"
#include "strings_func.h" #include "strings_func.h"
#include <algorithm>
#include "table/sprites.h" #include "table/sprites.h"
#include "table/strings.h" #include "table/strings.h"

@ -216,12 +216,14 @@ static const NWidgetPart _nested_cheat_widgets[] = {
NWidget(WWT_STICKYBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY),
EndContainer(), EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY, WID_C_PANEL), SetDataTip(0x0, STR_CHEATS_TOOLTIP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_C_PANEL), SetDataTip(0x0, STR_CHEATS_TOOLTIP), EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_LABEL, COLOUR_GREY, WID_C_NOTE), SetFill(1, 1), SetDataTip(STR_CHEATS_NOTE, STR_NULL), SetPadding(WD_PAR_VSEP_NORMAL, 4, WD_PAR_VSEP_NORMAL, 4),
EndContainer(),
}; };
/** GUI for the cheats. */ /** GUI for the cheats. */
struct CheatWindow : Window { struct CheatWindow : Window {
int clicked; int clicked;
int header_height;
int clicked_widget; int clicked_widget;
uint line_height; uint line_height;
int box_width; int box_width;
@ -236,8 +238,7 @@ struct CheatWindow : Window {
{ {
if (widget != WID_C_PANEL) return; if (widget != WID_C_PANEL) return;
int y = r.top + WD_FRAMERECT_TOP + this->header_height; int y = r.top + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL;
DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, y, STR_CHEATS_WARNING, TC_FROMSTRING, SA_CENTER);
bool rtl = _current_text_dir == TD_RTL; bool rtl = _current_text_dir == TD_RTL;
uint box_left = rtl ? r.right - this->box_width - 5 : r.left + 5; uint box_left = rtl ? r.right - this->box_width - 5 : r.left + 5;
@ -324,9 +325,9 @@ struct CheatWindow : Window {
case SLE_BOOL: case SLE_BOOL:
SetDParam(0, STR_CONFIG_SETTING_ON); SetDParam(0, STR_CONFIG_SETTING_ON);
width = max(width, GetStringBoundingBox(ce->str).width); width = std::max(width, GetStringBoundingBox(ce->str).width);
SetDParam(0, STR_CONFIG_SETTING_OFF); SetDParam(0, STR_CONFIG_SETTING_OFF);
width = max(width, GetStringBoundingBox(ce->str).width); width = std::max(width, GetStringBoundingBox(ce->str).width);
break; break;
default: default:
@ -334,37 +335,36 @@ struct CheatWindow : Window {
/* Display date for change date cheat */ /* Display date for change date cheat */
case STR_CHEAT_CHANGE_DATE: case STR_CHEAT_CHANGE_DATE:
SetDParam(0, ConvertYMDToDate(MAX_YEAR, 11, 31)); SetDParam(0, ConvertYMDToDate(MAX_YEAR, 11, 31));
width = max(width, GetStringBoundingBox(ce->str).width); width = std::max(width, GetStringBoundingBox(ce->str).width);
break; break;
/* Draw coloured flag for change company cheat */ /* Draw coloured flag for change company cheat */
case STR_CHEAT_CHANGE_COMPANY: case STR_CHEAT_CHANGE_COMPANY:
SetDParamMaxValue(0, MAX_COMPANIES); SetDParamMaxValue(0, MAX_COMPANIES);
width = max(width, GetStringBoundingBox(ce->str).width + 10 + 10); width = std::max(width, GetStringBoundingBox(ce->str).width + 10 + 10);
break; break;
default: default:
SetDParam(0, INT64_MAX); SetDParam(0, INT64_MAX);
width = max(width, GetStringBoundingBox(ce->str).width); width = std::max(width, GetStringBoundingBox(ce->str).width);
break; break;
} }
break; break;
} }
} }
this->line_height = max(GetSpriteSize(SPR_BOX_CHECKED).height, GetSpriteSize(SPR_BOX_EMPTY).height); this->line_height = std::max(GetSpriteSize(SPR_BOX_CHECKED).height, GetSpriteSize(SPR_BOX_EMPTY).height);
this->line_height = max<uint>(this->line_height, SETTING_BUTTON_HEIGHT); this->line_height = std::max<uint>(this->line_height, SETTING_BUTTON_HEIGHT);
this->line_height = max<uint>(this->line_height, FONT_HEIGHT_NORMAL) + WD_PAR_VSEP_NORMAL; this->line_height = std::max<uint>(this->line_height, FONT_HEIGHT_NORMAL) + WD_PAR_VSEP_NORMAL;
size->width = width + 20 + this->box_width + SETTING_BUTTON_WIDTH /* stuff on the left */ + 10 /* extra spacing on right */; size->width = width + 20 + this->box_width + SETTING_BUTTON_WIDTH /* stuff on the left */ + 10 /* extra spacing on right */;
this->header_height = GetStringHeight(STR_CHEATS_WARNING, size->width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT) + WD_PAR_VSEP_WIDE; size->height = WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lines;
size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lines;
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, int widget, int click_count) override
{ {
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_C_PANEL); const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_C_PANEL);
uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height; uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - WD_PAR_VSEP_NORMAL) / this->line_height;
int x = pt.x - wid->pos_x; int x = pt.x - wid->pos_x;
bool rtl = _current_text_dir == TD_RTL; bool rtl = _current_text_dir == TD_RTL;
if (rtl) x = wid->current_x - x; if (rtl) x = wid->current_x - x;

@ -218,7 +218,7 @@ static void TileLoopClearAlps(TileIndex tile)
} }
/* Update snow density. */ /* Update snow density. */
uint current_density = GetClearDensity(tile); uint current_density = GetClearDensity(tile);
uint req_density = (k < 0) ? 0u : min((uint)k, 3); uint req_density = (k < 0) ? 0u : std::min<uint>(k, 3u);
if (current_density < req_density) { if (current_density < req_density) {
AddClearDensity(tile, 1); AddClearDensity(tile, 1);

@ -600,12 +600,12 @@ static void DumpSubCommandLog(char *&buffer, const char *last, const CommandLog
char *DumpCommandLog(char *buffer, const char *last) char *DumpCommandLog(char *buffer, const char *last)
{ {
const unsigned int count = min<unsigned int>(_command_log.count, 128); const unsigned int count = std::min<unsigned int>(_command_log.count, 128);
buffer += seprintf(buffer, last, "Command Log:\n Showing most recent %u of %u commands\n", count, _command_log.count); buffer += seprintf(buffer, last, "Command Log:\n Showing most recent %u of %u commands\n", count, _command_log.count);
DumpSubCommandLog(buffer, last, _command_log, count); DumpSubCommandLog(buffer, last, _command_log, count);
if (_command_log_aux.count > 0) { if (_command_log_aux.count > 0) {
const unsigned int aux_count = min<unsigned int>(_command_log_aux.count, 32); const unsigned int aux_count = std::min<unsigned int>(_command_log_aux.count, 32);
buffer += seprintf(buffer, last, "\n Showing most recent %u of %u commands (aux log)\n", aux_count, _command_log_aux.count); buffer += seprintf(buffer, last, "\n Showing most recent %u of %u commands (aux log)\n", aux_count, _command_log_aux.count);
DumpSubCommandLog(buffer, last, _command_log_aux, aux_count); DumpSubCommandLog(buffer, last, _command_log_aux, aux_count);
} }

@ -278,11 +278,11 @@ void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cst)
void UpdateLandscapingLimits() void UpdateLandscapingLimits()
{ {
for (Company *c : Company::Iterate()) { 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->terraform_limit = std::min(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint32)_settings_game.construction.terraform_frame_burst << 16);
c->clear_limit = min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16); c->clear_limit = std::min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16);
c->tree_limit = min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16); c->tree_limit = std::min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16);
c->purchase_land_limit = min(c->purchase_land_limit + _settings_game.construction.purchase_land_per_64k_frames, (uint32)_settings_game.construction.purchase_land_frame_burst << 16); c->purchase_land_limit = std::min(c->purchase_land_limit + _settings_game.construction.purchase_land_per_64k_frames, (uint32)_settings_game.construction.purchase_land_frame_burst << 16);
c->build_object_limit = min(c->build_object_limit + _settings_game.construction.build_object_per_64k_frames, (uint32)_settings_game.construction.build_object_frame_burst << 16); c->build_object_limit = std::min(c->build_object_limit + _settings_game.construction.build_object_per_64k_frames, (uint32)_settings_game.construction.build_object_frame_burst << 16);
} }
} }
@ -571,7 +571,7 @@ Company *DoStartupNewCompany(DoStartupNewCompanyFlag flags, CompanyID company)
ResetCompanyLivery(c); ResetCompanyLivery(c);
_company_colours[c->index] = (Colours)c->colour; _company_colours[c->index] = (Colours)c->colour;
c->money = c->current_loan = (min(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000; c->money = c->current_loan = (std::min<int64>(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000;
c->share_owners[0] = c->share_owners[1] = c->share_owners[2] = c->share_owners[3] = INVALID_OWNER; c->share_owners[0] = c->share_owners[1] = c->share_owners[2] = c->share_owners[3] = INVALID_OWNER;
@ -727,7 +727,7 @@ void OnTick_Companies()
if (_next_competitor_start == 0) { if (_next_competitor_start == 0) {
/* AI::GetStartNextTime() can return 0. */ /* AI::GetStartNextTime() can return 0. */
_next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS); _next_competitor_start = std::max(1, AI::GetStartNextTime() * DAY_TICKS);
} }
if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) { if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) {

@ -116,11 +116,11 @@ struct ExpensesList {
ExpensesType et = this->et[i]; ExpensesType et = this->et[i];
if (et == INVALID_EXPENSES) { if (et == INVALID_EXPENSES) {
if (!invalid_expenses_measured) { if (!invalid_expenses_measured) {
width = max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width); width = std::max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width);
invalid_expenses_measured = true; invalid_expenses_measured = true;
} }
} else { } else {
width = max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width); width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
} }
} }
return width; return width;
@ -281,7 +281,7 @@ struct CompanyFinancesWindow : Window {
CompanyFinancesWindow(WindowDesc *desc, CompanyID company) : Window(desc) CompanyFinancesWindow(WindowDesc *desc, CompanyID company) : Window(desc)
{ {
const Company *c = Company::Get(company); const Company *c = Company::Get(company);
this->max_money = max<Money>(abs(c->money) * 2, INT32_MAX); this->max_money = std::max<Money>(abs(c->money) * 2, INT32_MAX);
this->small = false; this->small = false;
this->CreateNestedTree(); this->CreateNestedTree();
this->SetupWidgets(); this->SetupWidgets();
@ -328,7 +328,7 @@ struct CompanyFinancesWindow : Window {
case WID_CF_LOAN_VALUE: case WID_CF_LOAN_VALUE:
case WID_CF_TOTAL_VALUE: case WID_CF_TOTAL_VALUE:
SetDParamMaxValue(0, this->max_money); SetDParamMaxValue(0, this->max_money);
size->width = max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; size->width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width;
break; break;
case WID_CF_MAXLOAN_GAP: case WID_CF_MAXLOAN_GAP:
@ -348,7 +348,7 @@ struct CompanyFinancesWindow : Window {
case WID_CF_EXPS_PRICE2: case WID_CF_EXPS_PRICE2:
case WID_CF_EXPS_PRICE3: { case WID_CF_EXPS_PRICE3: {
const Company *c = Company::Get((CompanyID)this->window_number); const Company *c = Company::Get((CompanyID)this->window_number);
int age = min(_cur_year - c->inaugurated_year, 2); int age = std::min(_cur_year - c->inaugurated_year, 2);
int wid_offset = widget - WID_CF_EXPS_PRICE1; int wid_offset = widget - WID_CF_EXPS_PRICE1;
if (wid_offset <= age) { if (wid_offset <= age) {
DrawYearColumn(r, _cur_year - (age - wid_offset), c->yearly_expenses + (age - wid_offset)); DrawYearColumn(r, _cur_year - (age - wid_offset), c->yearly_expenses + (age - wid_offset));
@ -461,7 +461,7 @@ struct CompanyFinancesWindow : Window {
{ {
const Company *c = Company::Get((CompanyID)this->window_number); const Company *c = Company::Get((CompanyID)this->window_number);
if (abs(c->money) > this->max_money) { if (abs(c->money) > this->max_money) {
this->max_money = max<Money>(abs(c->money) * 2, this->max_money * 4); this->max_money = std::max<Money>(abs(c->money) * 2, this->max_money * 4);
this->SetupWidgets(); this->SetupWidgets();
this->ReInit(); this->ReInit();
} }
@ -529,7 +529,7 @@ public:
uint Height(uint width) const override uint Height(uint width) const override
{ {
return max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2); return std::max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2);
} }
bool Selectable() const override bool Selectable() const override
@ -742,7 +742,7 @@ public:
/* Position scrollbar to selected group */ /* Position scrollbar to selected group */
for (uint i = 0; i < this->rows; i++) { for (uint i = 0; i < this->rows; i++) {
if (this->groups[i]->index == sel) { if (this->groups[i]->index == sel) {
this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0))); this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, std::max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0)));
break; break;
} }
} }
@ -766,14 +766,14 @@ public:
} }
} }
size->width = max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT); size->width = std::max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT);
break; break;
} }
case WID_SCL_MATRIX: { case WID_SCL_MATRIX: {
/* 11 items in the default rail class */ /* 11 items in the default rail class */
this->square = GetSpriteSize(SPR_SQUARE); this->square = GetSpriteSize(SPR_SQUARE);
this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4; this->line_height = std::max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4;
size->height = 11 * this->line_height; size->height = 11 * this->line_height;
resize->width = 1; resize->width = 1;
@ -792,9 +792,9 @@ public:
this->square = GetSpriteSize(SPR_SQUARE); this->square = GetSpriteSize(SPR_SQUARE);
int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10; int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10;
for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) { for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) {
size->width = max(size->width, GetStringBoundingBox(*id).width + padding); size->width = std::max(size->width, GetStringBoundingBox(*id).width + padding);
} }
size->width = max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding); size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding);
break; break;
} }
} }
@ -909,7 +909,7 @@ public:
} }
} }
} else { } else {
uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->groups.size()); uint max = static_cast<uint>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size()));
for (uint i = this->vscroll->GetPosition(); i < max; ++i) { for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
const Group *g = this->groups[i]; const Group *g = this->groups[i];
SetDParam(0, g->index); SetDParam(0, g->index);
@ -1391,7 +1391,7 @@ public:
number_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT + arrows_width; number_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT + arrows_width;
number_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; number_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
/* Compute width of both buttons. */ /* Compute width of both buttons. */
yesno_dim.width = max(yesno_dim.width, number_dim.width); yesno_dim.width = std::max(yesno_dim.width, number_dim.width);
number_dim.width = yesno_dim.width - arrows_width; number_dim.width = yesno_dim.width - arrows_width;
this->yesno_dim = yesno_dim; this->yesno_dim = yesno_dim;
@ -1403,8 +1403,8 @@ public:
switch (widget) { switch (widget) {
case WID_SCMF_FACE: { case WID_SCMF_FACE: {
Dimension face_size = GetSpriteSize(SPR_GRADIENT); Dimension face_size = GetSpriteSize(SPR_GRADIENT);
size->width = max(size->width, face_size.width); size->width = std::max(size->width, face_size.width);
size->height = max(size->height, face_size.height); size->height = std::max(size->height, face_size.height);
break; break;
} }
@ -1896,22 +1896,22 @@ struct CompanyInfrastructureWindow : Window
case WID_CI_RAIL_DESC: { case WID_CI_RAIL_DESC: {
uint lines = 1; // Starts at 1 because a line is also required for the section title uint lines = 1; // Starts at 1 because a line is also required for the section title
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width);
RailType rt; RailType rt;
FOR_ALL_SORTED_RAILTYPES(rt) { FOR_ALL_SORTED_RAILTYPES(rt) {
if (HasBit(this->railtypes, rt)) { if (HasBit(this->railtypes, rt)) {
lines++; lines++;
SetDParam(0, GetRailTypeInfo(rt)->strings.name); SetDParam(0, GetRailTypeInfo(rt)->strings.name);
size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT); size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
} }
} }
if (this->railtypes != RAILTYPES_NONE) { if (this->railtypes != RAILTYPES_NONE) {
lines++; lines++;
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + WD_FRAMERECT_LEFT); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + WD_FRAMERECT_LEFT);
} }
size->height = max(size->height, lines * FONT_HEIGHT_NORMAL); size->height = std::max(size->height, lines * FONT_HEIGHT_NORMAL);
break; break;
} }
@ -1919,30 +1919,30 @@ struct CompanyInfrastructureWindow : Window
case WID_CI_TRAM_DESC: { case WID_CI_TRAM_DESC: {
uint lines = 1; // Starts at 1 because a line is also required for the section title uint lines = 1; // Starts at 1 because a line is also required for the section title
size->width = max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width); size->width = std::max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width);
RoadType rt; RoadType rt;
FOR_ALL_SORTED_ROADTYPES(rt) { FOR_ALL_SORTED_ROADTYPES(rt) {
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) { if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
lines++; lines++;
SetDParam(0, GetRoadTypeInfo(rt)->strings.name); SetDParam(0, GetRoadTypeInfo(rt)->strings.name);
size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT); size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
} }
} }
size->height = max(size->height, lines * FONT_HEIGHT_NORMAL); size->height = std::max(size->height, lines * FONT_HEIGHT_NORMAL);
break; break;
} }
case WID_CI_WATER_DESC: case WID_CI_WATER_DESC:
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT);
break; break;
case WID_CI_STATION_DESC: case WID_CI_STATION_DESC:
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT);
break; break;
case WID_CI_RAIL_COUNT: case WID_CI_RAIL_COUNT:
@ -1956,24 +1956,24 @@ struct CompanyInfrastructureWindow : Window
Money max_cost = 10000; // Some random number to reserve enough space. Money max_cost = 10000; // Some random number to reserve enough space.
uint32 rail_total = c->infrastructure.GetRailTotal(); uint32 rail_total = c->infrastructure.GetRailTotal();
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) { for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) {
max_val = max(max_val, c->infrastructure.rail[rt]); max_val = std::max(max_val, c->infrastructure.rail[rt]);
max_cost = max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total)); max_cost = std::max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
} }
max_val = max(max_val, c->infrastructure.signal); max_val = std::max(max_val, c->infrastructure.signal);
max_cost = max(max_cost, SignalMaintenanceCost(c->infrastructure.signal)); max_cost = std::max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
uint32 road_total = c->infrastructure.GetRoadTotal(); uint32 road_total = c->infrastructure.GetRoadTotal();
uint32 tram_total = c->infrastructure.GetTramTotal(); uint32 tram_total = c->infrastructure.GetTramTotal();
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) { for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
max_val = max(max_val, c->infrastructure.road[rt]); max_val = std::max(max_val, c->infrastructure.road[rt]);
max_cost = max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total)); max_cost = std::max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total));
} }
max_val = max(max_val, c->infrastructure.water); max_val = std::max(max_val, c->infrastructure.water);
max_cost = max(max_cost, CanalMaintenanceCost(c->infrastructure.water)); max_cost = std::max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
max_val = max(max_val, c->infrastructure.station); max_val = std::max(max_val, c->infrastructure.station);
max_cost = max(max_cost, StationMaintenanceCost(c->infrastructure.station)); max_cost = std::max(max_cost, StationMaintenanceCost(c->infrastructure.station));
max_val = max(max_val, c->infrastructure.airport); max_val = std::max(max_val, c->infrastructure.airport);
max_cost = max(max_cost, AirportMaintenanceCost(c->index)); max_cost = std::max(max_cost, AirportMaintenanceCost(c->index));
SetDParamMaxValue(0, max_val); SetDParamMaxValue(0, max_val);
uint count_width = GetStringBoundingBox(STR_WHITE_COMMA).width + 20; // Reserve some wiggle room uint count_width = GetStringBoundingBox(STR_WHITE_COMMA).width + 20; // Reserve some wiggle room
@ -1981,17 +1981,17 @@ struct CompanyInfrastructureWindow : Window
if (_settings_game.economy.infrastructure_maintenance) { if (_settings_game.economy.infrastructure_maintenance) {
SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year
this->total_width = GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width + 20; this->total_width = GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width + 20;
size->width = max(size->width, this->total_width); size->width = std::max(size->width, this->total_width);
SetDParamMaxValue(0, max_cost * 12); // Convert to per year SetDParamMaxValue(0, max_cost * 12); // Convert to per year
count_width += max(this->total_width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width); count_width += std::max(this->total_width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width);
} }
size->width = max(size->width, count_width); size->width = std::max(size->width, count_width);
/* Set height of the total line. */ /* Set height of the total line. */
if (widget == WID_CI_TOTAL) { if (widget == WID_CI_TOTAL) {
size->height = _settings_game.economy.infrastructure_maintenance ? max(size->height, EXP_LINESPACE + FONT_HEIGHT_NORMAL) : 0; size->height = _settings_game.economy.infrastructure_maintenance ? std::max(size->height, EXP_LINESPACE + FONT_HEIGHT_NORMAL) : 0;
} }
break; break;
} }
@ -2385,8 +2385,8 @@ struct CompanyWindow : Window
switch (widget) { switch (widget) {
case WID_C_FACE: { case WID_C_FACE: {
Dimension face_size = GetSpriteSize(SPR_GRADIENT); Dimension face_size = GetSpriteSize(SPR_GRADIENT);
size->width = max(size->width, face_size.width); size->width = std::max(size->width, face_size.width);
size->height = max(size->height, face_size.height); size->height = std::max(size->height, face_size.height);
break; break;
} }
@ -2407,18 +2407,18 @@ struct CompanyWindow : Window
case WID_C_DESC_VEHICLE_COUNTS: case WID_C_DESC_VEHICLE_COUNTS:
SetDParamMaxValue(0, 5000); // Maximum number of vehicles SetDParamMaxValue(0, 5000); // Maximum number of vehicles
for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) { for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) {
size->width = max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width); size->width = std::max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width);
} }
break; break;
case WID_C_DESC_INFRASTRUCTURE_COUNTS: case WID_C_DESC_INFRASTRUCTURE_COUNTS:
SetDParamMaxValue(0, UINT_MAX); SetDParamMaxValue(0, UINT_MAX);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width);
break; break;
case WID_C_DESC_OWNERS: { case WID_C_DESC_OWNERS: {
@ -2426,7 +2426,7 @@ struct CompanyWindow : Window
SetDParamMaxValue(0, 75); SetDParamMaxValue(0, 75);
SetDParam(1, c2->index); SetDParam(1, c2->index);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_SHARES_OWNED_BY).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_SHARES_OWNED_BY).width);
} }
break; break;
} }
@ -2437,12 +2437,12 @@ struct CompanyWindow : Window
case WID_C_VIEW_INFRASTRUCTURE: case WID_C_VIEW_INFRASTRUCTURE:
case WID_C_COMPANY_PASSWORD: case WID_C_COMPANY_PASSWORD:
case WID_C_COMPANY_JOIN: case WID_C_COMPANY_JOIN:
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width);
break; break;

@ -1148,6 +1148,23 @@ DEF_CONSOLE_CMD(ConRestart)
return true; return true;
} }
DEF_CONSOLE_CMD(ConReload)
{
if (argc == 0) {
IConsoleHelp("Reload game. Usage: 'reload'");
IConsoleHelp("Reloads a game.");
IConsoleHelp(" * if you started from a savegame / scenario / heightmap, that exact same savegame / scenario / heightmap will be loaded.");
IConsoleHelp(" * if you started from a new game, this acts the same as 'restart'.");
return true;
}
/* Don't copy the _newgame pointers to the real pointers, so call SwitchToMode directly */
_settings_game.game_creation.map_x = MapLogX();
_settings_game.game_creation.map_y = FindFirstBit(MapSizeY());
_switch_mode = SM_RELOADGAME;
return true;
}
/** /**
* Print a text buffer line by line to the console. Lines are separated by '\n'. * Print a text buffer line by line to the console. Lines are separated by '\n'.
* @param buf The buffer to print. * @param buf The buffer to print.
@ -2596,8 +2613,8 @@ DEF_CONSOLE_CMD(ConViewportMarkDirty)
Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport; Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport;
uint l = strtoul(argv[1], nullptr, 0); uint l = strtoul(argv[1], nullptr, 0);
uint t = strtoul(argv[2], nullptr, 0); uint t = strtoul(argv[2], nullptr, 0);
uint r = min<uint>(l + ((argc > 3) ? strtoul(argv[3], nullptr, 0) : 1), vp->dirty_blocks_per_row); uint r = std::min<uint>(l + ((argc > 3) ? strtoul(argv[3], nullptr, 0) : 1), vp->dirty_blocks_per_row);
uint b = min<uint>(t + ((argc > 4) ? strtoul(argv[4], nullptr, 0) : 1), vp->dirty_blocks_per_column); uint b = std::min<uint>(t + ((argc > 4) ? strtoul(argv[4], nullptr, 0) : 1), vp->dirty_blocks_per_column);
for (uint x = l; x < r; x++) { for (uint x = l; x < r; x++) {
for (uint y = t; y < b; y++) { for (uint y = t; y < b; y++) {
vp->dirty_blocks[(x * vp->dirty_blocks_per_column) + y] = true; vp->dirty_blocks[(x * vp->dirty_blocks_per_column) + y] = true;
@ -2832,7 +2849,7 @@ DEF_CONSOLE_CMD(ConNewGRFProfile)
if (started > 0) { if (started > 0) {
IConsolePrintF(CC_DEBUG, "Started profiling for GRFID%s %s", (started > 1) ? "s" : "", grfids.c_str()); IConsolePrintF(CC_DEBUG, "Started profiling for GRFID%s %s", (started > 1) ? "s" : "", grfids.c_str());
if (argc >= 3) { if (argc >= 3) {
int days = max(atoi(argv[2]), 1); int days = std::max(atoi(argv[2]), 1);
_newgrf_profile_end_date = _date + days; _newgrf_profile_end_date = _date + days;
char datestrbuf[32]{ 0 }; char datestrbuf[32]{ 0 };
@ -3069,6 +3086,7 @@ void IConsoleStdLibRegister()
IConsoleCmdRegister("list_aliases", ConListAliases); IConsoleCmdRegister("list_aliases", ConListAliases);
IConsoleCmdRegister("newgame", ConNewGame); IConsoleCmdRegister("newgame", ConNewGame);
IConsoleCmdRegister("restart", ConRestart); IConsoleCmdRegister("restart", ConRestart);
IConsoleCmdRegister("reload", ConReload);
IConsoleCmdRegister("getseed", ConGetSeed); IConsoleCmdRegister("getseed", ConGetSeed);
IConsoleCmdRegister("getdate", ConGetDate); IConsoleCmdRegister("getdate", ConGetDate);
IConsoleCmdRegister("getsysdate", ConGetSysDate); IConsoleCmdRegister("getsysdate", ConGetSysDate);

@ -12,6 +12,7 @@
#include "window_gui.h" #include "window_gui.h"
#include "console_gui.h" #include "console_gui.h"
#include "console_internal.h" #include "console_internal.h"
#include "guitimer_func.h"
#include "window_func.h" #include "window_func.h"
#include "string_func.h" #include "string_func.h"
#include "strings_func.h" #include "strings_func.h"
@ -172,6 +173,7 @@ struct IConsoleWindow : Window
static int scroll; static int scroll;
int line_height; ///< Height of one line of text in the console. int line_height; ///< Height of one line of text in the console.
int line_offset; int line_offset;
GUITimer truncate_timer;
IConsoleWindow() : Window(&_console_window_desc) IConsoleWindow() : Window(&_console_window_desc)
{ {
@ -180,6 +182,7 @@ struct IConsoleWindow : Window
this->line_offset = GetStringBoundingBox("] ").width + 5; this->line_offset = GetStringBoundingBox("] ").width + 5;
this->InitNested(0); this->InitNested(0);
this->truncate_timer.SetInterval(3000);
ResizeWindow(this, _screen.width, _screen.height / 3); ResizeWindow(this, _screen.width, _screen.height / 3);
} }
@ -195,7 +198,7 @@ struct IConsoleWindow : Window
*/ */
void Scroll(int amount) void Scroll(int amount)
{ {
int max_scroll = max<int>(0, IConsoleLine::size + 1 - this->height / this->line_height); int max_scroll = std::max(0, IConsoleLine::size + 1 - this->height / this->line_height);
IConsoleWindow::scroll = Clamp<int>(IConsoleWindow::scroll + amount, 0, max_scroll); IConsoleWindow::scroll = Clamp<int>(IConsoleWindow::scroll + amount, 0, max_scroll);
this->SetDirty(); this->SetDirty();
} }
@ -228,11 +231,13 @@ struct IConsoleWindow : Window
} }
} }
void OnHundredthTick() override void OnRealtimeTick(uint delta_ms) override
{ {
if (this->truncate_timer.CountElapsed(delta_ms) == 0) return;
if (IConsoleLine::Truncate() && if (IConsoleLine::Truncate() &&
(IConsoleWindow::scroll > IConsoleLine::size)) { (IConsoleWindow::scroll > IConsoleLine::size)) {
IConsoleWindow::scroll = max(0, IConsoleLine::size - (this->height / this->line_height) + 1); IConsoleWindow::scroll = std::max(0, IConsoleLine::size - (this->height / this->line_height) + 1);
this->SetDirty(); this->SetDirty();
} }
} }
@ -346,7 +351,7 @@ struct IConsoleWindow : Window
Point GetCaretPosition() const override Point GetCaretPosition() const override
{ {
int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); int delta = std::min<int>(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
Point pt = {this->line_offset + delta + _iconsole_cmdline.caretxoffs, this->height - this->line_height}; Point pt = {this->line_offset + delta + _iconsole_cmdline.caretxoffs, this->height - this->line_height};
return pt; return pt;
@ -354,7 +359,7 @@ struct IConsoleWindow : Window
Rect GetTextBoundingRect(const char *from, const char *to) const override Rect GetTextBoundingRect(const char *from, const char *to) const override
{ {
int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); int delta = std::min<int>(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
Point p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL); Point p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL);
Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, from) : p1; Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, from) : p1;
@ -365,7 +370,7 @@ struct IConsoleWindow : Window
const char *GetTextCharacterAtPosition(const Point &pt) const override const char *GetTextCharacterAtPosition(const Point &pt) const override
{ {
int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); int delta = std::min<int>(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return nullptr; if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return nullptr;

@ -22,8 +22,8 @@
Dimension maxdim(const Dimension &d1, const Dimension &d2) Dimension maxdim(const Dimension &d1, const Dimension &d2)
{ {
Dimension d; Dimension d;
d.width = max(d1.width, d2.width); d.width = std::max(d1.width, d2.width);
d.height = max(d1.height, d2.height); d.height = std::max(d1.height, d2.height);
return d; return d;
} }

@ -12,7 +12,6 @@
#include "../stdafx.h" #include "../stdafx.h"
#include <vector> #include <vector>
#include <algorithm>
#include <limits> #include <limits>
/** /**
@ -261,7 +260,7 @@ class Kdtree {
best = SelectNearestNodeDistance(best, this->FindNearestRecursive(xy, next, level + 1)); best = SelectNearestNodeDistance(best, this->FindNearestRecursive(xy, next, level + 1));
} }
limit = min(best.second, limit); limit = std::min(best.second, limit);
/* Check if the distance from current best is worse than distance from target to splitting line, /* Check if the distance from current best is worse than distance from target to splitting line,
* if it is we also need to check the other side of the split. */ * if it is we also need to check the other side of the split. */

@ -10,66 +10,6 @@
#ifndef MATH_FUNC_HPP #ifndef MATH_FUNC_HPP
#define MATH_FUNC_HPP #define MATH_FUNC_HPP
/**
* Returns the maximum of two values.
*
* This function returns the greater value of two given values.
* If they are equal the value of a is returned.
*
* @param a The first value
* @param b The second value
* @return The greater value or a if equals
*/
template <typename T>
static inline T max(const T a, const T b)
{
return (a >= b) ? a : b;
}
/**
* Returns the minimum of two values.
*
* This function returns the smaller value of two given values.
* If they are equal the value of b is returned.
*
* @param a The first value
* @param b The second value
* @return The smaller value or b if equals
*/
template <typename T>
static inline T min(const T a, const T b)
{
return (a < b) ? a : b;
}
/**
* Returns the minimum of two integer.
*
* This function returns the smaller value of two given integers.
*
* @param a The first integer
* @param b The second integer
* @return The smaller value
*/
static inline int min(const int a, const int b)
{
return min<int>(a, b);
}
/**
* Returns the minimum of two unsigned integers.
*
* This function returns the smaller value of two given unsigned integers.
*
* @param a The first unsigned integer
* @param b The second unsigned integer
* @return The smaller value
*/
static inline uint minu(const uint a, const uint b)
{
return min<uint>(a, b);
}
/** /**
* Returns the absolute value of (scalar) variable. * Returns the absolute value of (scalar) variable.
* *
@ -239,7 +179,7 @@ static inline uint16 ClampToU16(const uint64 a)
* match for min(uint64, uint) than uint64 min(uint64, uint64). As such we * match for min(uint64, uint) than uint64 min(uint64, uint64). As such we
* need to cast the UINT16_MAX to prevent MSVC from displaying its * need to cast the UINT16_MAX to prevent MSVC from displaying its
* infinite loads of warnings. */ * infinite loads of warnings. */
return static_cast<uint16>(min<uint64>(a, static_cast<uint64>(UINT16_MAX))); return static_cast<uint16>(std::min(a, static_cast<uint64>(UINT16_MAX)));
} }
/** /**

@ -55,7 +55,7 @@ DEFINE_POOL_METHOD(inline void)::ResizeFor(size_t index)
assert(index >= this->size); assert(index >= this->size);
assert(index < Tmax_size); assert(index < Tmax_size);
size_t new_size = min(Tmax_size, Align(index + 1, max<uint>(64, Tgrowth_step))); size_t new_size = std::min(Tmax_size, Align(index + 1, std::max<uint>(64, Tgrowth_step)));
this->data = ReallocT(this->data, new_size); this->data = ReallocT(this->data, new_size);
MemSetT(this->data + this->size, 0, new_size - this->size); MemSetT(this->data + this->size, 0, new_size - this->size);
@ -111,7 +111,7 @@ DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index)
{ {
assert(this->data[index] == nullptr); assert(this->data[index] == nullptr);
this->first_unused = max(this->first_unused, index + 1); this->first_unused = std::max(this->first_unused, index + 1);
this->items++; this->items++;
Titem *item; Titem *item;
@ -200,7 +200,7 @@ DEFINE_POOL_METHOD(void)::FreeItem(size_t index)
} }
this->data[index] = nullptr; this->data[index] = nullptr;
ClrBit(this->free_bitmap[index / 64], index % 64); ClrBit(this->free_bitmap[index / 64], index % 64);
this->first_free = min(this->first_free, index); this->first_free = std::min(this->first_free, index);
this->items--; this->items--;
if (!this->cleaning) Titem::PostDestructor(index); if (!this->cleaning) Titem::PostDestructor(index);
} }

@ -234,7 +234,7 @@ public:
if (x * new_height > new_capacity) continue; if (x * new_height > new_capacity) continue;
(*copy)(new_data + (x - 1) * new_height, (*copy)(new_data + (x - 1) * new_height,
this->data + (x - 1) * this->height, this->data + (x - 1) * this->height,
min(this->height, new_height)); std::min(this->height, new_height));
} }
} else { } else {
/* If matrix is shrinking copy from the front. */ /* If matrix is shrinking copy from the front. */
@ -242,7 +242,7 @@ public:
if ((x + 1) * new_height > new_capacity) break; if ((x + 1) * new_height > new_capacity) break;
(*copy)(new_data + x * new_height, (*copy)(new_data + x * new_height,
this->data + x * this->height, this->data + x * this->height,
min(this->height, new_height)); std::min(this->height, new_height));
} }
} }
} }

@ -38,7 +38,7 @@ public:
if (index < Tmax_size) { if (index < Tmax_size) {
this->data[index].valid = true; this->data[index].valid = true;
this->first_free = index + 1; this->first_free = index + 1;
this->first_unused = max(this->first_unused, this->first_free); this->first_unused = std::max(this->first_unused, this->first_free);
} }
return index; return index;
} }
@ -50,7 +50,7 @@ public:
inline void Destroy(Tindex index) inline void Destroy(Tindex index)
{ {
this->data[index].valid = false; this->data[index].valid = false;
this->first_free = min(this->first_free, index); this->first_free = std::min(this->first_free, index);
} }
private: private:

@ -13,7 +13,6 @@
#include "alloc_func.hpp" #include "alloc_func.hpp"
#include "mem_func.hpp" #include "mem_func.hpp"
#include <vector> #include <vector>
#include <algorithm>
/** /**
* Helper function to append an item to a vector if it is not already contained * Helper function to append an item to a vector if it is not already contained

@ -376,7 +376,7 @@ char *CrashLog::LogRecentNews(char *buffer, const char *last) const
for (NewsItem *news = _latest_news; news != nullptr; news = news->prev) { for (NewsItem *news = _latest_news; news != nullptr; news = news->prev) {
total++; total++;
} }
uint show = min<uint>(total, 32); uint show = std::min<uint>(total, 32);
buffer += seprintf(buffer, last, "Recent news messages (%u of %u):\n", show, total); buffer += seprintf(buffer, last, "Recent news messages (%u of %u):\n", show, total);
int i = 0; int i = 0;

@ -37,8 +37,6 @@ YearMonthDay _game_load_cur_date_ymd;
DateFract _game_load_date_fract; DateFract _game_load_date_fract;
uint8 _game_load_tick_skip_counter; uint8 _game_load_tick_skip_counter;
int32 _old_ending_year_slv_105; ///< Old ending year for savegames before SLV_105
/** /**
* Set the date. * Set the date.
* @param date New date * @param date New date
@ -215,11 +213,13 @@ static void OnNewYear()
if (_cur_date_ymd.year == _settings_client.gui.semaphore_build_before) ResetSignalVariant(); if (_cur_date_ymd.year == _settings_client.gui.semaphore_build_before) ResetSignalVariant();
/* check if we reached end of the game (end of ending year) */ /* check if we reached end of the game (end of ending year); 0 = never */
if (_cur_date_ymd.year == _settings_game.game_creation.ending_year + 1) { if (_cur_date_ymd.year == _settings_game.game_creation.ending_year + 1 && _settings_game.game_creation.ending_year != 0) {
ShowEndGameChart(); ShowEndGameChart();
}
/* check if we reached the maximum year, decrement dates by a year */ /* check if we reached the maximum year, decrement dates by a year */
} else if (_cur_date_ymd.year == MAX_YEAR + 1) { if (_cur_date_ymd.year == MAX_YEAR + 1) {
int days_this_year; int days_this_year;
_cur_date_ymd.year--; _cur_date_ymd.year--;

@ -42,8 +42,8 @@ struct SetDateWindow : Window {
SetDateWindow(WindowDesc *desc, WindowNumber window_number, Window *parent, Date initial_date, Year min_year, Year max_year, SetDateCallback *callback) : SetDateWindow(WindowDesc *desc, WindowNumber window_number, Window *parent, Date initial_date, Year min_year, Year max_year, SetDateCallback *callback) :
Window(desc), Window(desc),
callback(callback), callback(callback),
min_year(max(MIN_YEAR, min_year)), min_year(std::max(MIN_YEAR, min_year)),
max_year(min(MAX_YEAR, max_year)) max_year(std::min(MAX_YEAR, max_year))
{ {
assert(this->min_year <= this->max_year); assert(this->min_year <= this->max_year);
this->parent = parent; this->parent = parent;

@ -335,7 +335,7 @@ char *DumpDesyncMsgLog(char *buffer, const char *last)
{ {
if (!desync_msg_log_count) return buffer; if (!desync_msg_log_count) return buffer;
const unsigned int count = min<unsigned int>(desync_msg_log_count, desync_msg_log.size()); const unsigned int count = std::min<unsigned int>(desync_msg_log_count, desync_msg_log.size());
unsigned int log_index = (desync_msg_log_next + desync_msg_log.size() - count) % desync_msg_log.size(); unsigned int log_index = (desync_msg_log_next + desync_msg_log.size() - count) % desync_msg_log.size();
unsigned int display_num = desync_msg_log_count - count; unsigned int display_num = desync_msg_log_count - count;

@ -491,7 +491,7 @@ public:
this->EnableWidget(WID_DB_SHOW_DEPS); this->EnableWidget(WID_DB_SHOW_DEPS);
} }
this->vscroll->SetCount(min(_settings_client.gui.max_departures, this->departures->size() + this->arrivals->size())); this->vscroll->SetCount(std::min<uint>(_settings_client.gui.max_departures, this->departures->size() + this->arrivals->size()));
this->DrawWidgets(); this->DrawWidgets();
} }
@ -548,9 +548,9 @@ void DeparturesWindow<Twaypoint>::RecomputeDateWidth()
cached_date_display_method = _settings_time.time_in_minutes; cached_date_display_method = _settings_time.time_in_minutes;
cached_arr_dep_display_method = _settings_client.gui.departure_show_both; cached_arr_dep_display_method = _settings_client.gui.departure_show_both;
cached_status_width = max((GetStringBoundingBox(STR_DEPARTURES_ON_TIME)).width, cached_status_width); cached_status_width = std::max((GetStringBoundingBox(STR_DEPARTURES_ON_TIME)).width, cached_status_width);
cached_status_width = max((GetStringBoundingBox(STR_DEPARTURES_DELAYED)).width, cached_status_width); cached_status_width = std::max((GetStringBoundingBox(STR_DEPARTURES_DELAYED)).width, cached_status_width);
cached_status_width = max((GetStringBoundingBox(STR_DEPARTURES_CANCELLED)).width, cached_status_width); cached_status_width = std::max((GetStringBoundingBox(STR_DEPARTURES_CANCELLED)).width, cached_status_width);
uint interval = cached_date_display_method ? _settings_time.ticks_per_minute : DAY_TICKS; uint interval = cached_date_display_method ? _settings_time.ticks_per_minute : DAY_TICKS;
uint count = cached_date_display_method ? 24*60 : 365; uint count = cached_date_display_method ? 24*60 : 365;
@ -558,8 +558,8 @@ void DeparturesWindow<Twaypoint>::RecomputeDateWidth()
for (uint i = 0; i < count; ++i) { for (uint i = 0; i < count; ++i) {
SetDParam(0, INT_MAX - (i*interval)); SetDParam(0, INT_MAX - (i*interval));
SetDParam(1, INT_MAX - (i*interval)); SetDParam(1, INT_MAX - (i*interval));
cached_date_width = max(GetStringBoundingBox(cached_arr_dep_display_method ? STR_DEPARTURES_TIME_BOTH : STR_DEPARTURES_TIME_DEP).width, cached_date_width); cached_date_width = std::max(GetStringBoundingBox(cached_arr_dep_display_method ? STR_DEPARTURES_TIME_BOTH : STR_DEPARTURES_TIME_DEP).width, cached_date_width);
cached_status_width = max((GetStringBoundingBox(STR_DEPARTURES_EXPECTED)).width, cached_status_width); cached_status_width = std::max((GetStringBoundingBox(STR_DEPARTURES_EXPECTED)).width, cached_status_width);
} }
SetDParam(0, 0); SetDParam(0, 0);
@ -623,7 +623,7 @@ void DeparturesWindow<Twaypoint>::DrawDeparturesListItems(const Rect &r) const
int text_right = right - (rtl ? text_offset : 0); int text_right = right - (rtl ? text_offset : 0);
int y = r.top + 1; int y = r.top + 1;
uint max_departures = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->departures->size() + this->arrivals->size()); uint max_departures = std::min<uint>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->departures->size() + this->arrivals->size());
if (max_departures > _settings_client.gui.max_departures) { if (max_departures > _settings_client.gui.max_departures) {
max_departures = _settings_client.gui.max_departures; max_departures = _settings_client.gui.max_departures;

@ -196,12 +196,12 @@ static void InitBlocksizeForVehicles(VehicleType type, EngineImageType image_typ
switch (image_type) { switch (image_type) {
case EIT_IN_DEPOT: case EIT_IN_DEPOT:
_base_block_sizes_depot[type].height = max<uint>(ScaleGUITrad(GetVehicleHeight(type)), max_height); _base_block_sizes_depot[type].height = std::max<uint>(ScaleGUITrad(GetVehicleHeight(type)), max_height);
_base_block_sizes_depot[type].extend_left = Clamp(max_extend_left, min_extend, max_extend); _base_block_sizes_depot[type].extend_left = Clamp(max_extend_left, min_extend, max_extend);
_base_block_sizes_depot[type].extend_right = Clamp(max_extend_right, min_extend, max_extend); _base_block_sizes_depot[type].extend_right = Clamp(max_extend_right, min_extend, max_extend);
break; break;
case EIT_PURCHASE: case EIT_PURCHASE:
_base_block_sizes_purchase[type].height = max<uint>(ScaleGUITrad(GetVehicleHeight(type)), max_height); _base_block_sizes_purchase[type].height = std::max<uint>(ScaleGUITrad(GetVehicleHeight(type)), max_height);
_base_block_sizes_purchase[type].extend_left = Clamp(max_extend_left, min_extend, max_extend); _base_block_sizes_purchase[type].extend_left = Clamp(max_extend_left, min_extend, max_extend);
_base_block_sizes_purchase[type].extend_right = Clamp(max_extend_right, min_extend, max_extend); _base_block_sizes_purchase[type].extend_right = Clamp(max_extend_right, min_extend, max_extend);
break; break;
@ -397,7 +397,7 @@ struct DepotWindow : Window {
uint16 rows_in_display = wid->current_y / wid->resize_y; uint16 rows_in_display = wid->current_y / wid->resize_y;
uint16 num = this->vscroll->GetPosition() * this->num_columns; uint16 num = this->vscroll->GetPosition() * this->num_columns;
int maxval = min((uint)this->vehicle_list.size(), num + (rows_in_display * this->num_columns)); uint maxval = static_cast<uint>(std::min<size_t>(this->vehicle_list.size(), num + (rows_in_display * this->num_columns)));
int y; int y;
for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows
for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) { for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) {
@ -412,7 +412,7 @@ struct DepotWindow : Window {
} }
} }
maxval = min((uint)this->vehicle_list.size() + (uint)this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)); maxval = static_cast<uint>(std::min<size_t>(this->vehicle_list.size() + this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)));
/* Draw the train wagons without an engine in front. */ /* Draw the train wagons without an engine in front. */
for (; num < maxval; num++, y += this->resize.step_height) { for (; num < maxval; num++, y += this->resize.step_height) {
@ -670,15 +670,15 @@ struct DepotWindow : Window {
this->flag_height = UnScaleGUI(spr->height); this->flag_height = UnScaleGUI(spr->height);
if (this->type == VEH_TRAIN || this->type == VEH_ROAD) { if (this->type == VEH_TRAIN || this->type == VEH_ROAD) {
min_height = max<uint>(unumber.height + WD_MATRIX_TOP, UnScaleGUI(spr->height)); min_height = std::max<uint>(unumber.height + WD_MATRIX_TOP, UnScaleGUI(spr->height));
this->header_width = unumber.width + this->flag_width + WD_FRAMERECT_LEFT; this->header_width = unumber.width + this->flag_width + WD_FRAMERECT_LEFT;
} else { } else {
min_height = unumber.height + UnScaleGUI(spr->height) + WD_MATRIX_TOP + WD_PAR_VSEP_NORMAL + WD_MATRIX_BOTTOM; min_height = unumber.height + UnScaleGUI(spr->height) + WD_MATRIX_TOP + WD_PAR_VSEP_NORMAL + WD_MATRIX_BOTTOM;
this->header_width = max<uint>(unumber.width, this->flag_width) + WD_FRAMERECT_RIGHT; this->header_width = std::max<uint>(unumber.width, this->flag_width) + WD_FRAMERECT_RIGHT;
} }
int base_width = this->count_width + this->header_width; int base_width = this->count_width + this->header_width;
resize->height = max<uint>(GetVehicleImageCellSize(this->type, EIT_IN_DEPOT).height, min_height); resize->height = std::max<uint>(GetVehicleImageCellSize(this->type, EIT_IN_DEPOT).height, min_height);
if (this->type == VEH_TRAIN) { if (this->type == VEH_TRAIN) {
resize->width = 1; resize->width = 1;
size->width = base_width + 2 * ScaleGUITrad(29); // about 2 parts size->width = base_width + 2 * ScaleGUITrad(29); // about 2 parts
@ -730,7 +730,7 @@ struct DepotWindow : Window {
for (const Train *v = Train::From(this->vehicle_list[num]); v != nullptr; v = v->Next()) { for (const Train *v = Train::From(this->vehicle_list[num]); v != nullptr; v = v->Next()) {
width += v->GetDisplayImageWidth(); width += v->GetDisplayImageWidth();
} }
max_width = max(max_width, width); max_width = std::max(max_width, width);
} }
/* Always have 1 empty row, so people can change the setting of the train */ /* Always have 1 empty row, so people can change the setting of the train */
this->vscroll->SetCount((uint)this->vehicle_list.size() + (uint)this->wagon_list.size() + 1); this->vscroll->SetCount((uint)this->vehicle_list.size() + (uint)this->wagon_list.size() + 1);

@ -214,7 +214,7 @@ void DisasterVehicle::UpdatePosition(int x, int y, int z)
int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE); int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
u->x_pos = x; u->x_pos = x;
u->y_pos = y - 1 - (max(z - GetSlopePixelZ(safe_x, safe_y), 0) >> 3); u->y_pos = y - 1 - (std::max(z - GetSlopePixelZ(safe_x, safe_y), 0) >> 3);
safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE); safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE);
u->z_pos = GetSlopePixelZ(safe_x, safe_y); u->z_pos = GetSlopePixelZ(safe_x, safe_y);
u->direction = this->direction; u->direction = this->direction;

@ -72,7 +72,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = n
/* Direction the aqueduct is built to. */ /* Direction the aqueduct is built to. */
TileIndexDiff offset = TileOffsByDiagDir(ReverseDiagDir(dir)); TileIndexDiff offset = TileOffsByDiagDir(ReverseDiagDir(dir));
/* The maximum length of the aqueduct. */ /* The maximum length of the aqueduct. */
int max_length = min(_settings_game.construction.max_bridge_length, DistanceFromEdgeDir(tile_from, ReverseDiagDir(dir)) - 1); int max_length = std::min<int>(_settings_game.construction.max_bridge_length, DistanceFromEdgeDir(tile_from, ReverseDiagDir(dir)) - 1);
TileIndex endtile = tile_from; TileIndex endtile = tile_from;
for (int length = 0; IsValidTile(endtile) && TileX(endtile) != 0 && TileY(endtile) != 0; length++) { for (int length = 0; IsValidTile(endtile) && TileX(endtile) != 0 && TileY(endtile) != 0; length++) {
@ -127,6 +127,19 @@ struct BuildDocksToolbarWindow : Window {
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_WATER); DeleteWindowById(WC_BUILD_STATION, TRANSPORT_WATER);
DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER); DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER);
} }
if (_game_mode != GM_EDITOR) {
if (!can_build) {
/* Show in the tooltip why this button is disabled. */
this->GetWidget<NWidgetCore>(WID_DT_DEPOT)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE);
this->GetWidget<NWidgetCore>(WID_DT_STATION)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE);
this->GetWidget<NWidgetCore>(WID_DT_BUOY)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE);
} else {
this->GetWidget<NWidgetCore>(WID_DT_DEPOT)->SetToolTip(STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP);
this->GetWidget<NWidgetCore>(WID_DT_STATION)->SetToolTip(STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP);
this->GetWidget<NWidgetCore>(WID_DT_BUOY)->SetToolTip(STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP);
}
}
} }
void OnClick(Point pt, int widget, int click_count) override void OnClick(Point pt, int widget, int click_count) override
@ -145,17 +158,14 @@ struct BuildDocksToolbarWindow : Window {
break; break;
case WID_DT_DEPOT: // Build depot button case WID_DT_DEPOT: // Build depot button
if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
if (HandlePlacePushButton(this, WID_DT_DEPOT, SPR_CURSOR_SHIP_DEPOT, HT_RECT)) ShowBuildDocksDepotPicker(this); if (HandlePlacePushButton(this, WID_DT_DEPOT, SPR_CURSOR_SHIP_DEPOT, HT_RECT)) ShowBuildDocksDepotPicker(this);
break; break;
case WID_DT_STATION: // Build station button case WID_DT_STATION: // Build station button
if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
if (HandlePlacePushButton(this, WID_DT_STATION, SPR_CURSOR_DOCK, HT_SPECIAL)) ShowBuildDockStationPicker(this); if (HandlePlacePushButton(this, WID_DT_STATION, SPR_CURSOR_DOCK, HT_SPECIAL)) ShowBuildDockStationPicker(this);
break; break;
case WID_DT_BUOY: // Build buoy button case WID_DT_BUOY: // Build buoy button
if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT); HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT);
break; break;

@ -142,7 +142,7 @@ Money CalculateCompanyValue(const Company *c, bool including_loan)
if (including_loan) value -= c->current_loan; if (including_loan) value -= c->current_loan;
value += c->money; value += c->money;
return max(value, (Money)1); return std::max<Money>(value, 1);
} }
/** /**
@ -201,15 +201,15 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Generate statistics depending on recent income statistics */ /* Generate statistics depending on recent income statistics */
{ {
int numec = min(c->num_valid_stat_ent, 12); int numec = std::min<uint>(c->num_valid_stat_ent, 12u);
if (numec != 0) { if (numec != 0) {
const CompanyEconomyEntry *cee = c->old_economy; const CompanyEconomyEntry *cee = c->old_economy;
Money min_income = cee->income + cee->expenses; Money min_income = cee->income + cee->expenses;
Money max_income = cee->income + cee->expenses; Money max_income = cee->income + cee->expenses;
do { do {
min_income = min(min_income, cee->income + cee->expenses); min_income = std::min(min_income, cee->income + cee->expenses);
max_income = max(max_income, cee->income + cee->expenses); max_income = std::max(max_income, cee->income + cee->expenses);
} while (++cee, --numec); } while (++cee, --numec);
if (min_income > 0) { if (min_income > 0) {
@ -222,7 +222,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Generate score depending on amount of transported cargo */ /* Generate score depending on amount of transported cargo */
{ {
int numec = min(c->num_valid_stat_ent, 4); int numec = std::min<uint>(c->num_valid_stat_ent, 4u);
if (numec != 0) { if (numec != 0) {
const CompanyEconomyEntry *cee = c->old_economy; const CompanyEconomyEntry *cee = c->old_economy;
OverflowSafeInt64 total_delivered = 0; OverflowSafeInt64 total_delivered = 0;
@ -370,7 +370,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (HasBit(t->have_ratings, old_owner)) { if (HasBit(t->have_ratings, old_owner)) {
if (HasBit(t->have_ratings, new_owner)) { if (HasBit(t->have_ratings, new_owner)) {
/* use max of the two ratings. */ /* use max of the two ratings. */
t->ratings[new_owner] = max(t->ratings[new_owner], t->ratings[old_owner]); t->ratings[new_owner] = std::max(t->ratings[new_owner], t->ratings[old_owner]);
} else { } else {
SetBit(t->have_ratings, new_owner); SetBit(t->have_ratings, new_owner);
t->ratings[new_owner] = t->ratings[old_owner]; t->ratings[new_owner] = t->ratings[old_owner];
@ -961,12 +961,12 @@ void StartupEconomy()
{ {
_economy.interest_rate = _settings_game.difficulty.initial_interest; _economy.interest_rate = _settings_game.difficulty.initial_interest;
_economy.infl_amount = _settings_game.difficulty.initial_interest; _economy.infl_amount = _settings_game.difficulty.initial_interest;
_economy.infl_amount_pr = max(0, _settings_game.difficulty.initial_interest - 1); _economy.infl_amount_pr = std::max(0, _settings_game.difficulty.initial_interest - 1);
_economy.fluct = GB(Random(), 0, 8) + 168; _economy.fluct = GB(Random(), 0, 8) + 168;
if (_settings_game.economy.inflation && _settings_game.economy.inflation_fixed_dates) { if (_settings_game.economy.inflation && _settings_game.economy.inflation_fixed_dates) {
/* Apply inflation that happened before our game start year. */ /* Apply inflation that happened before our game start year. */
int months = (min(_cur_year, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR) * 12; int months = (std::min(_cur_year, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR) * 12;
for (int i = 0; i < months; i++) { for (int i = 0; i < months; i++) {
AddInflation(false); AddInflation(false);
} }
@ -1023,7 +1023,7 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C
/* Use callback to calculate cargo profit, if available */ /* Use callback to calculate cargo profit, if available */
if (HasBit(cs->callback_mask, CBM_CARGO_PROFIT_CALC)) { if (HasBit(cs->callback_mask, CBM_CARGO_PROFIT_CALC)) {
uint32 var18 = min(dist, 0xFFFF) | (min(num_pieces, 0xFF) << 16) | (transit_days << 24); uint32 var18 = std::min(dist, 0xFFFFu) | (std::min(num_pieces, 0xFFu) << 16) | (transit_days << 24);
uint16 callback = GetCargoCallback(CBID_CARGO_PROFIT_CALC, 0, var18, cs); uint16 callback = GetCargoCallback(CBID_CARGO_PROFIT_CALC, 0, var18, cs);
if (callback != CALLBACK_FAILED) { if (callback != CALLBACK_FAILED) {
int result = GB(callback, 0, 14); int result = GB(callback, 0, 14);
@ -1043,8 +1043,8 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C
const int days1 = cs->transit_days[0]; const int days1 = cs->transit_days[0];
const int days2 = cs->transit_days[1]; const int days2 = cs->transit_days[1];
const int days_over_days1 = max( transit_days - days1, 0); const int days_over_days1 = std::max( transit_days - days1, 0);
const int days_over_days2 = max(days_over_days1 - days2, 0); const int days_over_days2 = std::max(days_over_days1 - days2, 0);
/* /*
* The time factor is calculated based on the time it took * The time factor is calculated based on the time it took
@ -1056,7 +1056,7 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C
* - linear decreasing with time with a slope of -2 for slow transports * - linear decreasing with time with a slope of -2 for slow transports
* *
*/ */
const int time_factor = max(MAX_TIME_FACTOR - days_over_days1 - days_over_days2, MIN_TIME_FACTOR); const int time_factor = std::max(MAX_TIME_FACTOR - days_over_days1 - days_over_days2, MIN_TIME_FACTOR);
return BigMulS(dist * time_factor * num_pieces, cs->current_payment, 21); return BigMulS(dist * time_factor * num_pieces, cs->current_payment, 21);
} }
@ -1105,7 +1105,7 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
/* Insert the industry into _cargo_delivery_destinations, if not yet contained */ /* Insert the industry into _cargo_delivery_destinations, if not yet contained */
include(_cargo_delivery_destinations, ind); include(_cargo_delivery_destinations, ind);
uint amount = min(num_pieces, 0xFFFFU - ind->incoming_cargo_waiting[cargo_index]); uint amount = std::min(num_pieces, 0xFFFFu - ind->incoming_cargo_waiting[cargo_index]);
ind->incoming_cargo_waiting[cargo_index] += amount; ind->incoming_cargo_waiting[cargo_index] += amount;
ind->last_cargo_accepted_at[cargo_index] = _date; ind->last_cargo_accepted_at[cargo_index] = _date;
num_pieces -= amount; num_pieces -= amount;
@ -1200,7 +1200,7 @@ static void TriggerIndustryProduction(Industry *i)
if (cargo_waiting == 0) continue; if (cargo_waiting == 0) continue;
for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting); ci_out++) { for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting); ci_out++) {
i->produced_cargo_waiting[ci_out] = min(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256), 0xFFFF); i->produced_cargo_waiting[ci_out] = std::min(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256), 0xFFFFu);
} }
i->incoming_cargo_waiting[ci_in] = 0; i->incoming_cargo_waiting[ci_in] = 0;
@ -1402,7 +1402,7 @@ static uint GetLoadAmount(Vehicle *v)
if (HasBit(e->info.misc_flags, EF_NO_DEFAULT_CARGO_MULTIPLIER) && !air_mail) load_amount = CeilDiv(load_amount * CargoSpec::Get(v->cargo_type)->multiplier, 0x100); if (HasBit(e->info.misc_flags, EF_NO_DEFAULT_CARGO_MULTIPLIER) && !air_mail) load_amount = CeilDiv(load_amount * CargoSpec::Get(v->cargo_type)->multiplier, 0x100);
/* Zero load amount breaks a lot of things. */ /* Zero load amount breaks a lot of things. */
return max(1u, load_amount); return std::max(1u, load_amount);
} }
/** /**
@ -1726,7 +1726,7 @@ static void UpdateLoadUnloadTicks(Vehicle *front, const Station *st, int ticks,
} }
} }
/* Always wait at least 1, otherwise we'll wait 'infinitively' long. */ /* Always wait at least 1, otherwise we'll wait 'infinitively' long. */
front->load_unload_ticks = max(1, ticks); front->load_unload_ticks = std::max(1, ticks);
} }
/** /**
@ -1873,7 +1873,7 @@ static void LoadUnloadVehicle(Vehicle *front)
if (HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) && (GetUnloadType(v) & OUFB_NO_UNLOAD) == 0) { if (HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) && (GetUnloadType(v) & OUFB_NO_UNLOAD) == 0) {
uint cargo_count = v->cargo.UnloadCount(); uint cargo_count = v->cargo.UnloadCount();
uint amount_unloaded = _settings_game.order.gradual_loading ? min(cargo_count, GetLoadAmount(v)) : cargo_count; uint amount_unloaded = _settings_game.order.gradual_loading ? std::min(cargo_count, GetLoadAmount(v)) : cargo_count;
bool remaining = false; // Are there cargo entities in this vehicle that can still be unloaded here? bool remaining = false; // Are there cargo entities in this vehicle that can still be unloaded here?
assert(payment != nullptr); assert(payment != nullptr);
@ -1976,8 +1976,8 @@ static void LoadUnloadVehicle(Vehicle *front)
} }
/* if last speed is 0, we treat that as if no vehicle has ever visited the station. */ /* 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_speed = std::min(t, 255);
ge->last_age = min(_cur_year - front->build_year, 255); ge->last_age = std::min(_cur_year - front->build_year, 255);
assert(v->cargo_cap >= v->cargo.StoredCount()); assert(v->cargo_cap >= v->cargo.StoredCount());
/* Capacity available for loading more cargo. */ /* Capacity available for loading more cargo. */
@ -1991,7 +1991,7 @@ static void LoadUnloadVehicle(Vehicle *front)
* has capacity for it, load it on 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.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) {
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v)); if (_settings_game.order.gradual_loading) cap_left = std::min(cap_left, GetLoadAmount(v));
uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy, next_station.Get(v->cargo_type)); 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) { if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) {
@ -2095,7 +2095,7 @@ static void LoadUnloadVehicle(Vehicle *front)
/* We loaded less cargo than possible for all cargo types and it's not full /* We loaded less cargo than possible for all cargo types and it's not full
* load and we're not supposed to wait any longer: stop loading. */ * load and we're not supposed to wait any longer: stop loading. */
if (!anything_unloaded && full_load_amount == 0 && reservation_left == 0 && full_load_cargo_mask == 0 && if (!anything_unloaded && full_load_amount == 0 && reservation_left == 0 && full_load_cargo_mask == 0 &&
(front->current_order_time >= (uint)max<int>(front->current_order.GetTimetabledWait() - front->lateness_counter, 0) || (front->current_order_time >= (uint)std::max<int>(front->current_order.GetTimetabledWait() - front->lateness_counter, 0) ||
may_leave_early())) { may_leave_early())) {
SetBit(front->vehicle_flags, VF_STOP_LOADING); SetBit(front->vehicle_flags, VF_STOP_LOADING);
if (may_leave_early()) { if (may_leave_early()) {

@ -262,7 +262,8 @@ static int GetPCPElevation(TileIndex tile, DiagDirection PCPpos)
* Also note that the result of GetSlopePixelZ() is very special on bridge-ramps. * Also note that the result of GetSlopePixelZ() is very special on bridge-ramps.
*/ */
int z = GetSlopePixelZ(TileX(tile) * TILE_SIZE + min(x_pcp_offsets[PCPpos], TILE_SIZE - 1), TileY(tile) * TILE_SIZE + min(y_pcp_offsets[PCPpos], TILE_SIZE - 1)); int z = GetSlopePixelZ(TileX(tile) * TILE_SIZE + std::min<int8>(x_pcp_offsets[PCPpos], TILE_SIZE - 1),
TileY(tile) * TILE_SIZE + std::min<int8>(y_pcp_offsets[PCPpos], TILE_SIZE - 1));
return (z + 2) & ~3; // this means z = (z + TILE_HEIGHT / 4) / (TILE_HEIGHT / 2) * (TILE_HEIGHT / 2); return (z + 2) & ~3; // this means z = (z + TILE_HEIGHT / 4) / (TILE_HEIGHT / 2) * (TILE_HEIGHT / 2);
} }

@ -600,7 +600,7 @@ static void CalcEngineReliability(Engine *e)
/* Check for early retirement */ /* Check for early retirement */
if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) { if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) {
int retire_early = e->info.retire_early; int retire_early = e->info.retire_early;
uint retire_early_max_age = max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12); uint retire_early_max_age = std::max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12);
if (retire_early != 0 && age >= retire_early_max_age) { if (retire_early != 0 && age >= retire_early_max_age) {
/* Early retirement is enabled and we're past the date... */ /* Early retirement is enabled and we're past the date... */
RetireEngineIfPossible(e, retire_early_max_age); RetireEngineIfPossible(e, retire_early_max_age);
@ -645,7 +645,7 @@ void SetYearEngineAgingStops()
YearMonthDay ymd; YearMonthDay ymd;
ConvertDateToYMD(ei->base_intro + (ei->lifelength * DAYS_IN_LEAP_YEAR) / 2, &ymd); ConvertDateToYMD(ei->base_intro + (ei->lifelength * DAYS_IN_LEAP_YEAR) / 2, &ymd);
_year_engine_aging_stops = max(_year_engine_aging_stops, ymd.year); _year_engine_aging_stops = std::max(_year_engine_aging_stops, ymd.year);
} }
} }
@ -713,7 +713,7 @@ void StartupOneEngine(Engine *e, Date aging_date)
void StartupEngines() void StartupEngines()
{ {
/* Aging of vehicles stops, so account for that when starting late */ /* Aging of vehicles stops, so account for that when starting late */
const Date aging_date = min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1)); const Date aging_date = std::min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1));
for (Engine *e : Engine::Iterate()) { for (Engine *e : Engine::Iterate()) {
StartupOneEngine(e, aging_date); StartupOneEngine(e, aging_date);
@ -755,6 +755,7 @@ static void EnableEngineForCompany(EngineID eid, CompanyID company)
InvalidateWindowData(WC_MAIN_TOOLBAR, 0); InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD); if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD);
if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER); if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER);
if (e->type == VEH_AIRCRAFT) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_AIR);
} }
} }
@ -1038,6 +1039,7 @@ static void NewVehicleAvailable(Engine *e)
/* Update the toolbar. */ /* Update the toolbar. */
if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD); if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD);
if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER); if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER);
if (e->type == VEH_AIRCRAFT) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_AIR);
/* Close pending preview windows */ /* Close pending preview windows */
DeleteWindowById(WC_ENGINE_PREVIEW, index); DeleteWindowById(WC_ENGINE_PREVIEW, index);
@ -1216,7 +1218,7 @@ void CheckEngines()
if ((e->flags & ENGINE_AVAILABLE) != 0 && e->company_avail != 0) return; if ((e->flags & ENGINE_AVAILABLE) != 0 && e->company_avail != 0) return;
/* Okay, try to find the earliest date. */ /* Okay, try to find the earliest date. */
min_date = min(min_date, e->info.base_intro); min_date = std::min(min_date, e->info.base_intro);
} }
if (min_date < INT32_MAX) { if (min_date < INT32_MAX) {

@ -93,9 +93,9 @@ struct EnginePreviewWindow : Window {
case VEH_SHIP: GetShipSpriteSize( engine, x, y, x_offs, y_offs, image_type); break; case VEH_SHIP: GetShipSpriteSize( engine, x, y, x_offs, y_offs, image_type); break;
case VEH_AIRCRAFT: GetAircraftSpriteSize(engine, x, y, x_offs, y_offs, image_type); break; case VEH_AIRCRAFT: GetAircraftSpriteSize(engine, x, y, x_offs, y_offs, image_type); break;
} }
this->vehicle_space = max<int>(40, y - y_offs); this->vehicle_space = std::max<int>(40, y - y_offs);
size->width = max(size->width, x - x_offs); size->width = std::max(size->width, x - x_offs);
SetDParam(0, GetEngineCategoryName(engine)); SetDParam(0, GetEngineCategoryName(engine));
size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WD_PAR_VSEP_WIDE + FONT_HEIGHT_NORMAL + this->vehicle_space; size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WD_PAR_VSEP_WIDE + FONT_HEIGHT_NORMAL + this->vehicle_space;
SetDParam(0, engine); SetDParam(0, engine);

@ -13,6 +13,7 @@
#include "strings_type.h" #include "strings_type.h"
#include "company_type.h" #include "company_type.h"
#include "core/geometry_type.hpp" #include "core/geometry_type.hpp"
#include "guitimer_func.h"
struct GRFFile; struct GRFFile;
@ -27,7 +28,7 @@ enum WarningLevel {
/** The data of the error message. */ /** The data of the error message. */
class ErrorMessageData { class ErrorMessageData {
protected: protected:
uint duration; ///< Length of display of the message. 0 means forever, GUITimer display_timer; ///< Timer before closing the message.
uint64 decode_params[20]; ///< Parameters of the message strings. uint64 decode_params[20]; ///< Parameters of the message strings.
const char *strings[20]; ///< Copies of raw strings that were used. const char *strings[20]; ///< Copies of raw strings that were used.
const GRFFile *textref_stack_grffile; ///< NewGRF that filled the #TextRefStack for the error message. const GRFFile *textref_stack_grffile; ///< NewGRF that filled the #TextRefStack for the error message.

@ -71,7 +71,7 @@ static WindowDesc _errmsg_face_desc(
* @param data The data to copy. * @param data The data to copy.
*/ */
ErrorMessageData::ErrorMessageData(const ErrorMessageData &data) : ErrorMessageData::ErrorMessageData(const ErrorMessageData &data) :
duration(data.duration), textref_stack_grffile(data.textref_stack_grffile), textref_stack_size(data.textref_stack_size), display_timer(data.display_timer), textref_stack_grffile(data.textref_stack_grffile), textref_stack_size(data.textref_stack_size),
summary_msg(data.summary_msg), detailed_msg(data.detailed_msg), extra_msg(data.extra_msg), position(data.position), face(data.face) summary_msg(data.summary_msg), detailed_msg(data.detailed_msg), extra_msg(data.extra_msg), position(data.position), face(data.face)
{ {
memcpy(this->textref_stack, data.textref_stack, sizeof(this->textref_stack)); memcpy(this->textref_stack, data.textref_stack, sizeof(this->textref_stack));
@ -104,7 +104,6 @@ ErrorMessageData::~ErrorMessageData()
* @param extra_msg Extra error message showed in third line. Can be INVALID_STRING_ID. * @param extra_msg Extra error message showed in third line. Can be INVALID_STRING_ID.
*/ */
ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration, int x, int y, const GRFFile *textref_stack_grffile, uint textref_stack_size, const uint32 *textref_stack, StringID extra_msg) : ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration, int x, int y, const GRFFile *textref_stack_grffile, uint textref_stack_size, const uint32 *textref_stack, StringID extra_msg) :
duration(duration),
textref_stack_grffile(textref_stack_grffile), textref_stack_grffile(textref_stack_grffile),
textref_stack_size(textref_stack_size), textref_stack_size(textref_stack_size),
summary_msg(summary_msg), summary_msg(summary_msg),
@ -121,6 +120,8 @@ ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg,
if (textref_stack_size > 0) MemCpyT(this->textref_stack, textref_stack, textref_stack_size); if (textref_stack_size > 0) MemCpyT(this->textref_stack, textref_stack, textref_stack_size);
assert(summary_msg != INVALID_STRING_ID); assert(summary_msg != INVALID_STRING_ID);
this->display_timer.SetInterval(duration * 3000);
} }
/** /**
@ -192,7 +193,7 @@ public:
CopyInDParam(0, this->decode_params, lengthof(this->decode_params)); CopyInDParam(0, this->decode_params, lengthof(this->decode_params));
if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack);
int text_width = max(0, (int)size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT); int text_width = std::max(0, (int)size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT);
this->height_summary = GetStringHeight(this->summary_msg, text_width); this->height_summary = GetStringHeight(this->summary_msg, text_width);
this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, text_width); this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, text_width);
this->height_extra = (this->extra_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->extra_msg, text_width); this->height_extra = (this->extra_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->extra_msg, text_width);
@ -203,13 +204,13 @@ public:
if (this->detailed_msg != INVALID_STRING_ID) panel_height += this->height_detailed + WD_PAR_VSEP_WIDE; if (this->detailed_msg != INVALID_STRING_ID) panel_height += this->height_detailed + WD_PAR_VSEP_WIDE;
if (this->extra_msg != INVALID_STRING_ID) panel_height += this->height_extra + WD_PAR_VSEP_WIDE; if (this->extra_msg != INVALID_STRING_ID) panel_height += this->height_extra + WD_PAR_VSEP_WIDE;
size->height = max(size->height, panel_height); size->height = std::max(size->height, panel_height);
break; break;
} }
case WID_EM_FACE: { case WID_EM_FACE: {
Dimension face_size = GetSpriteSize(SPR_GRADIENT); Dimension face_size = GetSpriteSize(SPR_GRADIENT);
size->width = max(size->width, face_size.width); size->width = std::max(size->width, face_size.width);
size->height = max(size->height, face_size.height); size->height = std::max(size->height, face_size.height);
break; break;
} }
} }
@ -317,16 +318,14 @@ public:
void OnMouseLoop() override void OnMouseLoop() override
{ {
/* Disallow closing the window too easily, if timeout is disabled */ /* Disallow closing the window too easily, if timeout is disabled */
if (_right_button_down && this->duration != 0) delete this; if (_right_button_down && !this->display_timer.HasElapsed()) delete this;
} }
void OnHundredthTick() override void OnRealtimeTick(uint delta_ms) override
{ {
/* Timeout enabled? */ if (this->display_timer.CountElapsed(delta_ms) == 0) return;
if (this->duration != 0) {
this->duration--; delete this;
if (this->duration == 0) delete this;
}
} }
~ErrmsgWindow() ~ErrmsgWindow()
@ -341,7 +340,7 @@ public:
*/ */
bool IsCritical() bool IsCritical()
{ {
return this->duration == 0; return this->display_timer.HasElapsed();
} }
}; };

@ -24,7 +24,6 @@
#include <pwd.h> #include <pwd.h>
#endif #endif
#include <sys/stat.h> #include <sys/stat.h>
#include <algorithm>
#include <array> #include <array>
#include <sstream> #include <sstream>
@ -125,7 +124,7 @@ byte FioReadByte()
void FioSkipBytes(int n) void FioSkipBytes(int n)
{ {
for (;;) { for (;;) {
int m = min(_fio.buffer_end - _fio.buffer, n); int m = std::min<int>(_fio.buffer_end - _fio.buffer, n);
_fio.buffer += m; _fio.buffer += m;
n -= m; n -= m;
if (n == 0) break; if (n == 0) break;
@ -898,7 +897,7 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir)
char buffer[4096]; char buffer[4096];
size_t read; size_t read;
for (; to_copy != 0; to_copy -= read) { for (; to_copy != 0; to_copy -= read) {
read = fread(buffer, 1, min(to_copy, lengthof(buffer)), in.get()); read = fread(buffer, 1, std::min(to_copy, lengthof(buffer)), in.get());
if (read <= 0 || fwrite(buffer, 1, read, out.get()) != read) break; if (read <= 0 || fwrite(buffer, 1, read, out.get()) != read) break;
} }

@ -496,7 +496,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
/* Font height is minimum height plus the difference between the default /* Font height is minimum height plus the difference between the default
* height for this font size and the small size. */ * height for this font size and the small size. */
int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]); int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); pixels = Clamp(std::min<uint>(head->Lowest_Rec_PPEM, 20u) + diff, scaled_height, MAX_FONT_SIZE);
} }
} else { } else {
pixels = ScaleFontTrad(pixels); pixels = ScaleFontTrad(pixels);
@ -662,8 +662,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa)
aa = (slot->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY); aa = (slot->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY);
/* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel */ /* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel */
uint width = max(1U, (uint)slot->bitmap.width + (this->fs == FS_NORMAL)); uint width = std::max(1U, (uint)slot->bitmap.width + (this->fs == FS_NORMAL));
uint height = max(1U, (uint)slot->bitmap.rows + (this->fs == FS_NORMAL)); uint height = std::max(1U, (uint)slot->bitmap.rows + (this->fs == FS_NORMAL));
/* Limit glyph size to prevent overflows later on. */ /* Limit glyph size to prevent overflows later on. */
if (width > 256 || height > 256) usererror("Font glyph is too large"); if (width > 256 || height > 256) usererror("Font glyph is too large");
@ -803,7 +803,7 @@ void Win32FontCache::SetFontSize(FontSize fs, int pixels)
/* Font height is minimum height plus the difference between the default /* Font height is minimum height plus the difference between the default
* height for this font size and the small size. */ * height for this font size and the small size. */
int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]); int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
pixels = Clamp(min(otm->otmusMinimumPPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); pixels = Clamp(std::min(otm->otmusMinimumPPEM, 20u) + diff, scaled_height, MAX_FONT_SIZE);
SelectObject(dc, old); SelectObject(dc, old);
DeleteObject(temp); DeleteObject(temp);
@ -859,7 +859,7 @@ void Win32FontCache::ClearFontCache()
MAT2 mat = { {0, 1}, {0, 0}, {0, 0}, {0, 1} }; MAT2 mat = { {0, 1}, {0, 0}, {0, 0}, {0, 1} };
/* Make a guess for the needed memory size. */ /* Make a guess for the needed memory size. */
DWORD size = this->glyph_size.cy * Align(aa ? this->glyph_size.cx : max(this->glyph_size.cx / 8l, 1l), 4); // Bitmap data is DWORD-aligned rows. DWORD size = this->glyph_size.cy * Align(aa ? this->glyph_size.cx : std::max(this->glyph_size.cx / 8l, 1l), 4); // Bitmap data is DWORD-aligned rows.
byte *bmp = AllocaM(byte, size); byte *bmp = AllocaM(byte, size);
size = GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat); size = GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat);
@ -876,8 +876,8 @@ void Win32FontCache::ClearFontCache()
} }
/* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel. */ /* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel. */
uint width = max(1U, (uint)gm.gmBlackBoxX + (this->fs == FS_NORMAL)); uint width = std::max(1U, (uint)gm.gmBlackBoxX + (this->fs == FS_NORMAL));
uint height = max(1U, (uint)gm.gmBlackBoxY + (this->fs == FS_NORMAL)); uint height = std::max(1U, (uint)gm.gmBlackBoxY + (this->fs == FS_NORMAL));
/* Limit glyph size to prevent overflows later on. */ /* Limit glyph size to prevent overflows later on. */
if (width > 256 || height > 256) usererror("Font glyph is too large"); if (width > 256 || height > 256) usererror("Font glyph is too large");
@ -897,7 +897,7 @@ void Win32FontCache::ClearFontCache()
* For anti-aliased rendering, GDI uses the strange value range of 0 to 64, * For anti-aliased rendering, GDI uses the strange value range of 0 to 64,
* inclusively. To map this to 0 to 255, we shift left by two and then * inclusively. To map this to 0 to 255, we shift left by two and then
* subtract one. */ * subtract one. */
uint pitch = Align(aa ? gm.gmBlackBoxX : max(gm.gmBlackBoxX / 8u, 1u), 4); uint pitch = Align(aa ? gm.gmBlackBoxX : std::max(gm.gmBlackBoxX / 8u, 1u), 4);
/* Draw shadow for medium size. */ /* Draw shadow for medium size. */
if (this->fs == FS_NORMAL && !aa) { if (this->fs == FS_NORMAL && !aa) {

@ -222,7 +222,7 @@ static const char *GetEnglishFontName(const ENUMLOGFONTEX *logfont)
offset += buf[pos++]; offset += buf[pos++];
/* Don't buffer overflow */ /* Don't buffer overflow */
length = min(length, MAX_PATH - 1); length = std::min(length, MAX_PATH - 1);
for (uint j = 0; j < length; j++) font_name[j] = buf[stringOffset + offset + j]; for (uint j = 0; j < length; j++) font_name[j] = buf[stringOffset + offset + j];
font_name[length] = '\0'; font_name[length] = '\0';

@ -76,7 +76,7 @@ namespace {
this->prev_index = this->next_index; this->prev_index = this->next_index;
this->next_index += 1; this->next_index += 1;
if (this->next_index >= NUM_FRAMERATE_POINTS) this->next_index = 0; if (this->next_index >= NUM_FRAMERATE_POINTS) this->next_index = 0;
this->num_valid = min(NUM_FRAMERATE_POINTS, this->num_valid + 1); this->num_valid = std::min(NUM_FRAMERATE_POINTS, this->num_valid + 1);
} }
/** Begin an accumulation of multiple measurements into a single value, from a given start time */ /** Begin an accumulation of multiple measurements into a single value, from a given start time */
@ -87,7 +87,7 @@ namespace {
this->prev_index = this->next_index; this->prev_index = this->next_index;
this->next_index += 1; this->next_index += 1;
if (this->next_index >= NUM_FRAMERATE_POINTS) this->next_index = 0; if (this->next_index >= NUM_FRAMERATE_POINTS) this->next_index = 0;
this->num_valid = min(NUM_FRAMERATE_POINTS, this->num_valid + 1); this->num_valid = std::min(NUM_FRAMERATE_POINTS, this->num_valid + 1);
this->acc_duration = 0; this->acc_duration = 0;
this->acc_timestamp = start_time; this->acc_timestamp = start_time;
@ -115,7 +115,7 @@ namespace {
/** Get average cycle processing time over a number of data points */ /** Get average cycle processing time over a number of data points */
double GetAverageDurationMilliseconds(int count) double GetAverageDurationMilliseconds(int count)
{ {
count = min(count, this->num_valid); count = std::min(count, this->num_valid);
int first_point = this->prev_index - count; int first_point = this->prev_index - count;
if (first_point < 0) first_point += NUM_FRAMERATE_POINTS; if (first_point < 0) first_point += NUM_FRAMERATE_POINTS;
@ -395,7 +395,7 @@ struct FramerateWindow : Window {
{ {
const double threshold_good = target * 0.95; const double threshold_good = target * 0.95;
const double threshold_bad = target * 2 / 3; const double threshold_bad = target * 2 / 3;
value = min(9999.99, value); value = std::min(9999.99, value);
this->value = (uint32)(value * 100); this->value = (uint32)(value * 100);
this->strid = (value > threshold_good) ? STR_FRAMERATE_FPS_GOOD : (value < threshold_bad) ? STR_FRAMERATE_FPS_BAD : STR_FRAMERATE_FPS_WARN; this->strid = (value > threshold_good) ? STR_FRAMERATE_FPS_GOOD : (value < threshold_bad) ? STR_FRAMERATE_FPS_BAD : STR_FRAMERATE_FPS_WARN;
} }
@ -404,7 +404,7 @@ struct FramerateWindow : Window {
{ {
const double threshold_good = target / 3; const double threshold_good = target / 3;
const double threshold_bad = target; const double threshold_bad = target;
value = min(9999.99, value); value = std::min(9999.99, value);
this->value = (uint32)(value * 100); this->value = (uint32)(value * 100);
this->strid = (value < threshold_good) ? STR_FRAMERATE_MS_GOOD : (value > threshold_bad) ? STR_FRAMERATE_MS_BAD : STR_FRAMERATE_MS_WARN; this->strid = (value < threshold_good) ? STR_FRAMERATE_MS_GOOD : (value > threshold_bad) ? STR_FRAMERATE_MS_BAD : STR_FRAMERATE_MS_WARN;
} }
@ -422,8 +422,8 @@ struct FramerateWindow : Window {
CachedDecimal times_shortterm[PFE_MAX]; ///< cached short term average times CachedDecimal times_shortterm[PFE_MAX]; ///< cached short term average times
CachedDecimal times_longterm[PFE_MAX]; ///< cached long term average times CachedDecimal times_longterm[PFE_MAX]; ///< cached long term average times
static const int VSPACING = 3; ///< space between column heading and values static constexpr int VSPACING = 3; ///< space between column heading and values
static const int MIN_ELEMENTS = 5; ///< smallest number of elements to display static constexpr int MIN_ELEMENTS = 5; ///< smallest number of elements to display
FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc) FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
{ {
@ -435,7 +435,7 @@ struct FramerateWindow : Window {
this->next_update.SetInterval(100); this->next_update.SetInterval(100);
/* Window is always initialised to MIN_ELEMENTS height, resize to contain num_displayed */ /* Window is always initialised to MIN_ELEMENTS height, resize to contain num_displayed */
ResizeWindow(this, 0, (max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL); ResizeWindow(this, 0, (std::max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL);
} }
void OnRealtimeTick(uint delta_ms) override void OnRealtimeTick(uint delta_ms) override
@ -486,7 +486,7 @@ struct FramerateWindow : Window {
this->num_active = new_active; this->num_active = new_active;
Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
sb->SetCount(this->num_active); sb->SetCount(this->num_active);
sb->SetCapacity(min(this->num_displayed, this->num_active)); sb->SetCapacity(std::min(this->num_displayed, this->num_active));
this->ReInit(); this->ReInit();
} }
} }
@ -555,7 +555,7 @@ struct FramerateWindow : Window {
SetDParamStr(1, GetAIName(e - PFE_AI0)); SetDParamStr(1, GetAIName(e - PFE_AI0));
line_size = GetStringBoundingBox(STR_FRAMERATE_AI); line_size = GetStringBoundingBox(STR_FRAMERATE_AI);
} }
size->width = max(size->width, line_size.width); size->width = std::max(size->width, line_size.width);
} }
break; break;
} }
@ -567,7 +567,7 @@ struct FramerateWindow : Window {
SetDParam(0, 999999); SetDParam(0, 999999);
SetDParam(1, 2); SetDParam(1, 2);
Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD); Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD);
size->width = max(size->width, item_size.width); size->width = std::max(size->width, item_size.width);
size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING; size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING;
resize->width = 0; resize->width = 0;
resize->height = FONT_HEIGHT_NORMAL; resize->height = FONT_HEIGHT_NORMAL;
@ -769,7 +769,7 @@ struct FrametimeGraphWindow : Window {
Dimension size_s_label = GetStringBoundingBox(STR_FRAMERATE_GRAPH_SECONDS); Dimension size_s_label = GetStringBoundingBox(STR_FRAMERATE_GRAPH_SECONDS);
/* Size graph in height to fit at least 10 vertical labels with space between, or at least 100 pixels */ /* Size graph in height to fit at least 10 vertical labels with space between, or at least 100 pixels */
graph_size.height = max<uint>(100, 10 * (size_ms_label.height + 1)); graph_size.height = std::max(100u, 10 * (size_ms_label.height + 1));
/* Always 2:1 graph area */ /* Always 2:1 graph area */
graph_size.width = 2 * graph_size.height; graph_size.width = 2 * graph_size.height;
*size = graph_size; *size = graph_size;
@ -980,7 +980,7 @@ struct FrametimeGraphWindow : Window {
TextColour tc_peak = (TextColour)(TC_IS_PALETTE_COLOUR | c_peak); TextColour tc_peak = (TextColour)(TC_IS_PALETTE_COLOUR | c_peak);
GfxFillRect(peak_point.x - 1, peak_point.y - 1, peak_point.x + 1, peak_point.y + 1, c_peak); GfxFillRect(peak_point.x - 1, peak_point.y - 1, peak_point.x + 1, peak_point.y + 1, c_peak);
SetDParam(0, peak_value * 1000 / TIMESTAMP_PRECISION); SetDParam(0, peak_value * 1000 / TIMESTAMP_PRECISION);
int label_y = max(y_max, peak_point.y - FONT_HEIGHT_SMALL); int label_y = std::max(y_max, peak_point.y - FONT_HEIGHT_SMALL);
if (peak_point.x - x_zero > (int)this->graph_size.width / 2) { if (peak_point.x - x_zero > (int)this->graph_size.width / 2) {
DrawString(x_zero, peak_point.x - 2, label_y, STR_FRAMERATE_GRAPH_MILLISECONDS, tc_peak, SA_RIGHT | SA_FORCE, false, FS_SMALL); DrawString(x_zero, peak_point.x - 2, label_y, STR_FRAMERATE_GRAPH_MILLISECONDS, tc_peak, SA_RIGHT | SA_FORCE, false, FS_SMALL);
} else { } else {

@ -790,7 +790,7 @@ void GamelogInfo(LoggedAction *gamelog_action, uint gamelog_actions, uint32 *las
case GLCT_REVISION: case GLCT_REVISION:
*last_ottd_rev = lc->revision.newgrf; *last_ottd_rev = lc->revision.newgrf;
*ever_modified = max(*ever_modified, lc->revision.modified); *ever_modified = std::max(*ever_modified, lc->revision.modified);
break; break;
case GLCT_GRFREM: case GLCT_GRFREM:

@ -549,7 +549,7 @@ struct GenerateLandscapeWindow : public Window {
} }
} }
size->width += padding.width; size->width += padding.width;
size->height = max(size->height, (uint)(FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM)); size->height = std::max(size->height, (uint)(FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM));
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, int widget) const override
@ -1270,7 +1270,7 @@ struct GenerateProgressWindow : public Window {
case WID_GP_PROGRESS_TEXT: case WID_GP_PROGRESS_TEXT:
for (uint i = 0; i < GWP_CLASS_COUNT; i++) { for (uint i = 0; i < GWP_CLASS_COUNT; i++) {
size->width = max(size->width, GetStringBoundingBox(_generation_class_table[i]).width); size->width = std::max(size->width, GetStringBoundingBox(_generation_class_table[i]).width);
} }
size->height = FONT_HEIGHT_NORMAL * 2 + WD_PAR_VSEP_NORMAL; size->height = FONT_HEIGHT_NORMAL * 2 + WD_PAR_VSEP_NORMAL;
break; break;

@ -283,8 +283,8 @@ void GfxFillPolygon(const std::vector<Point> &shape, int colour, FillRectMode mo
std::sort(intersections.begin(), intersections.end()); std::sort(intersections.begin(), intersections.end());
for (size_t i = 1; i < intersections.size(); i += 2) { for (size_t i = 1; i < intersections.size(); i += 2) {
/* Check clipping. */ /* Check clipping. */
const int x1 = max(0, intersections[i - 1]); const int x1 = std::max(0, intersections[i - 1]);
const int x2 = min(intersections[i], dpi->width); const int x2 = std::min(intersections[i], dpi->width);
if (x2 < 0) continue; if (x2 < 0) continue;
if (x1 >= dpi->width) continue; if (x1 >= dpi->width) continue;
@ -347,7 +347,7 @@ static inline void GfxDoDrawLine(void *video, int x, int y, int x2, int y2, int
/* prevent integer overflows. */ /* prevent integer overflows. */
int margin = 1; int margin = 1;
while (INT_MAX / abs(grade_y) < max(abs(clip.left - x), abs(clip.right - x))) { while (INT_MAX / abs(grade_y) < std::max(abs(clip.left - x), abs(clip.right - x))) {
grade_y /= 2; grade_y /= 2;
grade_x /= 2; grade_x /= 2;
margin *= 2; // account for rounding errors margin *= 2; // account for rounding errors
@ -656,7 +656,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize) int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
{ {
/* The string may contain control chars to change the font, just use the biggest font for clipping. */ /* The string may contain control chars to change the font, just use the biggest font for clipping. */
int max_height = max(max(FONT_HEIGHT_SMALL, FONT_HEIGHT_NORMAL), max(FONT_HEIGHT_LARGE, FONT_HEIGHT_MONO)); int max_height = std::max({FONT_HEIGHT_SMALL, FONT_HEIGHT_NORMAL, FONT_HEIGHT_LARGE, FONT_HEIGHT_MONO});
/* Funny glyphs may extent outside the usual bounds, so relax the clipping somewhat. */ /* Funny glyphs may extent outside the usual bounds, so relax the clipping somewhat. */
int extra = max_height / 2; int extra = max_height / 2;
@ -936,8 +936,8 @@ Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
} }
Dimension d; Dimension d;
d.width = max<int>(0, UnScaleByZoom(sprite->x_offs + sprite->width, zoom)); d.width = std::max<int>(0, UnScaleByZoom(sprite->x_offs + sprite->width, zoom));
d.height = max<int>(0, UnScaleByZoom(sprite->y_offs + sprite->height, zoom)); d.height = std::max<int>(0, UnScaleByZoom(sprite->y_offs + sprite->height, zoom));
return d; return d;
} }
@ -1045,10 +1045,10 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo
bp.height = UnScaleByZoom(sprite->height, zoom); bp.height = UnScaleByZoom(sprite->height, zoom);
} else { } else {
/* Amount of pixels to clip from the source sprite */ /* Amount of pixels to clip from the source sprite */
int clip_left = max(0, -sprite->x_offs + sub->left * ZOOM_BASE ); int clip_left = std::max(0, -sprite->x_offs + sub->left * ZOOM_BASE );
int clip_top = max(0, -sprite->y_offs + sub->top * ZOOM_BASE ); int clip_top = std::max(0, -sprite->y_offs + sub->top * ZOOM_BASE );
int clip_right = max(0, sprite->width - (-sprite->x_offs + (sub->right + 1) * ZOOM_BASE)); int clip_right = std::max(0, sprite->width - (-sprite->x_offs + (sub->right + 1) * ZOOM_BASE));
int clip_bottom = max(0, sprite->height - (-sprite->y_offs + (sub->bottom + 1) * ZOOM_BASE)); int clip_bottom = std::max(0, sprite->height - (-sprite->y_offs + (sub->bottom + 1) * ZOOM_BASE));
if (clip_left + clip_right >= sprite->width) return; if (clip_left + clip_right >= sprite->width) return;
if (clip_top + clip_bottom >= sprite->height) return; if (clip_top + clip_bottom >= sprite->height) return;
@ -1328,7 +1328,7 @@ byte GetDigitWidth(FontSize size)
{ {
byte width = 0; byte width = 0;
for (char c = '0'; c <= '9'; c++) { for (char c = '0'; c <= '9'; c++) {
width = max(GetCharacterWidth(size, c), width); width = std::max(GetCharacterWidth(size, c), width);
} }
return width; return width;
} }
@ -1525,7 +1525,7 @@ static void DrawOverlappedWindowWithClipping(Window *w, int left, int top, int r
if (right < 0 || bottom < 0 || left >= _screen.width || top >= _screen.height) return; if (right < 0 || bottom < 0 || left >= _screen.width || top >= _screen.height) return;
DrawOverlappedWindow(w, max(0, left), max(0, top), min(_screen.width, right), min(_screen.height, bottom), flags); DrawOverlappedWindow(w, std::max(0, left), std::max(0, top), std::min(_screen.width, right), std::min(_screen.height, bottom), flags);
} }
/** /**
@ -1722,10 +1722,10 @@ void DrawDirtyBlocks()
no_more_coalesc: no_more_coalesc:
assert(_cur_dpi == &bk); assert(_cur_dpi == &bk);
int draw_left = max<int>(0, ((left == 0) ? 0 : vp->dirty_block_left_margin + (left << vp->GetDirtyBlockWidthShift())) + vp->left); int draw_left = std::max<int>(0, ((left == 0) ? 0 : vp->dirty_block_left_margin + (left << vp->GetDirtyBlockWidthShift())) + vp->left);
int draw_top = max<int>(0, (top << vp->GetDirtyBlockHeightShift()) + vp->top); int draw_top = std::max<int>(0, (top << vp->GetDirtyBlockHeightShift()) + vp->top);
int draw_right = min<int>(_screen.width, min<int>((right << vp->GetDirtyBlockWidthShift()) + vp->dirty_block_left_margin, vp->width) + vp->left); int draw_right = std::min<int>(_screen.width, std::min<int>((right << vp->GetDirtyBlockWidthShift()) + vp->dirty_block_left_margin, vp->width) + vp->left);
int draw_bottom = min<int>(_screen.height, min<int>(bottom << vp->GetDirtyBlockHeightShift(), vp->height) + vp->top); int draw_bottom = std::min<int>(_screen.height, std::min<int>(bottom << vp->GetDirtyBlockHeightShift(), vp->height) + vp->top);
if (draw_left < draw_right && draw_top < draw_bottom) { if (draw_left < draw_right && draw_top < draw_bottom) {
DrawDirtyViewport(0, draw_left, draw_top, draw_right, draw_bottom); DrawDirtyViewport(0, draw_left, draw_top, draw_right, draw_bottom);
} }
@ -2001,8 +2001,8 @@ void UpdateCursorSize()
_cursor.total_offs = offs; _cursor.total_offs = offs;
_cursor.total_size = size; _cursor.total_size = size;
} else { } else {
int right = max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x); int right = std::max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x);
int bottom = max(_cursor.total_offs.y + _cursor.total_size.y, offs.y + size.y); int bottom = std::max(_cursor.total_offs.y + _cursor.total_size.y, offs.y + size.y);
if (offs.x < _cursor.total_offs.x) _cursor.total_offs.x = offs.x; if (offs.x < _cursor.total_offs.x) _cursor.total_offs.x = offs.x;
if (offs.y < _cursor.total_offs.y) _cursor.total_offs.y = offs.y; if (offs.y < _cursor.total_offs.y) _cursor.total_offs.y = offs.y;
_cursor.total_size.x = right - _cursor.total_offs.x; _cursor.total_size.x = right - _cursor.total_offs.x;

@ -431,7 +431,7 @@ int FallbackParagraphLayout::FallbackLine::GetLeading() const
{ {
int leading = 0; int leading = 0;
for (const auto &run : *this) { for (const auto &run : *this) {
leading = max(leading, run.GetLeading()); leading = std::max(leading, run.GetLeading());
} }
return leading; return leading;
@ -747,7 +747,7 @@ Dimension Layouter::GetBounds()
{ {
Dimension d = { 0, 0 }; Dimension d = { 0, 0 };
for (const auto &l : *this) { for (const auto &l : *this) {
d.width = max<uint>(d.width, l->GetWidth()); d.width = std::max<uint>(d.width, l->GetWidth());
d.height += l->GetLeading(); d.height += l->GetLeading();
} }
return d; return d;

@ -552,7 +552,7 @@ MD5File::ChecksumResult MD5File::CheckMD5(Subdirectory subdir, size_t max_size)
if (f == nullptr) return CR_NO_FILE; if (f == nullptr) return CR_NO_FILE;
size = min(size, max_size); size = std::min(size, max_size);
Md5 checksum; Md5 checksum;
uint8 buffer[1024]; uint8 buffer[1024];

@ -291,7 +291,7 @@ struct GoalListWindow : public Window {
} }
NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_GOAL_LIST); NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_GOAL_LIST);
uint progress_col_width = min(max_width, wid->current_x); uint progress_col_width = std::min(max_width, wid->current_x);
/* Draw goal list. */ /* Draw goal list. */
this->DrawListColumn(GC_PROGRESS, wid, progress_col_width); this->DrawListColumn(GC_PROGRESS, wid, progress_col_width);

@ -110,7 +110,7 @@ struct GraphLegendWindow : Window {
static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index) static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index)
{ {
NWidgetVertical *vert = new NWidgetVertical(); NWidgetVertical *vert = new NWidgetVertical();
uint line_height = max<uint>(GetSpriteSize(SPR_COMPANY_ICON).height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; uint line_height = std::max<uint>(GetSpriteSize(SPR_COMPANY_ICON).height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) { for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum); NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
@ -212,8 +212,8 @@ protected:
OverflowSafeInt64 datapoint = this->cost[i][j]; OverflowSafeInt64 datapoint = this->cost[i][j];
if (datapoint != INVALID_DATAPOINT) { if (datapoint != INVALID_DATAPOINT) {
current_interval.highest = max(current_interval.highest, datapoint); current_interval.highest = std::max(current_interval.highest, datapoint);
current_interval.lowest = min(current_interval.lowest, datapoint); current_interval.lowest = std::min(current_interval.lowest, datapoint);
} }
} }
} }
@ -240,7 +240,7 @@ protected:
/* Get the required grid size for each side and use the maximum one. */ /* Get the required grid size for each side and use the maximum one. */
int64 grid_size_higher = (abs_higher > 0) ? ((int64)abs_higher + num_pos_grids - 1) / num_pos_grids : 0; int64 grid_size_higher = (abs_higher > 0) ? ((int64)abs_higher + num_pos_grids - 1) / num_pos_grids : 0;
int64 grid_size_lower = (abs_lower > 0) ? ((int64)abs_lower + num_hori_lines - num_pos_grids - 1) / (num_hori_lines - num_pos_grids) : 0; int64 grid_size_lower = (abs_lower > 0) ? ((int64)abs_lower + num_hori_lines - num_pos_grids - 1) / (num_hori_lines - num_pos_grids) : 0;
grid_size = max(grid_size_higher, grid_size_lower); grid_size = std::max(grid_size_higher, grid_size_lower);
} else { } else {
/* If both values are zero, show an empty graph. */ /* If both values are zero, show an empty graph. */
num_pos_grids = num_hori_lines / 2; num_pos_grids = num_hori_lines / 2;
@ -435,7 +435,7 @@ protected:
* least significant bits are removed. * least significant bits are removed.
*/ */
int mult_range = FindLastBit(x_axis_offset) + FindLastBit(abs(datapoint)); int mult_range = FindLastBit(x_axis_offset) + FindLastBit(abs(datapoint));
int reduce_range = max(mult_range - 31, 0); int reduce_range = std::max(mult_range - 31, 0);
/* Handle negative values differently (don't shift sign) */ /* Handle negative values differently (don't shift sign) */
if (datapoint < 0) { if (datapoint < 0) {
@ -496,7 +496,7 @@ public:
SetDParam(0, month + STR_MONTH_ABBREV_JAN); SetDParam(0, month + STR_MONTH_ABBREV_JAN);
SetDParam(1, month + STR_MONTH_ABBREV_JAN + 2); SetDParam(1, month + STR_MONTH_ABBREV_JAN + 2);
SetDParam(2, year); SetDParam(2, year);
x_label_width = max(x_label_width, GetStringBoundingBox(month == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH).width); x_label_width = std::max(x_label_width, GetStringBoundingBox(month == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH).width);
month += 3; month += 3;
if (month >= 12) { if (month >= 12) {
@ -514,9 +514,9 @@ public:
SetDParam(1, INT64_MAX); SetDParam(1, INT64_MAX);
uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width; uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width;
size->width = max<uint>(size->width, 5 + y_label_width + this->num_on_x_axis * (x_label_width + 5) + 9); size->width = std::max<uint>(size->width, 5 + y_label_width + this->num_on_x_axis * (x_label_width + 5) + 9);
size->height = max<uint>(size->height, 5 + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->month != 0xFF ? 3 : 1)) * FONT_HEIGHT_SMALL + 4); size->height = std::max<uint>(size->height, 5 + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->month != 0xFF ? 3 : 1)) * FONT_HEIGHT_SMALL + 4);
size->height = max<uint>(size->height, size->width / 3); size->height = std::max<uint>(size->height, size->width / 3);
} }
void DrawWidget(const Rect &r, int widget) const override void DrawWidget(const Rect &r, int widget) const override
@ -568,7 +568,7 @@ public:
byte nums = 0; byte nums = 0;
for (const Company *c : Company::Iterate()) { for (const Company *c : Company::Iterate()) {
nums = min(this->num_vert_lines, max(nums, c->num_valid_stat_ent)); nums = std::min(this->num_vert_lines, std::max(nums, c->num_valid_stat_ent));
} }
int mo = (_cur_date_ymd.month / 3 - nums) * 3; int mo = (_cur_date_ymd.month / 3 - nums) * 3;
@ -1115,7 +1115,7 @@ static const StringID _performance_titles[] = {
static inline StringID GetPerformanceTitleFromValue(uint value) static inline StringID GetPerformanceTitleFromValue(uint value)
{ {
return _performance_titles[minu(value, 1000) >> 6]; return _performance_titles[std::min(value, 1000u) >> 6];
} }
class CompanyLeagueWindow : public Window { class CompanyLeagueWindow : public Window {
@ -1199,7 +1199,7 @@ public:
this->ordinal_width = 0; this->ordinal_width = 0;
for (uint i = 0; i < MAX_COMPANIES; i++) { for (uint i = 0; i < MAX_COMPANIES; i++) {
this->ordinal_width = max(this->ordinal_width, GetStringBoundingBox(STR_ORDINAL_NUMBER_1ST + i).width); this->ordinal_width = std::max(this->ordinal_width, GetStringBoundingBox(STR_ORDINAL_NUMBER_1ST + i).width);
} }
this->ordinal_width += 5; // Keep some extra spacing this->ordinal_width += 5; // Keep some extra spacing
@ -1215,13 +1215,13 @@ public:
Dimension d = GetSpriteSize(SPR_COMPANY_ICON); Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
this->icon_width = d.width + 2; this->icon_width = d.width + 2;
this->line_height = max<int>(d.height + 2, FONT_HEIGHT_NORMAL); this->line_height = std::max<int>(d.height + 2, FONT_HEIGHT_NORMAL);
for (const Company *c : Company::Iterate()) { for (const Company *c : Company::Iterate()) {
SetDParam(0, c->index); SetDParam(0, c->index);
SetDParam(1, c->index); SetDParam(1, c->index);
SetDParam(2, _performance_titles[widest_title]); SetDParam(2, _performance_titles[widest_title]);
widest_width = max(widest_width, GetStringBoundingBox(STR_COMPANY_LEAGUE_COMPANY_NAME).width); widest_width = std::max(widest_width, GetStringBoundingBox(STR_COMPANY_LEAGUE_COMPANY_NAME).width);
} }
this->text_width = widest_width + 30; // Keep some extra spacing this->text_width = widest_width + 30; // Keep some extra spacing
@ -1321,7 +1321,7 @@ struct PerformanceRatingDetailWindow : Window {
uint score_info_width = 0; uint score_info_width = 0;
for (uint i = SCORE_BEGIN; i < SCORE_END; i++) { for (uint i = SCORE_BEGIN; i < SCORE_END; i++) {
score_info_width = max(score_info_width, GetStringBoundingBox(STR_PERFORMANCE_DETAIL_VEHICLES + i).width); score_info_width = std::max(score_info_width, GetStringBoundingBox(STR_PERFORMANCE_DETAIL_VEHICLES + i).width);
} }
SetDParamMaxValue(0, 1000); SetDParamMaxValue(0, 1000);
score_info_width += GetStringBoundingBox(STR_BLACK_COMMA).width + WD_FRAMERECT_LEFT; score_info_width += GetStringBoundingBox(STR_BLACK_COMMA).width + WD_FRAMERECT_LEFT;

@ -37,7 +37,7 @@ void GroundVehicle<T, Type>::PowerChanged()
/* Get minimum max speed for this track. */ /* Get minimum max speed for this track. */
uint16 track_speed = u->GetMaxTrackSpeed(); uint16 track_speed = u->GetMaxTrackSpeed();
if (track_speed > 0) max_track_speed = min(max_track_speed, track_speed); if (track_speed > 0) max_track_speed = std::min(max_track_speed, track_speed);
} }
byte air_drag; byte air_drag;
@ -47,7 +47,7 @@ void GroundVehicle<T, Type>::PowerChanged()
if (air_drag_value == 0) { if (air_drag_value == 0) {
uint16 max_speed = v->GetDisplayMaxSpeed(); uint16 max_speed = v->GetDisplayMaxSpeed();
/* Simplification of the method used in TTDPatch. It uses <= 10 to change more steadily from 128 to 196. */ /* Simplification of the method used in TTDPatch. It uses <= 10 to change more steadily from 128 to 196. */
air_drag = (max_speed <= 10) ? 192 : max(2048 / max_speed, 1); air_drag = (max_speed <= 10) ? 192 : std::max(2048 / max_speed, 1);
} else { } else {
/* According to the specs, a value of 0x01 in the air drag property means "no air drag". */ /* According to the specs, a value of 0x01 in the air drag property means "no air drag". */
air_drag = (air_drag_value == 1) ? 0 : air_drag_value; air_drag = (air_drag_value == 1) ? 0 : air_drag_value;
@ -114,7 +114,7 @@ void GroundVehicle<T, Type>::CargoChanged()
ClrBit(this->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST); ClrBit(this->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST);
/* Store consist weight in cache. */ /* Store consist weight in cache. */
this->gcache.cached_weight = max<uint32>(1, weight); this->gcache.cached_weight = std::max(1u, weight);
/* Friction in bearings and other mechanical parts is 0.1% of the weight (result in N). */ /* Friction in bearings and other mechanical parts is 0.1% of the weight (result in N). */
this->gcache.cached_axle_resistance = 10 * weight; this->gcache.cached_axle_resistance = 10 * weight;
@ -201,8 +201,8 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
} }
} else { } else {
/* "Kickoff" acceleration. */ /* "Kickoff" acceleration. */
force = (mode == AS_ACCEL && !maglev) ? min(max_te, power) : power; force = (mode == AS_ACCEL && !maglev) ? std::min<uint64>(max_te, power) : power;
force = max(force, (mass * 8) + resistance); force = std::max(force, (mass * 8) + resistance);
braking_force = force; braking_force = force;
} }
@ -230,15 +230,15 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
* @note A seperate correction for multiheaded engines is done in CheckVehicleBreakdown. We can't do that here because it would affect the whole consist. * @note A seperate correction for multiheaded engines is done in CheckVehicleBreakdown. We can't do that here because it would affect the whole consist.
*/ */
uint64 breakdown_factor = (uint64)abs(resistance) * (uint64)(this->cur_speed << 16); uint64 breakdown_factor = (uint64)abs(resistance) * (uint64)(this->cur_speed << 16);
breakdown_factor /= (max(force, (int64)100) * this->gcache.cached_max_track_speed); breakdown_factor /= (std::max(force, (int64)100) * this->gcache.cached_max_track_speed);
breakdown_factor = min((64 << 16) + (breakdown_factor * 128), 255 << 16); breakdown_factor = std::min<uint64>((64 << 16) + (breakdown_factor * 128), 255 << 16);
if (Type == VEH_TRAIN && Train::From(this)->tcache.cached_num_engines > 1) { if (Type == VEH_TRAIN && Train::From(this)->tcache.cached_num_engines > 1) {
/* For multiengine trains, breakdown chance is multiplied by 3 / (num_engines + 2) */ /* For multiengine trains, breakdown chance is multiplied by 3 / (num_engines + 2) */
breakdown_factor *= 3; breakdown_factor *= 3;
breakdown_factor /= (Train::From(this)->tcache.cached_num_engines + 2); breakdown_factor /= (Train::From(this)->tcache.cached_num_engines + 2);
} }
/* breakdown_chance is at least 5 (5 / 128 = ~4% of the normal chance) */ /* breakdown_chance is at least 5 (5 / 128 = ~4% of the normal chance) */
this->breakdown_chance_factor = max(breakdown_factor >> 16, (uint64)5); this->breakdown_chance_factor = std::max(breakdown_factor >> 16, (uint64)5);
} }
int braking_accel; int braking_accel;
@ -250,9 +250,9 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
/* Defensive driving: prevent ridiculously fast deceleration. /* Defensive driving: prevent ridiculously fast deceleration.
* -130 corresponds to a braking distance of about 6.2 tiles from 160 km/h. */ * -130 corresponds to a braking distance of about 6.2 tiles from 160 km/h. */
braking_accel = max(braking_accel, -130); braking_accel = std::max(braking_accel, -130);
} else { } else {
braking_accel = ClampToI32(min(-braking_force - resistance, -10000) / mass); braking_accel = ClampToI32(std::min<int64>(-braking_force - resistance, -10000) / mass);
} }
if (mode == AS_ACCEL) { if (mode == AS_ACCEL) {
@ -265,7 +265,7 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
* a hill will never speed up enough to (eventually) get back to the * a hill will never speed up enough to (eventually) get back to the
* same (maximum) speed. */ * same (maximum) speed. */
int accel = ClampToI32((force - resistance) / (mass * 4)); int accel = ClampToI32((force - resistance) / (mass * 4));
accel = force < resistance ? min(-1, accel) : max(1, accel); accel = force < resistance ? std::min(-1, accel) : std::max(1, accel);
if (this->type == VEH_TRAIN) { if (this->type == VEH_TRAIN) {
if(_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL && if(_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL &&
HasBit(Train::From(this)->flags, VRF_BREAKDOWN_POWER)) { HasBit(Train::From(this)->flags, VRF_BREAKDOWN_POWER)) {

@ -443,7 +443,7 @@ protected:
this->subspeed = (byte)spd; this->subspeed = (byte)spd;
if (!(Type == VEH_TRAIN && _settings_game.vehicle.train_braking_model == TBM_REALISTIC)) { if (!(Type == VEH_TRAIN && _settings_game.vehicle.train_braking_model == TBM_REALISTIC)) {
max_speed = min(max_speed, advisory_max_speed); max_speed = std::min(max_speed, advisory_max_speed);
} }
int tempmax = max_speed; int tempmax = max_speed;
@ -460,7 +460,7 @@ protected:
} }
} }
} else if (this->breakdown_type == BREAKDOWN_LOW_SPEED) { } else if (this->breakdown_type == BREAKDOWN_LOW_SPEED) {
tempmax = min(max_speed, this->breakdown_severity); tempmax = std::min<int>(max_speed, this->breakdown_severity);
} else { } else {
tempmax = this->cur_speed; tempmax = this->cur_speed;
} }
@ -471,7 +471,7 @@ protected:
extern void TrainBrakesOverheatedBreakdown(Vehicle *v); extern void TrainBrakesOverheatedBreakdown(Vehicle *v);
TrainBrakesOverheatedBreakdown(this); TrainBrakesOverheatedBreakdown(this);
} }
tempmax = max(this->cur_speed - (this->cur_speed / 10) - 1, max_speed); tempmax = std::max(this->cur_speed - (this->cur_speed / 10) - 1, max_speed);
} }
/* Enforce a maximum and minimum speed. Normally we would use something like /* Enforce a maximum and minimum speed. Normally we would use something like
@ -479,7 +479,7 @@ protected:
* threshold for some reason. That makes acceleration fail and assertions * threshold for some reason. That makes acceleration fail and assertions
* happen in Clamp. So make it explicit that min_speed overrules the maximum * happen in Clamp. So make it explicit that min_speed overrules the maximum
* speed by explicit ordering of min and max. */ * speed by explicit ordering of min and max. */
int tempspeed = min(this->cur_speed + ((int)spd >> 8), tempmax); int tempspeed = std::min(this->cur_speed + ((int)spd >> 8), tempmax);
if (Type == VEH_TRAIN && _settings_game.vehicle.train_braking_model == TBM_REALISTIC && tempspeed > advisory_max_speed && accel.braking != accel.acceleration) { if (Type == VEH_TRAIN && _settings_game.vehicle.train_braking_model == TBM_REALISTIC && tempspeed > advisory_max_speed && accel.braking != accel.acceleration) {
spd = initial_subspeed + accel.braking; spd = initial_subspeed + accel.braking;
@ -502,7 +502,7 @@ protected:
} }
} }
this->cur_speed = max(tempspeed, min_speed); this->cur_speed = std::max(tempspeed, min_speed);
int scaled_spd = this->GetAdvanceSpeed(this->cur_speed); int scaled_spd = this->GetAdvanceSpeed(this->cur_speed);

@ -240,14 +240,14 @@ private:
this->tiny_step_height = this->column_size[VGC_FOLD].height; this->tiny_step_height = this->column_size[VGC_FOLD].height;
this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype)); this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype));
this->column_size[VGC_NAME].width = max((170u * FONT_HEIGHT_NORMAL) / 10u, this->column_size[VGC_NAME].width); this->column_size[VGC_NAME].width = std::max((170u * FONT_HEIGHT_NORMAL) / 10u, this->column_size[VGC_NAME].width);
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NAME].height); this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_NAME].height);
this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT); this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT);
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROTECT].height); this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_PROTECT].height);
this->column_size[VGC_AUTOREPLACE] = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE); this->column_size[VGC_AUTOREPLACE] = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE);
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_AUTOREPLACE].height); this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_AUTOREPLACE].height);
this->column_size[VGC_PROFIT].width = 0; this->column_size[VGC_PROFIT].width = 0;
this->column_size[VGC_PROFIT].height = 0; this->column_size[VGC_PROFIT].height = 0;
@ -256,13 +256,13 @@ private:
Dimension d = GetSpriteSize(profit_sprites[i]); Dimension d = GetSpriteSize(profit_sprites[i]);
this->column_size[VGC_PROFIT] = maxdim(this->column_size[VGC_PROFIT], d); this->column_size[VGC_PROFIT] = maxdim(this->column_size[VGC_PROFIT], d);
} }
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROFIT].height); this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_PROFIT].height);
int num_vehicle = GetGroupNumVehicle(this->vli.company, ALL_GROUP, this->vli.vtype); int num_vehicle = GetGroupNumVehicle(this->vli.company, ALL_GROUP, this->vli.vtype);
SetDParamMaxValue(0, num_vehicle, 3, FS_SMALL); SetDParamMaxValue(0, num_vehicle, 3, FS_SMALL);
SetDParamMaxValue(1, num_vehicle, 3, FS_SMALL); SetDParamMaxValue(1, num_vehicle, 3, FS_SMALL);
this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_GROUP_COUNT_WITH_SUBGROUP); this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_GROUP_COUNT_WITH_SUBGROUP);
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height); this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_NUMBER].height);
this->tiny_step_height += WD_MATRIX_TOP; this->tiny_step_height += WD_MATRIX_TOP;
@ -466,9 +466,9 @@ public:
/* ... minus the buttons at the bottom ... */ /* ... minus the buttons at the bottom ... */
uint max_icon_height = GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_CREATE_GROUP)->widget_data).height; uint max_icon_height = GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_CREATE_GROUP)->widget_data).height;
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_RENAME_GROUP)->widget_data).height); max_icon_height = std::max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_RENAME_GROUP)->widget_data).height);
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_DELETE_GROUP)->widget_data).height); max_icon_height = std::max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_DELETE_GROUP)->widget_data).height);
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height); max_icon_height = std::max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height);
/* ... minus the height of the group info ... */ /* ... minus the height of the group info ... */
max_icon_height += (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; max_icon_height += (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
@ -675,7 +675,7 @@ public:
case WID_GL_LIST_GROUP: { case WID_GL_LIST_GROUP: {
int y1 = r.top + WD_FRAMERECT_TOP; int y1 = r.top + WD_FRAMERECT_TOP;
int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), (uint)this->groups.size()); int max = std::min<size_t>(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.size());
for (int i = this->group_sb->GetPosition(); i < max; ++i) { for (int i = this->group_sb->GetPosition(); i < max; ++i) {
const Group *g = this->groups[i]; const Group *g = this->groups[i];
@ -699,7 +699,7 @@ public:
if (this->vli.index != ALL_GROUP && this->grouping == GB_NONE) { if (this->vli.index != ALL_GROUP && this->grouping == GB_NONE) {
/* Mark vehicles which are in sub-groups (only if we are not using shared order coalescing) */ /* Mark vehicles which are in sub-groups (only if we are not using shared order coalescing) */
int y = r.top; int y = r.top;
uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), static_cast<uint>(this->vehgroups.size())); uint max = static_cast<uint>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size()));
for (uint i = this->vscroll->GetPosition(); i < max; ++i) { for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); const Vehicle *v = this->vehgroups[i].GetSingleVehicle();
if (v->group_id != this->vli.index) { if (v->group_id != this->vli.index) {

@ -43,7 +43,7 @@ static const StringID _endgame_perf_titles[] = {
StringID EndGameGetPerformanceTitleFromValue(uint value) StringID EndGameGetPerformanceTitleFromValue(uint value)
{ {
value = minu(value / 64, lengthof(_endgame_perf_titles) - 1); value = std::min<uint>(value / 64, lengthof(_endgame_perf_titles) - 1);
return _endgame_perf_titles[value]; return _endgame_perf_titles[value];
} }
@ -132,7 +132,7 @@ void SaveToHighScore()
for (i = 0; i < SP_SAVED_HIGHSCORE_END; i++) { for (i = 0; i < SP_SAVED_HIGHSCORE_END; i++) {
for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) { for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) {
/* First character is a command character, so strlen will fail on that */ /* First character is a command character, so strlen will fail on that */
byte length = min(sizeof(hs->company), StrEmpty(hs->company) ? 0 : (int)strlen(&hs->company[1]) + 1); byte length = std::min(sizeof(hs->company), StrEmpty(hs->company) ? 0 : strlen(&hs->company[1]) + 1);
if (fwrite(&length, sizeof(length), 1, fp) != 1 || // write away string length if (fwrite(&length, sizeof(length), 1, fp) != 1 || // write away string length
fwrite(hs->company, length, 1, fp) > 1 || // Yes... could be 0 bytes too fwrite(hs->company, length, 1, fp) > 1 || // Yes... could be 0 bytes too
@ -163,7 +163,7 @@ void LoadFromHighScore()
for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) { for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) {
byte length; byte length;
if (fread(&length, sizeof(length), 1, fp) != 1 || if (fread(&length, sizeof(length), 1, fp) != 1 ||
fread(hs->company, min<int>(lengthof(hs->company), length), 1, fp) > 1 || // Yes... could be 0 bytes too fread(hs->company, std::min<int>(lengthof(hs->company), length), 1, fp) > 1 || // Yes... could be 0 bytes too
fread(&hs->score, sizeof(hs->score), 1, fp) != 1 || fread(&hs->score, sizeof(hs->score), 1, fp) != 1 ||
fseek(fp, 2, SEEK_CUR) == -1) { // XXX - placeholder for hs->title, not saved anymore; compatibility fseek(fp, 2, SEEK_CUR) == -1) { // XXX - placeholder for hs->title, not saved anymore; compatibility
DEBUG(misc, 1, "Highscore corrupted"); DEBUG(misc, 1, "Highscore corrupted");

@ -58,7 +58,7 @@ struct EndGameHighScoreBaseWindow : Window {
/** Return the coordinate of the screen such that a window of 640x480 is centered at the screen. */ /** Return the coordinate of the screen such that a window of 640x480 is centered at the screen. */
Point GetTopLeft(int x, int y) Point GetTopLeft(int x, int y)
{ {
Point pt = {max(0, (_screen.width / 2) - (x / 2)), max(0, (_screen.height / 2) - (y / 2))}; Point pt = {std::max(0, (_screen.width / 2) - (x / 2)), std::max(0, (_screen.height / 2) - (y / 2))};
return pt; return pt;
} }

@ -10,7 +10,6 @@
#ifndef INDUSTRY_H #ifndef INDUSTRY_H
#define INDUSTRY_H #define INDUSTRY_H
#include <algorithm>
#include "newgrf_storage.h" #include "newgrf_storage.h"
#include "subsidy_type.h" #include "subsidy_type.h"
#include "industry_map.h" #include "industry_map.h"

@ -534,7 +534,7 @@ static bool TransportIndustryGoods(TileIndex tile)
bool moved_cargo = false; bool moved_cargo = false;
for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) { for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) {
uint cw = min(i->produced_cargo_waiting[j], 255); uint cw = std::min<uint>(i->produced_cargo_waiting[j], 255u);
if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) { if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) {
i->produced_cargo_waiting[j] -= cw; i->produced_cargo_waiting[j] -= cw;
@ -1076,7 +1076,7 @@ static void PlantFarmField(TileIndex tile, IndustryID industry)
uint size_x = GB(r, 0, 8); uint size_x = GB(r, 0, 8);
uint size_y = GB(r, 8, 8); uint size_y = GB(r, 8, 8);
TileArea ta(tile - TileDiffXY(min(TileX(tile), size_x / 2), min(TileY(tile), size_y / 2)), size_x, size_y); TileArea ta(tile - TileDiffXY(std::min(TileX(tile), size_x / 2), std::min(TileY(tile), size_y / 2)), size_x, size_y);
ta.ClampToMap(); ta.ClampToMap();
if (ta.w == 0 || ta.h == 0) return; if (ta.w == 0 || ta.h == 0) return;
@ -1165,7 +1165,7 @@ static void ChopLumberMillTrees(Industry *i)
TileIndex tile = i->location.tile; TileIndex tile = i->location.tile;
if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, nullptr)) { // 40x40 tiles to search. if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, nullptr)) { // 40x40 tiles to search.
i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + 45); // Found a tree, add according value to waiting cargo. i->produced_cargo_waiting[0] = std::min(0xffff, i->produced_cargo_waiting[0] + 45); // Found a tree, add according value to waiting cargo.
} }
} }
@ -1176,7 +1176,7 @@ static void ProduceIndustryGoodsFromRate(Industry *i, bool scale)
if (amount != 0 && scale) { if (amount != 0 && scale) {
amount = ScaleQuantity(amount, _settings_game.economy.industry_cargo_scale_factor); amount = ScaleQuantity(amount, _settings_game.economy.industry_cargo_scale_factor);
} }
i->produced_cargo_waiting[j] = min(0xffff, i->produced_cargo_waiting[j] + amount); i->produced_cargo_waiting[j] = std::min<uint>(0xffff, i->produced_cargo_waiting[j] + amount);
} }
} }
@ -1815,7 +1815,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
/* Randomize inital production if non-original economy is used and there are no production related callbacks. */ /* Randomize inital production if non-original economy is used and there are no production related callbacks. */
if (!indspec->UsesOriginalEconomy()) { if (!indspec->UsesOriginalEconomy()) {
for (size_t ci = 0; ci < lengthof(i->production_rate); ci++) { for (size_t ci = 0; ci < lengthof(i->production_rate); ci++) {
i->production_rate[ci] = min((RandomRange(256) + 128) * i->production_rate[ci] >> 8, 255); i->production_rate[ci] = std::min((RandomRange(256) + 128) * i->production_rate[ci] >> 8, 255u);
} }
} }
@ -2281,7 +2281,7 @@ static uint GetNumberOfIndustries()
assert(lengthof(numof_industry_table) == ID_END); assert(lengthof(numof_industry_table) == ID_END);
uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.industry_density : (uint)ID_VERY_LOW; uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.industry_density : (uint)ID_VERY_LOW;
return min(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty])); return std::min<uint>(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty]));
} }
/** /**
@ -2357,7 +2357,7 @@ void IndustryBuildData::MonthlyLoop()
/* To prevent running out of unused industries for the player to connect, /* To prevent running out of unused industries for the player to connect,
* add a fraction of new industries each month, but only if the manager can keep up. */ * add a fraction of new industries each month, but only if the manager can keep up. */
uint max_behind = 1 + min(99u, ScaleByMapSize(3)); // At most 2 industries for small maps, and 100 at the biggest map (about 6 months industry build attempts). uint max_behind = 1 + std::min(99u, ScaleByMapSize(3)); // At most 2 industries for small maps, and 100 at the biggest map (about 6 months industry build attempts).
if (GetCurrentTotalNumberOfIndustries() + max_behind >= (this->wanted_inds >> 16)) { if (GetCurrentTotalNumberOfIndustries() + max_behind >= (this->wanted_inds >> 16)) {
this->wanted_inds += ScaleByMapSize(NEWINDS_PER_MONTH); this->wanted_inds += ScaleByMapSize(NEWINDS_PER_MONTH);
} }
@ -2425,7 +2425,7 @@ static void UpdateIndustryStatistics(Industry *i)
byte pct = 0; byte pct = 0;
if (i->this_month_production[j] != 0) { if (i->this_month_production[j] != 0) {
i->last_prod_year = _cur_year; i->last_prod_year = _cur_year;
pct = min(i->this_month_transported[j] * 256 / i->this_month_production[j], 255); pct = std::min(i->this_month_transported[j] * 256 / i->this_month_production[j], 255);
} }
i->last_month_pct_transported[j] = pct; i->last_month_pct_transported[j] = pct;
@ -2449,7 +2449,7 @@ void Industry::RecomputeProductionMultipliers()
/* Rates are rounded up, so e.g. oilrig always produces some passengers */ /* Rates are rounded up, so e.g. oilrig always produces some passengers */
for (size_t i = 0; i < lengthof(this->production_rate); i++) { for (size_t i = 0; i < lengthof(this->production_rate); i++) {
this->production_rate[i] = min(CeilDiv(indspec->production_rate[i] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF); this->production_rate[i] = std::min(CeilDiv(indspec->production_rate[i] * this->prod_level, PRODLEVEL_DEFAULT), 0xFFu);
} }
} }
@ -2582,10 +2582,10 @@ void IndustryBuildData::TryBuildNewIndustry()
const Industry *ind = PlaceIndustry(it, IACT_RANDOMCREATION, false); const Industry *ind = PlaceIndustry(it, IACT_RANDOMCREATION, false);
if (ind == nullptr) { if (ind == nullptr) {
this->builddata[it].wait_count = this->builddata[it].max_wait + 1; // Compensate for decrementing below. this->builddata[it].wait_count = this->builddata[it].max_wait + 1; // Compensate for decrementing below.
this->builddata[it].max_wait = min(1000, this->builddata[it].max_wait + 2); this->builddata[it].max_wait = std::min(1000, this->builddata[it].max_wait + 2);
} else { } else {
AdvertiseIndustryOpening(ind); AdvertiseIndustryOpening(ind);
this->builddata[it].max_wait = max(this->builddata[it].max_wait / 2, 1); // Reduce waiting time of the industry type. this->builddata[it].max_wait = std::max(this->builddata[it].max_wait / 2, 1); // Reduce waiting time of the industry type.
} }
} }
@ -2822,7 +2822,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
/* 4.5% chance for 3-23% (or 1 unit for very low productions) production change, /* 4.5% chance for 3-23% (or 1 unit for very low productions) production change,
* determined by mult value. If mult = 1 prod. increases, else (-1) it decreases. */ * determined by mult value. If mult = 1 prod. increases, else (-1) it decreases. */
if (Chance16I(1, 22, r >> 16)) { if (Chance16I(1, 22, r >> 16)) {
new_prod += mult * (max(((RandomRange(50) + 10) * old_prod) >> 8, 1U)); new_prod += mult * (std::max(((RandomRange(50) + 10) * old_prod) >> 8, 1U));
} }
/* Prevent production to overflow or Oil Rig passengers to be over-"produced" */ /* Prevent production to overflow or Oil Rig passengers to be over-"produced" */
@ -2867,7 +2867,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
/* Increase if needed */ /* Increase if needed */
while (mul-- != 0 && i->prod_level < PRODLEVEL_MAXIMUM) { while (mul-- != 0 && i->prod_level < PRODLEVEL_MAXIMUM) {
i->prod_level = min(i->prod_level * 2, PRODLEVEL_MAXIMUM); i->prod_level = std::min<int>(i->prod_level * 2, PRODLEVEL_MAXIMUM);
recalculate_multipliers = true; recalculate_multipliers = true;
if (str == STR_NULL) str = indspec->production_up_text; if (str == STR_NULL) str = indspec->production_up_text;
} }
@ -2878,7 +2878,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
closeit = true; closeit = true;
break; break;
} else { } else {
i->prod_level = max(i->prod_level / 2, (int)PRODLEVEL_MINIMUM); // typecast to int required to please MSVC i->prod_level = std::max<int>(i->prod_level / 2, PRODLEVEL_MINIMUM);
recalculate_multipliers = true; recalculate_multipliers = true;
if (str == STR_NULL) str = indspec->production_down_text; if (str == STR_NULL) str = indspec->production_down_text;
} }
@ -2970,7 +2970,7 @@ void IndustryDailyLoop()
uint perc = 3; // Between 3% and 9% chance of creating a new industry. uint perc = 3; // Between 3% and 9% chance of creating a new industry.
if ((_industry_builder.wanted_inds >> 16) > GetCurrentTotalNumberOfIndustries()) { if ((_industry_builder.wanted_inds >> 16) > GetCurrentTotalNumberOfIndustries()) {
perc = min(9u, perc + (_industry_builder.wanted_inds >> 16) - GetCurrentTotalNumberOfIndustries()); perc = std::min(9u, perc + (_industry_builder.wanted_inds >> 16) - GetCurrentTotalNumberOfIndustries());
} }
for (uint16 j = 0; j < change_loop; j++) { for (uint16 j = 0; j < change_loop; j++) {
if (Chance16(perc, 100)) { if (Chance16(perc, 100)) {

@ -434,7 +434,7 @@ public:
std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO);
Dimension strdim = GetStringBoundingBox(cargostring.c_str()); Dimension strdim = GetStringBoundingBox(cargostring.c_str());
if (strdim.width > max_minwidth) { if (strdim.width > max_minwidth) {
extra_lines_req = max(extra_lines_req, strdim.width / max_minwidth + 1); extra_lines_req = std::max(extra_lines_req, strdim.width / max_minwidth + 1);
strdim.width = max_minwidth; strdim.width = max_minwidth;
} }
d = maxdim(d, strdim); d = maxdim(d, strdim);
@ -444,7 +444,7 @@ public:
cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO);
strdim = GetStringBoundingBox(cargostring.c_str()); strdim = GetStringBoundingBox(cargostring.c_str());
if (strdim.width > max_minwidth) { if (strdim.width > max_minwidth) {
extra_lines_prd = max(extra_lines_prd, strdim.width / max_minwidth + 1); extra_lines_prd = std::max(extra_lines_prd, strdim.width / max_minwidth + 1);
strdim.width = max_minwidth; strdim.width = max_minwidth;
} }
d = maxdim(d, strdim); d = maxdim(d, strdim);
@ -966,22 +966,22 @@ public:
case EA_MULTIPLIER: case EA_MULTIPLIER:
if (button == 1) { if (button == 1) {
if (i->prod_level <= PRODLEVEL_MINIMUM) return; if (i->prod_level <= PRODLEVEL_MINIMUM) return;
i->prod_level = max<uint>(i->prod_level / 2, PRODLEVEL_MINIMUM); i->prod_level = std::max<uint>(i->prod_level / 2, PRODLEVEL_MINIMUM);
} else { } else {
if (i->prod_level >= PRODLEVEL_MAXIMUM) return; if (i->prod_level >= PRODLEVEL_MAXIMUM) return;
i->prod_level = minu(i->prod_level * 2, PRODLEVEL_MAXIMUM); i->prod_level = std::min<uint>(i->prod_level * 2, PRODLEVEL_MAXIMUM);
} }
break; break;
case EA_RATE: case EA_RATE:
if (button == 1) { if (button == 1) {
if (i->production_rate[line - IL_RATE1] <= 0) return; if (i->production_rate[line - IL_RATE1] <= 0) return;
i->production_rate[line - IL_RATE1] = max(i->production_rate[line - IL_RATE1] / 2, 0); i->production_rate[line - IL_RATE1] = std::max(i->production_rate[line - IL_RATE1] / 2, 0);
} else { } else {
if (i->production_rate[line - IL_RATE1] >= 255) return; if (i->production_rate[line - IL_RATE1] >= 255) return;
/* a zero production industry is unlikely to give anything but zero, so push it a little bit */ /* a zero production industry is unlikely to give anything but zero, so push it a little bit */
int new_prod = i->production_rate[line - IL_RATE1] == 0 ? 1 : i->production_rate[line - IL_RATE1] * 2; int new_prod = i->production_rate[line - IL_RATE1] == 0 ? 1 : i->production_rate[line - IL_RATE1] * 2;
i->production_rate[line - IL_RATE1] = minu(new_prod, 255); i->production_rate[line - IL_RATE1] = std::min<uint>(new_prod, 255);
} }
break; break;
@ -1468,7 +1468,7 @@ protected:
} }
/* Display first 3 cargos */ /* Display first 3 cargos */
for (size_t j = 0; j < min<size_t>(3, cargos.size()); j++) { for (size_t j = 0; j < std::min<size_t>(3, cargos.size()); j++) {
CargoInfo ci = cargos[j]; CargoInfo ci = cargos[j];
SetDParam(p++, STR_INDUSTRY_DIRECTORY_ITEM_INFO); SetDParam(p++, STR_INDUSTRY_DIRECTORY_ITEM_INFO);
SetDParam(p++, std::get<0>(ci)); SetDParam(p++, std::get<0>(ci));
@ -2399,10 +2399,10 @@ struct IndustryCargoesWindow : public Window {
const IndustrySpec *indsp = GetIndustrySpec(it); const IndustrySpec *indsp = GetIndustrySpec(it);
if (!indsp->enabled) continue; if (!indsp->enabled) continue;
this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(indsp->name)); this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(indsp->name));
CargoesField::max_cargoes = max<uint>(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsCargoIDValid)); CargoesField::max_cargoes = std::max<uint>(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsCargoIDValid));
CargoesField::max_cargoes = max<uint>(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsCargoIDValid)); CargoesField::max_cargoes = std::max<uint>(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsCargoIDValid));
} }
d.width = max(d.width, this->ind_textsize.width); d.width = std::max(d.width, this->ind_textsize.width);
d.height = this->ind_textsize.height; d.height = this->ind_textsize.height;
this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(STR_INDUSTRY_CARGOES_SELECT_INDUSTRY)); this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(STR_INDUSTRY_CARGOES_SELECT_INDUSTRY));
@ -2420,7 +2420,7 @@ struct IndustryCargoesWindow : public Window {
d.width += 2 * HOR_TEXT_PADDING; d.width += 2 * HOR_TEXT_PADDING;
/* Ensure the height is enough for the industry type text, for the horizontal connections, and for the cargo labels. */ /* Ensure the height is enough for the industry type text, for the horizontal connections, and for the cargo labels. */
uint min_ind_height = CargoesField::VERT_CARGO_EDGE * 2 + CargoesField::max_cargoes * FONT_HEIGHT_NORMAL + (CargoesField::max_cargoes - 1) * CargoesField::VERT_CARGO_SPACE; uint min_ind_height = CargoesField::VERT_CARGO_EDGE * 2 + CargoesField::max_cargoes * FONT_HEIGHT_NORMAL + (CargoesField::max_cargoes - 1) * CargoesField::VERT_CARGO_SPACE;
d.height = max(d.height + 2 * VERT_TEXT_PADDING, min_ind_height); d.height = std::max(d.height + 2 * VERT_TEXT_PADDING, min_ind_height);
CargoesField::industry_width = d.width; CargoesField::industry_width = d.width;
CargoesField::normal_height = d.height + CargoesField::VERT_INTER_INDUSTRY_SPACE; CargoesField::normal_height = d.height + CargoesField::VERT_INTER_INDUSTRY_SPACE;
@ -2437,11 +2437,11 @@ struct IndustryCargoesWindow : public Window {
break; break;
case WID_IC_IND_DROPDOWN: case WID_IC_IND_DROPDOWN:
size->width = max(size->width, this->ind_textsize.width + padding.width); size->width = std::max(size->width, this->ind_textsize.width + padding.width);
break; break;
case WID_IC_CARGO_DROPDOWN: case WID_IC_CARGO_DROPDOWN:
size->width = max(size->width, this->cargo_textsize.width + padding.width); size->width = std::max(size->width, this->cargo_textsize.width + padding.width);
break; break;
} }
} }
@ -2646,7 +2646,7 @@ struct IndustryCargoesWindow : public Window {
/* Make a field consisting of two cargo columns. */ /* Make a field consisting of two cargo columns. */
int num_supp = CountMatchingProducingIndustries(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)) + houses_supply; int num_supp = CountMatchingProducingIndustries(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)) + houses_supply;
int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)) + houses_accept; int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)) + houses_accept;
int num_indrows = max(3, max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels. int num_indrows = std::max(3, std::max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels.
for (int i = 0; i < num_indrows; i++) { for (int i = 0; i < num_indrows; i++) {
CargoesRow &row = this->fields.emplace_back(); CargoesRow &row = this->fields.emplace_back();
row.columns[0].MakeEmpty(CFT_EMPTY); row.columns[0].MakeEmpty(CFT_EMPTY);
@ -2722,7 +2722,7 @@ struct IndustryCargoesWindow : public Window {
bool houses_accept = HousesCanAccept(&cid, 1); bool houses_accept = HousesCanAccept(&cid, 1);
int num_supp = CountMatchingProducingIndustries(&cid, 1) + houses_supply + 1; // Ensure room for the cargo label. int num_supp = CountMatchingProducingIndustries(&cid, 1) + houses_supply + 1; // Ensure room for the cargo label.
int num_cust = CountMatchingAcceptingIndustries(&cid, 1) + houses_accept; int num_cust = CountMatchingAcceptingIndustries(&cid, 1) + houses_accept;
int num_indrows = max(num_supp, num_cust); int num_indrows = std::max(num_supp, num_cust);
for (int i = 0; i < num_indrows; i++) { for (int i = 0; i < num_indrows; i++) {
CargoesRow &row = this->fields.emplace_back(); CargoesRow &row = this->fields.emplace_back();
row.columns[0].MakeEmpty(CFT_EMPTY); row.columns[0].MakeEmpty(CFT_EMPTY);

@ -38,7 +38,7 @@ static void PaySharingFee(Vehicle *v, Owner infra_owner, Money cost)
Company *c = Company::Get(v->owner); Company *c = Company::Get(v->owner);
if (!_settings_game.economy.sharing_payment_in_debt) { if (!_settings_game.economy.sharing_payment_in_debt) {
/* Do not allow fee payment to drop (money - loan) below 0. */ /* Do not allow fee payment to drop (money - loan) below 0. */
cost = min(cost, (c->money - c->current_loan) << 8); cost = std::min(cost, (c->money - c->current_loan) << 8);
if (cost <= 0) return; if (cost <= 0) return;
} }
v->profit_this_year -= cost; v->profit_this_year -= cost;

@ -232,7 +232,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
uint a = comment_alloc; uint a = comment_alloc;
/* add to comment */ /* add to comment */
if (ns > a) { if (ns > a) {
a = max(a, 128U); a = std::max(a, 128U);
do a *= 2; while (a < ns); do a *= 2; while (a < ns);
comment = ReallocT(comment, comment_alloc = a); comment = ReallocT(comment, comment_alloc = a);
} }

@ -135,12 +135,12 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped)
* So give it a z-malus of 4 in the first iterations. */ * So give it a z-malus of 4 in the first iterations. */
int z = 0; int z = 0;
if (clamp_to_map) { if (clamp_to_map) {
for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2; for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + std::max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + std::max(z, 4) - 4, min_coord, max_y)) / 2;
for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2; for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + std::max(z, m) - m, min_coord, max_x), Clamp(pt.y + std::max(z, m) - m, min_coord, max_y)) / 2;
for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2; for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2;
} else { } else {
for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + max(z, 4) - 4, pt.y + max(z, 4) - 4) / 2; for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + std::max(z, 4) - 4, pt.y + std::max(z, 4) - 4) / 2;
for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + max(z, m) - m, pt.y + max(z, m) - m) / 2; for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + std::max(z, m) - m, pt.y + std::max(z, m) - m) / 2;
for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + z, pt.y + z ) / 2; for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + z, pt.y + z ) / 2;
} }
@ -639,8 +639,8 @@ void SetSnowLine(byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS])
for (uint i = 0; i < SNOW_LINE_MONTHS; i++) { for (uint i = 0; i < SNOW_LINE_MONTHS; i++) {
for (uint j = 0; j < SNOW_LINE_DAYS; j++) { for (uint j = 0; j < SNOW_LINE_DAYS; j++) {
_snow_line->highest_value = max(_snow_line->highest_value, table[i][j]); _snow_line->highest_value = std::max(_snow_line->highest_value, table[i][j]);
_snow_line->lowest_value = min(_snow_line->lowest_value, table[i][j]); _snow_line->lowest_value = std::min(_snow_line->lowest_value, table[i][j]);
} }
} }
} }

@ -1806,7 +1806,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Is jy s
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Kullery STR_CHEATS :{WHITE}Kullery
STR_CHEATS_TOOLTIP :{BLACK}Keuseblokkies wys aan as jy die kulkode voorheen gebruik het STR_CHEATS_TOOLTIP :{BLACK}Keuseblokkies wys aan as jy die kulkode voorheen gebruik het
STR_CHEATS_WARNING :{BLACK}Waarskuwing! U staan op die punt om jou mededinger te veraai. Hou in gedagte dat so 'n skande vir ewigheid sal onthou word.
STR_CHEAT_MONEY :{LTBLUE}Vermeerder geld met {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Vermeerder geld met {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Speel as maatskappy: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Speel as maatskappy: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tower stootskraper (verwyder nywerhede, onbeweegbare voorwerpe): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tower stootskraper (verwyder nywerhede, onbeweegbare voorwerpe): {ORANGE}{STRING}
@ -2315,6 +2314,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bou 'n
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Verbind roetebaken STR_JOIN_WAYPOINT_CAPTION :{WHITE}Verbind roetebaken
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bou 'n aparte roetebaken STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bou 'n aparte roetebaken
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegkonstruksie STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegkonstruksie
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriese spoorwegkonstruksie STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriese spoorwegkonstruksie

@ -192,6 +192,7 @@ STR_COLOUR_WHITE :ابيض
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}ميل/س STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}ميل/س
STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}كم/س STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}كم/س
STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}م/ث STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}م/ث
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}مربعات/ اليوم
STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}حصان STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}حصان
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}حصان STR_UNITS_POWER_METRIC :{COMMA}{NBSP}حصان
@ -226,6 +227,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}حدد
STR_BUTTON_SORT_BY :{BLACK} رتب بـ STR_BUTTON_SORT_BY :{BLACK} رتب بـ
STR_BUTTON_LOCATION :{BLACK}الموقع STR_BUTTON_LOCATION :{BLACK}الموقع
STR_BUTTON_RENAME :{BLACK}اعادة تسمية STR_BUTTON_RENAME :{BLACK}اعادة تسمية
STR_BUTTON_CATCHMENT :{BLACK}مدى التغطية
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}اغلاق الاطار STR_TOOLTIP_CLOSE_WINDOW :{BLACK}اغلاق الاطار
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}عنوان الاطار- اسحب لتحريك الاطار STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}عنوان الاطار- اسحب لتحريك الاطار
@ -880,6 +882,8 @@ STR_GAME_OPTIONS_CURRENCY_TRY :ليرة ترك
STR_GAME_OPTIONS_CURRENCY_SKK :كرونا سلوفاكية (SKK) STR_GAME_OPTIONS_CURRENCY_SKK :كرونا سلوفاكية (SKK)
STR_GAME_OPTIONS_CURRENCY_BRL :ريال برازيلي (BRL) STR_GAME_OPTIONS_CURRENCY_BRL :ريال برازيلي (BRL)
STR_GAME_OPTIONS_CURRENCY_EEK :كرونا استونية (EEK) STR_GAME_OPTIONS_CURRENCY_EEK :كرونا استونية (EEK)
STR_GAME_OPTIONS_CURRENCY_KRW :وون كوريا الجنوبية (KRW)
STR_GAME_OPTIONS_CURRENCY_ZAR :راند جنوب أفريقيا (ZAR)
STR_GAME_OPTIONS_CURRENCY_CUSTOM :مخصص ... STR_GAME_OPTIONS_CURRENCY_CUSTOM :مخصص ...
############ end of currency region ############ end of currency region
@ -1088,6 +1092,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :السماح ب
STR_CONFIG_SETTING_CATCHMENT :السماح بحدود اكثر واقعية للمحطات بحسب الحجم: {STRING} STR_CONFIG_SETTING_CATCHMENT :السماح بحدود اكثر واقعية للمحطات بحسب الحجم: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE :السماح بحذف اكثر من الطرق المملوكة للمدينة و الجسور و غيرها: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE :السماح بحذف اكثر من الطرق المملوكة للمدينة و الجسور و غيرها: {STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT :كمية دخان/شرار القطارات:{STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT :كمية دخان/شرار القطارات:{STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :حدد مقدار الدخان أو عدد الشرارت من المركبات
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :موديل تسارع القطارات: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :موديل تسارع القطارات: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :نمط تسارع عربات الطريق: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :نمط تسارع عربات الطريق: {STRING}
STR_CONFIG_SETTING_FORBID_90_DEG :منع القطارات والسفن من الدوران بزاوية تسعين درجة : {STRING} STR_CONFIG_SETTING_FORBID_90_DEG :منع القطارات والسفن من الدوران بزاوية تسعين درجة : {STRING}
@ -1098,6 +1103,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :بدون
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :ككل المصانع الأخرى STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :ككل المصانع الأخرى
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :تنقيب STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :تنقيب
STR_CONFIG_SETTING_MULTIPINDTOWN :السماح بوجود أكثر من مصنع من نفس النوع في المدينة الواحدة: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN :السماح بوجود أكثر من مصنع من نفس النوع في المدينة الواحدة: {STRING}
STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :على جانب القيادة
STR_CONFIG_SETTING_SHOWFINANCES :أعرض نافذة المالية في آخر السنة: {STRING} STR_CONFIG_SETTING_SHOWFINANCES :أعرض نافذة المالية في آخر السنة: {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :الامر الجديد - بدون توقف - قياسيا: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :الامر الجديد - بدون توقف - قياسيا: {STRING}
STR_CONFIG_SETTING_STOP_LOCATION :اوامر القطار الجديدة تتوقف قياسيا في {STRING} رصيف المحطة STR_CONFIG_SETTING_STOP_LOCATION :اوامر القطار الجديدة تتوقف قياسيا في {STRING} رصيف المحطة
@ -1117,6 +1123,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :منخفض
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :طبيعي STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :طبيعي
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :السماح للعربات بالعبور خلال المواقف المملوكة داخل المدن: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :السماح للعربات بالعبور خلال المواقف المملوكة داخل المدن: {STRING}
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :السماح بمرور العربات خلال المحطات المملوكة للمنافسين: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :السماح بمرور العربات خلال المحطات المملوكة للمنافسين: {STRING}
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :السماح ببناء مواقف السيارات على الطرق المملوكة لشركات أخرى
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}تغير هذا الخيار غير متاح عندما يكون هناك عربات STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}تغير هذا الخيار غير متاح عندما يكون هناك عربات
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :صيانة البنية التحتية: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :صيانة البنية التحتية: {STRING}
@ -1244,6 +1251,7 @@ STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :عطل ادوا
STR_CONFIG_SETTING_MAX_TRAINS :الحد الأعلى لعدد القطارات لكل شركة: {STRING} STR_CONFIG_SETTING_MAX_TRAINS :الحد الأعلى لعدد القطارات لكل شركة: {STRING}
STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :الحد الأعلى لعدد العربات لكل شركة: {STRING} STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :الحد الأعلى لعدد العربات لكل شركة: {STRING}
STR_CONFIG_SETTING_MAX_AIRCRAFT :الحد الأعلى لعدد الطائرات لكل شركة: {STRING} STR_CONFIG_SETTING_MAX_AIRCRAFT :الحد الأعلى لعدد الطائرات لكل شركة: {STRING}
STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :الحد الأقصى لعدد الطائرات التي يمكن أن تمتلكها الشركة
STR_CONFIG_SETTING_MAX_SHIPS :الحد الأعلى لعدد السفن لكل شركة: {STRING} STR_CONFIG_SETTING_MAX_SHIPS :الحد الأعلى لعدد السفن لكل شركة: {STRING}
STR_CONFIG_SETTING_AI_BUILDS_TRAINS :حظر القطارات على الحاسوب: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS :حظر القطارات على الحاسوب: {STRING}
@ -1251,6 +1259,7 @@ STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :حظر العر
STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :حظر الطائرات على الحاسوب: {STRING} STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :حظر الطائرات على الحاسوب: {STRING}
STR_CONFIG_SETTING_AI_BUILDS_SHIPS :حظر السفن على الحاسوب: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS :حظر السفن على الحاسوب: {STRING}
STR_CONFIG_SETTING_AI_PROFILE_EASY :سهل
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح بالذكاء الصناعي في اللعب الجماعي : {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح بالذكاء الصناعي في اللعب الجماعي : {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes قبل تعليق الاسكربت: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes قبل تعليق الاسكربت: {STRING}
@ -1289,6 +1298,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :ممتلئ
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :الاخبار الملونة تظهر في: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :الاخبار الملونة تظهر في: {STRING}
STR_CONFIG_SETTING_STARTING_YEAR :سنة البدايه: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :سنة البدايه: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :لا تنتهي
STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING}
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :السماح باستخدام اشارات واجهة المستخدم الرسومية: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :السماح باستخدام اشارات واجهة المستخدم الرسومية: {STRING}
@ -1336,11 +1346,15 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :سريع
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :سريع جدا STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :سريع جدا
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف المدن المبدئي: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف المدن المبدئي: {STRING}
STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :ضبط هذا إلى أقل من 100٪ يؤدي إلى جعل التوزيع المتماثل يتصرف مثل التوزيع غير المتماثل. سيتم إعادة شحنات أقل غصبا إذا تم إرسال مبلغ معين إلى المحطة. إذا قمت بتعيينه على 0٪ ، فإن التوزيع المتماثل يتصرف تمامًا مثل التوزيع غير المتماثل
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :(متري (كم / ساعة
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :(متري (طن
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE ::وحدات جهد الجر {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :م) متري) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :م) متري)
@ -1442,7 +1456,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}هل ت
# Cheat window # Cheat window
STR_CHEATS :{WHITE}اسرار STR_CHEATS :{WHITE}اسرار
STR_CHEATS_TOOLTIP :{BLACK}علامة صح اذا استخدمت هذا السرمن قبل STR_CHEATS_TOOLTIP :{BLACK}علامة صح اذا استخدمت هذا السرمن قبل
STR_CHEATS_WARNING :{BLACK}تحذير! انت على وشك ان تغش منافسيك. إعلم انهم سيتذكرون عليك هذا العار للإبد
STR_CHEAT_MONEY :{LTBLUE}زيادة السيولة بـ {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}زيادة السيولة بـ {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}العب كشركة{ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}العب كشركة{ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}الجرافة السحرية - لازالة المصانع و الاجسام غير القابلة للازالة.{ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}الجرافة السحرية - لازالة المصانع و الاجسام غير القابلة للازالة.{ORANGE}{STRING}
@ -1830,6 +1843,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK} اخت
STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK} ضع علامة على التحديثات للمحتويات الموجودة و التي سيتم تحميلها STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK} ضع علامة على التحديثات للمحتويات الموجودة و التي سيتم تحميلها
STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK} مسح الكل STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK} مسح الكل
STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK} ضع علامة على المحتوى التي لن يتم تحميلها STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK} ضع علامة على المحتوى التي لن يتم تحميلها
STR_CONTENT_SEARCH_EXTERNAL :{BLACK}بحث المواقع الخارجية
STR_CONTENT_FILTER_TITLE :{BLACK}مُرَشِح: STR_CONTENT_FILTER_TITLE :{BLACK}مُرَشِح:
STR_CONTENT_DOWNLOAD_CAPTION :{BLACK} تحميل STR_CONTENT_DOWNLOAD_CAPTION :{BLACK} تحميل
STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK} ابدأ تحميل المحتويات المختارة STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK} ابدأ تحميل المحتويات المختارة
@ -1915,6 +1929,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW} بنا
STR_JOIN_WAYPOINT_CAPTION :{WHITE}اربط نقطة العبور STR_JOIN_WAYPOINT_CAPTION :{WHITE}اربط نقطة العبور
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW} ابني نقطة عبور مستقلة STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW} ابني نقطة عبور مستقلة
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :بناء السكك الحديدية STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :بناء السكك الحديدية
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :بناء سكة القطار الكهربائية STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :بناء سكة القطار الكهربائية
@ -2200,6 +2216,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF:
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}الشحنة المقبولة: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}الشحنة المقبولة: {LTBLUE}
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA} /8 {STRING}) STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA} /8 {STRING})
STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}:نوع الطريق {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}:نوع الطريق {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}:نوع الترام {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}حدود سرعة سكة الحديد: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}حدود سرعة سكة الحديد: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}حدود سرعه الطريق: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}حدود سرعه الطريق: {LTBLUE}{VELOCITY}
@ -2301,9 +2318,12 @@ STR_ABOUT_VERSION :{BLACK}النس
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-{STRING} فريق النسخة المفتوحة STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-{STRING} فريق النسخة المفتوحة
# Framerate display window # Framerate display window
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} صورة في الثانية
############ Leave those lines in this order!! ############ Leave those lines in this order!!
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
############ End of leave-in-this-order ############ End of leave-in-this-order
############ Leave those lines in this order!! ############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMESCRIPT :كتابة اللعبة
############ End of leave-in-this-order ############ End of leave-in-this-order
@ -2329,6 +2349,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}تفاص
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}لا توجد معلومات متاحة STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}لا توجد معلومات متاحة
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}اضافات جديدة: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}اضافات جديدة: {WHITE}{STRING}
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}الكتابة على الملف
STR_SAVELOAD_OSKTITLE :{BLACK}ادخل اسم الحفظ للعبة STR_SAVELOAD_OSKTITLE :{BLACK}ادخل اسم الحفظ للعبة
@ -2639,6 +2660,7 @@ STR_GOAL_QUESTION_CAPTION_WARNING :تحذير
STR_GOAL_QUESTION_CAPTION_ERROR :خطا STR_GOAL_QUESTION_CAPTION_ERROR :خطا
############ Start of Goal Question button list ############ Start of Goal Question button list
STR_GOAL_QUESTION_BUTTON_RETRY :إعادة المحاولة
############ End of Goal Question button list ############ End of Goal Question button list
# Subsidies window # Subsidies window
@ -2651,6 +2673,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING
STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}اضغط على الخدمة لتوسيط الخريطة على المصنع/المدينة. اضغط + كنترول لفتح شاشة عرض جديدة للمدينة. STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}اضغط على الخدمة لتوسيط الخريطة على المصنع/المدينة. اضغط + كنترول لفتح شاشة عرض جديدة للمدينة.
# Story book window # Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}كتاب القصة
# Station list window # Station list window
STR_STATION_LIST_TOOLTIP :{BLACK}اسم المحطة - اضغط على اسم المحطة لتوسيطها في الشاشة. اضغط + كنترول لفتح شاشة عرض جديدة بمنطقة المحطة. STR_STATION_LIST_TOOLTIP :{BLACK}اسم المحطة - اضغط على اسم المحطة لتوسيطها في الشاشة. اضغط + كنترول لفتح شاشة عرض جديدة بمنطقة المحطة.
@ -2676,6 +2699,7 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}يقبل
STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}معدل النقل STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}معدل النقل
STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}اظهار معدل النقل للمحطة STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}اظهار معدل النقل للمحطة
STR_STATION_VIEW_WAITING_AMOUNT :الكمية: في الانتظار
############ range for rating starts ############ range for rating starts
@ -2787,7 +2811,9 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}نحن
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}صناعات STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}صناعات
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}-بدون- STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}-بدون-
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING}
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}اسماء المصانع - اضغط على اسم المصنع لتوسيط الشاشة عليه. اضغط + كنترول لفتح شاشة عرض جديدة لمنطقة المصنع. STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}اسماء المصانع - اضغط على اسم المصنع لتوسيط الشاشة عليه. اضغط + كنترول لفتح شاشة عرض جديدة لمنطقة المصنع.
STR_INDUSTRY_DIRECTORY_FILTER_NONE :بدون
# Industry view # Industry view
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
@ -2894,6 +2920,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK} الس
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} العربات ذات الطاقة: {GOLD}+{POWER}{BLACK} الوزن: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} العربات ذات الطاقة: {GOLD}+{POWER}{BLACK} الوزن: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :كل انواع الحمولة STR_PURCHASE_INFO_ALL_TYPES :كل انواع الحمولة
STR_PURCHASE_INFO_NONE :بدون
STR_PURCHASE_INFO_ALL_BUT :الكل الا {CARGO_LIST} STR_PURCHASE_INFO_ALL_BUT :الكل الا {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}تأثير الجذب القصى: {GOLD}{FORCE} STR_PURCHASE_INFO_MAX_TE :{BLACK}تأثير الجذب القصى: {GOLD}{FORCE}
@ -2926,6 +2953,7 @@ STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}اعاد
STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}اعادة تسمية نوع الطائرة STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}اعادة تسمية نوع الطائرة
STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}عرض
STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK} تبيدل بين إخفاء / عرض نوع الطائرة STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK} تبيدل بين إخفاء / عرض نوع الطائرة
@ -3192,6 +3220,7 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}السع
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (تغيير) STR_REFIT_CAPTION :{WHITE}{VEHICLE} (تغيير)
STR_REFIT_TITLE :{GOLD}اختر نوع الحمولة ... STR_REFIT_TITLE :{GOLD}اختر نوع الحمولة ...
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}{}{BLACK}تكلفة التغيير: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}{}{BLACK}تكلفة التغيير: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}:المساحة الجديدة {GOLD}{CARGO_LONG}{}{BLACK}:الدخل من التجديد {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}تكلفة اعادة التهيئة: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}تكلفة اعادة التهيئة: {RED}{CURRENCY_LONG}
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها. STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها.
@ -3479,6 +3508,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت
STR_AI_LIST_CANCEL :{BLACK} الغاء STR_AI_LIST_CANCEL :{BLACK} الغاء
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}التقط لقطة شاشة كاملة
# AI Parameters # AI Parameters
STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق
@ -3753,6 +3783,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}تعذر
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}تعذر إزاله سكه الترام من هنا... STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}تعذر إزاله سكه الترام من هنا...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... لا يوجد طريق STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... لا يوجد طريق
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... لا يوجد سكه ترام هنا STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... لا يوجد سكه ترام هنا
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}لا يوجد ترام مناسب
# Waterway construction errors # Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}تعذر بناء القناه هنا... STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}تعذر بناء القناه هنا...

@ -1682,7 +1682,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}¿Segur
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Trukoak STR_CHEATS :{WHITE}Trukoak
STR_CHEATS_TOOLTIP :{BLACK}Kontrol laukiek erakutsiko dute trukoak erabili badituzu STR_CHEATS_TOOLTIP :{BLACK}Kontrol laukiek erakutsiko dute trukoak erabili badituzu
STR_CHEATS_WARNING :{BLACK}Abisua! Zure kideak traizionatzear zaude. Gogoratu traizioa ez dela inoiz ahaztuko
STR_CHEAT_MONEY :{LTBLUE}Dirua {CURRENCY_LONG}-etan areagotu STR_CHEAT_MONEY :{LTBLUE}Dirua {CURRENCY_LONG}-etan areagotu
STR_CHEAT_CHANGE_COMPANY :{LTBLUE} {ORANGE}{COMMA} konpainiarekin jolastu STR_CHEAT_CHANGE_COMPANY :{LTBLUE} {ORANGE}{COMMA} konpainiarekin jolastu
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magikoa (edozer ezabatzen du): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magikoa (edozer ezabatzen du): {ORANGE}{STRING}
@ -2177,6 +2176,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Geltoki
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bidepuntua lotu STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bidepuntua lotu
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ibilbide puntu bereizitua eraiki STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ibilbide puntu bereizitua eraiki
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Trenbidea eraiki STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Trenbidea eraiki
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Trenbide elektrikoa eraiki STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Trenbide elektrikoa eraiki

@ -2116,7 +2116,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Вы ў
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Махлярства (чыты) STR_CHEATS :{WHITE}Махлярства (чыты)
STR_CHEATS_TOOLTIP :{BLACK}Птушкі паказваюць, ці выкарыстоўвалі Вы гэты чыт раней STR_CHEATS_TOOLTIP :{BLACK}Птушкі паказваюць, ці выкарыстоўвалі Вы гэты чыт раней
STR_CHEATS_WARNING :{BLACK}Увага, Вы зьбіраецеся здрадзіць сваім спаборнікам! Гэтага вам ніколі не даруюць!
STR_CHEAT_MONEY :{LTBLUE}Дадаць {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Дадаць {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Гульня за кампанію: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Гульня за кампанію: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Чароўны дынамiт (знос УСЯГО): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Чароўны дынамiт (знос УСЯГО): {ORANGE}{STRING}
@ -2640,6 +2639,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Паб
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Аб'яднаць пункты шляху STR_JOIN_WAYPOINT_CAPTION :{WHITE}Аб'яднаць пункты шляху
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Пабудаваць асобны пункт шляху STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Пабудаваць асобны пункт шляху
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Чыгунка STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Чыгунка
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Электрыфікаваная чыгунка STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Электрыфікаваная чыгунка

@ -1816,7 +1816,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Você t
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Trapaças STR_CHEATS :{WHITE}Trapaças
STR_CHEATS_TOOLTIP :{BLACK}As caixas de verificação indicam se você usou esta trapaça antes STR_CHEATS_TOOLTIP :{BLACK}As caixas de verificação indicam se você usou esta trapaça antes
STR_CHEATS_WARNING :{BLACK}Atenção! Você está prestes a trair os seus companheiros oponentes. Tenha em mente que tal desgraça será lembrada pela eternidade
STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando pela Co.: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando pela Co.: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (destrói indústrias, objetos estáticos): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (destrói indústrias, objetos estáticos): {ORANGE}{STRING}
@ -2325,6 +2324,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir ponto de controle STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir ponto de controle
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controle separado STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controle separado
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construir ferrovias STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construir ferrovias
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construir ferrovias (elétricas) STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construir ferrovias (elétricas)

@ -1728,7 +1728,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Иск
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Кодове STR_CHEATS :{WHITE}Кодове
STR_CHEATS_TOOLTIP :{BLACK}Кутийките показват дали този код е бил използван STR_CHEATS_TOOLTIP :{BLACK}Кутийките показват дали този код е бил използван
STR_CHEATS_WARNING :{BLACK}Внимание! По този начин ще измамите своите съперници. Имайте в предвид, че това безчестие ще бъде запомнено вовеки веков.
STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Играе като компания: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Играе като компания: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Магически булдозер (премахва промишленост, неподвижни обекти): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Магически булдозер (премахва промишленост, неподвижни обекти): {ORANGE}{STRING}
@ -2230,6 +2229,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Нап
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини пътеводител STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини пътеводител
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построи отделен пътеводител STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построи отделен пътеводител
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Конструкции за Двурелсов път STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Конструкции за Двурелсов път
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Строене на електрифицирана ЖП мрежа STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Строене на електрифицирана ЖП мрежа

@ -1452,6 +1452,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantingues les
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantingues les eines de construcció pels ponts, túnels, etc. obertes després d'utilitzar-les STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantingues les eines de construcció pels ponts, túnels, etc. obertes després d'utilitzar-les
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupa les despeses a la finestra de finances de la companyia: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupa les despeses a la finestra de finances de la companyia: {STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Defineix la disposició de la companyia a la finestra de despeses STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Defineix la disposició de la companyia a la finestra de despeses
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Treu automàticament els senyals durant la construcció ferroviària: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Treu automàticament els senyals ferroviaris que hi hagi pel mig durant la construcció de rail. Aneu amb compte ja que pot provocar col·lisions de trens.
STR_CONFIG_SETTING_SOUND_TICKER :Barra de notícies: {STRING} STR_CONFIG_SETTING_SOUND_TICKER :Barra de notícies: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reprodueix un so quan apareixen les notícies resumides a la barra inferior STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reprodueix un so quan apareixen les notícies resumides a la barra inferior
@ -1836,7 +1838,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Esteu s
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Trampes STR_CHEATS :{WHITE}Trampes
STR_CHEATS_TOOLTIP :{BLACK}Les caselles de selecció indiquen si heu fet servir aquesta trampa. STR_CHEATS_TOOLTIP :{BLACK}Les caselles de selecció indiquen si heu fet servir aquesta trampa.
STR_CHEATS_WARNING :{BLACK}Atenció! Esteu a punt d'enredar als altres jugadors. Penseu que una cosa així serà recordada per tota l'eternitat.
STR_CHEAT_MONEY :{LTBLUE}Augmenta els diners de la companyia actual en {CURRENCY_LONG}. STR_CHEAT_MONEY :{LTBLUE}Augmenta els diners de la companyia actual en {CURRENCY_LONG}.
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Juga amb la companyia: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Juga amb la companyia: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Eruga màgica (treu indústries i altres objectes inamovibles): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Eruga màgica (treu indústries i altres objectes inamovibles): {ORANGE}{STRING}
@ -2233,6 +2234,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} s'
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ha començat una nova companyia (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ha començat una nova companyia (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ha deixat la partida ({2:STRING}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ha deixat la partida ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ha canviat el seu nom a {STRING} STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ha canviat el seu nom a {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha donat {2:CURRENCY_LONG} a {1:STRING}.
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha tancat la sessió STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha tancat la sessió
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment... STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment...
STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING} STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING}
@ -2351,6 +2353,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Uneix punt de pas STR_JOIN_WAYPOINT_CAPTION :{WHITE}Uneix punt de pas
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construeix un punt de pas separat STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construeix un punt de pas separat
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}S'ha desactivat ja que actualment no disposeu de vehicles per usar aquesta infraestructura.
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construcció de ferrocarril STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construcció de ferrocarril
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construcció de ferrocarril elèctric STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construcció de ferrocarril elèctric
@ -3373,7 +3378,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Trasllad
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Trasllada la seu a un altre lloc amb el cost d'un 1% del valor de la companyia. Amb Maj+Clic, mostra el cost estimat sense traslladar la seu. STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Trasllada la seu a un altre lloc amb el cost d'un 1% del valor de la companyia. Amb Maj+Clic, mostra el cost estimat sense traslladar la seu.
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalls STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalls
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Veure els detalls de la infraestructura de la companyia. STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Veure els detalls de la infraestructura de la companyia.
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Entrega diners STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dóna diners
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Doneu diners a aquesta companyia.
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Modifica la cara STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Modifica la cara
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Modifica la cara del president de la companyia. STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Modifica la cara del president de la companyia.
@ -3391,7 +3397,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Ven un 2
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nom de la companyia STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nom de la companyia
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom del president STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom del president
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introdueix la quantitat de diners que vols donar STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Escriviu la quantitat de diners que voleu donar
STR_BUY_COMPANY_MESSAGE :{WHITE}Estem venent la nostra companyia de transports.{}{}Vols comprar {COMPANY} per {CURRENCY_LONG}? STR_BUY_COMPANY_MESSAGE :{WHITE}Estem venent la nostra companyia de transports.{}{}Vols comprar {COMPANY} per {CURRENCY_LONG}?
@ -4018,6 +4024,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Remodela a {ST
STR_ORDER_STOP_ORDER :(Para) STR_ORDER_STOP_ORDER :(Para)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No pot usar l'estació){POP_COLOUR} {STRING} {STATION} {STRING}
STR_ORDER_IMPLICIT :(Implícit) STR_ORDER_IMPLICIT :(Implícit)
@ -4343,6 +4350,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... No q
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} necessaris STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} necessaris
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}No es pot amortitzar préstec... STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}No es pot amortitzar préstec...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}No es poden regalar els diners deixats pel banc... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}No es poden regalar els diners deixats pel banc...
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}No podeu donar diners a aquesta companyia...
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No pots comprar la companyia... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No pots comprar la companyia...
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No es pot construir la seu de la companyia... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No es pot construir la seu de la companyia...
STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}No pots comprar el 25% de participació en aquesta companyia... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}No pots comprar el 25% de participació en aquesta companyia...
@ -4469,6 +4477,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipus de cotxer
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} és massa llarg després de la substitució STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} és massa llarg després de la substitució
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No s'han aplicat normes d'autosubstitució/renovació STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No s'han aplicat normes d'autosubstitució/renovació
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(límit de diners) STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(límit de diners)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}El vehicle nou no pot portar {STRING}.
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}El vehicle nou no pot complir el remodelat de l'ordre {NUM}.
# Rail construction errors # Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinació de vies impossible STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinació de vies impossible

@ -1911,7 +1911,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Doista
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Varanje STR_CHEATS :{WHITE}Varanje
STR_CHEATS_TOOLTIP :{BLACK}Kvačice ukazuju na to jesi li koristio ovo varanje prije STR_CHEATS_TOOLTIP :{BLACK}Kvačice ukazuju na to jesi li koristio ovo varanje prije
STR_CHEATS_WARNING :{BLACK}Upozorenje! Upravo se spremaš izdati svoj kolege natjecatelje. Imaj na umu da se takva sramota pamti zauvijek
STR_CHEAT_MONEY :{LTBLUE}Povećaj novce za iznos {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Povećaj novce za iznos {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Igraj kao tvrtka: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Igraj kao tvrtka: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magični buldožer (uklanja industrije, nepokretne objekte): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magični buldožer (uklanja industrije, nepokretne objekte): {ORANGE}{STRING}
@ -2420,6 +2419,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Izgradi
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spoji čvorište STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spoji čvorište
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Izgradi zasebno čvorište STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Izgradi zasebno čvorište
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Izgradnja željeznice STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Izgradnja željeznice
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Izgradnja elektrificirane željeznice STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Izgradnja elektrificirane željeznice

@ -2157,7 +2157,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Určite
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Cheaty STR_CHEATS :{WHITE}Cheaty
STR_CHEATS_TOOLTIP :{BLACK}Zaškrtávací políčka ukazují, jestli jsi tento cheat už použil STR_CHEATS_TOOLTIP :{BLACK}Zaškrtávací políčka ukazují, jestli jsi tento cheat už použil
STR_CHEATS_WARNING :{BLACK}Varování! Chystáš se podvést ostatní hráče. Pamatuj si, že tento podlý čin nebude nikdy zapomenut!
STR_CHEAT_MONEY :{LTBLUE}Navýšit peníze o {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Navýšit peníze o {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hrát jako společnost: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hrát jako společnost: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magický buldozer (odstraní průmysl a další objekty): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magický buldozer (odstraní průmysl a další objekty): {ORANGE}{STRING}
@ -2677,6 +2676,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Postavi
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spojování směrování STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spojování směrování
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postavit samostatné směrování STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postavit samostatné směrování
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Výstavba elektrifikované železnice STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Výstavba elektrifikované železnice

@ -1816,7 +1816,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er du s
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Snydefunktioner STR_CHEATS :{WHITE}Snydefunktioner
STR_CHEATS_TOOLTIP :{BLACK}Checkbokse viser, om du har brugt denne snydefunktion før STR_CHEATS_TOOLTIP :{BLACK}Checkbokse viser, om du har brugt denne snydefunktion før
STR_CHEATS_WARNING :{BLACK}Advarsel! Du er ved at forråde dine modstandere. Tænk lige på at dette vil blive husket i al evighed.
STR_CHEAT_MONEY :{LTBLUE}Forøg kassebeholdning med {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Forøg kassebeholdning med {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller som firmaet: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller som firmaet: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldozer (nedriv ting, som normalt ikke kan fjernes): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldozer (nedriv ting, som normalt ikke kan fjernes): {ORANGE}{STRING}
@ -2325,6 +2324,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Byg en
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Forbind waypoint STR_JOIN_WAYPOINT_CAPTION :{WHITE}Forbind waypoint
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Byg et separat waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Byg et separat waypoint
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Jernbanekonstruktion STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Jernbanekonstruktion
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektrisk jernbanekonstruktion STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektrisk jernbanekonstruktion

@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Standaard
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/u STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/u
STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}tegels/dag
STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}pk STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}pk
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}pk STR_UNITS_POWER_METRIC :{COMMA}{NBSP}pk
@ -314,8 +315,15 @@ STR_SORT_BY_CARGO_CAPACITY :Vrachtcapacitei
STR_SORT_BY_RANGE :Bereik STR_SORT_BY_RANGE :Bereik
STR_SORT_BY_POPULATION :Aantal inwoners STR_SORT_BY_POPULATION :Aantal inwoners
STR_SORT_BY_RATING :Waardering STR_SORT_BY_RATING :Waardering
STR_SORT_BY_NUM_VEHICLES :Aantal voertuigen
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Totale winst vorig jaar
STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Totale winst dit jaar
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Gemiddelde winst vorig jaar
STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Gemiddelde winst dit jaar
# Group by options for vehicle list # Group by options for vehicle list
STR_GROUP_BY_NONE :Geen
STR_GROUP_BY_SHARED_ORDERS :Gedeelde orders
# Tooltips for the main toolbar # Tooltips for the main toolbar
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hiermee pauzeer je het spel STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hiermee pauzeer je het spel
@ -772,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Alle vra
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven
STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - -
STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * * STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * *
STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * GEPAUZEERD (wacht op bijwerken koppelinggrafiek) * *
STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN
STR_STATUSBAR_SAVING_GAME :{RED}* * SPEL WORDT OPGESLAGEN * * STR_STATUSBAR_SAVING_GAME :{RED}* * SPEL WORDT OPGESLAGEN * *
@ -1442,6 +1451,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Bouwgereedschap
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatisch seinen verwijderen tijdens spooraanleg: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Seinen automatisch verwijderen tijdens spooraanleg als deze in de weg staan. Dit kan botsingen veroorzaken.
STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffecten af bij korte nieuwsberichten STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffecten af bij korte nieuwsberichten
@ -1555,6 +1566,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Eindjaar voor s
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jaar dat het spel eindigt ten behoeve van de score. Aan het einde van dit jaar wordt de score van het bedrijf vastgelegd en verschijnt het venster met topscores. De spelers kunnen echter doorgaan met spelen.{}Als dit voor het startjaar ligt, verschijnt het venster met topscores niet. STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jaar dat het spel eindigt ten behoeve van de score. Aan het einde van dit jaar wordt de score van het bedrijf vastgelegd en verschijnt het venster met topscores. De spelers kunnen echter doorgaan met spelen.{}Als dit voor het startjaar ligt, verschijnt het venster met topscores niet.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit
STR_CONFIG_SETTING_ECONOMY_TYPE :Type economie: {STRING}
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Bij gelijkmatige economie zijn er vaker wijzigingen in productie, die in kleinere stappen verlopen. Bij vaste economie zijn er geen wijzigingen in productie en sluiten bedrijven niet. Deze instelling werkt misschien niet als de soorten industrie worden geleverd in een NewGRF.
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Origineel
STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Gelijkmatig
STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Vast
STR_CONFIG_SETTING_ALLOW_SHARES :Kopen van aandelen in andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Kopen van aandelen in andere bedrijven toestaan: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingeschakeld is het toegestaan om bedrijfsaandelen te kopen en te verkopen. Aandelen zullen alleen beschikbaar zijn voor bedrijven die een bepaalde leeftijd hebben bereikt STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingeschakeld is het toegestaan om bedrijfsaandelen te kopen en te verkopen. Aandelen zullen alleen beschikbaar zijn voor bedrijven die een bepaalde leeftijd hebben bereikt
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimale leeftijd van bedrijf om aandelen te kunnen verhandelen: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimale leeftijd van bedrijf om aandelen te kunnen verhandelen: {STRING}
@ -1606,6 +1622,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineair
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen. STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen.
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Groeien maar niet verspreiden {RED}(houtzagerijen werken niet meer)
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Groeien, maar alleen verspreiden in regenwoud
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Overal groeien en verspreiden
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Niet groeien, niet verspreiden {RED}(houtzagerijen werken niet meer)
STR_CONFIG_SETTING_TOOLBAR_POS :Positie van algemene knoppenbalk: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS :Positie van algemene knoppenbalk: {STRING}
STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale positie van de algemene taakbalk aan de bovenkant van het scherm. STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale positie van de algemene taakbalk aan de bovenkant van het scherm.
@ -1672,6 +1692,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een sne
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiaal (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiaal (mph)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Speleenheden (tegels/dag)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Voertuigkrachteenheden: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Voertuigkrachteenheden: {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden
@ -1804,6 +1825,7 @@ STR_INTRO_TRANSLATION :{BLACK}Deze ver
# Quit window # Quit window
STR_QUIT_CAPTION :{WHITE}Afsluiten STR_QUIT_CAPTION :{WHITE}Afsluiten
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Weet je zeker dat je OpenTTD wilt verlaten?
STR_QUIT_YES :{BLACK}Ja STR_QUIT_YES :{BLACK}Ja
STR_QUIT_NO :{BLACK}Nee STR_QUIT_NO :{BLACK}Nee
@ -1815,7 +1837,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Valsspelen STR_CHEATS :{WHITE}Valsspelen
STR_CHEATS_TOOLTIP :{BLACK}Keuzevakjes geven aan of je deze manier van valsspelen eerder hebt gebruikt STR_CHEATS_TOOLTIP :{BLACK}Keuzevakjes geven aan of je deze manier van valsspelen eerder hebt gebruikt
STR_CHEATS_WARNING :{BLACK}Waarschuwing! Je staat op het punt je medespelers te verraden. Onthoud dat zo'n schande eeuwig wordt onthouden
STR_CHEAT_MONEY :{LTBLUE}Kapitaal vergroten met {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Kapitaal vergroten met {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spelen als bedrijf: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spelen als bedrijf: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING}
@ -1967,6 +1988,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Meespele
STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ververs server STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ververs server
STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ververs de informatie over deze server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ververs de informatie over deze server
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Op internet zoeken
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Op het internet zoeken naar openbare servers
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Op LAN zoeken
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Op lokaal netwerk zoeken naar servers
STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Voeg server toe STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Voeg server toe
STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Voegt een server toe aan de lijst die altijd gecontroleerd zal worden op draaiende spellen STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Voegt een server toe aan de lijst die altijd gecontroleerd zal worden op draaiende spellen
STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server
@ -2192,11 +2217,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spel nog steeds
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spel nog steeds gepauzeerd ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spel nog steeds gepauzeerd ({STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spel vervolgd ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spel vervolgd ({STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :aantal spelers STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :aantal spelers
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :spelers maken verbinding STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :spelers maken verbinding
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :Handmatig STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :Handmatig
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelscript STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelscript
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :wacht op bijwerken koppelinggrafiek
############ End of leave-in-this-order ############ End of leave-in-this-order
STR_NETWORK_MESSAGE_CLIENT_LEAVING :vertrekt STR_NETWORK_MESSAGE_CLIENT_LEAVING :vertrekt
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} heeft zich bij het spel gevoegd STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} heeft zich bij het spel gevoegd
@ -2206,6 +2233,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ki
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} heeft een nieuw bedrijf opgericht (nr. {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} heeft een nieuw bedrijf opgericht (nr. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} heeft het spel verlaten ({2:STRING}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} heeft het spel verlaten ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} heeft zijn/haar naam gewijzigd naar {STRING} STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} heeft zijn/haar naam gewijzigd naar {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gaf {2:CURRENCY_LONG} aan {1:STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De server heeft de sessie gesloten STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De server heeft de sessie gesloten
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft... STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft...
STR_NETWORK_MESSAGE_KICKED :*** {STRING} is eruit geschopt. Reden: ({STRING}) STR_NETWORK_MESSAGE_KICKED :*** {STRING} is eruit geschopt. Reden: ({STRING})
@ -2324,6 +2352,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Een los
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepunt samenvoegen STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepunt samenvoegen
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegen bouwen STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegen bouwen
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Geëlektrificeerde spoorwegen bouwen STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Geëlektrificeerde spoorwegen bouwen
@ -2518,6 +2548,12 @@ STR_TREES_RANDOM_TYPE :{BLACK}Willekeu
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten. STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten.
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Hiermee plant je bomen willekeurig over het landschap STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Hiermee plant je bomen willekeurig over het landschap
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normaal
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Losse bomen planten door over het landschap te slepen
STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Groepje bomen
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Kleine bossen planten door over het landschap te slepen
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Bos
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Grote bossen planten door over het landschap te slepen
# Land generation window (SE) # Land generation window (SE)
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landontwikkeling STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landontwikkeling
@ -3147,10 +3183,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Bedrijfs
STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel centreert venster op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op de locatie van de industrie/stad/tegel. STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel centreert venster op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op de locatie van de industrie/stad/tegel.
# Goal question window # Goal question window
STR_GOAL_QUESTION_CAPTION_QUESTION :Vraag STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Vraag
STR_GOAL_QUESTION_CAPTION_INFORMATION :Informatie STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informatie
STR_GOAL_QUESTION_CAPTION_WARNING :Waarschuwing STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Waarschuwing
STR_GOAL_QUESTION_CAPTION_ERROR :Fout STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Fout
############ Start of Goal Question button list ############ Start of Goal Question button list
STR_GOAL_QUESTION_BUTTON_CANCEL :Annuleren STR_GOAL_QUESTION_BUTTON_CANCEL :Annuleren
@ -3341,6 +3377,7 @@ STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Hoofdkan
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Gedetailleerde aantallen infrastructuur bekijken STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Gedetailleerde aantallen infrastructuur bekijken
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Geld geven STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Geld geven
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Geld geven aan dit bedrijf
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nieuw gezicht STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nieuw gezicht
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Nieuw gezicht voor directeur kiezen STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Nieuw gezicht voor directeur kiezen
@ -3358,7 +3395,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Verkoop
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Bedrijfsnaam STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Bedrijfsnaam
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Naam van directeur STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Naam van directeur
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Voer de hoeveelheid geld die je wilt geven in STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Voer het bedrag in om weg te geven
STR_BUY_COMPANY_MESSAGE :{WHITE}We zoeken een transportbedrijf dat ons bedrijf over kan nemen.{}{}Wil je {COMPANY} kopen voor {CURRENCY_LONG}? STR_BUY_COMPANY_MESSAGE :{WHITE}We zoeken een transportbedrijf dat ons bedrijf over kan nemen.{}{}Wil je {COMPANY} kopen voor {CURRENCY_LONG}?
@ -4229,6 +4266,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Bestand is niet leesbaar STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Bestand is niet leesbaar
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Bestand is niet schrijfbaar STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Bestand is niet schrijfbaar
STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data-integriteitscontrole mislukt STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data-integriteitscontrole mislukt
STR_GAME_SAVELOAD_ERROR_PATCHPACK :Opgeslagen spel is gemaakt met een aangepaste versie
STR_GAME_SAVELOAD_NOT_AVAILABLE :<niet beschikbaar> STR_GAME_SAVELOAD_NOT_AVAILABLE :<niet beschikbaar>
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spel was opgeslagen in een versie zonder tramondersteuning. Alle trams zijn verwijderd STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spel was opgeslagen in een versie zonder tramondersteuning. Alle trams zijn verwijderd
@ -4309,6 +4347,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... geen
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} benodigd STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} benodigd
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kan de lening niet afbetalen.. STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kan de lening niet afbetalen..
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Kan geen geld weggeven dat van de bank geleend is... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Kan geen geld weggeven dat van de bank geleend is...
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Kan geen geld weggeven aan dit bedrijf...
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan het bedrijf niet kopen... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan het bedrijf niet kopen...
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan bedrijfshoofdkantoor niet bouwen... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan bedrijfshoofdkantoor niet bouwen...
STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kan geen 25% aandeel in dit bedrijf kopen... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kan geen 25% aandeel in dit bedrijf kopen...
@ -4721,10 +4760,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Suikermijn
##id 0x6000 ##id 0x6000
STR_SV_EMPTY : STR_SV_EMPTY :
STR_SV_UNNAMED :Geen naam STR_SV_UNNAMED :Geen naam
STR_SV_TRAIN_NAME :Trein {COMMA} STR_SV_TRAIN_NAME :Trein #{COMMA}
STR_SV_ROAD_VEHICLE_NAME :Wegvoertuig {COMMA} STR_SV_ROAD_VEHICLE_NAME :Wegvoertuig #{COMMA}
STR_SV_SHIP_NAME :Schip {COMMA} STR_SV_SHIP_NAME :Schip #{COMMA}
STR_SV_AIRCRAFT_NAME :Vliegtuig {COMMA} STR_SV_AIRCRAFT_NAME :Vliegtuig #{COMMA}
STR_SV_STNAME :{STRING} STR_SV_STNAME :{STRING}
STR_SV_STNAME_NORTH :{STRING} Noord STR_SV_STNAME_NORTH :{STRING} Noord
@ -5026,6 +5065,7 @@ STR_FORMAT_BUOY_NAME :Boei {TOWN}
STR_FORMAT_BUOY_NAME_SERIAL :Boei {TOWN} {COMMA} STR_FORMAT_BUOY_NAME_SERIAL :Boei {TOWN} {COMMA}
STR_FORMAT_COMPANY_NUM :(Bedrijf {COMMA}) STR_FORMAT_COMPANY_NUM :(Bedrijf {COMMA})
STR_FORMAT_GROUP_NAME :Groep {COMMA} STR_FORMAT_GROUP_NAME :Groep {COMMA}
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA}
STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN}
STR_FORMAT_WAYPOINT_NAME :Routepunt {TOWN} STR_FORMAT_WAYPOINT_NAME :Routepunt {TOWN}
STR_FORMAT_WAYPOINT_NAME_SERIAL :Routepunt {TOWN} {COMMA} STR_FORMAT_WAYPOINT_NAME_SERIAL :Routepunt {TOWN} {COMMA}

@ -2151,7 +2151,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Cheats STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before
STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity STR_CHEATS_NOTE :{BLACK}Note: any usage of these settings will be recorded by the savegame
STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING1} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING1}
@ -2675,6 +2675,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Build a
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Disabled as currently no vehicles are available for this infrastructure
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction
@ -4973,6 +4976,7 @@ STR_ORDER_STOP_ORDER :(Stop)
STR_ORDER_SELL_ORDER :(Sell vehicle) STR_ORDER_SELL_ORDER :(Sell vehicle)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING1} STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING1}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING1}
STR_ORDER_IMPLICIT :(Implicit) STR_ORDER_IMPLICIT :(Implicit)
@ -5548,6 +5552,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot typ
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(money limit) STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(money limit)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}New vehicle can't carry {STRING}
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}New vehicle can't do refit in order {NUM}
# Rail construction errors # Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossible track combination STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossible track combination

@ -1738,7 +1738,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Cheats STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before
STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity
STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING}
@ -2240,6 +2239,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Build a
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction

@ -1813,7 +1813,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Cheats STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before
STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity
STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING}
@ -2320,6 +2319,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Build a
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railroad Construction STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railroad Construction
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railroad Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railroad Construction

@ -1422,7 +1422,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ĉu vi
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Filudaĵoj STR_CHEATS :{WHITE}Filudaĵoj
STR_CHEATS_TOOLTIP :{BLACK}La kvadratetoj indikas ĉu vi jam uzis la filudaĵon antaŭe. STR_CHEATS_TOOLTIP :{BLACK}La kvadratetoj indikas ĉu vi jam uzis la filudaĵon antaŭe.
STR_CHEATS_WARNING :{BLACK}Atentu! Vi preskaŭ perfidos viajn kunulajn konkurantojn. Memoru ke io tia rememoriĝos eterne
STR_CHEAT_MONEY :{LTBLUE}Altigu monkvanton per {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Altigu monkvanton per {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Ludanta kiel kompanio: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Ludanta kiel kompanio: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magia forigilo (forviŝu industriojn, nemovebla objektoj): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magia forigilo (forviŝu industriojn, nemovebla objektoj): {ORANGE}{STRING}
@ -1893,6 +1892,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Konstru
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Ligi vojpunkton STR_JOIN_WAYPOINT_CAPTION :{WHITE}Ligi vojpunkton
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Krei apartan vojpunkton STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Krei apartan vojpunkton
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Konstruado de Fervojo STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Konstruado de Fervojo
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Konstruado de Elektrofervojo STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Konstruado de Elektrofervojo

@ -1829,7 +1829,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Kas sa
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Petmine STR_CHEATS :{WHITE}Petmine
STR_CHEATS_TOOLTIP :{BLACK}Märgistatud kastid näitavad et, kas sa oled varem seda pettust kasutanud STR_CHEATS_TOOLTIP :{BLACK}Märgistatud kastid näitavad et, kas sa oled varem seda pettust kasutanud
STR_CHEATS_WARNING :{BLACK}Hoiatus! Sa kavatsed oma konkurente reeta. Pea meeles, et sellisest häbist ei saa sa enam kunagi lahti
STR_CHEAT_MONEY :{LTBLUE}Suurenda raha hulka {CURRENCY_LONG} võrra STR_CHEAT_MONEY :{LTBLUE}Suurenda raha hulka {CURRENCY_LONG} võrra
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Mängimine ettevõttena: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Mängimine ettevõttena: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Võlubuldooser (eemaldab tööstused, paiksed objektid): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Võlubuldooser (eemaldab tööstused, paiksed objektid): {ORANGE}{STRING}
@ -2337,6 +2336,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Ehita e
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Liida teemärgis STR_JOIN_WAYPOINT_CAPTION :{WHITE}Liida teemärgis
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ehita eraldi teemärgis STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ehita eraldi teemärgis
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rööbasteede ehitamine STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rööbasteede ehitamine
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriraudtee ehitamine STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriraudtee ehitamine

@ -1588,7 +1588,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er tú
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Snýt STR_CHEATS :{WHITE}Snýt
STR_CHEATS_TOOLTIP :{BLACK}Flugubeins kassanir vísa um tú hevur nýtt hetta snýti áður STR_CHEATS_TOOLTIP :{BLACK}Flugubeins kassanir vísa um tú hevur nýtt hetta snýti áður
STR_CHEATS_WARNING :{BLACK}Ávaring! Tú er í holt við at svíkja tínar kappingarneytar. Hav í huga at ein slík vanæra verður aldrin gloymd á ævini
STR_CHEAT_MONEY :{LTBLUE}Hækka pening við {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Hækka pening við {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spælir sum fyritøka: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spælir sum fyritøka: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Gandaður bulldosari (bein burtur ídnaðir, lutir ið ikki kunnu flytast): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Gandaður bulldosari (bein burtur ídnaðir, lutir ið ikki kunnu flytast): {ORANGE}{STRING}
@ -2078,6 +2077,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bygg se
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bind waypoint saman STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bind waypoint saman
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bygg eitt serstakt waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bygg eitt serstakt waypoint
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Jarnbreyta bygging STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Jarnbreyta bygging
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Ravmagns jarnbreyta bygging STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Ravmagns jarnbreyta bygging

@ -1451,6 +1451,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pidä rakennust
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Pidä siltojen, tunneleiden, jne. rakennustyökalut käytössä käytön jälkeen STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Pidä siltojen, tunneleiden, jne. rakennustyökalut käytössä käytön jälkeen
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Ryhmitä kulut yhtiön rahoitusikkunassa: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :Ryhmitä kulut yhtiön rahoitusikkunassa: {STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Määritä asettelu yhtiön rahoitusikkunalle STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Määritä asettelu yhtiön rahoitusikkunalle
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Poista automaattisesti opastimia rautateitä rakennettaessa: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Poista automaattisesti opastimia, jos ne ovat rautatien rakentamisen tiellä. Huomaa, että tämä saattaa johtaa junien yhteentörmäyksiin.
STR_CONFIG_SETTING_SOUND_TICKER :Uutiset: {STRING} STR_CONFIG_SETTING_SOUND_TICKER :Uutiset: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Toista ääni tiivistetyille uutisviesteille STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Toista ääni tiivistetyille uutisviesteille
@ -1835,7 +1837,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Lopetet
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Huijaukset STR_CHEATS :{WHITE}Huijaukset
STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin
STR_CHEATS_WARNING :{BLACK}Varoitus! Olet juuri pettämässä kanssakilpailijoitasi. Pidä mielessä, että tällainen häväistys pidetään mielessä ikuisuuden ajan STR_CHEATS_NOTE :{BLACK}Huom.: näiden asetusten käyttö tallentuu pelitallenteeseen
STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hallinnassa oleva yhtiö: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hallinnassa oleva yhtiö: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Taikapuskutraktori (poista teollisuutta, liikuttamattomia kohteita): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Taikapuskutraktori (poista teollisuutta, liikuttamattomia kohteita): {ORANGE}{STRING}
@ -2351,6 +2353,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Rakenna
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Liitä reittipiste STR_JOIN_WAYPOINT_CAPTION :{WHITE}Liitä reittipiste
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Rakenna erillinen reittipiste STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Rakenna erillinen reittipiste
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Ei käytössä, koska tälle infrastruktuurille ei ole kulkuneuvoja tällä hetkellä
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rautatien rakentaminen STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rautatien rakentaminen
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Sähköradan rakentaminen STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Sähköradan rakentaminen
@ -4019,6 +4024,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Sovita rahtity
STR_ORDER_STOP_ORDER :(Pysähdy) STR_ORDER_STOP_ORDER :(Pysähdy)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Asema ei käytettävissä){POP_COLOUR} {STRING} {STATION} {STRING}
STR_ORDER_IMPLICIT :(Ehdoton) STR_ORDER_IMPLICIT :(Ehdoton)
@ -4471,6 +4477,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Väärä varikk
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on liian pitkä korvaamisen jälkeen STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on liian pitkä korvaamisen jälkeen
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ei käytössä olevia itsekorvaus- tai itseuudistussääntöjä STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ei käytössä olevia itsekorvaus- tai itseuudistussääntöjä
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(rahoitusraja) STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(rahoitusraja)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Uusi kulkuneuvo ei voi kuljettaa {STRING}
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Uutta kulkuneuvoa ei voida uudelleensovittaa käskyssä {NUM}
# Rail construction errors # Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Mahdoton ratayhdistelmä. STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Mahdoton ratayhdistelmä.

@ -1452,6 +1452,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Conserver les o
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Garde les outils de construction de ponts, tunnels, etc. ouverts après usage STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Garde les outils de construction de ponts, tunnels, etc. ouverts après usage
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Regrouper les dépenses dans la fenêtre des finances{NBSP}: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :Regrouper les dépenses dans la fenêtre des finances{NBSP}: {STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Définit la mise en forme de la fenêtre des dépenses de la compagnie STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Définit la mise en forme de la fenêtre des dépenses de la compagnie
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Retire automatiquement les signaux durant la construction de la voie ferrée: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Retire automatiquement les signaux durant la construction de la voie ferrée si les signaux sont sur le chemin. A noter que ça peut potentiellement mener à des accidents de trains.
STR_CONFIG_SETTING_SOUND_TICKER :Bulletin{NBSP}: {STRING} STR_CONFIG_SETTING_SOUND_TICKER :Bulletin{NBSP}: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Jouer un son pour les bulletins STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Jouer un son pour les bulletins
@ -1836,7 +1838,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Êtes-v
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Triches STR_CHEATS :{WHITE}Triches
STR_CHEATS_TOOLTIP :{BLACK}Les cases à cocher montrent si vous avez déjà utilisé cette triche auparavant STR_CHEATS_TOOLTIP :{BLACK}Les cases à cocher montrent si vous avez déjà utilisé cette triche auparavant
STR_CHEATS_WARNING :{BLACK}Attention{NBSP}! Vous êtes sur le point de trahir vos adversaires. Vous et votre famille serez déshonoré pour l'éternité. STR_CHEATS_NOTE :{BLACK}Note{}: tout usage de ces paramètres sera enregistré dans la sauvegarde
STR_CHEAT_MONEY :{LTBLUE}Augmenter l'argent de {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Augmenter l'argent de {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jouer en tant que compagnie{NBSP}: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jouer en tant que compagnie{NBSP}: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magique (enlèvement des industries et des objets fixes){NBSP}: {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magique (enlèvement des industries et des objets fixes){NBSP}: {ORANGE}{STRING}
@ -2233,6 +2235,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} a
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} a lancé une nouvelle compagnie (n°{NBSP}{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} a lancé une nouvelle compagnie (n°{NBSP}{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} a quitté la partie ({2:STRING}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} a quitté la partie ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} a changé son nom en {STRING} STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} a changé son nom en {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} a donné {2:CURRENCY_LONG} à {1:STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Le serveur a fermé la session STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Le serveur a fermé la session
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Le serveur redémarre...{}Veuillez patienter... STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Le serveur redémarre...{}Veuillez patienter...
STR_NETWORK_MESSAGE_KICKED :*** {STRING} a été exclu. Raison{NBSP}: ({STRING}) STR_NETWORK_MESSAGE_KICKED :*** {STRING} a été exclu. Raison{NBSP}: ({STRING})
@ -2351,6 +2354,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Joindre un point de contrôle STR_JOIN_WAYPOINT_CAPTION :{WHITE}Joindre un point de contrôle
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construire un point de contrôle séparé STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construire un point de contrôle séparé
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Désactivé car aucun véhicule n'est actuellement disponible pour cette infrastructure
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construction de voie ferrée STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construction de voie ferrée
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construction de voie ferrée électrifiée STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construction de voie ferrée électrifiée
@ -3374,6 +3380,7 @@ STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstr
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Détails STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Détails
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Afficher le détail des calculs d'infrastructure STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Afficher le détail des calculs d'infrastructure
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Donner de l'argent STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Donner de l'argent
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Donner de largent à cette compagnie
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nouveau visage STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nouveau visage
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Choix d'un nouveau visage pour le P.D.G. STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Choix d'un nouveau visage pour le P.D.G.
@ -3391,7 +3398,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vendre 2
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nom de la société STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nom de la société
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom du P.D.G. STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom du P.D.G.
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Entrer le montant que vous voulez donner STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Entrer le montant que vous souhaiter donner
STR_BUY_COMPANY_MESSAGE :{WHITE}Nous sommes à la recherche d'un repreneur pour notre compagnie{}{}Voulez-vous acheter {COMPANY} pour {CURRENCY_LONG}{NBSP}? STR_BUY_COMPANY_MESSAGE :{WHITE}Nous sommes à la recherche d'un repreneur pour notre compagnie{}{}Voulez-vous acheter {COMPANY} pour {CURRENCY_LONG}{NBSP}?
@ -4018,6 +4025,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Réaménager p
STR_ORDER_STOP_ORDER :(Arrêt) STR_ORDER_STOP_ORDER :(Arrêt)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station inutilisable){POP_COLOUR} {STRING} {STATION} {STRING}
STR_ORDER_IMPLICIT :(Implicite) STR_ORDER_IMPLICIT :(Implicite)
@ -4343,6 +4351,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... empr
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} nécessaires STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} nécessaires
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Impossible de rembourser... STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Impossible de rembourser...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossible de distribuer de l'argent emprunté à la banque... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossible de distribuer de l'argent emprunté à la banque...
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Vous ne pouvez pas donner de largent à cette compagnie
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossible d'acheter la compagnie... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossible d'acheter la compagnie...
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossible de construire le siège... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossible de construire le siège...
STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Impossible d'acheter 25{NBSP}% des parts... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Impossible d'acheter 25{NBSP}% des parts...
@ -4469,6 +4478,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Dépôt incompa
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} est trop long après remplacement STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} est trop long après remplacement
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Aucune règle de remplacement/renouvellement automatique appliquée STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Aucune règle de remplacement/renouvellement automatique appliquée
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite d'argent) STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite d'argent)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Le nouveau véhicule ne peut pas transporter {STRING}
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Le nouveau véhicule ne peut être réaménagé à l'ordre {NUM}
# Rail construction errors # Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinaison de rails impossible STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinaison de rails impossible

@ -1972,7 +1972,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}A bheil
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Cealgaireachd STR_CHEATS :{WHITE}Cealgaireachd
STR_CHEATS_TOOLTIP :{BLACK}Is ciall dha bhogsaichean-cromaige gun deach a' chealgaireachd seo a chleachdadh roimhe STR_CHEATS_TOOLTIP :{BLACK}Is ciall dha bhogsaichean-cromaige gun deach a' chealgaireachd seo a chleachdadh roimhe
STR_CHEATS_WARNING :{BLACK}Rabhadh! Tha thu gu bhith a' mealladh nan co-fharpaiseach agad. Thoir an aire gun cumar cuimhne air an tàmailt seo gu bràth tuilleadh
STR_CHEAT_MONEY :{LTBLUE}Meudaich an t-airgead le {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Meudaich an t-airgead le {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}A' cluich mar a' chompanaidh: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}A' cluich mar a' chompanaidh: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer draoidheach (thoir air falbh gnìomhachasan, oibseactan do-ghluasad): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer draoidheach (thoir air falbh gnìomhachasan, oibseactan do-ghluasad): {ORANGE}{STRING}
@ -2477,6 +2476,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Tog st
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Co-aonaich a' phuing-thurais STR_JOIN_WAYPOINT_CAPTION :{WHITE}Co-aonaich a' phuing-thurais
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Tog puing-thurais fa leth STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Tog puing-thurais fa leth
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Tog rathad-iarainn STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Tog rathad-iarainn
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Togail rathaid-iarainn dealain STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Togail rathaid-iarainn dealain

@ -1808,7 +1808,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Estás
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Trampulladas STR_CHEATS :{WHITE}Trampulladas
STR_CHEATS_TOOLTIP :{BLACK}As caixas de confirmación indican se usaches esta trampa antes STR_CHEATS_TOOLTIP :{BLACK}As caixas de confirmación indican se usaches esta trampa antes
STR_CHEATS_WARNING :{BLACK}Coidado! Estás a piques de traizoar aos teus competidores. Ten en conta que un escándalo coma este vai ser lembrado eternamente
STR_CHEAT_MONEY :{LTBLUE}Incrementar os cartos en {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Incrementar os cartos en {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Xogando coma compañía: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Xogando coma compañía: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadora máxica (elimina industrias, obxectos non eliminables): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadora máxica (elimina industrias, obxectos non eliminables): {ORANGE}{STRING}
@ -2315,6 +2314,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir punto de ruta STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir punto de ruta
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Constrúe un un punto de ruta separado STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Constrúe un un punto de ruta separado
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construción de Ferrocarrís STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construción de Ferrocarrís
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construción de Vías Electrificadas STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construción de Vías Electrificadas

@ -328,6 +328,7 @@ STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Durchschnittlic
# Group by options for vehicle list # Group by options for vehicle list
STR_GROUP_BY_NONE :Keine STR_GROUP_BY_NONE :Keine
STR_GROUP_BY_SHARED_ORDERS :Gemeinsame Aufträge
# Tooltips for the main toolbar # Tooltips for the main toolbar
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Spiel anhalten STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Spiel anhalten
@ -1607,6 +1608,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Belasse Bauwerk
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Die Bauwerkzeuge für Brücken, Tunnel, etc. nach Benutzung weiter aktiviert lassen STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Die Bauwerkzeuge für Brücken, Tunnel, etc. nach Benutzung weiter aktiviert lassen
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Zwischensummen für Kategorien bei Firmenausgaben:{STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :Zwischensummen für Kategorien bei Firmenausgaben:{STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Lege das Layout für das Fenster mit den Firmenausgaben fest STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Lege das Layout für das Fenster mit den Firmenausgaben fest
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatische Entfernung von Signalen während der Errichtung von Bahntrassen: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatische Entfernung von Signalen während der Errichtung der Bahntrasse, wenn diese sich im Weg befinden.Hinweis: Dies kann zu Unfällen führen!
STR_CONFIG_SETTING_ENABLE_BUILD_RIVER :Aktiviere das Bauen von Flüssen: {STRING} STR_CONFIG_SETTING_ENABLE_BUILD_RIVER :Aktiviere das Bauen von Flüssen: {STRING}
STR_CONFIG_SETTING_ENABLE_BUILD_RIVER_HELPTEXT :Aktiviere das Bauen von Flüssen außerhalb des Szenarioeditors STR_CONFIG_SETTING_ENABLE_BUILD_RIVER_HELPTEXT :Aktiviere das Bauen von Flüssen außerhalb des Szenarioeditors
@ -2134,7 +2137,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Soll da
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Cheats STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TOOLTIP :{BLACK}Die Kontrollkästchen zeigen an, ob dieser Cheat schonmal verwendet worden ist STR_CHEATS_TOOLTIP :{BLACK}Die Kontrollkästchen zeigen an, ob dieser Cheat schonmal verwendet worden ist
STR_CHEATS_WARNING :{BLACK}Achtung! Hiermit betrügt man seine Mitbewerber. Man sollte bedenken, dass sie das niemals verzeihen werden STR_CHEATS_NOTE :{BLACK}Hinweis: Jede Nutzung dieser Einstellungen wird im Spielstand gespeichert!
STR_CHEAT_MONEY :{LTBLUE}Kontostand um {CURRENCY_LONG} erhöhen STR_CHEAT_MONEY :{LTBLUE}Kontostand um {CURRENCY_LONG} erhöhen
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiele die Firma: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiele die Firma: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Mächtigeres Abrisswerkzeug (entfernt Industrien und unbewegliche Objekte): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Mächtigeres Abrisswerkzeug (entfernt Industrien und unbewegliche Objekte): {ORANGE}{STRING}
@ -2525,7 +2528,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :Spieleranzahl
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :Teilnehmer meldet sich an STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :Teilnehmer meldet sich an
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuell STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuell
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :Skript STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :Skript
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :warte auf Update des Verteilungsgraphen STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :Warten auf Neuberechnung des Verteilungsgraphen.
############ End of leave-in-this-order ############ End of leave-in-this-order
STR_NETWORK_MESSAGE_CLIENT_LEAVING :geht STR_NETWORK_MESSAGE_CLIENT_LEAVING :geht
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} ist dem Spiel beigetreten STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} ist dem Spiel beigetreten
@ -2658,6 +2661,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Erricht
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Verbinde mit Wegpunkt STR_JOIN_WAYPOINT_CAPTION :{WHITE}Verbinde mit Wegpunkt
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Errichte einen getrennten Wegpunkt STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Errichte einen getrennten Wegpunkt
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :Deaktiviert, da aktuell keine Fahrzeuge für diese Infrastruktur verfügbar sind.
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Eisenbahnbau STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Eisenbahnbau
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Bau elektrifizierter Strecken STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Bau elektrifizierter Strecken
@ -4166,8 +4172,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Verlegen
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Errichte Firmensitz für 1% des Firmenwertes an anderer Stelle neu. Shift+Klick zeigt einen Kostenvoranschlag STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Errichte Firmensitz für 1% des Firmenwertes an anderer Stelle neu. Shift+Klick zeigt einen Kostenvoranschlag
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Detaillierte Informationen zur Infrastruktur dieser Firma anzeigen STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Detaillierte Informationen zur Infrastruktur dieser Firma anzeigen
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Geld schenken STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Verschenke Geld
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Überweise Geld an eine andere Firma STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Geld an diese Firma verschenken
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Neues Gesicht STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Neues Gesicht
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Neues Gesicht für Manager aussuchen STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Neues Gesicht für Manager aussuchen
@ -4185,7 +4191,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}25% der
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Firmenname STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Firmenname
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Name des Managers STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Name des Managers
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Wieviel Geld soll übergeben werden? STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Geben Sie den Betrag des Geldes ein, welchen sie verschenken möchten.
STR_BUY_COMPANY_MESSAGE :{WHITE}Wir suchen eine Transportfirma, die unsere Firma übernimmt.{}{}Besteht Interesse daran, {COMPANY} für {CURRENCY_LONG} zu übernehmen? STR_BUY_COMPANY_MESSAGE :{WHITE}Wir suchen eine Transportfirma, die unsere Firma übernimmt.{}{}Besteht Interesse daran, {COMPANY} für {CURRENCY_LONG} zu übernehmen?
@ -5391,6 +5397,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... Kred
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... erfordert {CURRENCY_LONG} STR_ERROR_CURRENCY_REQUIRED :{WHITE}... erfordert {CURRENCY_LONG}
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kredit kann nicht getilgt werden... STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kredit kann nicht getilgt werden...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Von der Bank geliehenes Geld kann nicht abgegeben werden... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Von der Bank geliehenes Geld kann nicht abgegeben werden...
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Geld kann nicht an diese Firma verschenkt werden...
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Firmenkauf nicht möglich... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Firmenkauf nicht möglich...
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Firmensitz kann nicht gebaut werden ... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Firmensitz kann nicht gebaut werden ...
STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kauf von 25% der Aktien dieser Firma nicht möglich... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kauf von 25% der Aktien dieser Firma nicht möglich...
@ -5529,6 +5536,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Falscher Depott
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} ist nach Ersetzung zu lang STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} ist nach Ersetzung zu lang
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Es treffen keine Ersetzungs-/Erneuerungsregeln zu STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Es treffen keine Ersetzungs-/Erneuerungsregeln zu
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(Geld fehlt) STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(Geld fehlt)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Neues Fahrzeug kann diesen Frachttyp nicht transportieren. {STRING}
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Neues Fahrzeug kann nicht wie geplant umgerüstet werden {NUM}
# Rail construction errors # Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Unmögliche Gleisverbindung STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Unmögliche Gleisverbindung

@ -1901,7 +1901,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Είσ
# Cheat window # Cheat window
STR_CHEATS :{WHITE}Απατεωνιές STR_CHEATS :{WHITE}Απατεωνιές
STR_CHEATS_TOOLTIP :{BLACK}Τα κουτάκια δείχνουν αν έχετε ξαναχρησιμοποιήσει αυτή την απατεωνιά STR_CHEATS_TOOLTIP :{BLACK}Τα κουτάκια δείχνουν αν έχετε ξαναχρησιμοποιήσει αυτή την απατεωνιά
STR_CHEATS_WARNING :{BLACK}Προσοχή! Είστε έτοιμοι να προδώσετε τους φίλους ανταγωνιστές σας. Θυμηθείτε ότι αυτή η ντροπή θα μείνει για πάντα.
STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG} STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING}
@ -2408,6 +2407,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Χτί
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Συνένωση σημείου καθοδήγησης STR_JOIN_WAYPOINT_CAPTION :{WHITE}Συνένωση σημείου καθοδήγησης
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κτίσιμο ενός ξεχωριστού σημείου καθοδήγησης STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κτίσιμο ενός ξεχωριστού σημείου καθοδήγησης
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Κατασκευή Σιδηρόδρομου STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Κατασκευή Σιδηρόδρομου
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκευή Ηλεκτροδοτημένου Σιδηρόδρομου STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκευή Ηλεκτροδοτημένου Σιδηρόδρομου

@ -1787,7 +1787,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}האם
# Cheat window # Cheat window
STR_CHEATS :{WHITE}(cheats) טריקים STR_CHEATS :{WHITE}(cheats) טריקים
STR_CHEATS_TOOLTIP :{BLACK}תיבות הסימון מציינות האם השתמשת בטריק הנתון בעבר STR_CHEATS_TOOLTIP :{BLACK}תיבות הסימון מציינות האם השתמשת בטריק הנתון בעבר
STR_CHEATS_WARNING :{BLACK}אזהרה! את/ה עומ/ת לבגוד בחבריך למשחק. קח/י בחשבון שחרפה כזו תיזכר לנצח.
STR_CHEAT_MONEY :{LTBLUE}{CURRENCY_LONG}- הגדל את כמות הכסף במאזנך ל STR_CHEAT_MONEY :{LTBLUE}{CURRENCY_LONG}- הגדל את כמות הכסף במאזנך ל
STR_CHEAT_CHANGE_COMPANY :{ORANGE}{COMMA}{LTBLUE} :שחק כבעלי החברה STR_CHEAT_CHANGE_COMPANY :{ORANGE}{COMMA}{LTBLUE} :שחק כבעלי החברה
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}טרקטור אימתני (הסרת מפעלים, רכיבים שאי אפשר להזיז): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}טרקטור אימתני (הסרת מפעלים, רכיבים שאי אפשר להזיז): {ORANGE}{STRING}
@ -2291,6 +2290,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}בנה
STR_JOIN_WAYPOINT_CAPTION :{WHITE}חבר נקודות ציון STR_JOIN_WAYPOINT_CAPTION :{WHITE}חבר נקודות ציון
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}בנה נקודת ציון נפרדת STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}בנה נקודת ציון נפרדת
# Generic toolbar
# Rail construction toolbar # Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :בניית מסילות STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :בניית מסילות
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :בניית מסילות חשמליות STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :בניית מסילות חשמליות

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

Loading…
Cancel
Save