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.
* The compatibility wrappers (compat_*.nut) need updating.
* 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)

@ -210,6 +210,18 @@ jobs:
- name: Checkout
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)
uses: lukka/run-vcpkg@v6
with:

@ -366,8 +366,10 @@ jobs:
include:
- arch: x64
full_arch: x86_64
- arch: arm64
full_arch: arm64
runs-on: macos-11.0
runs-on: macos-10.15
env:
MACOSX_DEPLOYMENT_TARGET: 10.9
@ -381,11 +383,20 @@ jobs:
run: |
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)
uses: lukka/run-vcpkg@v6
with:
vcpkgDirectory: '/usr/local/share/vcpkg'
doNotUpdateVcpkg: true
vcpkgDirectory: '/tmp/vcpkg'
doNotUpdateVcpkg: false
vcpkgGitCommitId: 2a42024b53ebb512fb5dd63c523338bf26c8489c
vcpkgArguments: 'freetype liblzma lzo'
vcpkgTriplet: '${{ matrix.arch }}-osx'
@ -418,7 +429,7 @@ jobs:
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \
-DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_TOOLCHAIN_FILE=/tmp/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
# EOF

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

@ -74,23 +74,30 @@ list(LENGTH REGRESSION_EXPECTED REGRESSION_EXPECTED_LENGTH)
# Compare the output
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)
message("${ARGC}: - ${EXPECTED}")
message("${ARGC}: + ${RESULT}'")
set(ERROR YES)
endif()
math(EXPR ARGC "${ARGC} + 1")
endforeach()
if(NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC)
math(EXPR MISSING "${REGRESSION_EXPECTED_LENGTH} - ${ARGC}")
message("(${MISSING} more lines were expected than found)")
message("(${REGRESSION_EXPECTED_LENGTH} lines were expected but ${ARGC} were found)")
set(ERROR YES)
endif()
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()

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

@ -1,14 +1,9 @@
/*
* 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 <algorithm>
#include "sqpcheader.h"
#include "sqvm.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
* ScriptConfig::AddRandomDeviation(). */
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)
@ -134,5 +134,5 @@ void AIConfig::AddRandomDeviation()
/* 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. */
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);
/* 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
{
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->height = this->line_height;
@ -890,9 +890,9 @@ struct AIConfigWindow : public Window {
case WID_AIC_INCREASE: {
int new_value;
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 {
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);
break;
@ -1187,7 +1187,7 @@ struct AIDebugWindow : public Window {
this->autoscroll = this->vscroll->GetPosition() >= log->used - this->vscroll->GetCapacity();
}
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()) {
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) {
const uint broken_speed = v->breakdown_severity << 3;
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) {
@ -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
* touchdown. */
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 */
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 */
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 (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)
{
int count;
/* nullptr if station is invalid */
const Station *st = Station::GetIfValid(v->targetairport);
/* INVALID_TILE if there is no station */
@ -931,7 +929,7 @@ static bool AircraftController(Aircraft *v)
}
} else {
u->cur_speed = 32;
count = UpdateAircraftSpeed(v);
int count = UpdateAircraftSpeed(v);
if (count > 0) {
v->tile = 0;
@ -943,7 +941,7 @@ static bool AircraftController(Aircraft *v)
v->cur_speed = 0;
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;
@ -989,12 +987,12 @@ static bool AircraftController(Aircraft *v)
}
u->cur_speed += 4;
} else {
count = UpdateAircraftSpeed(v);
int count = UpdateAircraftSpeed(v);
if (count > 0) {
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 {
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 {
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_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 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--;
do {
GetNewVehiclePosResult gp;
if (dist < 4 || (amd.flag & AMED_LAND)) {
if (nudge_towards_target || (amd.flag & AMED_LAND)) {
/* move vehicle one pixel towards target */
gp.x = (v->x_pos != (x + amd.x)) ?
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? */
assert(airport_z <= z);
int t = max(1U, dist - 4);
int t = std::max(1U, dist - 4);
int delta = z - airport_z;
/* 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) {
/* 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;

@ -71,6 +71,7 @@ struct BuildAirToolbarWindow : Window {
BuildAirToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc)
{
this->InitNested(window_number);
this->OnInvalidateData();
if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
this->last_user_action = WIDGET_LIST_END;
}
@ -90,7 +91,18 @@ struct BuildAirToolbarWindow : Window {
{
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
@ -160,7 +172,7 @@ struct BuildAirToolbarWindow : Window {
*/
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();
if (w == nullptr) return ES_NOT_HANDLED;
return w->OnHotkey(hotkey);
@ -314,7 +326,7 @@ public:
const AirportSpec *as = AirportSpec::Get(i);
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;

@ -21,6 +21,8 @@
#include "vehiclelist.h"
#include "road.h"
#include "ai/ai.hpp"
#include "news_func.h"
#include "strings_func.h"
#include "table/strings.h"
@ -116,7 +118,7 @@ void CheckCargoCapacity(Vehicle *v)
assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
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);
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;
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;
src->cargo.Shift(amount, &dest->cargo);
@ -192,6 +194,29 @@ static bool VerifyAutoreplaceRefitForOrders(const Vehicle *v, EngineID engine_ty
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
* @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 */
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 */
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_RIGHT_MATRIX: {
int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1;
EngineID start = 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 start = static_cast<EngineID>(this->vscroll[side]->GetPosition()); // what is the offset for the start (scrolling)
EngineID end = static_cast<EngineID>(std::min<size_t>(this->vscroll[side]->GetCapacity() + start, this->engines[side].size()));
/* Do the actual drawing */
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);
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);
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.

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

@ -58,7 +58,7 @@ void Blitter_32bppSSE2_Anim::PaletteAnimate(const Palette &palette)
if (unlikely(x < 8 || colour_cmp_result != 0xFFFF ||
_mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) {
/* 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);
uint8 colour = GB(value, 0, 8);
if (colour >= PALETTE_ANIM_START) {

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

@ -83,7 +83,7 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL
dst = dst_end - bp->skip_left;
dst_end = dst + bp->width;
n = min<uint>(n - d, (uint)bp->width);
n = std::min(n - d, (uint)bp->width);
goto draw;
}
dst += n;
@ -98,7 +98,7 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL
dst_end += bp->width;
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) {
dst += n;
@ -278,7 +278,7 @@ Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloc
zoom_max = ZOOM_LVL_NORMAL;
} else {
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;
}
@ -330,7 +330,7 @@ Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloc
if (src->m >= PALETTE_ANIM_START) flags &= ~SF_NO_ANIM;
/* 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 */
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;
} else {
/* 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 */
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;
/* 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;
/* 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;
width -= trans;
if (width <= 0 || pixels == 0) continue;
pixels = min<uint>(pixels, (uint)width);
pixels = std::min<uint>(pixels, width);
width -= pixels;
switch (mode) {
@ -132,7 +132,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca
zoom_max = ZOOM_LVL_NORMAL;
} else {
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;
}

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

@ -200,7 +200,7 @@ public:
}
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.
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.
size->width = this->bridgetext_offset + text_dim.width + WD_MATRIX_RIGHT;

@ -46,7 +46,7 @@
*/
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[] = {
@ -1581,7 +1581,7 @@ struct BuildVehicleWindow : Window {
case WID_BV_LIST:
resize->height = GetEngineListHeight(this->vehicle_type);
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;
case WID_BV_PANEL:
@ -1616,7 +1616,18 @@ struct BuildVehicleWindow : Window {
{
switch (widget) {
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;
case WID_BV_SORT_ASCENDING_DESCENDING:
@ -1644,7 +1655,7 @@ struct BuildVehicleWindow : Window {
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,
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.
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 - 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[Tto] += max_move;
return max_move;
@ -758,7 +758,7 @@ uint VehicleCargoList::Reassign(uint max_move, TileOrStationID)
template<>
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;
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)
{
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));
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)
{
max_move = min(this->count, max_move);
max_move = std::min(this->count, max_move);
this->PopCargo(CargoShift(this, dest, max_move));
return max_move;
}
@ -821,12 +821,12 @@ uint VehicleCargoList::Unload(uint max_move, StationCargoList *dest, CargoPaymen
{
uint moved = 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));
moved += 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));
moved += move;
}
@ -841,7 +841,7 @@ uint VehicleCargoList::Unload(uint max_move, StationCargoList *dest, CargoPaymen
*/
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();
this->PopCargo(CargoRemoval<VehicleCargoList>(this, 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)
{
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));
return max_move;
}
@ -965,7 +965,7 @@ uint StationCargoList::AvailableViaCount(StationID next) const
*/
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 moved = 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 move = min(dest->ActionCount(VehicleCargoList::MTA_LOAD), max_move);
uint move = std::min(dest->ActionCount(VehicleCargoList::MTA_LOAD), max_move);
if (move > 0) {
this->reserved_count -= move;
dest->Reassign<VehicleCargoList::MTA_LOAD, VehicleCargoList::MTA_KEEP>(move);

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

@ -216,12 +216,14 @@ static const NWidgetPart _nested_cheat_widgets[] = {
NWidget(WWT_STICKYBOX, COLOUR_GREY),
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. */
struct CheatWindow : Window {
int clicked;
int header_height;
int clicked_widget;
uint line_height;
int box_width;
@ -236,8 +238,7 @@ struct CheatWindow : Window {
{
if (widget != WID_C_PANEL) return;
int y = r.top + WD_FRAMERECT_TOP + this->header_height;
DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, y, STR_CHEATS_WARNING, TC_FROMSTRING, SA_CENTER);
int y = r.top + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL;
bool rtl = _current_text_dir == TD_RTL;
uint box_left = rtl ? r.right - this->box_width - 5 : r.left + 5;
@ -324,9 +325,9 @@ struct CheatWindow : Window {
case SLE_BOOL:
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);
width = max(width, GetStringBoundingBox(ce->str).width);
width = std::max(width, GetStringBoundingBox(ce->str).width);
break;
default:
@ -334,37 +335,36 @@ struct CheatWindow : Window {
/* Display date for change date cheat */
case STR_CHEAT_CHANGE_DATE:
SetDParam(0, ConvertYMDToDate(MAX_YEAR, 11, 31));
width = max(width, GetStringBoundingBox(ce->str).width);
width = std::max(width, GetStringBoundingBox(ce->str).width);
break;
/* Draw coloured flag for change company cheat */
case STR_CHEAT_CHANGE_COMPANY:
SetDParamMaxValue(0, MAX_COMPANIES);
width = max(width, GetStringBoundingBox(ce->str).width + 10 + 10);
width = std::max(width, GetStringBoundingBox(ce->str).width + 10 + 10);
break;
default:
SetDParam(0, INT64_MAX);
width = max(width, GetStringBoundingBox(ce->str).width);
width = std::max(width, GetStringBoundingBox(ce->str).width);
break;
}
break;
}
}
this->line_height = 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 = max<uint>(this->line_height, FONT_HEIGHT_NORMAL) + WD_PAR_VSEP_NORMAL;
this->line_height = std::max(GetSpriteSize(SPR_BOX_CHECKED).height, GetSpriteSize(SPR_BOX_EMPTY).height);
this->line_height = std::max<uint>(this->line_height, SETTING_BUTTON_HEIGHT);
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 */;
this->header_height = GetStringHeight(STR_CHEATS_WARNING, size->width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT) + WD_PAR_VSEP_WIDE;
size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lines;
size->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
{
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;
bool rtl = _current_text_dir == TD_RTL;
if (rtl) x = wid->current_x - x;

@ -218,7 +218,7 @@ static void TileLoopClearAlps(TileIndex tile)
}
/* Update snow density. */
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) {
AddClearDensity(tile, 1);

@ -600,12 +600,12 @@ static void DumpSubCommandLog(char *&buffer, const char *last, const CommandLog
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);
DumpSubCommandLog(buffer, last, _command_log, count);
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);
DumpSubCommandLog(buffer, last, _command_log_aux, aux_count);
}

@ -278,11 +278,11 @@ void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cst)
void UpdateLandscapingLimits()
{
for (Company *c : Company::Iterate()) {
c->terraform_limit = min(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint32)_settings_game.construction.terraform_frame_burst << 16);
c->clear_limit = min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16);
c->tree_limit = min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16);
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->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->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 = std::min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_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 = 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 = 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);
_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;
@ -727,7 +727,7 @@ void OnTick_Companies()
if (_next_competitor_start == 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) {

@ -116,11 +116,11 @@ struct ExpensesList {
ExpensesType et = this->et[i];
if (et == INVALID_EXPENSES) {
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;
}
} else {
width = max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width);
}
}
return width;
@ -281,7 +281,7 @@ struct CompanyFinancesWindow : Window {
CompanyFinancesWindow(WindowDesc *desc, CompanyID company) : Window(desc)
{
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->CreateNestedTree();
this->SetupWidgets();
@ -328,7 +328,7 @@ struct CompanyFinancesWindow : Window {
case WID_CF_LOAN_VALUE:
case WID_CF_TOTAL_VALUE:
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;
case WID_CF_MAXLOAN_GAP:
@ -348,7 +348,7 @@ struct CompanyFinancesWindow : Window {
case WID_CF_EXPS_PRICE2:
case WID_CF_EXPS_PRICE3: {
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;
if (wid_offset <= age) {
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);
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->ReInit();
}
@ -529,7 +529,7 @@ public:
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
@ -742,7 +742,7 @@ public:
/* Position scrollbar to selected group */
for (uint i = 0; i < this->rows; i++) {
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;
}
}
@ -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;
}
case WID_SCL_MATRIX: {
/* 11 items in the default rail class */
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;
resize->width = 1;
@ -792,9 +792,9 @@ public:
this->square = GetSpriteSize(SPR_SQUARE);
int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10;
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;
}
}
@ -909,7 +909,7 @@ public:
}
}
} 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) {
const Group *g = this->groups[i];
SetDParam(0, g->index);
@ -1391,7 +1391,7 @@ public:
number_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT + arrows_width;
number_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
/* 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;
this->yesno_dim = yesno_dim;
@ -1403,8 +1403,8 @@ public:
switch (widget) {
case WID_SCMF_FACE: {
Dimension face_size = GetSpriteSize(SPR_GRADIENT);
size->width = max(size->width, face_size.width);
size->height = max(size->height, face_size.height);
size->width = std::max(size->width, face_size.width);
size->height = std::max(size->height, face_size.height);
break;
}
@ -1896,22 +1896,22 @@ struct CompanyInfrastructureWindow : Window
case WID_CI_RAIL_DESC: {
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;
FOR_ALL_SORTED_RAILTYPES(rt) {
if (HasBit(this->railtypes, rt)) {
lines++;
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) {
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;
}
@ -1919,30 +1919,30 @@ struct CompanyInfrastructureWindow : Window
case WID_CI_TRAM_DESC: {
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;
FOR_ALL_SORTED_ROADTYPES(rt) {
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
lines++;
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;
}
case WID_CI_WATER_DESC:
size->width = 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_WATER_SECT).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT);
break;
case WID_CI_STATION_DESC:
size->width = 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 = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT);
break;
case WID_CI_RAIL_COUNT:
@ -1956,24 +1956,24 @@ struct CompanyInfrastructureWindow : Window
Money max_cost = 10000; // Some random number to reserve enough space.
uint32 rail_total = c->infrastructure.GetRailTotal();
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) {
max_val = max(max_val, c->infrastructure.rail[rt]);
max_cost = max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
max_val = std::max(max_val, c->infrastructure.rail[rt]);
max_cost = std::max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
}
max_val = max(max_val, c->infrastructure.signal);
max_cost = max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
max_val = std::max(max_val, c->infrastructure.signal);
max_cost = std::max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
uint32 road_total = c->infrastructure.GetRoadTotal();
uint32 tram_total = c->infrastructure.GetTramTotal();
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
max_val = 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_val = std::max(max_val, c->infrastructure.road[rt]);
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_cost = max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
max_val = max(max_val, c->infrastructure.station);
max_cost = max(max_cost, StationMaintenanceCost(c->infrastructure.station));
max_val = max(max_val, c->infrastructure.airport);
max_cost = max(max_cost, AirportMaintenanceCost(c->index));
max_val = std::max(max_val, c->infrastructure.water);
max_cost = std::max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
max_val = std::max(max_val, c->infrastructure.station);
max_cost = std::max(max_cost, StationMaintenanceCost(c->infrastructure.station));
max_val = std::max(max_val, c->infrastructure.airport);
max_cost = std::max(max_cost, AirportMaintenanceCost(c->index));
SetDParamMaxValue(0, max_val);
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) {
SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year
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
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. */
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;
}
@ -2385,8 +2385,8 @@ struct CompanyWindow : Window
switch (widget) {
case WID_C_FACE: {
Dimension face_size = GetSpriteSize(SPR_GRADIENT);
size->width = max(size->width, face_size.width);
size->height = max(size->height, face_size.height);
size->width = std::max(size->width, face_size.width);
size->height = std::max(size->height, face_size.height);
break;
}
@ -2407,18 +2407,18 @@ struct CompanyWindow : Window
case WID_C_DESC_VEHICLE_COUNTS:
SetDParamMaxValue(0, 5000); // Maximum number of vehicles
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;
case WID_C_DESC_INFRASTRUCTURE_COUNTS:
SetDParamMaxValue(0, UINT_MAX);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width);
size->width = 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_RAIL).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width);
break;
case WID_C_DESC_OWNERS: {
@ -2426,7 +2426,7 @@ struct CompanyWindow : Window
SetDParamMaxValue(0, 75);
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;
}
@ -2437,12 +2437,12 @@ struct CompanyWindow : Window
case WID_C_VIEW_INFRASTRUCTURE:
case WID_C_COMPANY_PASSWORD:
case WID_C_COMPANY_JOIN:
size->width = 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 = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width);
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width);
size->width = 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_VIEW_HQ_BUTTON).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width);
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width);
break;

@ -1148,6 +1148,23 @@ DEF_CONSOLE_CMD(ConRestart)
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'.
* @param buf The buffer to print.
@ -2596,8 +2613,8 @@ DEF_CONSOLE_CMD(ConViewportMarkDirty)
Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport;
uint l = strtoul(argv[1], 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 b = min<uint>(t + ((argc > 4) ? strtoul(argv[4], nullptr, 0) : 1), vp->dirty_blocks_per_column);
uint r = std::min<uint>(l + ((argc > 3) ? strtoul(argv[3], nullptr, 0) : 1), vp->dirty_blocks_per_row);
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 y = t; y < b; y++) {
vp->dirty_blocks[(x * vp->dirty_blocks_per_column) + y] = true;
@ -2832,7 +2849,7 @@ DEF_CONSOLE_CMD(ConNewGRFProfile)
if (started > 0) {
IConsolePrintF(CC_DEBUG, "Started profiling for GRFID%s %s", (started > 1) ? "s" : "", grfids.c_str());
if (argc >= 3) {
int days = max(atoi(argv[2]), 1);
int days = std::max(atoi(argv[2]), 1);
_newgrf_profile_end_date = _date + days;
char datestrbuf[32]{ 0 };
@ -3069,6 +3086,7 @@ void IConsoleStdLibRegister()
IConsoleCmdRegister("list_aliases", ConListAliases);
IConsoleCmdRegister("newgame", ConNewGame);
IConsoleCmdRegister("restart", ConRestart);
IConsoleCmdRegister("reload", ConReload);
IConsoleCmdRegister("getseed", ConGetSeed);
IConsoleCmdRegister("getdate", ConGetDate);
IConsoleCmdRegister("getsysdate", ConGetSysDate);

@ -12,6 +12,7 @@
#include "window_gui.h"
#include "console_gui.h"
#include "console_internal.h"
#include "guitimer_func.h"
#include "window_func.h"
#include "string_func.h"
#include "strings_func.h"
@ -172,6 +173,7 @@ struct IConsoleWindow : Window
static int scroll;
int line_height; ///< Height of one line of text in the console.
int line_offset;
GUITimer truncate_timer;
IConsoleWindow() : Window(&_console_window_desc)
{
@ -180,6 +182,7 @@ struct IConsoleWindow : Window
this->line_offset = GetStringBoundingBox("] ").width + 5;
this->InitNested(0);
this->truncate_timer.SetInterval(3000);
ResizeWindow(this, _screen.width, _screen.height / 3);
}
@ -195,7 +198,7 @@ struct IConsoleWindow : Window
*/
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);
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() &&
(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();
}
}
@ -346,7 +351,7 @@ struct IConsoleWindow : Window
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};
return pt;
@ -354,7 +359,7 @@ struct IConsoleWindow : Window
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 p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, from) : p1;
@ -365,7 +370,7 @@ struct IConsoleWindow : Window
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;

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

@ -12,7 +12,6 @@
#include "../stdafx.h"
#include <vector>
#include <algorithm>
#include <limits>
/**
@ -261,7 +260,7 @@ class Kdtree {
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,
* if it is we also need to check the other side of the split. */

@ -10,66 +10,6 @@
#ifndef 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.
*
@ -239,7 +179,7 @@ static inline uint16 ClampToU16(const uint64 a)
* 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
* 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 < 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);
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);
this->first_unused = max(this->first_unused, index + 1);
this->first_unused = std::max(this->first_unused, index + 1);
this->items++;
Titem *item;
@ -200,7 +200,7 @@ DEFINE_POOL_METHOD(void)::FreeItem(size_t index)
}
this->data[index] = nullptr;
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--;
if (!this->cleaning) Titem::PostDestructor(index);
}

@ -234,7 +234,7 @@ public:
if (x * new_height > new_capacity) continue;
(*copy)(new_data + (x - 1) * new_height,
this->data + (x - 1) * this->height,
min(this->height, new_height));
std::min(this->height, new_height));
}
} else {
/* If matrix is shrinking copy from the front. */
@ -242,7 +242,7 @@ public:
if ((x + 1) * new_height > new_capacity) break;
(*copy)(new_data + x * new_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) {
this->data[index].valid = true;
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;
}
@ -50,7 +50,7 @@ public:
inline void Destroy(Tindex index)
{
this->data[index].valid = false;
this->first_free = min(this->first_free, index);
this->first_free = std::min(this->first_free, index);
}
private:

@ -13,7 +13,6 @@
#include "alloc_func.hpp"
#include "mem_func.hpp"
#include <vector>
#include <algorithm>
/**
* 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) {
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);
int i = 0;

@ -37,8 +37,6 @@ YearMonthDay _game_load_cur_date_ymd;
DateFract _game_load_date_fract;
uint8 _game_load_tick_skip_counter;
int32 _old_ending_year_slv_105; ///< Old ending year for savegames before SLV_105
/**
* Set the date.
* @param date New date
@ -215,11 +213,13 @@ static void OnNewYear()
if (_cur_date_ymd.year == _settings_client.gui.semaphore_build_before) ResetSignalVariant();
/* check if we reached end of the game (end of ending year) */
if (_cur_date_ymd.year == _settings_game.game_creation.ending_year + 1) {
/* 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 && _settings_game.game_creation.ending_year != 0) {
ShowEndGameChart();
}
/* 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;
_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) :
Window(desc),
callback(callback),
min_year(max(MIN_YEAR, min_year)),
max_year(min(MAX_YEAR, max_year))
min_year(std::max(MIN_YEAR, min_year)),
max_year(std::min(MAX_YEAR, max_year))
{
assert(this->min_year <= this->max_year);
this->parent = parent;

@ -335,7 +335,7 @@ char *DumpDesyncMsgLog(char *buffer, const char *last)
{
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 display_num = desync_msg_log_count - count;

@ -491,7 +491,7 @@ public:
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();
}
@ -548,9 +548,9 @@ void DeparturesWindow<Twaypoint>::RecomputeDateWidth()
cached_date_display_method = _settings_time.time_in_minutes;
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 = 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_ON_TIME)).width, cached_status_width);
cached_status_width = std::max((GetStringBoundingBox(STR_DEPARTURES_DELAYED)).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 count = cached_date_display_method ? 24*60 : 365;
@ -558,8 +558,8 @@ void DeparturesWindow<Twaypoint>::RecomputeDateWidth()
for (uint i = 0; i < count; ++i) {
SetDParam(0, 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_status_width = max((GetStringBoundingBox(STR_DEPARTURES_EXPECTED)).width, cached_status_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 = std::max((GetStringBoundingBox(STR_DEPARTURES_EXPECTED)).width, cached_status_width);
}
SetDParam(0, 0);
@ -623,7 +623,7 @@ void DeparturesWindow<Twaypoint>::DrawDeparturesListItems(const Rect &r) const
int text_right = right - (rtl ? text_offset : 0);
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) {
max_departures = _settings_client.gui.max_departures;

@ -196,12 +196,12 @@ static void InitBlocksizeForVehicles(VehicleType type, EngineImageType image_typ
switch (image_type) {
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_right = Clamp(max_extend_right, min_extend, max_extend);
break;
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_right = Clamp(max_extend_right, min_extend, max_extend);
break;
@ -397,7 +397,7 @@ struct DepotWindow : Window {
uint16 rows_in_display = wid->current_y / wid->resize_y;
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;
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++) {
@ -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. */
for (; num < maxval; num++, y += this->resize.step_height) {
@ -670,15 +670,15 @@ struct DepotWindow : Window {
this->flag_height = UnScaleGUI(spr->height);
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;
} else {
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;
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) {
resize->width = 1;
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()) {
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 */
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);
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);
u->z_pos = GetSlopePixelZ(safe_x, safe_y);
u->direction = this->direction;

@ -72,7 +72,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = n
/* Direction the aqueduct is built to. */
TileIndexDiff offset = TileOffsByDiagDir(ReverseDiagDir(dir));
/* 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;
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_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
@ -145,17 +158,14 @@ struct BuildDocksToolbarWindow : Window {
break;
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);
break;
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);
break;
case WID_DT_BUOY: // Build buoy button
if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT);
break;

@ -142,7 +142,7 @@ Money CalculateCompanyValue(const Company *c, bool including_loan)
if (including_loan) value -= c->current_loan;
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 */
{
int numec = min(c->num_valid_stat_ent, 12);
int numec = std::min<uint>(c->num_valid_stat_ent, 12u);
if (numec != 0) {
const CompanyEconomyEntry *cee = c->old_economy;
Money min_income = cee->income + cee->expenses;
Money max_income = cee->income + cee->expenses;
do {
min_income = min(min_income, cee->income + cee->expenses);
max_income = max(max_income, cee->income + cee->expenses);
min_income = std::min(min_income, cee->income + cee->expenses);
max_income = std::max(max_income, cee->income + cee->expenses);
} while (++cee, --numec);
if (min_income > 0) {
@ -222,7 +222,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* 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) {
const CompanyEconomyEntry *cee = c->old_economy;
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, new_owner)) {
/* 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 {
SetBit(t->have_ratings, new_owner);
t->ratings[new_owner] = t->ratings[old_owner];
@ -961,12 +961,12 @@ void StartupEconomy()
{
_economy.interest_rate = _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;
if (_settings_game.economy.inflation && _settings_game.economy.inflation_fixed_dates) {
/* 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++) {
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 */
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);
if (callback != CALLBACK_FAILED) {
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 days2 = cs->transit_days[1];
const int days_over_days1 = max( transit_days - days1, 0);
const int days_over_days2 = max(days_over_days1 - days2, 0);
const int days_over_days1 = std::max( transit_days - days1, 0);
const int days_over_days2 = std::max(days_over_days1 - days2, 0);
/*
* 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
*
*/
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);
}
@ -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 */
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->last_cargo_accepted_at[cargo_index] = _date;
num_pieces -= amount;
@ -1200,7 +1200,7 @@ static void TriggerIndustryProduction(Industry *i)
if (cargo_waiting == 0) continue;
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;
@ -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);
/* 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. */
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) {
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?
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. */
ge->last_speed = min(t, 255);
ge->last_age = min(_cur_year - front->build_year, 255);
ge->last_speed = std::min(t, 255);
ge->last_age = std::min(_cur_year - front->build_year, 255);
assert(v->cargo_cap >= v->cargo.StoredCount());
/* Capacity available for loading more cargo. */
@ -1991,7 +1991,7 @@ static void LoadUnloadVehicle(Vehicle *front)
* has capacity for it, load it on the vehicle. */
if ((v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) {
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v));
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));
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
* 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 &&
(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())) {
SetBit(front->vehicle_flags, VF_STOP_LOADING);
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.
*/
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);
}

@ -600,7 +600,7 @@ static void CalcEngineReliability(Engine *e)
/* Check for early retirement */
if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) {
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) {
/* Early retirement is enabled and we're past the date... */
RetireEngineIfPossible(e, retire_early_max_age);
@ -645,7 +645,7 @@ void SetYearEngineAgingStops()
YearMonthDay 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()
{
/* 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()) {
StartupOneEngine(e, aging_date);
@ -755,6 +755,7 @@ static void EnableEngineForCompany(EngineID eid, CompanyID company)
InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
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_AIRCRAFT) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_AIR);
}
}
@ -1038,6 +1039,7 @@ static void NewVehicleAvailable(Engine *e)
/* Update the toolbar. */
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_AIRCRAFT) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_AIR);
/* Close pending preview windows */
DeleteWindowById(WC_ENGINE_PREVIEW, index);
@ -1216,7 +1218,7 @@ void CheckEngines()
if ((e->flags & ENGINE_AVAILABLE) != 0 && e->company_avail != 0) return;
/* 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) {

@ -93,9 +93,9 @@ struct EnginePreviewWindow : Window {
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;
}
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));
size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WD_PAR_VSEP_WIDE + FONT_HEIGHT_NORMAL + this->vehicle_space;
SetDParam(0, engine);

@ -13,6 +13,7 @@
#include "strings_type.h"
#include "company_type.h"
#include "core/geometry_type.hpp"
#include "guitimer_func.h"
struct GRFFile;
@ -27,7 +28,7 @@ enum WarningLevel {
/** The data of the error message. */
class ErrorMessageData {
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.
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.

@ -71,7 +71,7 @@ static WindowDesc _errmsg_face_desc(
* @param data The data to copy.
*/
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)
{
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.
*/
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_size(textref_stack_size),
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);
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));
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_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);
@ -203,13 +204,13 @@ public:
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;
size->height = max(size->height, panel_height);
size->height = std::max(size->height, panel_height);
break;
}
case WID_EM_FACE: {
Dimension face_size = GetSpriteSize(SPR_GRADIENT);
size->width = max(size->width, face_size.width);
size->height = max(size->height, face_size.height);
size->width = std::max(size->width, face_size.width);
size->height = std::max(size->height, face_size.height);
break;
}
}
@ -317,16 +318,14 @@ public:
void OnMouseLoop() override
{
/* 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->duration != 0) {
this->duration--;
if (this->duration == 0) delete this;
}
if (this->display_timer.CountElapsed(delta_ms) == 0) return;
delete this;
}
~ErrmsgWindow()
@ -341,7 +340,7 @@ public:
*/
bool IsCritical()
{
return this->duration == 0;
return this->display_timer.HasElapsed();
}
};

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

@ -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
* height for this font size and the small size. */
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 {
pixels = ScaleFontTrad(pixels);
@ -662,8 +662,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa)
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 */
uint width = max(1U, (uint)slot->bitmap.width + (this->fs == FS_NORMAL));
uint height = max(1U, (uint)slot->bitmap.rows + (this->fs == FS_NORMAL));
uint width = std::max(1U, (uint)slot->bitmap.width + (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. */
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
* height for this font size and the small size. */
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);
DeleteObject(temp);
@ -859,7 +859,7 @@ void Win32FontCache::ClearFontCache()
MAT2 mat = { {0, 1}, {0, 0}, {0, 0}, {0, 1} };
/* 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);
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. */
uint width = max(1U, (uint)gm.gmBlackBoxX + (this->fs == FS_NORMAL));
uint height = max(1U, (uint)gm.gmBlackBoxY + (this->fs == FS_NORMAL));
uint width = std::max(1U, (uint)gm.gmBlackBoxX + (this->fs == FS_NORMAL));
uint height = std::max(1U, (uint)gm.gmBlackBoxY + (this->fs == FS_NORMAL));
/* Limit glyph size to prevent overflows later on. */
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,
* inclusively. To map this to 0 to 255, we shift left by two and then
* 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. */
if (this->fs == FS_NORMAL && !aa) {

@ -222,7 +222,7 @@ static const char *GetEnglishFontName(const ENUMLOGFONTEX *logfont)
offset += buf[pos++];
/* 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];
font_name[length] = '\0';

@ -76,7 +76,7 @@ namespace {
this->prev_index = this->next_index;
this->next_index += 1;
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 */
@ -87,7 +87,7 @@ namespace {
this->prev_index = this->next_index;
this->next_index += 1;
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_timestamp = start_time;
@ -115,7 +115,7 @@ namespace {
/** Get average cycle processing time over a number of data points */
double GetAverageDurationMilliseconds(int count)
{
count = min(count, this->num_valid);
count = std::min(count, this->num_valid);
int first_point = this->prev_index - count;
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_bad = target * 2 / 3;
value = min(9999.99, value);
value = std::min(9999.99, value);
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;
}
@ -404,7 +404,7 @@ struct FramerateWindow : Window {
{
const double threshold_good = target / 3;
const double threshold_bad = target;
value = min(9999.99, value);
value = std::min(9999.99, value);
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;
}
@ -422,8 +422,8 @@ struct FramerateWindow : Window {
CachedDecimal times_shortterm[PFE_MAX]; ///< cached short 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 const int MIN_ELEMENTS = 5; ///< smallest number of elements to display
static constexpr int VSPACING = 3; ///< space between column heading and values
static constexpr int MIN_ELEMENTS = 5; ///< smallest number of elements to display
FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
{
@ -435,7 +435,7 @@ struct FramerateWindow : Window {
this->next_update.SetInterval(100);
/* 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
@ -486,7 +486,7 @@ struct FramerateWindow : Window {
this->num_active = new_active;
Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
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();
}
}
@ -555,7 +555,7 @@ struct FramerateWindow : Window {
SetDParamStr(1, GetAIName(e - PFE_AI0));
line_size = GetStringBoundingBox(STR_FRAMERATE_AI);
}
size->width = max(size->width, line_size.width);
size->width = std::max(size->width, line_size.width);
}
break;
}
@ -567,7 +567,7 @@ struct FramerateWindow : Window {
SetDParam(0, 999999);
SetDParam(1, 2);
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;
resize->width = 0;
resize->height = FONT_HEIGHT_NORMAL;
@ -769,7 +769,7 @@ struct FrametimeGraphWindow : Window {
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 */
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 */
graph_size.width = 2 * graph_size.height;
*size = graph_size;
@ -980,7 +980,7 @@ struct FrametimeGraphWindow : Window {
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);
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) {
DrawString(x_zero, peak_point.x - 2, label_y, STR_FRAMERATE_GRAPH_MILLISECONDS, tc_peak, SA_RIGHT | SA_FORCE, false, FS_SMALL);
} else {

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

@ -549,7 +549,7 @@ struct GenerateLandscapeWindow : public Window {
}
}
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
@ -1270,7 +1270,7 @@ struct GenerateProgressWindow : public Window {
case WID_GP_PROGRESS_TEXT:
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;
break;

@ -283,8 +283,8 @@ void GfxFillPolygon(const std::vector<Point> &shape, int colour, FillRectMode mo
std::sort(intersections.begin(), intersections.end());
for (size_t i = 1; i < intersections.size(); i += 2) {
/* Check clipping. */
const int x1 = max(0, intersections[i - 1]);
const int x2 = min(intersections[i], dpi->width);
const int x1 = std::max(0, intersections[i - 1]);
const int x2 = std::min(intersections[i], dpi->width);
if (x2 < 0) 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. */
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_x /= 2;
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)
{
/* 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. */
int extra = max_height / 2;
@ -936,8 +936,8 @@ Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
}
Dimension d;
d.width = max<int>(0, UnScaleByZoom(sprite->x_offs + sprite->width, zoom));
d.height = max<int>(0, UnScaleByZoom(sprite->y_offs + sprite->height, zoom));
d.width = std::max<int>(0, UnScaleByZoom(sprite->x_offs + sprite->width, zoom));
d.height = std::max<int>(0, UnScaleByZoom(sprite->y_offs + sprite->height, zoom));
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);
} else {
/* Amount of pixels to clip from the source sprite */
int clip_left = max(0, -sprite->x_offs + sub->left * ZOOM_BASE );
int clip_top = 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_bottom = max(0, sprite->height - (-sprite->y_offs + (sub->bottom + 1) * ZOOM_BASE));
int clip_left = std::max(0, -sprite->x_offs + sub->left * ZOOM_BASE );
int clip_top = std::max(0, -sprite->y_offs + sub->top * ZOOM_BASE );
int clip_right = std::max(0, sprite->width - (-sprite->x_offs + (sub->right + 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_top + clip_bottom >= sprite->height) return;
@ -1328,7 +1328,7 @@ byte GetDigitWidth(FontSize size)
{
byte width = 0;
for (char c = '0'; c <= '9'; c++) {
width = max(GetCharacterWidth(size, c), width);
width = std::max(GetCharacterWidth(size, c), 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;
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:
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_top = 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_bottom = min<int>(_screen.height, min<int>(bottom << vp->GetDirtyBlockHeightShift(), vp->height) + vp->top);
int draw_left = std::max<int>(0, ((left == 0) ? 0 : vp->dirty_block_left_margin + (left << vp->GetDirtyBlockWidthShift())) + vp->left);
int draw_top = std::max<int>(0, (top << vp->GetDirtyBlockHeightShift()) + vp->top);
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 = std::min<int>(_screen.height, std::min<int>(bottom << vp->GetDirtyBlockHeightShift(), vp->height) + vp->top);
if (draw_left < draw_right && draw_top < draw_bottom) {
DrawDirtyViewport(0, draw_left, draw_top, draw_right, draw_bottom);
}
@ -2001,8 +2001,8 @@ void UpdateCursorSize()
_cursor.total_offs = offs;
_cursor.total_size = size;
} else {
int right = 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 right = std::max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x);
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.y < _cursor.total_offs.y) _cursor.total_offs.y = offs.y;
_cursor.total_size.x = right - _cursor.total_offs.x;

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

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

@ -291,7 +291,7 @@ struct GoalListWindow : public Window {
}
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. */
this->DrawListColumn(GC_PROGRESS, wid, progress_col_width);

@ -110,7 +110,7 @@ struct GraphLegendWindow : Window {
static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index)
{
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++) {
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
@ -212,8 +212,8 @@ protected:
OverflowSafeInt64 datapoint = this->cost[i][j];
if (datapoint != INVALID_DATAPOINT) {
current_interval.highest = max(current_interval.highest, datapoint);
current_interval.lowest = min(current_interval.lowest, datapoint);
current_interval.highest = std::max(current_interval.highest, 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. */
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;
grid_size = max(grid_size_higher, grid_size_lower);
grid_size = std::max(grid_size_higher, grid_size_lower);
} else {
/* If both values are zero, show an empty graph. */
num_pos_grids = num_hori_lines / 2;
@ -435,7 +435,7 @@ protected:
* least significant bits are removed.
*/
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) */
if (datapoint < 0) {
@ -496,7 +496,7 @@ public:
SetDParam(0, month + STR_MONTH_ABBREV_JAN);
SetDParam(1, month + STR_MONTH_ABBREV_JAN + 2);
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;
if (month >= 12) {
@ -514,9 +514,9 @@ public:
SetDParam(1, INT64_MAX);
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->height = 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->width = std::max<uint>(size->width, 5 + y_label_width + this->num_on_x_axis * (x_label_width + 5) + 9);
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 = std::max<uint>(size->height, size->width / 3);
}
void DrawWidget(const Rect &r, int widget) const override
@ -568,7 +568,7 @@ public:
byte nums = 0;
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;
@ -1115,7 +1115,7 @@ static const StringID _performance_titles[] = {
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 {
@ -1199,7 +1199,7 @@ public:
this->ordinal_width = 0;
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
@ -1215,13 +1215,13 @@ public:
Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
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()) {
SetDParam(0, c->index);
SetDParam(1, c->index);
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
@ -1321,7 +1321,7 @@ struct PerformanceRatingDetailWindow : Window {
uint score_info_width = 0;
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);
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. */
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;
@ -47,7 +47,7 @@ void GroundVehicle<T, Type>::PowerChanged()
if (air_drag_value == 0) {
uint16 max_speed = v->GetDisplayMaxSpeed();
/* 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 {
/* 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;
@ -114,7 +114,7 @@ void GroundVehicle<T, Type>::CargoChanged()
ClrBit(this->vcache.cached_veh_flags, VCF_GV_ZERO_SLOPE_RESIST);
/* 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). */
this->gcache.cached_axle_resistance = 10 * weight;
@ -201,8 +201,8 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
}
} else {
/* "Kickoff" acceleration. */
force = (mode == AS_ACCEL && !maglev) ? min(max_te, power) : power;
force = max(force, (mass * 8) + resistance);
force = (mode == AS_ACCEL && !maglev) ? std::min<uint64>(max_te, power) : power;
force = std::max(force, (mass * 8) + resistance);
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.
*/
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 = min((64 << 16) + (breakdown_factor * 128), 255 << 16);
breakdown_factor /= (std::max(force, (int64)100) * this->gcache.cached_max_track_speed);
breakdown_factor = std::min<uint64>((64 << 16) + (breakdown_factor * 128), 255 << 16);
if (Type == VEH_TRAIN && Train::From(this)->tcache.cached_num_engines > 1) {
/* For multiengine trains, breakdown chance is multiplied by 3 / (num_engines + 2) */
breakdown_factor *= 3;
breakdown_factor /= (Train::From(this)->tcache.cached_num_engines + 2);
}
/* 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;
@ -250,9 +250,9 @@ GroundVehicleAcceleration GroundVehicle<T, Type>::GetAcceleration()
/* Defensive driving: prevent ridiculously fast deceleration.
* -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 {
braking_accel = ClampToI32(min(-braking_force - resistance, -10000) / mass);
braking_accel = ClampToI32(std::min<int64>(-braking_force - resistance, -10000) / mass);
}
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
* same (maximum) speed. */
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(_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL &&
HasBit(Train::From(this)->flags, VRF_BREAKDOWN_POWER)) {

@ -443,7 +443,7 @@ protected:
this->subspeed = (byte)spd;
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;
@ -460,7 +460,7 @@ protected:
}
}
} 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 {
tempmax = this->cur_speed;
}
@ -471,7 +471,7 @@ protected:
extern void TrainBrakesOverheatedBreakdown(Vehicle *v);
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
@ -479,7 +479,7 @@ protected:
* threshold for some reason. That makes acceleration fail and assertions
* happen in Clamp. So make it explicit that min_speed overrules the maximum
* 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) {
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);

@ -240,14 +240,14 @@ private:
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].width = 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->column_size[VGC_NAME].width = std::max((170u * FONT_HEIGHT_NORMAL) / 10u, this->column_size[VGC_NAME].width);
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->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->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].height = 0;
@ -256,13 +256,13 @@ private:
Dimension d = GetSpriteSize(profit_sprites[i]);
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);
SetDParamMaxValue(0, num_vehicle, 3, FS_SMALL);
SetDParamMaxValue(1, num_vehicle, 3, FS_SMALL);
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;
@ -466,9 +466,9 @@ public:
/* ... minus the buttons at the bottom ... */
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 = 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_RENAME_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 = std::max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height);
/* ... minus the height of the group info ... */
max_icon_height += (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
@ -675,7 +675,7 @@ public:
case WID_GL_LIST_GROUP: {
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) {
const Group *g = this->groups[i];
@ -699,7 +699,7 @@ public:
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) */
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) {
const Vehicle *v = this->vehgroups[i].GetSingleVehicle();
if (v->group_id != this->vli.index) {

@ -43,7 +43,7 @@ static const StringID _endgame_perf_titles[] = {
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];
}
@ -132,7 +132,7 @@ void SaveToHighScore()
for (i = 0; i < SP_SAVED_HIGHSCORE_END; i++) {
for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) {
/* 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
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++) {
byte length;
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 ||
fseek(fp, 2, SEEK_CUR) == -1) { // XXX - placeholder for hs->title, not saved anymore; compatibility
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. */
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;
}

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

@ -534,7 +534,7 @@ static bool TransportIndustryGoods(TileIndex tile)
bool moved_cargo = false;
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) {
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_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();
if (ta.w == 0 || ta.h == 0) return;
@ -1165,7 +1165,7 @@ static void ChopLumberMillTrees(Industry *i)
TileIndex tile = i->location.tile;
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) {
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. */
if (!indspec->UsesOriginalEconomy()) {
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);
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,
* 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)) {
this->wanted_inds += ScaleByMapSize(NEWINDS_PER_MONTH);
}
@ -2425,7 +2425,7 @@ static void UpdateIndustryStatistics(Industry *i)
byte pct = 0;
if (i->this_month_production[j] != 0) {
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;
@ -2449,7 +2449,7 @@ void Industry::RecomputeProductionMultipliers()
/* Rates are rounded up, so e.g. oilrig always produces some passengers */
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);
if (ind == nullptr) {
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 {
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,
* determined by mult value. If mult = 1 prod. increases, else (-1) it decreases. */
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" */
@ -2867,7 +2867,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
/* Increase if needed */
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;
if (str == STR_NULL) str = indspec->production_up_text;
}
@ -2878,7 +2878,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
closeit = true;
break;
} 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;
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.
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++) {
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);
Dimension strdim = GetStringBoundingBox(cargostring.c_str());
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;
}
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);
strdim = GetStringBoundingBox(cargostring.c_str());
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;
}
d = maxdim(d, strdim);
@ -966,22 +966,22 @@ public:
case EA_MULTIPLIER:
if (button == 1) {
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 {
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;
case EA_RATE:
if (button == 1) {
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 {
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 */
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;
@ -1468,7 +1468,7 @@ protected:
}
/* 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];
SetDParam(p++, STR_INDUSTRY_DIRECTORY_ITEM_INFO);
SetDParam(p++, std::get<0>(ci));
@ -2399,10 +2399,10 @@ struct IndustryCargoesWindow : public Window {
const IndustrySpec *indsp = GetIndustrySpec(it);
if (!indsp->enabled) continue;
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 = 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->accepts_cargo, endof(indsp->accepts_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;
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;
/* 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;
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::normal_height = d.height + CargoesField::VERT_INTER_INDUSTRY_SPACE;
@ -2437,11 +2437,11 @@ struct IndustryCargoesWindow : public Window {
break;
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;
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;
}
}
@ -2646,7 +2646,7 @@ struct IndustryCargoesWindow : public Window {
/* 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_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++) {
CargoesRow &row = this->fields.emplace_back();
row.columns[0].MakeEmpty(CFT_EMPTY);
@ -2722,7 +2722,7 @@ struct IndustryCargoesWindow : public Window {
bool houses_accept = HousesCanAccept(&cid, 1);
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_indrows = max(num_supp, num_cust);
int num_indrows = std::max(num_supp, num_cust);
for (int i = 0; i < num_indrows; i++) {
CargoesRow &row = this->fields.emplace_back();
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);
if (!_settings_game.economy.sharing_payment_in_debt) {
/* 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;
}
v->profit_this_year -= cost;

@ -232,7 +232,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
uint a = comment_alloc;
/* add to comment */
if (ns > a) {
a = max(a, 128U);
a = std::max(a, 128U);
do a *= 2; while (a < ns);
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. */
int z = 0;
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 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 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 + 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;
} 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 m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + max(z, m) - m, pt.y + max(z, m) - m) / 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 + 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;
}
@ -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 j = 0; j < SNOW_LINE_DAYS; j++) {
_snow_line->highest_value = max(_snow_line->highest_value, table[i][j]);
_snow_line->lowest_value = min(_snow_line->lowest_value, table[i][j]);
_snow_line->highest_value = std::max(_snow_line->highest_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
STR_CHEATS :{WHITE}Kullery
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_CHANGE_COMPANY :{LTBLUE}Speel as maatskappy: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bou 'n aparte roetebaken
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :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_METRIC :{COMMA}{NBSP}كم/س
STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}م/ث
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}مربعات/ اليوم
STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}حصان
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}حصان
@ -226,6 +227,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}حدد
STR_BUTTON_SORT_BY :{BLACK} رتب بـ
STR_BUTTON_LOCATION :{BLACK}الموقع
STR_BUTTON_RENAME :{BLACK}اعادة تسمية
STR_BUTTON_CATCHMENT :{BLACK}مدى التغطية
STR_TOOLTIP_CLOSE_WINDOW :{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_BRL :ريال برازيلي (BRL)
STR_GAME_OPTIONS_CURRENCY_EEK :كرونا استونية (EEK)
STR_GAME_OPTIONS_CURRENCY_KRW :وون كوريا الجنوبية (KRW)
STR_GAME_OPTIONS_CURRENCY_ZAR :راند جنوب أفريقيا (ZAR)
STR_GAME_OPTIONS_CURRENCY_CUSTOM :مخصص ...
############ end of currency region
@ -1088,6 +1092,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :السماح ب
STR_CONFIG_SETTING_CATCHMENT :السماح بحدود اكثر واقعية للمحطات بحسب الحجم: {STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE :السماح بحذف اكثر من الطرق المملوكة للمدينة و الجسور و غيرها: {STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT :كمية دخان/شرار القطارات:{STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :حدد مقدار الدخان أو عدد الشرارت من المركبات
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :موديل تسارع القطارات: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :نمط تسارع عربات الطريق: {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_PROSPECTING :تنقيب
STR_CONFIG_SETTING_MULTIPINDTOWN :السماح بوجود أكثر من مصنع من نفس النوع في المدينة الواحدة: {STRING}
STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :على جانب القيادة
STR_CONFIG_SETTING_SHOWFINANCES :أعرض نافذة المالية في آخر السنة: {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :الامر الجديد - بدون توقف - قياسيا: {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_STOP_ON_TOWN_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_INFRASTRUCTURE_MAINTENANCE :صيانة البنية التحتية: {STRING}
@ -1244,6 +1251,7 @@ STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :عطل ادوا
STR_CONFIG_SETTING_MAX_TRAINS :الحد الأعلى لعدد القطارات لكل شركة: {STRING}
STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :الحد الأعلى لعدد العربات لكل شركة: {STRING}
STR_CONFIG_SETTING_MAX_AIRCRAFT :الحد الأعلى لعدد الطائرات لكل شركة: {STRING}
STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :الحد الأقصى لعدد الطائرات التي يمكن أن تمتلكها الشركة
STR_CONFIG_SETTING_MAX_SHIPS :الحد الأعلى لعدد السفن لكل شركة: {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_SHIPS :حظر السفن على الحاسوب: {STRING}
STR_CONFIG_SETTING_AI_PROFILE_EASY :سهل
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح بالذكاء الصناعي في اللعب الجماعي : {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_STARTING_YEAR :سنة البدايه: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :لا تنتهي
STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{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_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 :م) متري)
@ -1442,7 +1456,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}هل ت
# Cheat window
STR_CHEATS :{WHITE}اسرار
STR_CHEATS_TOOLTIP :{BLACK}علامة صح اذا استخدمت هذا السرمن قبل
STR_CHEATS_WARNING :{BLACK}تحذير! انت على وشك ان تغش منافسيك. إعلم انهم سيتذكرون عليك هذا العار للإبد
STR_CHEAT_MONEY :{LTBLUE}زيادة السيولة بـ {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}العب كشركة{ORANGE}{COMMA}
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_UNSELECT_ALL_CAPTION :{BLACK} مسح الكل
STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK} ضع علامة على المحتوى التي لن يتم تحميلها
STR_CONTENT_SEARCH_EXTERNAL :{BLACK}بحث المواقع الخارجية
STR_CONTENT_FILTER_TITLE :{BLACK}مُرَشِح:
STR_CONTENT_DOWNLOAD_CAPTION :{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_CREATE_SPLITTED_WAYPOINT :{YELLOW} ابني نقطة عبور مستقلة
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_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_EIGHTS :({COMMA} /8 {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_ROAD_SPEED_LIMIT :{BLACK}حدود سرعه الطريق: {LTBLUE}{VELOCITY}
@ -2301,9 +2318,12 @@ STR_ABOUT_VERSION :{BLACK}النس
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-{STRING} فريق النسخة المفتوحة
# Framerate display window
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} صورة في الثانية
############ Leave those lines in this order!!
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMESCRIPT :كتابة اللعبة
############ End of leave-in-this-order
@ -2329,6 +2349,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}تفاص
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}لا توجد معلومات متاحة
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}اضافات جديدة: {WHITE}{STRING}
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}الكتابة على الملف
STR_SAVELOAD_OSKTITLE :{BLACK}ادخل اسم الحفظ للعبة
@ -2639,6 +2660,7 @@ STR_GOAL_QUESTION_CAPTION_WARNING :تحذير
STR_GOAL_QUESTION_CAPTION_ERROR :خطا
############ Start of Goal Question button list
STR_GOAL_QUESTION_BUTTON_RETRY :إعادة المحاولة
############ End of Goal Question button list
# Subsidies window
@ -2651,6 +2673,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING
STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}اضغط على الخدمة لتوسيط الخريطة على المصنع/المدينة. اضغط + كنترول لفتح شاشة عرض جديدة للمدينة.
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}كتاب القصة
# Station list window
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_TOOLTIP :{BLACK}اظهار معدل النقل للمحطة
STR_STATION_VIEW_WAITING_AMOUNT :الكمية: في الانتظار
############ range for rating starts
@ -2787,7 +2811,9 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}نحن
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}صناعات
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}-بدون-
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING}
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}اسماء المصانع - اضغط على اسم المصنع لتوسيط الشاشة عليه. اضغط + كنترول لفتح شاشة عرض جديدة لمنطقة المصنع.
STR_INDUSTRY_DIRECTORY_FILTER_NONE :بدون
# Industry view
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_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :كل انواع الحمولة
STR_PURCHASE_INFO_NONE :بدون
STR_PURCHASE_INFO_ALL_BUT :الكل الا {CARGO_LIST}
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_SHOW_TOGGLE_BUTTON :{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_TITLE :{GOLD}اختر نوع الحمولة ...
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_SELECT_VEHICLES_TOOLTIP :{BLACK}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها.
@ -3479,6 +3508,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت
STR_AI_LIST_CANCEL :{BLACK} الغاء
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}التقط لقطة شاشة كاملة
# AI Parameters
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_THERE_IS_NO_ROAD :{WHITE}... لا يوجد طريق
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... لا يوجد سكه ترام هنا
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}لا يوجد ترام مناسب
# Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}تعذر بناء القناه هنا...

@ -1682,7 +1682,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}¿Segur
# Cheat window
STR_CHEATS :{WHITE}Trukoak
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_CHANGE_COMPANY :{LTBLUE} {ORANGE}{COMMA} konpainiarekin jolastu
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ibilbide puntu bereizitua eraiki
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Trenbidea eraiki
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Trenbide elektrikoa eraiki

@ -2116,7 +2116,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Вы ў
# Cheat window
STR_CHEATS :{WHITE}Махлярства (чыты)
STR_CHEATS_TOOLTIP :{BLACK}Птушкі паказваюць, ці выкарыстоўвалі Вы гэты чыт раней
STR_CHEATS_WARNING :{BLACK}Увага, Вы зьбіраецеся здрадзіць сваім спаборнікам! Гэтага вам ніколі не даруюць!
STR_CHEAT_MONEY :{LTBLUE}Дадаць {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Гульня за кампанію: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Пабудаваць асобны пункт шляху
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Чыгунка
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Электрыфікаваная чыгунка

@ -1816,7 +1816,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Você t
# Cheat window
STR_CHEATS :{WHITE}Trapaças
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_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}
@ -2325,6 +2324,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir ponto de controle
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controle separado
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construir ferrovias
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construir ferrovias (elétricas)

@ -1728,7 +1728,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Иск
# Cheat window
STR_CHEATS :{WHITE}Кодове
STR_CHEATS_TOOLTIP :{BLACK}Кутийките показват дали този код е бил използван
STR_CHEATS_WARNING :{BLACK}Внимание! По този начин ще измамите своите съперници. Имайте в предвид, че това безчестие ще бъде запомнено вовеки веков.
STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Играе като компания: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построи отделен пътеводител
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_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_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_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_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
STR_CHEATS :{WHITE}Trampes
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_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}
@ -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_LEFT :*** {STRING} ha deixat la partida ({2: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_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment...
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_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
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construcció de ferrocarril
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_INFRASTRUCTURE_BUTTON :{BLACK}Detalls
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_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_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}?
@ -4018,6 +4024,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Remodela a {ST
STR_ORDER_STOP_ORDER :(Para)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No pot usar l'estació){POP_COLOUR} {STRING} {STATION} {STRING}
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_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_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_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...
@ -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_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_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
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinació de vies impossible

@ -1911,7 +1911,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Doista
# Cheat window
STR_CHEATS :{WHITE}Varanje
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_CHANGE_COMPANY :{LTBLUE}Igraj kao tvrtka: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Izgradi zasebno čvorište
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Izgradnja željeznice
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Izgradnja elektrificirane željeznice

@ -2157,7 +2157,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Určite
# Cheat window
STR_CHEATS :{WHITE}Cheaty
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_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}
@ -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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postavit samostatné směrování
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba ž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
STR_CHEATS :{WHITE}Snydefunktioner
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_CHANGE_COMPANY :{LTBLUE}Spiller som firmaet: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Byg et separat waypoint
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :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_METRIC :{COMMA}{NBSP}km/u
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_METRIC :{COMMA}{NBSP}pk
@ -314,8 +315,15 @@ STR_SORT_BY_CARGO_CAPACITY :Vrachtcapacitei
STR_SORT_BY_RANGE :Bereik
STR_SORT_BY_POPULATION :Aantal inwoners
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
STR_GROUP_BY_NONE :Geen
STR_GROUP_BY_SHARED_ORDERS :Gedeelde orders
# Tooltips for the main toolbar
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_COMPANY_NAME :{SILVER}- - {COMPANY} - -
STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * *
STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * GEPAUZEERD (wacht op bijwerken koppelinggrafiek) * *
STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN
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_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING}
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_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_VALUE :{NUM}
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_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}
@ -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_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_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_METRIC :Metrisch (km/h)
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_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
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_NO :{BLACK}Nee
@ -1815,7 +1837,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je
# Cheat window
STR_CHEATS :{WHITE}Valsspelen
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_CHANGE_COMPANY :{LTBLUE}Spelen als bedrijf: {ORANGE}{COMMA}
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_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_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
@ -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_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_5 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}, {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_CONNECTING_CLIENTS :spelers maken verbinding
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :Handmatig
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
STR_NETWORK_MESSAGE_CLIENT_LEAVING :vertrekt
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_LEFT :*** {STRING} heeft het spel verlaten ({2: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_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft...
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :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_TREES_BUTTON :{BLACK}Willekeurige bomen
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)
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.
# Goal question window
STR_GOAL_QUESTION_CAPTION_QUESTION :Vraag
STR_GOAL_QUESTION_CAPTION_INFORMATION :Informatie
STR_GOAL_QUESTION_CAPTION_WARNING :Waarschuwing
STR_GOAL_QUESTION_CAPTION_ERROR :Fout
STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Vraag
STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informatie
STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Waarschuwing
STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Fout
############ Start of Goal Question button list
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_TOOLTIP :{BLACK}Gedetailleerde aantallen infrastructuur bekijken
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_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_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}?
@ -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_WRITEABLE :Bestand is niet schrijfbaar
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_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_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_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_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...
@ -4721,10 +4760,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Suikermijn
##id 0x6000
STR_SV_EMPTY :
STR_SV_UNNAMED :Geen naam
STR_SV_TRAIN_NAME :Trein {COMMA}
STR_SV_ROAD_VEHICLE_NAME :Wegvoertuig {COMMA}
STR_SV_SHIP_NAME :Schip {COMMA}
STR_SV_AIRCRAFT_NAME :Vliegtuig {COMMA}
STR_SV_TRAIN_NAME :Trein #{COMMA}
STR_SV_ROAD_VEHICLE_NAME :Wegvoertuig #{COMMA}
STR_SV_SHIP_NAME :Schip #{COMMA}
STR_SV_AIRCRAFT_NAME :Vliegtuig #{COMMA}
STR_SV_STNAME :{STRING}
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_COMPANY_NUM :(Bedrijf {COMMA})
STR_FORMAT_GROUP_NAME :Groep {COMMA}
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA}
STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN}
STR_FORMAT_WAYPOINT_NAME :Routepunt {TOWN}
STR_FORMAT_WAYPOINT_NAME_SERIAL :Routepunt {TOWN} {COMMA}

@ -2151,7 +2151,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you
# Cheat window
STR_CHEATS :{WHITE}Cheats
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_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA}
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_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
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :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_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)
@ -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_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied
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
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossible track combination

@ -1738,7 +1738,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you
# Cheat window
STR_CHEATS :{WHITE}Cheats
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_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction

@ -1813,7 +1813,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you
# Cheat window
STR_CHEATS :{WHITE}Cheats
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_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railroad Construction
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railroad Construction

@ -1422,7 +1422,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ĉu vi
# Cheat window
STR_CHEATS :{WHITE}Filudaĵoj
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_CHANGE_COMPANY :{LTBLUE}Ludanta kiel kompanio: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Krei apartan vojpunkton
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Konstruado de Fervojo
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Konstruado de Elektrofervojo

@ -1829,7 +1829,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Kas sa
# Cheat window
STR_CHEATS :{WHITE}Petmine
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_CHANGE_COMPANY :{LTBLUE}Mängimine ettevõttena: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ehita eraldi teemärgis
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rööbasteede ehitamine
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriraudtee ehitamine

@ -1588,7 +1588,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er tú
# Cheat window
STR_CHEATS :{WHITE}Snýt
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_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}
@ -2078,6 +2077,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bygg se
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bind waypoint saman
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bygg eitt serstakt waypoint
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :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_EXPENSES_LAYOUT :Ryhmitä kulut yhtiön rahoitusikkunassa: {STRING}
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_HELPTEXT :Toista ääni tiivistetyille uutisviesteille
@ -1835,7 +1837,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Lopetet
# Cheat window
STR_CHEATS :{WHITE}Huijaukset
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_CHANGE_COMPANY :{LTBLUE}Hallinnassa oleva yhtiö: {ORANGE}{COMMA}
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_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
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rautatien 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_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)
@ -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_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ei käytössä olevia itsekorvaus- tai itseuudistussääntöjä
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
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_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_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_HELPTEXT :Jouer un son pour les bulletins
@ -1836,7 +1838,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Êtes-v
# Cheat window
STR_CHEATS :{WHITE}Triches
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_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}
@ -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_LEFT :*** {STRING} a quitté la partie ({2: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_REBOOT :{WHITE}Le serveur redémarre...{}Veuillez patienter...
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_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
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construction de voie ferré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_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_TOOLTIP :{BLACK}Donner de largent à cette compagnie
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.
@ -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_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}?
@ -4018,6 +4025,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Réaménager p
STR_ORDER_STOP_ORDER :(Arrêt)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station inutilisable){POP_COLOUR} {STRING} {STATION} {STRING}
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_CAN_T_REPAY_LOAN :{WHITE}Impossible de rembourser...
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_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...
@ -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_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_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
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinaison de rails impossible

@ -1972,7 +1972,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}A bheil
# Cheat window
STR_CHEATS :{WHITE}Cealgaireachd
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_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}
@ -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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Tog puing-thurais fa leth
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Tog rathad-iarainn
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Togail rathaid-iarainn dealain

@ -1808,7 +1808,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Estás
# Cheat window
STR_CHEATS :{WHITE}Trampulladas
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_CHANGE_COMPANY :{LTBLUE}Xogando coma compañía: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Constrúe un un punto de ruta separado
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construción de Ferrocarrís
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
STR_GROUP_BY_NONE :Keine
STR_GROUP_BY_SHARED_ORDERS :Gemeinsame Aufträge
# Tooltips for the main toolbar
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_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_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_HELPTEXT :Aktiviere das Bauen von Flüssen außerhalb des Szenarioeditors
@ -2134,7 +2137,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Soll da
# Cheat window
STR_CHEATS :{WHITE}Cheats
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_CHANGE_COMPANY :{LTBLUE}Spiele die Firma: {ORANGE}{COMMA}
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_MANUAL :manuell
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
STR_NETWORK_MESSAGE_CLIENT_LEAVING :geht
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_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
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Eisenbahnbau
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_INFRASTRUCTURE_BUTTON :{BLACK}Details
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_TOOLTIP :{BLACK}Überweise Geld an eine andere Firma
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Verschenke Geld
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_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_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?
@ -5391,6 +5397,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... Kred
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... erfordert {CURRENCY_LONG}
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_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_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...
@ -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_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Es treffen keine Ersetzungs-/Erneuerungsregeln zu
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
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Unmögliche Gleisverbindung

@ -1901,7 +1901,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Είσ
# Cheat window
STR_CHEATS :{WHITE}Απατεωνιές
STR_CHEATS_TOOLTIP :{BLACK}Τα κουτάκια δείχνουν αν έχετε ξαναχρησιμοποιήσει αυτή την απατεωνιά
STR_CHEATS_WARNING :{BLACK}Προσοχή! Είστε έτοιμοι να προδώσετε τους φίλους ανταγωνιστές σας. Θυμηθείτε ότι αυτή η ντροπή θα μείνει για πάντα.
STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA}
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κτίσιμο ενός ξεχωριστού σημείου καθοδήγησης
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Κατασκευή Σιδηρόδρομου
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκευή Ηλεκτροδοτημένου Σιδηρόδρομου

@ -1787,7 +1787,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}האם
# Cheat window
STR_CHEATS :{WHITE}(cheats) טריקים
STR_CHEATS_TOOLTIP :{BLACK}תיבות הסימון מציינות האם השתמשת בטריק הנתון בעבר
STR_CHEATS_WARNING :{BLACK}אזהרה! את/ה עומ/ת לבגוד בחבריך למשחק. קח/י בחשבון שחרפה כזו תיזכר לנצח.
STR_CHEAT_MONEY :{LTBLUE}{CURRENCY_LONG}- הגדל את כמות הכסף במאזנך ל
STR_CHEAT_CHANGE_COMPANY :{ORANGE}{COMMA}{LTBLUE} :שחק כבעלי החברה
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_CREATE_SPLITTED_WAYPOINT :{YELLOW}בנה נקודת ציון נפרדת
# Generic toolbar
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_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