Merge branch 'master' into jgrpp

# Conflicts:
#	.github/changelog.sh
#	cmake/PackageDeb.cmake
#	src/network/network_client.cpp
#	src/settings_gui.cpp
pull/217/head
Jonathan G Rennison 3 years ago
commit cb69611248

@ -0,0 +1,16 @@
#!/bin/sh
tag=$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@')
# If we are a tag, show the part of the changelog till (but excluding) the last stable
if [ -n "$tag" ]; then
grep='^[0-9]\+\.[0-9]\+\.[0-9]\+[^-]'
next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//')
cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9]+.[0-9]+.[0-9]+/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }'
exit 0
fi
# In all other cases, show the git log of the last 7 days
revdate=$(git log -1 --pretty=format:"%ci")
last_week=$(date -d "$revdate -7days" +"%Y-%m-%d %H:%M")
git log --after="${last_week}" --pretty=fuller

@ -0,0 +1,592 @@
name: Release
on:
workflow_dispatch:
inputs:
ref:
description: 'Ref to build (for Pull Requests, use refs/pull/NNN/head)'
required: true
repository_dispatch:
# client_payload should be the same as the inputs for workflow_dispatch.
types:
- Build*
release:
types:
- published
jobs:
source:
name: Source
runs-on: ubuntu-20.04
outputs:
version: ${{ steps.metadata.outputs.version }}
is_tag: ${{ steps.metadata.outputs.is_tag }}
trigger_type: ${{ steps.metadata.outputs.trigger_type }}
folder: ${{ steps.metadata.outputs.folder }}
steps:
- name: Checkout (Release)
if: github.event_name == 'release'
uses: actions/checkout@v2
with:
# We generate a changelog; for this we need the full git log.
fetch-depth: 0
- name: Checkout (Manual)
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.ref }}
# We generate a changelog; for this we need the full git log.
fetch-depth: 0
- name: Checkout (Trigger)
if: github.event_name == 'repository_dispatch'
uses: actions/checkout@v2
with:
ref: ${{ github.event.client_payload.ref }}
# We generate a changelog; for this we need the full git log.
fetch-depth: 0
- name: Check valid branch name
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
REF="${{ github.event.inputs.ref }}"
elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then
REF="${{ github.event.client_payload.ref }}"
else
REF="${{ github.ref }}"
fi
# Check if we are a tag.
if [ -n "$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || false)" ]; then
exit 0
fi
# Check if the checkout caused the branch to be named.
if [ "$(git rev-parse --abbrev-ref HEAD)" != "HEAD" ]; then
exit 0
fi
# Check if this was a pull request.
if [ -n "$(echo ${REF} | grep '^refs/pull/[0-9]*')" ]; then
PULL=$(echo ${REF} | cut -d/ -f3)
git checkout -b pr${PULL}
fi
# Are we still in a detached state? Error out.
if [ "$(git rev-parse --abbrev-ref HEAD)" == "HEAD" ]; then
echo "The 'ref' given resulted in a checkout of a detached HEAD."
echo "We cannot detect the version for these checkout accurate."
echo ""
echo "If you want to build a Pull Request, make sure you use 'refs/pull/NNN/head'."
echo ""
echo "Cancelling build, as without a version we cannot store the artifacts."
exit 1
fi
- name: Generate metadata
id: metadata
run: |
echo "::group::Prepare metadata files"
cmake -DGENERATE_OTTDREV=1 -P cmake/scripts/FindVersion.cmake
./.github/changelog.sh > .changelog
TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date
cat .ottdrev | cut -f 1 -d$'\t' > .version
if [ $(cat .ottdrev | cut -f 6 -d$'\t') = '1' ]; then
# Assume that all tags are always releases. Why else make a tag?
IS_TAG="true"
FOLDER="${{ env.FOLDER_RELEASES }}"
TRIGGER_TYPE="new-tag"
else
IS_TAG="false"
BRANCH=$(git symbolic-ref -q HEAD | sed 's@.*/@@')
if [ -z "${BRANCH}" ]; then
echo "Internal error: branch name is empty."
echo "An earlier step should have prevented this from happening."
echo "Cancelling build, as without a branch name we cannot store the artifacts"
exit 1
fi
if [ "${BRANCH}" = "${{ env.NIGHTLIES_BRANCH }}" ]; then
# The "master" branch is special, and we call a nightly.
FOLDER="${{ env.FOLDER_NIGHTLIES }}/$(date +%Y)"
TRIGGER_TYPE="new-master"
else
# All other branches, which can be builds of Pull Requests, are
# put in their own folder.
FOLDER="${{ env.FOLDER_BRANCHES }}/${BRANCH}"
TRIGGER_TYPE="new-branch"
fi
fi
mkdir -p build/bundles
cp .changelog build/bundles/changelog.txt
cp .release_date build/bundles/released.txt
cp README.md build/bundles/README.md
echo "::endgroup::"
echo "Release Date: $(cat .release_date)"
echo "Revision: $(cat .ottdrev)"
echo "Version: $(cat .version)"
echo "Is tag: ${IS_TAG}"
echo "Folder on CDN: ${FOLDER}"
echo "Workflow trigger: ${TRIGGER_TYPE}"
echo "::set-output name=version::$(cat .version)"
echo "::set-output name=is_tag::${IS_TAG}"
echo "::set-output name=folder::${FOLDER}"
echo "::set-output name=trigger_type::${TRIGGER_TYPE}"
env:
NIGHTLIES_BRANCH: master
FOLDER_RELEASES: openttd-releases
FOLDER_NIGHTLIES: openttd-nightlies
FOLDER_BRANCHES: openttd-branches
- name: Remove VCS information
run: |
rm -rf .git
- name: Create bundles
run: |
FOLDER_NAME=openttd-${{ steps.metadata.outputs.version }}
# Rename the folder to openttd-NNN
mkdir ${FOLDER_NAME}
find . -maxdepth 1 -not -name . -not -name build -not -name ${FOLDER_NAME} -exec mv {} ${FOLDER_NAME}/ \;
echo "::group::Create tarball (xz) bundle"
tar --xz -cvf build/bundles/${FOLDER_NAME}-source.tar.xz ${FOLDER_NAME}
echo "::endgroup::"
# This tarball is only to be used within this workflow.
echo "::group::Create tarball (gz) bundle"
tar --gzip -cvf source.tar.gz ${FOLDER_NAME}
echo "::endgroup::"
echo "::group::Create zip bundle"
zip -9 -r build/bundles/${FOLDER_NAME}-source.zip ${FOLDER_NAME}
echo "::endgroup::"
- name: Store bundles
uses: actions/upload-artifact@v2
with:
name: openttd-source
path: build/bundles/*
retention-days: 5
- name: Store source (for other jobs)
uses: actions/upload-artifact@v2
with:
name: internal-source
path: source.tar.gz
retention-days: 1
docs:
name: Docs
needs: source
runs-on: ubuntu-20.04
steps:
- name: Download source
uses: actions/download-artifact@v2
with:
name: internal-source
- name: Unpack source
run: |
tar -xf source.tar.gz --strip-components=1
- name: Install dependencies
run: |
echo "::group::Update apt"
sudo apt-get update
echo "::endgroup::"
echo "::group::Install dependencies"
sudo apt-get install -y --no-install-recommends \
doxygen \
# EOF
echo "::endgroup::"
env:
DEBIAN_FRONTEND: noninteractive
- name: Build
run: |
mkdir -p ${GITHUB_WORKSPACE}/build
cd ${GITHUB_WORKSPACE}/build
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_DOCS_ONLY=ON \
# EOF
echo "::endgroup::"
echo "::group::Build"
make docs
echo "::endgroup::"
- name: Create bundles
run: |
BASENAME=openttd-${{ needs.source.outputs.version }}
cd ${GITHUB_WORKSPACE}/build
mv docs/source ${BASENAME}-docs
mv docs/ai-api ${BASENAME}-docs-ai
mv docs/gs-api ${BASENAME}-docs-gs
mkdir -p bundles
echo "::group::Create docs bundle"
tar --xz -cf bundles/${BASENAME}-docs.tar.xz ${BASENAME}-docs
echo "::endgroup::"
echo "::group::Create AI API docs bundle"
tar --xz -cf bundles/${BASENAME}-docs-ai.tar.xz ${BASENAME}-docs-ai
echo "::endgroup::"
echo "::group::Create GameScript API docs bundle"
tar --xz -cf bundles/${BASENAME}-docs-gs.tar.xz ${BASENAME}-docs-gs
echo "::endgroup::"
- name: Store bundles
uses: actions/upload-artifact@v2
with:
name: openttd-docs
path: build/bundles/*.tar.xz
retention-days: 5
linux:
name: Linux
needs: source
if: needs.source.outputs.is_tag == 'true'
strategy:
fail-fast: false
matrix:
include:
- container_image: "ubuntu:18.04"
bundle_name: "bionic"
- container_image: "ubuntu:20.04"
bundle_name: "focal"
- container_image: "ubuntu:20.10"
bundle_name: "groovy"
- container_image: "debian:buster"
bundle_name: "buster"
runs-on: ubuntu-20.04
container:
image: ${{ matrix.container_image }}
steps:
- name: Download source
uses: actions/download-artifact@v2
with:
name: internal-source
- name: Unpack source
run: |
tar -xf source.tar.gz --strip-components=1
- name: Install dependencies
run: |
echo "::group::Update apt"
apt-get update
echo "::endgroup::"
echo "::group::Install dependencies"
apt-get install -y --no-install-recommends \
cmake \
debhelper \
g++ \
git \
make \
openssl \
libfontconfig-dev \
libfluidsynth-dev \
libicu-dev \
liblzma-dev \
liblzo2-dev \
libsdl2-dev \
libxdg-basedir-dev \
lsb-release \
zlib1g-dev \
# EOF
echo "::endgroup::"
env:
DEBIAN_FRONTEND: noninteractive
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build
run: |
mkdir -p build
cd build
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/usr \
# EOF
echo "::endgroup::"
echo "::group::Build"
echo "Running on $(nproc) cores"
make -j$(nproc) package
echo "::endgroup::"
# Remove the sha256 files CPack generates; we will do this ourself at
# the end of this workflow.
rm -f bundles/*.sha256
- name: Store bundles
uses: actions/upload-artifact@v2
with:
name: openttd-linux-${{ matrix.bundle_name }}
path: build/bundles
retention-days: 5
macos:
name: MacOS
needs: source
strategy:
fail-fast: false
matrix:
include:
- arch: x64
full_arch: x86_64
runs-on: macos-11.0
env:
MACOSX_DEPLOYMENT_TARGET: 10.9
steps:
- name: Download source
uses: actions/download-artifact@v2
with:
name: internal-source
- name: Unpack source
run: |
tar -xf source.tar.gz --strip-components=1
- name: Prepare vcpkg (with cache)
uses: lukka/run-vcpkg@v6
with:
vcpkgDirectory: '/usr/local/share/vcpkg'
doNotUpdateVcpkg: true
vcpkgArguments: 'freetype liblzma lzo'
vcpkgTriplet: '${{ matrix.arch }}-osx'
- name: Build tools
run: |
mkdir build-host
cd build-host
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_TOOLS_ONLY=ON \
# EOF
echo "::endgroup::"
echo "::group::Build tools"
echo "Running on $(sysctl -n hw.logicalcpu) cores"
make -j$(sysctl -n hw.logicalcpu) tools
echo "::endgroup::"
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build
run: |
mkdir build
cd build
echo "::group::CMake"
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 \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
# EOF
echo "::endgroup::"
echo "::group::Build"
echo "Running on $(sysctl -n hw.logicalcpu) cores"
make -j$(sysctl -n hw.logicalcpu) package
echo "::endgroup::"
# Remove the sha256 files CPack generates; we will do this ourself at
# the end of this workflow.
rm -f bundles/*.sha256
- name: Store bundles
uses: actions/upload-artifact@v2
with:
name: openttd-macos-${{ matrix.arch }}
path: build/bundles
retention-days: 5
windows:
name: Windows
needs: source
strategy:
fail-fast: false
matrix:
include:
- arch: x86
- arch: x64
runs-on: windows-latest
steps:
- name: Download source
uses: actions/download-artifact@v2
with:
name: internal-source
- name: Unpack source
shell: bash
run: |
tar -xf source.tar.gz --strip-components=1
- name: Prepare vcpkg (with cache)
uses: lukka/run-vcpkg@v6
with:
vcpkgDirectory: 'c:/vcpkg'
doNotUpdateVcpkg: true
vcpkgArguments: 'liblzma libpng lzo zlib'
vcpkgTriplet: '${{ matrix.arch }}-windows-static'
- name: Build tools
uses: lukka/run-cmake@v3
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
useVcpkgToolchainFile: false
buildDirectory: '${{ github.workspace }}/build-host'
buildWithCMakeArgs: '--target tools'
cmakeBuildType: RelWithDebInfo
cmakeAppendedArgs: ' -GNinja -DOPTION_TOOLS_ONLY=ON'
- name: Install MSVC problem matcher
uses: ammaraskar/msvc-problem-matcher@master
- name: Build (with installer)
if: needs.source.outputs.is_tag == 'true' && matrix.arch != 'arm64'
uses: lukka/run-cmake@v3
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
useVcpkgToolchainFile: true
buildDirectory: '${{ github.workspace }}/build'
cmakeBuildType: RelWithDebInfo
cmakeAppendedArgs: ' -GNinja -DOPTION_USE_NSIS=ON -DHOST_BINARY_DIR=${{ github.workspace }}/build-host'
- name: Build (without installer)
if: needs.source.outputs.is_tag != 'true' || matrix.arch == 'arm64'
uses: lukka/run-cmake@v3
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
useVcpkgToolchainFile: true
buildDirectory: '${{ github.workspace }}/build'
cmakeBuildType: RelWithDebInfo
cmakeAppendedArgs: ' -GNinja -DHOST_BINARY_DIR=${{ github.workspace }}/build-host'
- name: Create bundles
shell: bash
run: |
cd ${GITHUB_WORKSPACE}/build
echo "::group::Run CPack"
cpack
echo "::endgroup::"
echo "::group::Prepare PDB to be bundled"
PDB=$(ls bundles/*.zip | cut -d/ -f2 | sed 's/.zip$/.pdb/')
cp openttd.pdb bundles/${PDB}
xz -9 bundles/${PDB}
echo "::endgroup::"
echo "::group::Cleanup"
# Remove the sha256 files CPack generates; we will do this ourself at
# the end of this workflow.
rm -f bundles/*.sha256
echo "::endgroup::"
- name: Store bundles
uses: actions/upload-artifact@v2
with:
name: openttd-windows-${{ matrix.arch }}
path: build/bundles
retention-days: 5
upload:
name: Upload
needs:
- source
- docs
- linux
- macos
- windows
# The 'linux' job can be skipped if it is a nightly. That normally causes
# this job to be skipped too, unless we have this length boy :)
# "always()" is important here, it is the keyword to use to stop skipping
# this job if any dependency is skipped. It looks a bit silly, but it is
# how GitHub Actions work ;)
if: always() && needs.source.result == 'success' && needs.docs.result == 'success' && (needs.linux.result == 'success' || needs.linux.result == 'skipped') && needs.macos.result == 'success' && needs.windows.result == 'success'
runs-on: ubuntu-20.04
steps:
- name: Download all bundles
uses: actions/download-artifact@v2
- name: Calculate checksums
run: |
echo "::group::Move bundles to a single folder"
mkdir bundles
mv openttd-*/* bundles/
cd bundles
echo "::group::Build"
for i in $(ls openttd-*); do
echo "::group::Calculating checksums for ${i}"
openssl dgst -r -md5 -hex $i > $i.md5sum
openssl dgst -r -sha1 -hex $i > $i.sha1sum
openssl dgst -r -sha256 -hex $i > $i.sha256sum
echo "::endgroup::"
done
- name: Upload bundles to AWS
run: |
aws s3 cp --recursive --only-show-errors bundles/ s3://${{ secrets.CDN_S3_BUCKET }}/${{ needs.source.outputs.folder }}/${{ needs.source.outputs.version }}/
# We do not invalidate the CloudFront distribution here. The trigger
# for "New OpenTTD release" first updated the manifest files and
# creates an index.html. We invalidate after that, so everything
# becomes visible at once.
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
- name: Trigger 'New OpenTTD release'
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.DEPLOYMENT_TOKEN }}
repository: OpenTTD/workflows
event-type: ${{ needs.source.outputs.trigger_type }}
client-payload: '{"version": "${{ needs.source.outputs.version }}", "folder": "${{ needs.source.outputs.folder }}"}'

@ -7,7 +7,11 @@ if(OPTION_INSTALL_FHS)
set(DOCS_DESTINATION_DIR "${CMAKE_INSTALL_DOCDIR}")
set(MAN_DESTINATION_DIR "${CMAKE_INSTALL_MANDIR}")
else()
set(BINARY_DESTINATION_DIR ".")
if(APPLE)
set(BINARY_DESTINATION_DIR "../MacOS")
else()
set(BINARY_DESTINATION_DIR ".")
endif()
set(DATA_DESTINATION_DIR ".")
set(DOCS_DESTINATION_DIR ".")
set(MAN_DESTINATION_DIR ".")
@ -73,6 +77,9 @@ if(WIN32)
set(ARCHITECTURE "win32")
endif()
endif()
if(APPLE AND CMAKE_OSX_ARCHITECTURES)
string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" ARCHITECTURE)
endif()
set(CPACK_SYSTEM_NAME "${ARCHITECTURE}")
@ -95,7 +102,7 @@ if(APPLE)
set(CPACK_GENERATOR "Bundle")
include(PackageBundle)
set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx")
set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx-${CPACK_SYSTEM_NAME}")
elseif(WIN32)
set(CPACK_GENERATOR "ZIP")
if(OPTION_USE_NSIS)
@ -115,7 +122,24 @@ elseif(UNIX)
set(CPACK_GENERATOR "TXZ")
endif()
set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${CPACK_SYSTEM_NAME}")
find_program(LSB_RELEASE_EXEC lsb_release)
execute_process(COMMAND ${LSB_RELEASE_EXEC} -is
OUTPUT_VARIABLE LSB_RELEASE_ID
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT LSB_RELEASE_ID)
set(PLATFORM "generic")
elseif(LSB_RELEASE_ID STREQUAL "Ubuntu" OR LSB_RELEASE_ID STREQUAL "Debian")
execute_process(COMMAND ${LSB_RELEASE_EXEC} -cs
OUTPUT_VARIABLE LSB_RELEASE_CODENAME
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(TOLOWER "${LSB_RELEASE_ID}-${LSB_RELEASE_CODENAME}" PLATFORM)
else()
message(FATAL_ERROR "Unknown Linux distribution found for packaging; please consider creating a Pull Request to add support for this distribution.")
endif()
set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${PLATFORM}-${CPACK_SYSTEM_NAME}")
else()
message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.")
endif()

@ -3,7 +3,6 @@ string(TIMESTAMP CURRENT_YEAR "%Y")
set(CPACK_BUNDLE_NAME "OpenTTD")
set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/os/macosx/openttd.icns")
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/os/macosx/launch.sh")
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/os/macosx/splash.png")
set(CPACK_DMG_FORMAT "UDBZ")
@ -20,7 +19,7 @@ install(
"
include(BundleUtilities)
set(BU_CHMOD_BUNDLE_ITEMS TRUE)
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/openttd\" \"\" \"\")
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/../MacOS/openttd\" \"\" \"\")
"
DESTINATION .
COMPONENT Runtime)

@ -2,4 +2,3 @@ set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${ARCHITECTURE}")
set(CPACK_DEBIAN_PACKAGE_SECTION "games")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.15)")

@ -8,40 +8,40 @@ version = 1
@description_STR_BASEMUSIC_DOS_DESCRIPTION@
[files]
theme = gm.cat
old_0 = gm.cat
old_1 = gm.cat
old_2 = gm.cat
old_3 = gm.cat
old_4 = gm.cat
old_5 = gm.cat
old_6 = gm.cat
old_7 = gm.cat
theme = GM.CAT
old_0 = GM.CAT
old_1 = GM.CAT
old_2 = GM.CAT
old_3 = GM.CAT
old_4 = GM.CAT
old_5 = GM.CAT
old_6 = GM.CAT
old_7 = GM.CAT
old_8 =
old_9 =
new_0 = gm.cat
new_1 = gm.cat
new_2 = gm.cat
new_3 = gm.cat
new_4 = gm.cat
new_5 = gm.cat
new_6 = gm.cat
new_0 = GM.CAT
new_1 = GM.CAT
new_2 = GM.CAT
new_3 = GM.CAT
new_4 = GM.CAT
new_5 = GM.CAT
new_6 = GM.CAT
new_7 =
new_8 =
new_9 =
ezy_0 = gm.cat
ezy_1 = gm.cat
ezy_2 = gm.cat
ezy_3 = gm.cat
ezy_4 = gm.cat
ezy_5 = gm.cat
ezy_0 = GM.CAT
ezy_1 = GM.CAT
ezy_2 = GM.CAT
ezy_3 = GM.CAT
ezy_4 = GM.CAT
ezy_5 = GM.CAT
ezy_6 =
ezy_7 =
ezy_8 =
ezy_9 =
[md5s]
gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb
GM.CAT = 7a29d2d0c4f7d2e03091ffa9b2bdfffb
[catindex]
theme = 0

@ -8,25 +8,25 @@ version = 1
@description_STR_BASEMUSIC_TTO_DESCRIPTION@
[files]
theme = gm-tto.cat
old_0 = gm-tto.cat
old_1 = gm-tto.cat
old_2 = gm-tto.cat
old_3 = gm-tto.cat
old_4 = gm-tto.cat
old_5 = gm-tto.cat
old_6 = gm-tto.cat
old_7 = gm-tto.cat
theme = GM-TTO.CAT
old_0 = GM-TTO.CAT
old_1 = GM-TTO.CAT
old_2 = GM-TTO.CAT
old_3 = GM-TTO.CAT
old_4 = GM-TTO.CAT
old_5 = GM-TTO.CAT
old_6 = GM-TTO.CAT
old_7 = GM-TTO.CAT
old_8 =
old_9 =
new_0 = gm-tto.cat
new_1 = gm-tto.cat
new_2 = gm-tto.cat
new_3 = gm-tto.cat
new_4 = gm-tto.cat
new_5 = gm-tto.cat
new_6 = gm-tto.cat
new_7 = gm-tto.cat
new_0 = GM-TTO.CAT
new_1 = GM-TTO.CAT
new_2 = GM-TTO.CAT
new_3 = GM-TTO.CAT
new_4 = GM-TTO.CAT
new_5 = GM-TTO.CAT
new_6 = GM-TTO.CAT
new_7 = GM-TTO.CAT
new_8 =
new_9 =
ezy_0 =
@ -60,7 +60,7 @@ new_6 = 14
new_7 = 3
[md5s]
gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e
GM-TTO.CAT = 26e85ff84b0063aa5da05dd4698fc76e
[names]
; Names get read from the CAT file

@ -1,8 +0,0 @@
#!/bin/sh
ROOT_DIR=$(dirname "$0")/..
export DYLD_LIBRARY_PATH=${ROOT_DIR}/Frameworks
cd ${ROOT_DIR}/Resources
exec ./openttd "$@"

@ -274,9 +274,9 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :½!"#¤%&/()=?`
# Measurement tooltip
STR_MEASURE_LENGTH :{BLACK}Pituus: {NUM}
STR_MEASURE_AREA :{BLACK}Pinta-ala: {NUM} x {NUM}
STR_MEASURE_AREA :{BLACK}Pinta-ala: {NUM}×{NUM}
STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Pituus: {NUM}{}Korkeusero: {HEIGHT}
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pinta-ala: {NUM} x {NUM}{}Korkeusero: {HEIGHT}
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pinta-ala: {NUM}×{NUM}{}Korkeusero: {HEIGHT}
# These are used in buttons
@ -1026,7 +1026,7 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}Täyskuv
# Custom currency window
STR_CURRENCY_WINDOW :{WHITE}Oma valuutta
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Vaihtokurssi: {ORANGE}{CURRENCY_LONG} = £ {COMMA}
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Vaihtokurssi: {ORANGE}{CURRENCY_LONG} = {COMMA} £
STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Pienennä vaihtokurssia verrattuna puntaan (£)
STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Suurenna vaihtokurssia verrattuna puntaan (£)
STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Aseta vaihtokurssi valuutallesi verrattuna puntaan (£)
@ -1261,7 +1261,7 @@ STR_CONFIG_SETTING_FREIGHT_TRAINS :Rahdin painoker
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Määritä rahdin kuljettamisen vaikutus junissa. Korkeammat arvot tekevät rahdin kuljettamisesta raskaampaa junille, erityisesti mäissä
STR_CONFIG_SETTING_PLANE_SPEED :Lentokoneiden nopeuskerroin: {STRING}
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Määritä lentokoneiden suhteellinen nopeus verrattuna toisiin kulkuneuvotyyppeihin, jotta vähennetään ilma-alusksilla tehtyjen kuljetusten tuottoa
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Lento-onnettomuuksien määrä: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden.{}¹ Isot lentokoneet voivat kuitenkin aina tuhoutua pienille lentokentille laskeutuessaan.
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään¹
@ -1296,7 +1296,7 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkune
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti
STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING}
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Suhteellinen ikä, jonka jälkeen kulkuneuvo voidaan uudistaa automaattisesti
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 tta tta} ennen kulkuneuvon käyttöiän loppua
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 si tta} ennen kulkuneuvon käyttöiän loppua
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen kulkuneuvon käyttöiän lopun
STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä kulkuneuvon automaattiseen uudistukseen: {STRING}
STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pienin rahamäärä, joka on oltava pankissa ennen kulkuneuvojen automaattista uudistamista
@ -1315,7 +1315,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF:
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo on peräisin.
STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun.
STR_CONFIG_SETTING_LAND_GENERATOR :Maastogeneraattori: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Alkuperäinen maastonluoja riippuu perusgrafiikkapaketista ja luo ennalta määritettyjä maastonmuotoja. TerraGenesis luo maastoa Perlin-kohinan perusteella ja mahdollistaa asetusten tarkemman määrittelyn
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Alkuperäinen
@ -1487,7 +1487,7 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :Vaikea
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Salli tekoälyt moninpelissä: {STRING}
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sallii tietokonepelaajien osallistumisen moninpeleihin
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodet ennen skriptin pysäyttämistä: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Operaatiokoodien määrä ennen skriptin pysäyttämistä: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Suurin sallittu määrä laskutoimituksia, jonka skripti voi suorittaa yhden vuoron aikana
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Skriptikohtainen muistinkäyttö enintään: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon muistia yksittäinen skripti saa käyttää, ennen kuin se pakotetaan lopettamaan. Jos kartta on iso, tätä arvoa voi joutua suurentamaan.
@ -1645,7 +1645,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea
STR_CONFIG_SETTING_LARGER_TOWNS :Kaupunkien osuus: {STRING}
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Kaupunkien määrä: kaupungit ovat isompia jo alussa ja kasvavat nopeammin kuin muut kunnat
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1/{COMMA}
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING}
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kaupunkien keskimääräinen koko suhteessa muihin kuntiin pelin alussa
@ -2156,7 +2156,7 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Verkkope
STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Palvelimen pelitallennetta ei voi ladata
STR_NETWORK_ERROR_SERVER_START :{WHITE}Palvelinta ei voitu käynnistää
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Yhdistäminen ei onnistunut
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys #{NUM} aikakatkaistiin
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys nro {NUM} aikakatkaistiin
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Protokollavirhe tapahtui ja yhteys suljettiin
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Tämän asiakkaan versio ei vastaa palvelimen versiota
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä salasana
@ -2213,10 +2213,10 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :peliskripti
############ End of leave-in-this-order
STR_NETWORK_MESSAGE_CLIENT_LEAVING :poistutaan
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} on liittynyt peliin
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (Asiakas #{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (asiakas nro {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön nro {2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} on liittynyt katselijoihin
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (nro {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} on poistunut pelistä ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muuttanut nimekseen {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi yhtiöllesi {2:CURRENCY_LONG}
@ -2521,7 +2521,7 @@ STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu
STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM} × {NUM} ruutua
STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM}×{NUM} ruutua
STR_OBJECT_CLASS_LTHS :Majakat
STR_OBJECT_CLASS_TRNS :Lähettimet
@ -2619,7 +2619,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Raitioti
STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Rautatien omistaja: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kunta: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ei mitään
STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING})
STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM}×{NUM}×{NUM} ({STRING})
STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Rakennettu: {LTBLUE}{DATE_LONG}
STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aseman luokka: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Aseman tyyppi: {LTBLUE}{STRING}
@ -2859,7 +2859,7 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuaali
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Korkeuskartan kierto:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Korkeuskartan nimi:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Koko:
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM}×{NUM}
STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Muuta suurinta sallittua kartan korkeutta
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Vaihda lumirajan korkeutta
@ -2882,7 +2882,7 @@ STR_GENERATION_ABORT :{BLACK}Peruuta
STR_GENERATION_ABORT_CAPTION :{WHITE}Keskeytä maailman luominen
STR_GENERATION_ABORT_MESSAGE :{YELLOW}Haluatko varmasti keskeyttää maan luomisen?
STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen
STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen
STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen
@ -3069,7 +3069,7 @@ STR_INVALID_VEHICLE :<virheellinen k
# NewGRF scanning window
STR_NEWGRF_SCAN_CAPTION :{WHITE}Skannataan NewGRF-tiedostoja
STR_NEWGRF_SCAN_MESSAGE :{BLACK}Skannataan NewGRF-tiedostoja. Tiedostojen määrästä riippuen riippuen tässä voi kestää hetki...
STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" ää} skannattu. Arvioitu kokonaismäärä {NUM} NewGRF{P "" ää}
STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" :ää} skannattu. Arvioitu kokonaismäärä {NUM} NewGRF{P "" :ää}.
STR_NEWGRF_SCAN_ARCHIVES :Skannataan arkistoja
# Sign list window
@ -3425,10 +3425,10 @@ STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuta tuotantotasoa (prosentteina, 800{NBSP}% asti)
# Vehicle lists
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} juna{P "" a}
STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} ajoneuvo{P "" a}
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laiva{P "" a}
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} ilma-alus{P "" ta}
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} {COMMA} juna{P "" a}
STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} {COMMA} ajoneuvo{P "" a}
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} {COMMA} laiva{P "" a}
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} {COMMA} ilma-alus{P "" ta}
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat napsauta junaa saadaksesi tietoja
STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot napsauta ajoneuvoa saadaksesi tietoja
@ -3515,7 +3515,7 @@ STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Nopeus m
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Nopeus kanaalissa/joella: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Käyttökustannus: {GOLD}{CURRENCY_LONG}/vuosi
STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapasiteetti: {GOLD}{CARGO_LONG} {STRING}
STR_PURCHASE_INFO_REFITTABLE :(sovitettava)
STR_PURCHASE_INFO_REFITTABLE :(sovitettavissa)
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Suunniteltu: {GOLD}{NUM}{BLACK} Elinikä: {GOLD}{COMMA} vuo{P si tta}
STR_PURCHASE_INFO_RELIABILITY :{BLACK}Enimmäisluotettavuus: {GOLD}{COMMA}{NBSP}%
STR_PURCHASE_INFO_COST :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}
@ -3849,11 +3849,11 @@ STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Kokonaisrahtikapasiteetti:
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT})
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM})
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE} {CARGO_LONG} ({CARGO_SHORT}) (×{NUM})
STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Tyhjä
STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} asemalta {STATION}
STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} asemalta {STATION} (x{NUM})
STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} asemalta {STATION} (×{NUM})
STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Rahti
STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Näytä kuljetettavan rahdin tiedot
@ -3876,7 +3876,7 @@ STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Uusi kap
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Valitse sovitettavat kulkuneuvot. Hiirellä vetäminen sallii useamman kulkuneuvon valinnan. Tyhjän alueen napsautus valitsee koko kulkuneuvon. Ctrl+Klik valitsee kulkuneuvon ja sitä seuraavan ketjun
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Valitse junan rahtityyppi
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Valitse ajoneuvolla ajettava rahti
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Valitse ajoneuvolla kuljetettava rahti
STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Valitse laivan kuljettama rahtityyppi
STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Valitse kuljetettavan rahdin tyyppi
@ -3886,7 +3886,7 @@ STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Sovita l
STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Sovita ilma-alus
STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan valittua rahtityyppiä
STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo rahtaamaan korostettua rahtityyppiä.
STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo kuljettamaan korostettua rahtityyppiä.
STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva valitulle rahtityypille
STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone kuljettamaan valittua rahtityyppiä
@ -3996,7 +3996,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRIN
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
STR_ORDER_REFIT_ORDER :(Sovita {STRING})
STR_ORDER_REFIT_STOP_ORDER :(Sovita rahtityypiksi {STRING} ja pysähdy)
STR_ORDER_REFIT_STOP_ORDER :(Sovita rahtityypille {STRING} ja pysähdy)
STR_ORDER_STOP_ORDER :(Pysähdy)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
@ -4020,17 +4020,17 @@ STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Ei lastin purk
STR_ORDER_NO_UNLOAD_NO_LOAD :(Ei purkua eikä lastausta)
STR_ORDER_AUTO_REFIT :(Sovita rahdille {STRING})
STR_ORDER_FULL_LOAD_REFIT :(Täysi lasti ja sovitus rahdille {STRING})
STR_ORDER_FULL_LOAD_ANY_REFIT :(Täysi lasti mitä tahansa rahtia sekä sovita rahdille {STRING})
STR_ORDER_UNLOAD_REFIT :(Pura ja ota rahti sekä sovita rahdille {STRING})
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Pura ja odota täyttä lastia sekä sovita rahdille {STRING})
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Pura ja odota mitä tahansa täyttä lastia sekä sovita rahdille {STRING})
STR_ORDER_TRANSFER_REFIT :(Siirrä ja ota rahti sekä sovita rahdille {STRING})
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Siirrä ja odota täyttä lastia sekä sovita rahdille {STRING})
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Siirrä ja odota mitä tahansa täyttä lastia sekä sovita rahdille {STRING})
STR_ORDER_NO_UNLOAD_REFIT :(Ei purkua ja ota rahti sekä sovita rahdille {STRING})
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Ei purkua ja odota täyttä lastia sekä sovita rahdille {STRING})
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Ei purkua ja odota mitä tahansa täyttä lastia sekä sovita rahdille {STRING})
STR_ORDER_FULL_LOAD_REFIT :(Sovita rahdille {STRING} ja lastaa täyteen)
STR_ORDER_FULL_LOAD_ANY_REFIT :(Sovita rahdille {STRING} ja lastaa täyteen mitä tahansa rahtia)
STR_ORDER_UNLOAD_REFIT :(Pura lasti, sovita rahdille {STRING}, ota rahti)
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Pura lasti, sovita rahdille {STRING}, odota täyttä lastia)
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Pura lasti, sovita rahdille {STRING}, odota mitä tahansa täyttä lastia)
STR_ORDER_TRANSFER_REFIT :(Siirrä, sovita rahdille {STRING}, ota rahti)
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Siirrä, sovita rahdille {STRING}, odota täyttä lastia)
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Siirrä, sovita rahdille {STRING}, odota mitä tahansa täyttä lastia)
STR_ORDER_NO_UNLOAD_REFIT :(Ei purkua, sovita rahdille {STRING}, ota rahti)
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Ei purkua, sovita rahdille {STRING}, odota täyttä lastia)
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Ei purkua, sovita rahdille {STRING}, odota mitä tahansa täyttä lastia)
STR_ORDER_AUTO_REFIT_ANY :saatavilla oleva rahti
@ -4768,7 +4768,7 @@ STR_SV_STNAME_UPPER :Ylä-{STRING}
STR_SV_STNAME_LOWER :Ala-{STRING}
STR_SV_STNAME_HELIPORT :{STRING}, helikopterikenttä
STR_SV_STNAME_FOREST :{STRING}, metsä
STR_SV_STNAME_FALLBACK :{STRING}, asema #{NUM}
STR_SV_STNAME_FALLBACK :{STRING}, asema {NUM}
############ end of savegame specific region!
##id 0x8000
@ -5037,20 +5037,21 @@ STR_FORMAT_DATE_SHORT :{STRING} {NUM}
STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM}
STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING}
STR_FORMAT_BUOY_NAME :{TOWN} Poiju
STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Poiju #{COMMA}
STR_FORMAT_COMPANY_NUM :(Yhtiö {COMMA})
STR_FORMAT_BUOY_NAME :{TOWN}, poiju
STR_FORMAT_BUOY_NAME_SERIAL :{TOWN}, poiju {COMMA}
STR_FORMAT_COMPANY_NUM :(yhtiö {COMMA})
STR_FORMAT_GROUP_NAME :Ryhmä {COMMA}
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA}
STR_FORMAT_INDUSTRY_NAME :{TOWN} ({STRING})
STR_FORMAT_WAYPOINT_NAME :Reittipiste: {TOWN}
STR_FORMAT_WAYPOINT_NAME_SERIAL :Reittipiste: {TOWN} #{COMMA}
STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Veturitalli
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Veturitalli #{COMMA}
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Ajoneuvovarikko
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Ajoneuvovarikko #{COMMA}
STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Telakka
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Telakka #{COMMA}
STR_FORMAT_WAYPOINT_NAME :{TOWN}, reittipiste
STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN}, reittipiste {COMMA}
STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN}, veturitalli
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN}, veturitalli {COMMA}
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN}, ajoneuvovarikko
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN}, ajoneuvovarikko {COMMA}
STR_FORMAT_DEPOT_NAME_SHIP :{TOWN}, telakka
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN}, telakka {COMMA}
STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Lentokonehalli
STR_UNKNOWN_STATION :tuntematon asema

@ -5042,6 +5042,7 @@ STR_FORMAT_BUOY_NAME :Bouée de {TOWN
STR_FORMAT_BUOY_NAME_SERIAL :Bouée de {TOWN} n°{NBSP}{COMMA}
STR_FORMAT_COMPANY_NUM :(Compagnie {COMMA})
STR_FORMAT_GROUP_NAME :Groupe {COMMA}
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA}
STR_FORMAT_INDUSTRY_NAME :{TOWN} - {STRING}
STR_FORMAT_WAYPOINT_NAME :Point de contrôle de {TOWN}
STR_FORMAT_WAYPOINT_NAME_SERIAL :Point de contrôle de {TOWN} n°{NBSP}{COMMA}

@ -320,6 +320,7 @@ STR_COLOUR_DEFAULT :По умолч
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}мил{P я и ь}/ч
STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}км/ч
STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}м/с
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}клет{P ка ки ок}/день
STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}лс
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}лс
@ -882,7 +883,7 @@ STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLA
STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Автобусная станция
STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Аэропорт/Вертодром
STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Пристань
STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Неровность
STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Бездорожье
STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Трава
STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Пустырь
STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Поля
@ -1467,7 +1468,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Показыв
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Показывать название модуля NewGRF, содержащего выбранную модель транспортного средства, в окне покупки транспорта.
STR_CONFIG_SETTING_LANDSCAPE :Тип карты: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Выбор типа карты определяет основу игрового процесса, например, доступные типы транспорта и грузов, различные условия роста городов. Всё это также может быть изменено с помощью модулей NewGRF и игровых скриптов.
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Тип карты определяет основу игрового процесса, например, доступные типы транспорта и грузов, различные условия роста городов. Всё это также может быть изменено с помощью модулей NewGRF и игровых скриптов.
STR_CONFIG_SETTING_LAND_GENERATOR :Генератор ландшафта: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Оригинальный генератор рассчитан на базовый графический набор и создаёт ландшафт из типовых элементов.{}TerraGenesis использует для создания ландшафта шум Перлина и более тонко настраивается.
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Оригинальный
@ -1706,6 +1707,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Последн
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :По прошествии указанного года рассчитывается рейтинг компании и выводится таблица рекордов. После этого игру можно продолжить.{}Если указанный год предшествует году начала игры, то таблица рекордов не отображается.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Никогда
STR_CONFIG_SETTING_ECONOMY_TYPE :Экономика: {STRING}
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :При плавной экономике изменения в производительности предприятий небольшие и происходят чаще.{}При стабильной экономике предприятия не закрываются и не меняют производительность.{}Типы предприятий, добавленные с помощью NewGRF, могут игнорировать эту настройку.
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :классическая
STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :плавная
STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :стабильная
STR_CONFIG_SETTING_ALLOW_SHARES :Разрешить торговлю акциями других компаний: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Разрешает торговлю акциями транспортных компаний. Акции выпускаются компаниями через некоторое время после основания.
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мин. возраст компании для выпуска акций: {STRING}
@ -1960,6 +1966,7 @@ STR_INTRO_TRANSLATION :{BLACK}На э
# Quit window
STR_QUIT_CAPTION :{WHITE}Выход
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы уверены, что хотите выйти из OpenTTD?
STR_QUIT_YES :{BLACK}Да
STR_QUIT_NO :{BLACK}Нет
@ -2814,7 +2821,7 @@ STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Огра
# Description of land area of different tiles
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Камни
STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Неровность
STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Бездорожье
STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Пустырь
STR_LAI_CLEAR_DESCRIPTION_GRASS :Трава
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поля

@ -1383,7 +1383,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobraziť názo
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Pridá riadok do zoznamu vozidiel, ktorý ukazuje z akého NewGRF vozidlo pochádza.
STR_CONFIG_SETTING_LANDSCAPE :Krajina: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajiny definuje základný herný scenár s rôznymi tovarmi a veľkosťami miest. NewGRF a Herný Skript umožňujú ich lepšiu kontrolu
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajiny definujú základný herný scenár s rôznymi druhmi nákladu a požiadavkami na rast miest. NewGRF a herné skripty umožňujú ich lepšiu kontrolu
STR_CONFIG_SETTING_LAND_GENERATOR :Generátor uzemia: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Pôvodný generátor závisí na základnej grafickej sade a skladá pevné tvary krajiny. TerraGenesis je generátor postavený na Perlinovom šume s jemnejšími možnosťami nastavenia
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Pôvodný
@ -1622,6 +1622,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Rok ukončenia
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok v ktorom končí hra pre zaznamenanie skóre. Na konci tohto roku sa nahrá skóre spoločnosti a zobrazí sa tabuľka s najvyšším skóre, avšak hráči môžu v hre naďalej pokračovať.{}Ak je tento rok pred začiatkom hry, tabuľka sa nikdy nezobrazí.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy
STR_CONFIG_SETTING_ECONOMY_TYPE :Typ ekonomiky: {STRING}
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Plynulá ekonomika robí zmeny v produkcii častejšie a v menších krokoch. Zamrznutá ekonomika neumožňuje zmeny v produkcii, ani zatváranie priemyslu. Toto nastavenie nemusí ovplyvňovať priemysel z NewGRF.
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originálna
STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Plynulá
STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Zamrznutá
STR_CONFIG_SETTING_ALLOW_SHARES :Povoliť kupovanie podielov v ostatných spoločnostiach: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ak je zapnuté, povolí sa nákup a predaj podielov spoločností. Podiely budú prístupné len pre spoločnosti od urcitého veku.
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimálny vek spoločnosti na obchodovanie s podielmi: {STRING}
@ -2219,7 +2224,7 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Sieť -
STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Nedokážem nahrať hru zo servera
STR_NETWORK_ERROR_SERVER_START :{WHITE}Server nemôžem spustiť
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Nemozem sa pripojit.
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Vypršal časový limit pre spojenie #{NUM}
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Vypršal časový limit pre spojenie č. {NUM}
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Chyba vznikla v protokole a spojenie je zatvorene.
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revizia hry u tohto klienta nezodpoveda revizii hry na serveri.
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nespravne heslo.
@ -2276,10 +2281,10 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :herný skript
############ End of leave-in-this-order
STR_NETWORK_MESSAGE_CLIENT_LEAVING :odchádza
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} vstúpil do hry
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} vstúpil do hry (Client #{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} sa pripojil do spoločnosti #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} vstúpil do hry (klient č. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} sa pripojil do spoločnosti č. {2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} sa pripojil k pozorovateľom
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} založil novú spoločnosť (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} založil novú spoločnosť (č. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opustil hru ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} zmenil/-a svoje meno na {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} dal ti spoločnosť {2:CURRENCY_LONG}
@ -4799,10 +4804,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=z}Cukrová b
##id 0x6000
STR_SV_EMPTY :
STR_SV_UNNAMED :Bez názvu
STR_SV_TRAIN_NAME :{G=m}Vlak {COMMA}
STR_SV_TRAIN_NAME :{G=m}Vlak č. {COMMA}
STR_SV_ROAD_VEHICLE_NAME :{G=s}Cestné vozidlo {COMMA}
STR_SV_SHIP_NAME :{G=z}Loď {COMMA}
STR_SV_AIRCRAFT_NAME :{G=s}Lietadlo {COMMA}
STR_SV_SHIP_NAME :{G=z}Loď č. {COMMA}
STR_SV_AIRCRAFT_NAME :{G=s}Lietadlo č. {COMMA}
STR_SV_STNAME :{STRING}
STR_SV_STNAME_NORTH :{STRING} Sever
@ -4831,7 +4836,7 @@ STR_SV_STNAME_UPPER :Horný {STRING}
STR_SV_STNAME_LOWER :Dolný {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Heliport
STR_SV_STNAME_FOREST :{STRING} Les
STR_SV_STNAME_FALLBACK :{STRING} Stanica #{NUM}
STR_SV_STNAME_FALLBACK :{STRING} Stanica č. {NUM}
############ end of savegame specific region!
##id 0x8000
@ -5104,12 +5109,13 @@ STR_FORMAT_BUOY_NAME :{TOWN} Bója
STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bója #{COMMA}
STR_FORMAT_COMPANY_NUM :(Spoločnosť {COMMA})
STR_FORMAT_GROUP_NAME :Skupina {COMMA}
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} č. {COMMA}
STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN}
STR_FORMAT_WAYPOINT_NAME :Smerový bod {TOWN}
STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerový bod {TOWN} #{COMMA}
STR_FORMAT_DEPOT_NAME_TRAIN :Vlakové depo {TOWN}
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} #{COMMA}
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} č. {COMMA}
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Garáž {TOWN}
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garáž {TOWN} #{COMMA}
STR_FORMAT_DEPOT_NAME_SHIP :Lodenica {TOWN}

@ -249,11 +249,11 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res)
}
this->SendPackets();
this->CloseConnection(res);
ClientNetworkEmergencySave();
_switch_mode = SM_MENU;
this->CloseConnection(res);
_networking = false;
}

@ -910,7 +910,7 @@ void ClientNetworkContentSocketHandler::ToggleSelectedState(const ContentInfo *c
*/
void ClientNetworkContentSocketHandler::ReverseLookupDependency(ConstContentVector &parents, const ContentInfo *child) const
{
for (const ContentInfo * const &ci : this->infos) {
for (const ContentInfo *ci : this->infos) {
if (ci == child) continue;
for (uint i = 0; i < ci->dependency_count; i++) {

@ -297,7 +297,7 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp)
this->window_height = height;
this->buffer_depth = bpp;
[ this->window center ];
[ (OTTD_CocoaWindow *)this->window center ];
/* Only recreate the view if it doesn't already exist */
if (this->cocoaview == nil) {

Loading…
Cancel
Save