mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-17 08:09:44 +00:00
Compare commits
143 Commits
13.0-beta2
...
13.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ebc601d97 | |||
| 9daec1cb30 | |||
| 6bd2b9c34f | |||
| 292ec1ced7 | |||
| 6b36f07eb8 | |||
| f6170ec782 | |||
| 32d80d1a57 | |||
| 8aa4173bce | |||
| ada33a6885 | |||
| 64bd824b48 | |||
| ce9c4fc31f | |||
| ff07af905a | |||
| b5f8fcb280 | |||
| bac7ad72b1 | |||
| 0cb3d85a87 | |||
| 05c0295d32 | |||
| 556e9e8434 | |||
| 4fe8d97623 | |||
| c31195509f | |||
| aa4cd1012f | |||
| c9948a4517 | |||
| d1daf34c91 | |||
| 18c701d274 | |||
| 3357aff494 | |||
| 08ca0746b1 | |||
| 1cb459de3f | |||
| 7e61264e3c | |||
| 75c37bf7c2 | |||
| f88766c976 | |||
| 52319891ce | |||
| 0a5dc852bb | |||
| 5b27cd029f | |||
| 2104849fad | |||
| 25940cdbd1 | |||
| f37b6cb17f | |||
| 87d74389fb | |||
| 557c5a8583 | |||
| bd6a95c6b9 | |||
| 6d1331ebcd | |||
| 680fcb8611 | |||
| 548a9c41d5 | |||
| 4c6b6c9d33 | |||
| c935a58272 | |||
| 88030d781b | |||
| 7ccfc4b143 | |||
| f5193aeba2 | |||
| ed65594868 | |||
| b211a88b71 | |||
| 2414cf0e8f | |||
| 400addf7af | |||
| 4b123394cf | |||
| 8978f11146 | |||
| 5e22788664 | |||
| 22035b7eab | |||
| 67f02e20de | |||
| 012fd2be0d | |||
| ffc1f7ce56 | |||
| 25f247047d | |||
| f90156f74c | |||
| 918b2cb3ee | |||
| fe30f66570 | |||
| f7e2b6ef12 | |||
| 6caed5f15e | |||
| 7a18631291 | |||
| 9e56e16147 | |||
| 961e66df30 | |||
| 3d3ed87d99 | |||
| 4f26f6b8aa | |||
| c53f29df53 | |||
| 35d55bd534 | |||
| 4ffe7e0477 | |||
| 8063fcb6e0 | |||
| efa20dd969 | |||
| cbf48c4dd9 | |||
| 74180efe7f | |||
| 3485709f53 | |||
| 898dadadb2 | |||
| 85814b29d4 | |||
| 94167dfd34 | |||
| c11db7d593 | |||
| d7f561a400 | |||
| c8cc61d889 | |||
| 23eec0b7b3 | |||
| 3451c0a82c | |||
| 04ee86d3ac | |||
| e6c857cdba | |||
| af3df959c2 | |||
| 7b5edba76c | |||
| a971eee2e0 | |||
| 138198e971 | |||
| 002fe67bef | |||
| 14c1266bbc | |||
| d4c530904c | |||
| f6e7e44169 | |||
| c179c10048 | |||
| a857ed8240 | |||
| c962c77306 | |||
| 03c1b5169c | |||
| dde15a403c | |||
| 2012998563 | |||
| e5720325ff | |||
| daaa058493 | |||
| 8599041ce4 | |||
| 888c9172e0 | |||
| 1eecbd39ed | |||
| 7425660b3e | |||
| 5eb7e1d3ab | |||
| 8adc47858d | |||
| 33eb9688cf | |||
| c50fabb574 | |||
| 131b7f5127 | |||
| 0116a422ea | |||
| d67259334a | |||
| c7d7658004 | |||
| 1a05e95945 | |||
| e0cb31ff07 | |||
| 4f9893cc98 | |||
| c448eb04d8 | |||
| 2848483810 | |||
| 8db4892f49 | |||
| ac12028278 | |||
| 7e7e1183cf | |||
| fd5de3b366 | |||
| 49c121ec29 | |||
| daacde4496 | |||
| 2756741575 | |||
| 5cef40591b | |||
| d5fc423793 | |||
| 985f487065 | |||
| 53b827c460 | |||
| 13d2d11fa8 | |||
| 2c5eb206d4 | |||
| ab9d77ebbe | |||
| 1c205b2cda | |||
| 1131608eb4 | |||
| 644012dea2 | |||
| a7f78af4aa | |||
| 485368f607 | |||
| 3100c6e7d0 | |||
| 387c57b023 | |||
| 41c893dd4e | |||
| eaf1e33bd7 | |||
| 978f5b9341 |
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
container:
|
||||
# If you change this version, change the number in the cache step too.
|
||||
image: emscripten/emsdk:2.0.31
|
||||
image: emscripten/emsdk:3.1.28
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /emsdk/upstream/emscripten/cache
|
||||
key: 2.0.31-${{ runner.os }}
|
||||
key: 3.1.28-${{ runner.os }}
|
||||
|
||||
- name: Patch Emscripten to support LZMA
|
||||
run: |
|
||||
@@ -162,7 +162,7 @@ jobs:
|
||||
|
||||
runs-on: macos-latest
|
||||
env:
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.14
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
container:
|
||||
# If you change this version, change the number in the cache step too.
|
||||
image: emscripten/emsdk:2.0.31
|
||||
image: emscripten/emsdk:3.1.28
|
||||
|
||||
steps:
|
||||
- name: Update deployment status to in progress
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /emsdk/upstream/emscripten/cache
|
||||
key: 2.0.31-${{ runner.os }}
|
||||
key: 3.1.28-${{ runner.os }}
|
||||
|
||||
- name: Patch Emscripten to support LZMA
|
||||
run: |
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
name: Release (Docs)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
name: Docs
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- name: Download source
|
||||
uses: actions/download-artifact@v3
|
||||
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"
|
||||
cmake --build . --target docs
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Create bundles
|
||||
run: |
|
||||
BASENAME=openttd-${{ inputs.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@v3
|
||||
with:
|
||||
name: openttd-docs
|
||||
path: build/bundles/*.tar.xz
|
||||
retention-days: 5
|
||||
@@ -0,0 +1,100 @@
|
||||
name: Release (Linux)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
name: Linux (Generic)
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
container:
|
||||
# manylinux2014 is based on CentOS 7, but already has a lot of things
|
||||
# installed and preconfigured. It makes it easier to build OpenTTD.
|
||||
image: quay.io/pypa/manylinux2014_x86_64
|
||||
|
||||
steps:
|
||||
- name: Download source
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: internal-source
|
||||
|
||||
- name: Unpack source
|
||||
run: |
|
||||
tar -xf source.tar.gz --strip-components=1
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
echo "::group::Install dependencies"
|
||||
yum install -y \
|
||||
fontconfig-devel \
|
||||
freetype-devel \
|
||||
libicu-devel \
|
||||
libpng-devel \
|
||||
lzo-devel \
|
||||
SDL2-devel \
|
||||
wget \
|
||||
xz-devel \
|
||||
zlib-devel \
|
||||
# EOF
|
||||
echo "::endgroup::"
|
||||
|
||||
# The yum variant of fluidsynth depends on all possible audio drivers,
|
||||
# like jack, ALSA, pulseaudio, etc. This is not really useful for us,
|
||||
# as we route the output of fluidsynth back via our sound driver, and
|
||||
# as such do not use these audio driver outputs at all. So instead,
|
||||
# we compile fluidsynth ourselves, with as little dependencies as
|
||||
# possible. This currently means it picks up SDL2, but this is fine,
|
||||
# as we need SDL2 anyway.
|
||||
echo "::group::Install fluidsynth"
|
||||
wget https://github.com/FluidSynth/fluidsynth/archive/v2.1.6.tar.gz
|
||||
tar xf v2.1.6.tar.gz
|
||||
(
|
||||
cd fluidsynth-2.1.6
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr
|
||||
cmake --build . -j $(nproc)
|
||||
cmake --install .
|
||||
)
|
||||
echo "::endgroup::"
|
||||
|
||||
- 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 \
|
||||
-DOPTION_PACKAGE_DEPENDENCIES=ON \
|
||||
# EOF
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Build"
|
||||
echo "Running on $(nproc) cores"
|
||||
cmake --build . -j $(nproc)
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Create bundles
|
||||
run: |
|
||||
cd ${GITHUB_WORKSPACE}/build
|
||||
echo "::group::Run CPack"
|
||||
cpack
|
||||
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@v3
|
||||
with:
|
||||
name: openttd-linux-generic
|
||||
path: build/bundles
|
||||
retention-days: 5
|
||||
@@ -0,0 +1,195 @@
|
||||
name: Release (MacOS)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
macos:
|
||||
name: MacOS
|
||||
|
||||
runs-on: macos-11
|
||||
env:
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||
|
||||
steps:
|
||||
- name: Download source
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: internal-source
|
||||
|
||||
- name: Unpack source
|
||||
run: |
|
||||
tar -xf source.tar.gz --strip-components=1
|
||||
|
||||
- name: Install dependencies
|
||||
env:
|
||||
HOMEBREW_NO_AUTO_UPDATE: 1
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||
run: |
|
||||
brew install pandoc
|
||||
|
||||
- name: Prepare cache key
|
||||
id: key
|
||||
run: |
|
||||
echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Enable vcpkg cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /usr/local/share/vcpkg/installed
|
||||
key: ${{ steps.key.outputs.image }}-vcpkg-release-0 # Increase the number whenever dependencies are modified
|
||||
restore-keys: |
|
||||
${{ steps.key.outputs.image }}-vcpkg-release
|
||||
${{ steps.key.outputs.image }}-vcpkg-x64
|
||||
|
||||
- name: Prepare vcpkg
|
||||
run: |
|
||||
vcpkg install \
|
||||
liblzma:x64-osx \
|
||||
liblzma:arm64-osx \
|
||||
libpng:x64-osx \
|
||||
libpng:arm64-osx \
|
||||
lzo:x64-osx \
|
||||
lzo:arm64-osx \
|
||||
zlib:x64-osx \
|
||||
zlib:arm64-osx \
|
||||
# EOF
|
||||
|
||||
- name: Install GCC problem matcher
|
||||
uses: ammaraskar/gcc-problem-matcher@master
|
||||
|
||||
- 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"
|
||||
cmake --build . -j $(sysctl -n hw.logicalcpu) --target tools
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Import code signing certificates
|
||||
uses: Apple-Actions/import-codesign-certs@v1
|
||||
with:
|
||||
# The certificates in a PKCS12 file encoded as a base64 string
|
||||
p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
|
||||
# The password used to import the PKCS12 file.
|
||||
p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
|
||||
# If this is run on a fork, there may not be a certificate set up - continue in this case
|
||||
continue-on-error: true
|
||||
|
||||
- name: Build arm64
|
||||
run: |
|
||||
mkdir build-arm64
|
||||
cd build-arm64
|
||||
|
||||
echo "::group::CMake"
|
||||
cmake ${GITHUB_WORKSPACE} \
|
||||
-DCMAKE_OSX_ARCHITECTURES=arm64 \
|
||||
-DVCPKG_TARGET_TRIPLET=arm64-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"
|
||||
cmake --build . -j $(sysctl -n hw.logicalcpu)
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Build x64
|
||||
run: |
|
||||
mkdir build-x64
|
||||
cd build-x64
|
||||
|
||||
echo "::group::CMake"
|
||||
cmake ${GITHUB_WORKSPACE} \
|
||||
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
|
||||
-DVCPKG_TARGET_TRIPLET=x64-osx \
|
||||
-DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \
|
||||
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCPACK_BUNDLE_APPLE_CERT_APP=${{ secrets.APPLE_DEVELOPER_CERTIFICATE_ID }} \
|
||||
"-DCPACK_BUNDLE_APPLE_CODESIGN_PARAMETER=--deep -f --options runtime" \
|
||||
-DAPPLE_UNIVERSAL_PACKAGE=1 \
|
||||
# EOF
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Build"
|
||||
echo "Running on $(sysctl -n hw.logicalcpu) cores"
|
||||
cmake --build . -j $(sysctl -n hw.logicalcpu)
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Create bundles
|
||||
run: |
|
||||
cd build-x64
|
||||
|
||||
echo "::group::Create universal binary"
|
||||
# Combine the `openttd` binaries from each build into a single file
|
||||
lipo -create -output openttd-universal ../build-*/openttd
|
||||
mv openttd-universal openttd
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Run CPack"
|
||||
cpack
|
||||
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: Install gon
|
||||
env:
|
||||
HOMEBREW_NO_AUTO_UPDATE: 1
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||
run: |
|
||||
brew tap mitchellh/gon
|
||||
brew install mitchellh/gon/gon
|
||||
|
||||
- name: Notarize
|
||||
env:
|
||||
AC_USERNAME: ${{ secrets.APPLE_DEVELOPER_APP_USERNAME }}
|
||||
AC_PASSWORD: ${{ secrets.APPLE_DEVELOPER_APP_PASSWORD }}
|
||||
run: |
|
||||
cd build-x64
|
||||
../os/macosx/notarize.sh
|
||||
|
||||
- name: Build zip
|
||||
run: |
|
||||
cd build-x64
|
||||
|
||||
pushd _CPack_Packages/*/Bundle/openttd-*/
|
||||
|
||||
# Remove the Applications symlink from the staging folder
|
||||
rm -f Applications
|
||||
|
||||
# Remove the original dmg built by CPack to avoid a conflict when resolving
|
||||
# the zip_filename variable below
|
||||
rm -f ../*.dmg
|
||||
|
||||
zip_filename=(../openttd-*)
|
||||
|
||||
# Package up the existing, notarised .app into a zip file
|
||||
zip -r -9 ${zip_filename}.zip OpenTTD.app
|
||||
|
||||
popd
|
||||
|
||||
# Now move it into place to be uploaded
|
||||
mv _CPack_Packages/*/Bundle/openttd-*.zip bundles/
|
||||
|
||||
- name: Store bundles
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: openttd-macos-universal
|
||||
path: build-x64/bundles
|
||||
retention-days: 5
|
||||
@@ -0,0 +1,186 @@
|
||||
name: Release (Source)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
outputs:
|
||||
version:
|
||||
value: ${{ jobs.source.outputs.version }}
|
||||
is_tag:
|
||||
value: ${{ jobs.source.outputs.is_tag }}
|
||||
trigger_type:
|
||||
value: ${{ jobs.source.outputs.trigger_type }}
|
||||
folder:
|
||||
value: ${{ jobs.source.outputs.folder }}
|
||||
|
||||
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@v3
|
||||
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@v3
|
||||
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@v3
|
||||
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 5 -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 "version=$(cat .version)" >> $GITHUB_OUTPUT
|
||||
echo "is_tag=${IS_TAG}" >> $GITHUB_OUTPUT
|
||||
echo "folder=${FOLDER}" >> $GITHUB_OUTPUT
|
||||
echo "trigger_type=${TRIGGER_TYPE}" >> $GITHUB_OUTPUT
|
||||
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@v3
|
||||
with:
|
||||
name: openttd-source
|
||||
path: build/bundles/*
|
||||
retention-days: 5
|
||||
|
||||
- name: Store source (for other jobs)
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: internal-source
|
||||
path: source.tar.gz
|
||||
retention-days: 1
|
||||
@@ -0,0 +1,192 @@
|
||||
name: Release (Windows Store)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
windows-store:
|
||||
name: Windows Store
|
||||
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Download source
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: internal-source
|
||||
|
||||
- name: Unpack source
|
||||
shell: bash
|
||||
run: |
|
||||
tar -xf source.tar.gz --strip-components=1
|
||||
|
||||
- name: Download x86 build
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: openttd-windows-x86
|
||||
|
||||
- name: Download x64 build
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: openttd-windows-x64
|
||||
|
||||
- name: Download arm64 build
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: openttd-windows-arm64
|
||||
|
||||
- name: Unpack builds
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir builds
|
||||
cd builds
|
||||
|
||||
function extract {
|
||||
mkdir $1
|
||||
|
||||
# Extract the zip version of the release
|
||||
unzip ../openttd-*-windows-$2.zip -d $1
|
||||
|
||||
# Remove the extraneous directory
|
||||
mv $1/openttd-*-windows-$2/* $1/
|
||||
rmdir $1/openttd-*-windows-$2
|
||||
|
||||
# Move the openttd.exe to the '{arch}-binaries' folder
|
||||
mkdir $1-binaries
|
||||
mv $1/openttd.exe $1-binaries/
|
||||
}
|
||||
|
||||
extract x86 win32
|
||||
extract x64 win64
|
||||
extract arm64 arm64
|
||||
|
||||
# Use the "x86" folder as the source of the common binaries (lang files, etc) and remove the others
|
||||
mv x86 common-binaries
|
||||
rm -rf x64 arm64
|
||||
|
||||
- name: Install OpenGFX
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p builds/common-binaries/baseset
|
||||
cd builds/common-binaries/baseset
|
||||
|
||||
echo "::group::Download OpenGFX"
|
||||
curl -L https://cdn.openttd.org/opengfx-releases/7.1/opengfx-7.1-all.zip -o opengfx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Unpack OpenGFX"
|
||||
unzip opengfx-all.zip
|
||||
tar xf opengfx-*.tar
|
||||
echo "::endgroup::"
|
||||
|
||||
rm -f opengfx-all.zip opengfx-*.tar
|
||||
|
||||
- name: Install OpenMSX
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p builds/common-binaries/baseset
|
||||
cd builds/common-binaries/baseset
|
||||
|
||||
echo "::group::Download OpenMSX"
|
||||
curl -L https://cdn.openttd.org/openmsx-releases/0.4.2/openmsx-0.4.2-all.zip -o openmsx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Unpack OpenGFX"
|
||||
unzip openmsx-all.zip
|
||||
tar xf openmsx-*.tar
|
||||
echo "::endgroup::"
|
||||
|
||||
rm -f openmsx-all.zip openmsx-*.tar
|
||||
|
||||
- name: Install OpenSFX
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p builds/common-binaries/baseset/opensfx
|
||||
cd builds/common-binaries/baseset/opensfx
|
||||
|
||||
echo "::group::Download OpenSFX"
|
||||
curl -L https://cdn.openttd.org/opensfx-releases/1.0.3/opensfx-1.0.3-all.zip -o opensfx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Unpack OpenSFX"
|
||||
unzip opensfx-all.zip
|
||||
tar xf opensfx-*.tar
|
||||
echo "::endgroup::"
|
||||
|
||||
rm -f opensfx-all.zip opensfx-*.tar
|
||||
|
||||
- name: Generate signing certificate
|
||||
shell: cmd
|
||||
run: |
|
||||
cd builds
|
||||
|
||||
REM We need to provide a signed .appx to the Windows Store, so generate a certificate with password 'password'
|
||||
call ..\os\windows\winstore\generate-key.bat "CN=78024DA8-4BE4-4C77-B12E-547BBF7359D2" password cert.pfx
|
||||
|
||||
- name: Generate assets
|
||||
shell: cmd
|
||||
run: |
|
||||
cd os\windows\winstore
|
||||
call generate-assets.bat
|
||||
|
||||
- name: Prepare manifests
|
||||
shell: cmd
|
||||
run: |
|
||||
cd builds
|
||||
mkdir manifests
|
||||
|
||||
REM Set the version environment variable
|
||||
call ..\os\windows\winstore\set-version.bat x86-binaries\openttd.exe
|
||||
|
||||
call ..\os\windows\winstore\prepare-manifests.bat manifests "CN=78024DA8-4BE4-4C77-B12E-547BBF7359D2" "57420OpenTTDDevelopers.OpenTTDofficial"
|
||||
|
||||
- name: Prepare binaries
|
||||
shell: bash
|
||||
run: |
|
||||
cd builds
|
||||
|
||||
# Copy the Windows Store assets
|
||||
mkdir common-binaries/Assets
|
||||
cp -R ../os/windows/winstore/assets-common/* common-binaries/Assets/
|
||||
|
||||
mkdir Assets
|
||||
cp -R ../os/windows/winstore/assets/* Assets/
|
||||
|
||||
cp manifests/*.xml .
|
||||
|
||||
- name: Build
|
||||
shell: cmd
|
||||
run: |
|
||||
REM Add the Windows SDK tools to the PATH
|
||||
|
||||
echo|set /p="SET VS_INSTALLDIR=" > _vspath.bat
|
||||
vswhere -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath >> _vspath.bat
|
||||
call _vspath.bat
|
||||
call "%VS_INSTALLDIR%\Common7\Tools\VsDevCmd.bat"
|
||||
|
||||
REM Set the version environment variable
|
||||
call os\windows\winstore\set-version.bat builds\x86-binaries\openttd.exe
|
||||
|
||||
cd builds
|
||||
mkdir output
|
||||
|
||||
REM Build and sign the package
|
||||
makeappx build /v /f PackagingLayout.xml /op output\ /bv %OTTD_VERSION% /pv %OTTD_VERSION% /ca
|
||||
SignTool sign /fd sha256 /a /f cert.pfx /p password "output\OpenTTD.appxbundle"
|
||||
|
||||
REM Move resulting files to bundles folder
|
||||
mkdir bundles
|
||||
mkdir bundles\internal
|
||||
move cert.pfx bundles\internal\openttd-${{ inputs.version }}-windows-store.pfx
|
||||
move output\OpenTTD.appxbundle bundles\internal\openttd-${{ inputs.version }}-windows-store.appxbundle
|
||||
|
||||
- name: Store bundles
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: openttd-windows-store
|
||||
path: builds/bundles
|
||||
retention-days: 5
|
||||
@@ -0,0 +1,201 @@
|
||||
name: Release (Windows)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
is_tag:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
windows:
|
||||
name: Windows
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- arch: x86
|
||||
host: x86
|
||||
- arch: x64
|
||||
host: x64
|
||||
- arch: arm64
|
||||
host: x64_arm64
|
||||
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Download source
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: internal-source
|
||||
|
||||
- name: Unpack source
|
||||
shell: bash
|
||||
run: |
|
||||
tar -xf source.tar.gz --strip-components=1
|
||||
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
choco install pandoc
|
||||
|
||||
- name: Prepare cache key
|
||||
id: key
|
||||
shell: powershell
|
||||
run: |
|
||||
# Work around caching failure with GNU tar
|
||||
New-Item -Type Junction -Path vcpkg -Target c:\vcpkg
|
||||
|
||||
Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT
|
||||
|
||||
- name: Enable vcpkg cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: vcpkg/installed
|
||||
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified
|
||||
restore-keys: |
|
||||
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}
|
||||
|
||||
- name: Prepare vcpkg
|
||||
shell: bash
|
||||
run: |
|
||||
vcpkg install --triplet=${{ matrix.arch }}-windows-static \
|
||||
liblzma \
|
||||
libpng \
|
||||
lzo \
|
||||
zlib \
|
||||
# EOF
|
||||
|
||||
- name: Install MSVC problem matcher
|
||||
uses: ammaraskar/msvc-problem-matcher@master
|
||||
|
||||
- name: Configure developer command prompt for tools
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
arch: x64
|
||||
|
||||
- name: Build tools
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir build-host
|
||||
cd build-host
|
||||
|
||||
echo "::group::CMake"
|
||||
cmake ${GITHUB_WORKSPACE} \
|
||||
-GNinja \
|
||||
-DOPTION_TOOLS_ONLY=ON \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
# EOF
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Build"
|
||||
cmake --build . --target tools
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Configure developer command prompt for ${{ matrix.arch }}
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
arch: ${{ matrix.host }}
|
||||
|
||||
- name: Import code signing certificate
|
||||
shell: powershell
|
||||
# If this is run on a fork, there may not be a certificate set up - continue in this case
|
||||
continue-on-error: true
|
||||
run: |
|
||||
$tempFile = [System.IO.Path]::GetTempFileName()
|
||||
$bytes = [System.Convert]::FromBase64String($env:WINDOWS_CERTIFICATE_P12)
|
||||
[IO.File]::WriteAllBytes($tempFile, $bytes)
|
||||
$pwd = ConvertTo-SecureString $env:WINDOWS_CERTIFICATE_PASSWORD -AsPlainText -Force
|
||||
Import-PfxCertificate -FilePath $tempFile -CertStoreLocation Cert:\CurrentUser\My -Password $pwd
|
||||
Remove-Item $tempFile
|
||||
env:
|
||||
WINDOWS_CERTIFICATE_P12: ${{ secrets.WINDOWS_CERTIFICATE_P12 }}
|
||||
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
|
||||
|
||||
- name: Build (with installer)
|
||||
if: inputs.is_tag == 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
echo "::group::CMake"
|
||||
cmake ${GITHUB_WORKSPACE} \
|
||||
-GNinja \
|
||||
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \
|
||||
-DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \
|
||||
-DOPTION_USE_NSIS=ON \
|
||||
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DWINDOWS_CERTIFICATE_COMMON_NAME="${WINDOWS_CERTIFICATE_COMMON_NAME}" \
|
||||
# EOF
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Build"
|
||||
cmake --build .
|
||||
echo "::endgroup::"
|
||||
env:
|
||||
WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }}
|
||||
|
||||
- name: Build (without installer)
|
||||
if: inputs.is_tag != 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
echo "::group::CMake"
|
||||
cmake ${GITHUB_WORKSPACE} \
|
||||
-GNinja \
|
||||
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \
|
||||
-DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \
|
||||
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DWINDOWS_CERTIFICATE_COMMON_NAME="${WINDOWS_CERTIFICATE_COMMON_NAME}" \
|
||||
# EOF
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Build"
|
||||
cmake --build .
|
||||
echo "::endgroup::"
|
||||
env:
|
||||
WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }}
|
||||
|
||||
- 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: Sign installer
|
||||
if: inputs.is_tag == 'true'
|
||||
shell: bash
|
||||
# If this is run on a fork, there may not be a certificate set up - continue in this case
|
||||
continue-on-error: true
|
||||
run: |
|
||||
cd ${GITHUB_WORKSPACE}/build/bundles
|
||||
../../os/windows/sign.bat *.exe "${WINDOWS_CERTIFICATE_COMMON_NAME}"
|
||||
env:
|
||||
WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }}
|
||||
|
||||
- name: Store bundles
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: openttd-windows-${{ matrix.arch }}
|
||||
path: build/bundles
|
||||
retention-days: 5
|
||||
+47
-1090
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
||||
name: Upload (AWS)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
required: true
|
||||
type: string
|
||||
folder:
|
||||
required: true
|
||||
type: string
|
||||
trigger_type:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
upload:
|
||||
name: Upload (AWS)
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- name: Download all bundles
|
||||
uses: actions/download-artifact@v3
|
||||
|
||||
- name: Calculate checksums
|
||||
run: |
|
||||
echo "::group::Move bundles to a single folder"
|
||||
mkdir bundles
|
||||
mv openttd-*/* bundles/
|
||||
echo "::endgroup::"
|
||||
|
||||
cd bundles
|
||||
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
|
||||
|
||||
# Some targets generate files that are meant for our-eyes-only.
|
||||
# They are stored in the "internal" folder, and contains bundles
|
||||
# for targets like Windows Store. No user has a benefit of knowing
|
||||
# they exist, hence: internal.
|
||||
if [ -e internal ]; then
|
||||
cd internal
|
||||
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
|
||||
fi
|
||||
|
||||
- name: Upload bundles to AWS
|
||||
run: |
|
||||
aws s3 cp --recursive --only-show-errors bundles/ s3://${{ secrets.CDN_S3_BUCKET }}/${{ inputs.folder }}/${{ inputs.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_DEFAULT_REGION: ${{ secrets.AWS_REGION }}
|
||||
|
||||
- name: Trigger 'New OpenTTD release'
|
||||
uses: peter-evans/repository-dispatch@v2
|
||||
with:
|
||||
token: ${{ secrets.DEPLOYMENT_TOKEN }}
|
||||
repository: OpenTTD/workflows
|
||||
event-type: ${{ inputs.trigger_type }}
|
||||
client-payload: '{"version": "${{ inputs.version }}", "folder": "${{ inputs.folder }}"}'
|
||||
@@ -0,0 +1,124 @@
|
||||
name: Upload (GOG)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
upload:
|
||||
name: Upload (GOG)
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- name: Download all bundles
|
||||
uses: actions/download-artifact@v3
|
||||
|
||||
- name: Install GOG Galaxy Build Creator
|
||||
run: |
|
||||
wget https://cdn.gog.com/open/galaxy/pipeline/build_creator/gnu-linux/GOGGalaxyBuildCreator-1.4.0.AppImage
|
||||
7z x GOGGalaxyBuildCreator-1.4.0.AppImage
|
||||
chmod +x ./app/GOGGalaxyPipelineBuilder
|
||||
|
||||
- name: Install OpenGFX
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p gog/opengfx/baseset
|
||||
cd gog/opengfx/baseset
|
||||
|
||||
echo "::group::Download OpenGFX"
|
||||
curl -L https://cdn.openttd.org/opengfx-releases/7.1/opengfx-7.1-all.zip -o opengfx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Unpack OpenGFX"
|
||||
unzip opengfx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
rm -f opengfx-all.zip
|
||||
|
||||
- name: Install OpenMSX
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p gog/openmsx/baseset
|
||||
cd gog/openmsx/baseset
|
||||
|
||||
echo "::group::Download OpenMSX"
|
||||
curl -L https://cdn.openttd.org/openmsx-releases/0.4.2/openmsx-0.4.2-all.zip -o openmsx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Unpack OpenGFX"
|
||||
unzip openmsx-all.zip
|
||||
tar xf openmsx-*.tar
|
||||
echo "::endgroup::"
|
||||
|
||||
rm -f openmsx-all.zip openmsx-*.tar
|
||||
|
||||
- name: Install OpenSFX
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p gog/opensfx/baseset
|
||||
cd gog/opensfx/baseset
|
||||
|
||||
echo "::group::Download OpenSFX"
|
||||
curl -L https://cdn.openttd.org/opensfx-releases/1.0.3/opensfx-1.0.3-all.zip -o opensfx-all.zip
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Unpack OpenSFX"
|
||||
unzip opensfx-all.zip
|
||||
tar xf opensfx-*.tar
|
||||
echo "::endgroup::"
|
||||
|
||||
rm -f opensfx-all.zip opensfx-*.tar
|
||||
|
||||
- name: Upload to GOG
|
||||
run: |
|
||||
echo "::group::Extracting source"
|
||||
mkdir source
|
||||
(
|
||||
cd source
|
||||
tar -xf ../internal-source/source.tar.gz --strip-components=1
|
||||
)
|
||||
echo "::endgroup::"
|
||||
|
||||
(
|
||||
cd gog
|
||||
|
||||
echo "::group::Prepare Win32"
|
||||
unzip ../openttd-windows-x86/openttd-*-windows-win32.zip
|
||||
mv openttd-*-windows-win32 win32
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Prepare Win64"
|
||||
unzip ../openttd-windows-x64/openttd-*-windows-win64.zip
|
||||
mv openttd-*-windows-win64 win64
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Prepare macOS"
|
||||
mkdir macos
|
||||
(
|
||||
cd macos
|
||||
unzip ../../openttd-macos-universal/openttd-*-macos-universal.zip
|
||||
)
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Prepare Linux"
|
||||
tar xvf ../openttd-linux-generic/openttd-*-linux-generic-amd64.tar.xz
|
||||
mv openttd-*-linux-generic-amd64 linux
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Preparing build files"
|
||||
cp ../source/os/gog/*.json .
|
||||
for json in $(ls *.json); do
|
||||
sed -i 's/VERSION/${{ inputs.version }}/g;s/CLIENT_ID/${{ secrets.GOG_CLIENT_ID }}/g;s/CLIENT_SECRET/${{ secrets.GOG_CLIENT_SECRET }}/g' ${json}
|
||||
done
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Upload to GOG"
|
||||
../app/GOGGalaxyPipelineBuilder build-game --username "${{ secrets.GOG_USERNAME }}" --password "${{ secrets.GOG_PASSWORD }}" --branch Testing windows.json
|
||||
../app/GOGGalaxyPipelineBuilder build-game --username "${{ secrets.GOG_USERNAME }}" --password "${{ secrets.GOG_PASSWORD }}" --branch Testing macos.json
|
||||
../app/GOGGalaxyPipelineBuilder build-game --username "${{ secrets.GOG_USERNAME }}" --password "${{ secrets.GOG_PASSWORD }}" --branch Testing linux.json
|
||||
echo "::endgroup::"
|
||||
)
|
||||
@@ -0,0 +1,82 @@
|
||||
name: Upload (Steam)
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
required: true
|
||||
type: string
|
||||
trigger_type:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
upload:
|
||||
name: Upload (Steam)
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- name: Download all bundles
|
||||
uses: actions/download-artifact@v3
|
||||
|
||||
- name: Setup steamcmd
|
||||
uses: CyberAndrii/setup-steamcmd@v1
|
||||
|
||||
- name: Generate Steam auth code
|
||||
id: steam-totp
|
||||
uses: CyberAndrii/steam-totp@v1
|
||||
with:
|
||||
shared_secret: ${{ secrets.STEAM_SHARED_SECRET }}
|
||||
|
||||
- name: Upload to Steam
|
||||
run: |
|
||||
echo "::group::Extracting source"
|
||||
mkdir source
|
||||
(
|
||||
cd source
|
||||
tar -xf ../internal-source/source.tar.gz --strip-components=1
|
||||
)
|
||||
echo "::endgroup::"
|
||||
|
||||
mkdir steam
|
||||
(
|
||||
cd steam
|
||||
|
||||
echo "::group::Prepare Win32"
|
||||
unzip ../openttd-windows-x86/openttd-*-windows-win32.zip
|
||||
mv openttd-*-windows-win32 steam-win32
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Prepare Win64"
|
||||
unzip ../openttd-windows-x64/openttd-*-windows-win64.zip
|
||||
mv openttd-*-windows-win64 steam-win64
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Prepare macOS"
|
||||
mkdir steam-macos
|
||||
(
|
||||
cd steam-macos
|
||||
unzip ../../openttd-macos-universal/openttd-*-macos-universal.zip
|
||||
)
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Prepare Linux"
|
||||
tar xvf ../openttd-linux-generic/openttd-*-linux-generic-amd64.tar.xz
|
||||
mv openttd-*-linux-generic-amd64 steam-linux
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Preparing build file"
|
||||
if [ "${{ inputs.trigger_type }}" = "new-tag" ]; then
|
||||
BRANCH="testing"
|
||||
else
|
||||
BRANCH="nightly"
|
||||
fi
|
||||
cat ../source/os/steam/release.vdf | sed 's/@@DESCRIPTION@@/openttd-${{ inputs.version }}/;s/@@BRANCH@@/'${BRANCH}'/' > release.vdf
|
||||
cat release.vdf
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::Upload to Steam"
|
||||
steamcmd +login ${{ secrets.STEAM_USERNAME }} ${{ secrets.STEAM_PASSWORD }} ${{ steps.steam-totp.outputs.code }} +run_app_build $(pwd)/release.vdf +quit
|
||||
echo "::endgroup::"
|
||||
)
|
||||
+1
-1
@@ -22,7 +22,7 @@ if (EMSCRIPTEN)
|
||||
endif()
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13)
|
||||
|
||||
# Use GNUInstallDirs to allow customisation
|
||||
# but set our own default data and bin dir
|
||||
|
||||
+1
-3
@@ -41,7 +41,6 @@ INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 2
|
||||
ALIASES =
|
||||
TCL_SUBST =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
@@ -155,7 +154,6 @@ VERBATIM_HEADERS = YES
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
@@ -224,7 +222,7 @@ LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
PAPER_TYPE = a4
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
LATEX_FOOTER =
|
||||
|
||||
@@ -13,6 +13,7 @@ set(AI_COMPAT_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_12.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_13.nut
|
||||
)
|
||||
|
||||
foreach(AI_COMPAT_SOURCE_FILE IN LISTS AI_COMPAT_SOURCE_FILES)
|
||||
|
||||
@@ -10,6 +10,7 @@ set(GS_COMPAT_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_12.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_13.nut
|
||||
)
|
||||
|
||||
foreach(GS_COMPAT_SOURCE_FILE IN LISTS GS_COMPAT_SOURCE_FILES)
|
||||
|
||||
@@ -1,3 +1,89 @@
|
||||
13.0 (2023-02-05)
|
||||
------------------------------------------------------------------------
|
||||
Change #10077: Make maximum loan a positive multiple of the loan interval (#10355)
|
||||
Fix #10361: [Script] Don't try to give saved data to a dead script (#10433)
|
||||
Fix #10419: Water infrastructure accounting when building ship depots and docks (#10432)
|
||||
|
||||
|
||||
13.0-RC2 (2023-01-28)
|
||||
------------------------------------------------------------------------
|
||||
Feature: Press Ctrl to build a diagonal area of trees (#10342)
|
||||
Feature: Set a custom number of industries in map generation window (#10340)
|
||||
Change: Display font status as aa/noaa instead of true/false (#10352)
|
||||
Fix: [Script] Improved API documentation for scripts (#10413, #10412)
|
||||
Fix #10255: Reduce basic thickness of linkgraph GUI lines (#10410)
|
||||
Fix #10220: Don't select unselectable engine as default (#10404)
|
||||
Fix #10395: When loading old saves, don't forcibly bar level crossings (#10400)
|
||||
Fix #10377: Bad sorting of rail vehicles when primary variant is missing (#10378)
|
||||
Fix #10368: Server restarting game caused clients to hit assertion (#10369)
|
||||
Fix #10362: NewGRF bridges without speed limits (#10365)
|
||||
Fix #10363: CargoDist setting helptext shouldn't suggest symmetric distribution for diamonds in subtropic (#10364)
|
||||
Fix: [Script] Switch to OWNER_TOWN prevented OWNER_DEITY test during industry prospecting (#10360)
|
||||
Fix #10009: Bad overflow protection when taking out loans (#10359)
|
||||
Fix #9865: Removing files with the console always failed (#10357)
|
||||
Fix #10057: FallbackParagraphLayout fails to properly wrap (#10356)
|
||||
Fix #10177: Company list password padlock showed after switching to single player (#10354)
|
||||
Fix: Various Wide River issues (#10348)
|
||||
Fix: Link variants to parents when finalising engines (#10346)
|
||||
Fix #10333: Only show industry prospecting errors to local company (#10338)
|
||||
Fix #10335: Set initial scrollbar count for object GUI (#10336)
|
||||
Fix #10331: Starting new company during load must happen after AI start (#10332)
|
||||
Fix #10309: [SDL] Uninitialized width and height when turning off full screen (#10328)
|
||||
Fix #10032: Capacities of articulated vehicles in build window (#10326)
|
||||
Fix: Improve handling of corrupt NewGRF or image files (#10321, #10316)
|
||||
Fix: [NewGRF] Don't assume engclass 2 should be elrail (#10315)
|
||||
Fix: [Script] AIGroup.GetProfitLastYear could get values different than those displayed in GUI (#10227)
|
||||
Fix #10304: [Scripts] Don't start GS in intro game (#10305)
|
||||
Fix: [Script] Copy compat files for version 13 (#10303)
|
||||
|
||||
|
||||
13.0-RC1 (2023-01-01)
|
||||
------------------------------------------------------------------------
|
||||
Feature: 'font' console command to configure fonts within game (#10278)
|
||||
Feature: Ctrl-click to bulk edit timetable speeds/waiting times (#10265)
|
||||
Feature: [NewGRF] Vehicle variants in expandable purchase list (#10220)
|
||||
Feature: Expand all towns in the scenario editor (#10215)
|
||||
Add: [NewGRF] Slope-aware and roadtype-specific one-way sprites (#10282)
|
||||
Change: Display text files in black (#10291)
|
||||
Change: Make vehicle list dropdown buttons resize to fit strings (#10286)
|
||||
Change: [NewGRF] Support flipping shorter engines without explicit support (#10262)
|
||||
Change: Separate ground sprite from foundation sprite offsets (#10256)
|
||||
Change: Vertically centre sprite font relative to TrueType font (#10254)
|
||||
Change: [macOS] Set minimum macOS version to 10.13 (#10253)
|
||||
Change: Use lowered not disabled widget for current vehicle details tab (#10252)
|
||||
Change: Various improvements to NewGRF sprite aligner (#10249)
|
||||
Change: reset_engines console command now rerandomises introduction dates and reliability (#10220)
|
||||
Change: Show error message on failed industry prospecting (#10202)
|
||||
Fix: Local authority window rating list height ignored icon sizes (#10285)
|
||||
Fix #10150: Town signs could be truncated when using custom fonts (#10283)
|
||||
Fix #8971: Resize QueryStrings with interface scale change (#10281)
|
||||
Fix #10274: Crash when rescanning scripts with GS selected (#10276)
|
||||
Fix #10151: Use smaller padding for signs (#10272)
|
||||
Fix #10263: [Script] Restore tile validation for commands (#10269)
|
||||
Fix: Missing scrollbar for rail/roadtype dropdowns (#10264)
|
||||
Fix #10260: Incorrect rect height drawing image in vehicle details (#10261)
|
||||
Fix #10257: Incorrect catenary position on sloped bridge heads (#10258)
|
||||
Fix: Vertically centre chat prompt (#10250)
|
||||
Fix #10214: League and graph buttons in toolbar did not have a default action (#10246)
|
||||
Fix #10242: Allow a space for text shadow when clipping text (#10243)
|
||||
Fix #10206: Fully disable scripts in intro game (#10241)
|
||||
Fix #10218: Don't try to create river tiles along incorrect slopes (#10235)
|
||||
Fix #10208: [NewGRF] Allow using a specific underlay for road/tram tunnels (#10233)
|
||||
Fix #10224: Don't change fast-forward mode while saving (#10230)
|
||||
Fix #10147: Sound effect volume slider no longer set volume (#10228)
|
||||
Fix #10223: Crash when vehicle cloning fails on order cloning (#10225)
|
||||
Fix: Maximum space for engine preview image was never scaled (#10219)
|
||||
Fix #10216: Crash when upgrading savegame with crashed vehicles (#10217)
|
||||
Fix #10212: [Script] Nested ScriptAccounting scopes not restored properly (#10213)
|
||||
Fix #10114: Incorrect drag-highlight position with non-power-of-2 scaling (#10211)
|
||||
Fix #10198: Rearrange Intro GUI to make button rows narrower (#10203)
|
||||
Fix: Missing extra padding when drawing tooltip text (#10201)
|
||||
Fix: Bad alignment of button icons when using the original baseset (#10200)
|
||||
Fix: Signal icons incorrectly positioned in UI (#10199)
|
||||
Fix #10021: Object GUI resized when switching between different objects (#10196)
|
||||
Fix #9720: Delay start of GS/AI to after loading of savegame (#9745)
|
||||
|
||||
|
||||
13.0-beta2 (2022-11-27)
|
||||
------------------------------------------------------------------------
|
||||
Feature: Allow AI/GS to be fully modified in scenario editor (#10152)
|
||||
|
||||
@@ -56,7 +56,7 @@ macro(compile_flags)
|
||||
|
||||
if(MSVC)
|
||||
add_compile_options(/W3)
|
||||
if(MSVC_VERSION GREATER 1929)
|
||||
if(MSVC_VERSION GREATER 1929 AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
# Starting with version 19.30, there is an optimisation bug, see #9966 for details
|
||||
# This flag disables the broken optimisation to work around the bug
|
||||
add_compile_options(/d2ssa-rse-)
|
||||
|
||||
@@ -342,7 +342,7 @@ foreach(LINE IN LISTS SOURCE_LINES)
|
||||
else()
|
||||
string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");")
|
||||
endif()
|
||||
if(NOT "${SUPER_CLS}" STREQUAL "ScriptEvent")
|
||||
if(NOT "${SUPER_CLS}" MATCHES "^ScriptEvent")
|
||||
if("${CLS_PARAM_2}" STREQUAL "v")
|
||||
string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);")
|
||||
else()
|
||||
|
||||
Binary file not shown.
@@ -4,10 +4,24 @@
|
||||
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
-1 * 0 0C "One way road graphics"
|
||||
-1 * 3 05 09 06
|
||||
-1 sprites/oneway.png 8bpp 34 8 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 66 8 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 98 8 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 130 8 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 162 8 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 194 8 24 16 -12 -8 normal
|
||||
-1 * 3 05 09 12
|
||||
-1 sprites/oneway.png 8bpp 34 8 24 16 -10 -9 normal
|
||||
-1 sprites/oneway.png 8bpp 66 8 24 16 -13 -7 normal
|
||||
-1 sprites/oneway.png 8bpp 98 8 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 130 8 24 16 -15 -10 normal
|
||||
-1 sprites/oneway.png 8bpp 162 8 24 16 -12 -9 normal
|
||||
-1 sprites/oneway.png 8bpp 194 8 24 16 -11 -8 normal
|
||||
|
||||
-1 sprites/oneway.png 8bpp 34 40 24 16 -13 -10 normal
|
||||
-1 sprites/oneway.png 8bpp 66 40 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 98 40 24 16 -12 -9 normal
|
||||
-1 sprites/oneway.png 8bpp 130 40 24 16 -11 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 162 40 24 16 -9 -10 normal
|
||||
-1 sprites/oneway.png 8bpp 194 40 24 16 -10 -9 normal
|
||||
|
||||
-1 sprites/oneway.png 8bpp 34 72 24 16 -8 -11 normal
|
||||
-1 sprites/oneway.png 8bpp 66 72 24 16 -11 -5 normal
|
||||
-1 sprites/oneway.png 8bpp 98 72 24 16 -12 -8 normal
|
||||
-1 sprites/oneway.png 8bpp 130 72 24 16 -12 -5 normal
|
||||
-1 sprites/oneway.png 8bpp 162 72 24 16 -14 -10 normal
|
||||
-1 sprites/oneway.png 8bpp 194 72 24 16 -12 -8 normal
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 7.7 KiB |
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
|
||||
// This file is part of OpenTTD.
|
||||
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
-1 * 0 0C "Fix alignment of button icons."
|
||||
|
||||
// Fix alignment of button icons.
|
||||
-1 * 11 0A 03 01 DC 02 01 E2 02 01 E6 02
|
||||
-1 sprites/fix_gui_icons.png 8bpp 8 13 20 20 0 0 normal nocrop
|
||||
-1 sprites/fix_gui_icons.png 8bpp 40 13 20 20 0 0 normal nocrop
|
||||
-1 sprites/fix_gui_icons.png 8bpp 72 13 20 20 0 0 normal nocrop
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@@ -83,3 +83,4 @@
|
||||
#include "rivers/arctic.nfo"
|
||||
#include "rivers/tropic.nfo"
|
||||
#include "rivers/toyland.nfo"
|
||||
#include "fix_gui_icons.nfo"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM emscripten/emsdk:2.0.34
|
||||
FROM emscripten/emsdk:3.1.28
|
||||
|
||||
COPY emsdk-liblzma.patch /
|
||||
RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch
|
||||
|
||||
+14
-16
@@ -1,40 +1,38 @@
|
||||
## How to build with Emscripten
|
||||
|
||||
Building with Emscripten works with emsdk 2.0.31 and above.
|
||||
Please use docker with the supplied `Dockerfile` to build for emscripten.
|
||||
It takes care of a few things:
|
||||
- Use a version of emscripten we know works
|
||||
- Patch in LibLZMA support (as this is not supported by upstream)
|
||||
|
||||
Currently there is no LibLZMA support upstream; for this we suggest to apply
|
||||
the provided patch in this folder to your emsdk installation.
|
||||
|
||||
For convenience, a Dockerfile is supplied that does this patches for you
|
||||
against upstream emsdk docker. Best way to use it:
|
||||
|
||||
Build the docker image:
|
||||
First, build the docker image by navigating in the folder this `README.md` is in, and executing:
|
||||
```
|
||||
docker build -t emsdk-lzma .
|
||||
```
|
||||
|
||||
Build the host tools first:
|
||||
Next, navigate back to the root folder of this project.
|
||||
|
||||
Now we build the host tools first:
|
||||
```
|
||||
mkdir build-host
|
||||
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma cmake .. -DOPTION_TOOLS_ONLY=ON
|
||||
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma make -j5 tools
|
||||
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma make -j$(nproc) tools
|
||||
```
|
||||
|
||||
Next, build the game with emscripten:
|
||||
|
||||
Finally, we build the actual game:
|
||||
```
|
||||
mkdir build
|
||||
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emcmake cmake .. -DHOST_BINARY_DIR=../build-host -DCMAKE_BUILD_TYPE=Release -DOPTION_USE_ASSERTS=OFF
|
||||
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emmake make -j5
|
||||
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emmake make -j$(nproc)
|
||||
```
|
||||
|
||||
And now you have in your build folder files like "openttd.html".
|
||||
In the `build` folder you will now see `openttd.html`.
|
||||
|
||||
To run it locally, you would have to start a local webserver, like:
|
||||
To run it locally, you would have to start a local webserver; something like:
|
||||
|
||||
```
|
||||
cd build
|
||||
python3 -m http.server
|
||||
````
|
||||
|
||||
Now you can play the game via http://127.0.0.1:8000/openttd.html .
|
||||
You can now play the game via http://127.0.0.1:8000/openttd.html .
|
||||
|
||||
@@ -13,7 +13,7 @@ of emsdk.
|
||||
diff --git a/tools/settings.py b/tools/settings.py
|
||||
--- a/tools/settings.py
|
||||
+++ b/tools/settings.py
|
||||
@@ -38,6 +38,7 @@
|
||||
@@ -40,6 +40,7 @@ PORTS_SETTINGS = {
|
||||
'USE_SDL_NET',
|
||||
'USE_SDL_GFX',
|
||||
'USE_LIBJPEG',
|
||||
@@ -24,24 +24,23 @@ diff --git a/tools/settings.py b/tools/settings.py
|
||||
diff --git a/src/settings.js b/src/settings.js
|
||||
--- a/src/settings.js
|
||||
+++ b/src/settings.js
|
||||
@@ -1382,8 +1382,12 @@ var USE_BZIP2 = 0;
|
||||
// 1 = use libjpeg from emscripten-ports
|
||||
// [link]
|
||||
var USE_LIBJPEG = 0;
|
||||
@@ -1450,6 +1450,10 @@ var USE_GIFLIB = false;
|
||||
// [compile+link]
|
||||
var USE_LIBJPEG = false;
|
||||
|
||||
+// 1 = use liblzma from emscripten-ports
|
||||
+// [link]
|
||||
+var USE_LIBLZMA = 0;
|
||||
+// [compile+link]
|
||||
+var USE_LIBLZMA = false;
|
||||
+
|
||||
// 1 = use libpng from emscripten-ports
|
||||
// [link]
|
||||
var USE_LIBPNG = 0;
|
||||
// [compile+link]
|
||||
var USE_LIBPNG = false;
|
||||
|
||||
diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/tools/ports/liblzma.py
|
||||
@@ -0,0 +1,160 @@
|
||||
@@ -0,0 +1,151 @@
|
||||
+# Copyright 2020 The Emscripten Authors. All rights reserved.
|
||||
+# Emscripten is available under two separate licenses, the MIT license and the
|
||||
+# University of Illinois/NCSA Open Source License. Both these licenses can be
|
||||
@@ -52,8 +51,8 @@ new file mode 100644
|
||||
+import logging
|
||||
+from pathlib import Path
|
||||
+
|
||||
+VERSION = '5.2.5'
|
||||
+HASH = '7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce'
|
||||
+VERSION = '5.4.0'
|
||||
+HASH = '29b2cd25bb5b234b329ffe9547692d2c29be393db9d8d4ce70a66dfdaebd54433e79a89d80c57e58cd4559c3c68b9845507d5fedf3eec1c528a81e3d9ddbd811'
|
||||
+
|
||||
+
|
||||
+def needed(settings):
|
||||
@@ -61,40 +60,31 @@ new file mode 100644
|
||||
+
|
||||
+
|
||||
+def get(ports, settings, shared):
|
||||
+ ports.fetch_project('liblzma', 'https://tukaani.org/xz/xz-' + VERSION + '.tar.gz', 'xz-' + VERSION, sha512hash=HASH)
|
||||
+ ports.fetch_project('liblzma', f'https://tukaani.org/xz/xz-{VERSION}.tar.gz', sha512hash=HASH)
|
||||
+
|
||||
+ def create(final):
|
||||
+ logging.info('building port: liblzma')
|
||||
+
|
||||
+ ports.clear_project_build('liblzma')
|
||||
+
|
||||
+ source_path = os.path.join(ports.get_dir(), 'liblzma', 'xz-' + VERSION)
|
||||
+ dest_path = os.path.join(ports.get_build_dir(), 'liblzma')
|
||||
+
|
||||
+ shared.try_delete(dest_path)
|
||||
+ os.makedirs(dest_path)
|
||||
+ shutil.rmtree(dest_path, ignore_errors=True)
|
||||
+ shutil.copytree(source_path, dest_path)
|
||||
+ source_path = os.path.join(ports.get_dir(), 'liblzma', f'xz-{VERSION}', 'src', 'liblzma')
|
||||
+ ports.write_file(os.path.join(source_path, 'config.h'), config_h)
|
||||
+ ports.install_headers(os.path.join(source_path, 'api'), pattern='lzma.h')
|
||||
+ ports.install_headers(os.path.join(source_path, 'api', 'lzma'), pattern='*.h', target='lzma')
|
||||
+
|
||||
+ build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden']
|
||||
+ exclude_dirs = ['xzdec', 'xz', 'lzmainfo']
|
||||
+ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c'
|
||||
+ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c',
|
||||
+ 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c']
|
||||
+ include_dirs_rel = ['../common', 'api', 'common', 'check', 'lz', 'rangecoder', 'lzma', 'delta', 'simple']
|
||||
+ include_dirs_rel = ['../common', 'api', 'check', 'common', 'delta', 'lz', 'lzma', 'rangecoder', 'simple']
|
||||
+
|
||||
+ Path(dest_path, os.path.join('src', 'config.h')).write_text(config_h)
|
||||
+ include_dirs = [os.path.join(source_path, p) for p in include_dirs_rel]
|
||||
+ ports.build_port(source_path, final, 'liblzma', flags=build_flags, exclude_files=exclude_files, includes=include_dirs)
|
||||
+
|
||||
+ include_dirs = [os.path.join(dest_path, 'src', 'liblzma', p) for p in include_dirs_rel]
|
||||
+ ports.build_port(os.path.join(dest_path, 'src'), final, flags=build_flags, exclude_dirs=exclude_dirs, exclude_files=exclude_files, includes=include_dirs)
|
||||
+
|
||||
+ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api'), 'lzma.h')
|
||||
+ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api', 'lzma'), '*.h', 'lzma')
|
||||
+
|
||||
+ return [shared.Cache.get_lib('liblzma.a', create, what='port')]
|
||||
+ return [shared.cache.get_lib('liblzma.a', create, what='port')]
|
||||
+
|
||||
+
|
||||
+def clear(ports, settings, shared):
|
||||
+ shared.Cache.erase_lib('liblzma.a')
|
||||
+ shared.cache.erase_lib('liblzma.a')
|
||||
+
|
||||
+
|
||||
+def process_args(ports):
|
||||
@@ -105,7 +95,7 @@ new file mode 100644
|
||||
+ return 'liblzma (USE_LIBLZMA=1; public domain)'
|
||||
+
|
||||
+
|
||||
+config_h = r'''
|
||||
+config_h = '''
|
||||
+#define ASSUME_RAM 128
|
||||
+#define ENABLE_NLS 1
|
||||
+#define HAVE_CHECK_CRC32 1
|
||||
@@ -177,9 +167,9 @@ new file mode 100644
|
||||
+#define PACKAGE "xz"
|
||||
+#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org"
|
||||
+#define PACKAGE_NAME "XZ Utils"
|
||||
+#define PACKAGE_STRING "XZ Utils 5.2.5"
|
||||
+#define PACKAGE_STRING "XZ Utils 5.4.0"
|
||||
+#define PACKAGE_TARNAME "xz"
|
||||
+#define PACKAGE_VERSION "5.2.5"
|
||||
+#define PACKAGE_VERSION "5.4.0"
|
||||
+#define SIZEOF_SIZE_T 4
|
||||
+#define STDC_HEADERS 1
|
||||
+#define TUKLIB_CPUCORES_SYSCONF 1
|
||||
@@ -200,5 +190,5 @@ new file mode 100644
|
||||
+#ifndef __EXTENSIONS__
|
||||
+# define __EXTENSIONS__ 1
|
||||
+#endif
|
||||
+#define VERSION "5.2.5"
|
||||
+#define VERSION "5.4.0"
|
||||
+'''
|
||||
|
||||
Executable
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"project": {
|
||||
"baseProductId": "1293297882",
|
||||
"clientId": "CLIENT_ID",
|
||||
"clientSecret": "CLIENT_SECRET",
|
||||
"version": "VERSION",
|
||||
"installDirectory": "OpenTTD",
|
||||
"name": "OpenTTD",
|
||||
"platform": "gnu-linux",
|
||||
"tags": [
|
||||
"editor_v_1_4_0"
|
||||
],
|
||||
"languageMode": "together",
|
||||
"products": [
|
||||
{
|
||||
"name": "OpenTTD",
|
||||
"productId": "1293297882",
|
||||
"depots": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"folder": "linux",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenGFX",
|
||||
"folder": "opengfx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenMSX",
|
||||
"folder": "openmsx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenSFX",
|
||||
"folder": "opensfx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
}
|
||||
],
|
||||
"tasks": [
|
||||
{
|
||||
"type": "FileTask",
|
||||
"name": "OpenTTD",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"category": "game",
|
||||
"path": "openttd",
|
||||
"isPrimary": true
|
||||
}
|
||||
],
|
||||
"supportDepots": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Executable
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"project": {
|
||||
"baseProductId": "1293297882",
|
||||
"clientId": "CLIENT_ID",
|
||||
"clientSecret": "CLIENT_SECRET",
|
||||
"version": "VERSION",
|
||||
"installDirectory": "OpenTTD",
|
||||
"name": "OpenTTD",
|
||||
"platform": "osx",
|
||||
"tags": [
|
||||
"editor_v_1_4_0"
|
||||
],
|
||||
"languageMode": "together",
|
||||
"products": [
|
||||
{
|
||||
"name": "OpenTTD",
|
||||
"productId": "1293297882",
|
||||
"depots": [
|
||||
{
|
||||
"name": "MacOS",
|
||||
"folder": "macos",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenGFX",
|
||||
"folder": "opengfx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenMSX",
|
||||
"folder": "openmsx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenSFX",
|
||||
"folder": "opensfx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
]
|
||||
}
|
||||
],
|
||||
"tasks": [
|
||||
{
|
||||
"type": "FileTask",
|
||||
"name": "OpenTTD",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"category": "game",
|
||||
"path": "OpenTTD.app/Contents/MacOS/openttd",
|
||||
"isPrimary": true
|
||||
}
|
||||
],
|
||||
"supportDepots": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Executable
+94
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"project": {
|
||||
"baseProductId": "1293297882",
|
||||
"clientId": "CLIENT_ID",
|
||||
"clientSecret": "CLIENT_SECRET",
|
||||
"version": "VERSION",
|
||||
"installDirectory": "OpenTTD",
|
||||
"name": "OpenTTD",
|
||||
"platform": "windows",
|
||||
"tags": [
|
||||
"editor_v_1_4_0"
|
||||
],
|
||||
"languageMode": "together",
|
||||
"products": [
|
||||
{
|
||||
"name": "OpenTTD",
|
||||
"productId": "1293297882",
|
||||
"depots": [
|
||||
{
|
||||
"name": "Win32",
|
||||
"folder": "win32",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"osBitness": [
|
||||
"32"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Win64",
|
||||
"folder": "win64",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"osBitness": [
|
||||
"64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenGFX",
|
||||
"folder": "opengfx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"osBitness": [
|
||||
"32",
|
||||
"64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenMSX",
|
||||
"folder": "openmsx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"osBitness": [
|
||||
"32",
|
||||
"64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "OpenSFX",
|
||||
"folder": "opensfx",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"osBitness": [
|
||||
"32",
|
||||
"64"
|
||||
]
|
||||
}
|
||||
],
|
||||
"tasks": [
|
||||
{
|
||||
"type": "FileTask",
|
||||
"name": "OpenTTD",
|
||||
"languages": [
|
||||
"en-US"
|
||||
],
|
||||
"category": "game",
|
||||
"path": "openttd.exe",
|
||||
"isPrimary": true,
|
||||
"osBitness": [
|
||||
"32",
|
||||
"64"
|
||||
]
|
||||
}
|
||||
],
|
||||
"supportDepots": []
|
||||
}
|
||||
],
|
||||
"scriptInterpreter": true
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,6 @@
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<string>True</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.14.0</string>
|
||||
<string>10.13.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -562,6 +562,25 @@ function Regression::Prices()
|
||||
print(" BT_CLEAR_WATER: " + AITile.GetBuildCost(AITile.BT_CLEAR_WATER));
|
||||
}
|
||||
|
||||
function Regression::Commands()
|
||||
{
|
||||
print("");
|
||||
print("--Commands--");
|
||||
|
||||
print(" -Command accounting-");
|
||||
local test = AITestMode();
|
||||
local costs = AIAccounting();
|
||||
AITile.DemolishTile(2834);
|
||||
print(" Command cost: " + costs.GetCosts());
|
||||
{
|
||||
local inner = AIAccounting();
|
||||
print(" New inner cost scope: " + costs.GetCosts());
|
||||
AITile.DemolishTile(2835);
|
||||
print(" Further command cost: " + costs.GetCosts());
|
||||
}
|
||||
print(" Saved cost of outer scope: " + costs.GetCosts());
|
||||
}
|
||||
|
||||
function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; }
|
||||
function estimate_callback(tile, direction, goals, self) { return goals[0] - tile; }
|
||||
function neighbours_callback(path, cur_tile, self) { return [[cur_tile + 1, 1]]; }
|
||||
@@ -1684,6 +1703,7 @@ function Regression::Vehicle()
|
||||
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(33417, 153));
|
||||
print(" IsValidVehicle(12): " + AIVehicle.IsValidVehicle(12));
|
||||
print(" CloneVehicle(): " + AIVehicle.CloneVehicle(33417, 12, true));
|
||||
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(-1, 153));
|
||||
|
||||
local bank_after = AICompany.GetBankBalance(AICompany.COMPANY_SELF);
|
||||
|
||||
@@ -1940,6 +1960,7 @@ function Regression::Start()
|
||||
/* Do this first as it gains maximum loan (which is faked to quite a lot). */
|
||||
this.Company();
|
||||
|
||||
this.Commands();
|
||||
this.Airport();
|
||||
this.Bridge();
|
||||
this.BridgeList();
|
||||
|
||||
@@ -788,6 +788,13 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetQuarterlyPerformanceRating(): 0
|
||||
GetQuarterlyCompanyValue(): 0
|
||||
|
||||
--Commands--
|
||||
-Command accounting-
|
||||
Command cost: 7500
|
||||
New inner cost scope: 0
|
||||
Further command cost: 30
|
||||
Saved cost of outer scope: 7500
|
||||
|
||||
--AIAirport--
|
||||
IsHangarTile(): false
|
||||
IsAirportTile(): false
|
||||
@@ -9288,6 +9295,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
BuildVehicle(): 12
|
||||
IsValidVehicle(12): true
|
||||
CloneVehicle(): 13
|
||||
BuildVehicle(): 1048575
|
||||
--Accounting--
|
||||
GetCosts(): 11894
|
||||
Should be: 11894
|
||||
|
||||
+1
-1
@@ -450,7 +450,7 @@ void RefTable::Resize(SQUnsignedInteger size)
|
||||
SQUnsignedInteger oldnumofslots = _numofslots;
|
||||
AllocNodes(size);
|
||||
//rehash
|
||||
SQUnsignedInteger nfound = 0;
|
||||
[[maybe_unused]] SQUnsignedInteger nfound = 0;
|
||||
for(SQUnsignedInteger n = 0; n < oldnumofslots; n++) {
|
||||
if(type(t->obj) != OT_NULL) {
|
||||
//add back;
|
||||
|
||||
@@ -128,11 +128,6 @@ public:
|
||||
*/
|
||||
static void Save(CompanyID company);
|
||||
|
||||
/**
|
||||
* Load data for an AI from a savegame.
|
||||
*/
|
||||
static void Load(CompanyID company, int version);
|
||||
|
||||
/**
|
||||
* Get the number of days before the next AI should start.
|
||||
*/
|
||||
|
||||
+2
-15
@@ -57,6 +57,8 @@
|
||||
assert(c->ai_instance == nullptr);
|
||||
c->ai_instance = new AIInstance();
|
||||
c->ai_instance->Initialize(info);
|
||||
c->ai_instance->LoadOnStack(config->GetToLoadData());
|
||||
config->SetToLoadData(nullptr);
|
||||
|
||||
cur_company.Restore();
|
||||
|
||||
@@ -289,21 +291,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ void AI::Load(CompanyID company, int version)
|
||||
{
|
||||
if (!_networking || _network_server) {
|
||||
Company *c = Company::GetIfValid(company);
|
||||
assert(c != nullptr && c->ai_instance != nullptr);
|
||||
|
||||
Backup<CompanyID> cur_company(_current_company, company, FILE_LINE);
|
||||
c->ai_instance->Load(version);
|
||||
cur_company.Restore();
|
||||
} else {
|
||||
/* Read, but ignore, the load data */
|
||||
AIInstance::LoadEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ int AI::GetStartNextTime()
|
||||
{
|
||||
/* Find the first company which doesn't exist yet */
|
||||
|
||||
+2
-2
@@ -142,11 +142,11 @@ struct AIListWindow : public Window {
|
||||
break;
|
||||
}
|
||||
case WID_AIL_INFO_BG: {
|
||||
AIInfo *selected_info = nullptr;
|
||||
ScriptInfo *selected_info = nullptr;
|
||||
int i = 0;
|
||||
for (const auto &item : *this->info_list) {
|
||||
i++;
|
||||
if (this->selected == i - 1) selected_info = static_cast<AIInfo *>(item.second);
|
||||
if (this->selected == i - 1) selected_info = static_cast<ScriptInfo *>(item.second);
|
||||
}
|
||||
/* Some info about the currently selected AI. */
|
||||
if (selected_info != nullptr) {
|
||||
|
||||
@@ -61,6 +61,9 @@ void AIInstance::Died()
|
||||
{
|
||||
ScriptInstance::Died();
|
||||
|
||||
/* Intro is not supposed to use AI, but it may have 'dummy' AI which instant dies. */
|
||||
if (_game_mode == GM_MENU) return;
|
||||
|
||||
ShowAIDebugWindow(_current_company);
|
||||
|
||||
const AIInfo *info = AIConfig::GetConfig(_current_company, AIConfig::SSS_FORCE_GAME)->GetInfo();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "../stdafx.h"
|
||||
#include "../debug.h"
|
||||
#include "../network/network.h"
|
||||
#include "../openttd.h"
|
||||
#include "../core/random_func.hpp"
|
||||
|
||||
#include "../script/squirrel_class.hpp"
|
||||
@@ -59,6 +60,11 @@ void AIScannerInfo::RegisterAPI(class Squirrel *engine)
|
||||
|
||||
AIInfo *AIScannerInfo::SelectRandomAI() const
|
||||
{
|
||||
if (_game_mode == GM_MENU) {
|
||||
Debug(script, 0, "The intro game should not use AI, loading 'dummy' AI.");
|
||||
return this->info_dummy;
|
||||
}
|
||||
|
||||
uint num_random_ais = 0;
|
||||
for (const auto &item : info_single_list) {
|
||||
AIInfo *i = static_cast<AIInfo *>(item.second);
|
||||
|
||||
@@ -160,41 +160,6 @@ CargoArray GetCapacityOfArticulatedParts(EngineID engine)
|
||||
return capacity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default cargoes and refits of an articulated vehicle.
|
||||
* The refits are linked to a cargo rather than an articulated part to prevent a long list of parts.
|
||||
* @param engine Model to investigate.
|
||||
* @param[out] cargoes Total amount of units that can be transported, summed by cargo.
|
||||
* @param[out] refits Whether a (possibly partial) refit for each cargo is possible.
|
||||
* @param cargo_type Selected refitted cargo type
|
||||
* @param cargo_capacity Capacity of selected refitted cargo type
|
||||
*/
|
||||
void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity)
|
||||
{
|
||||
cargoes->Clear();
|
||||
*refits = 0;
|
||||
|
||||
const Engine *e = Engine::Get(engine);
|
||||
|
||||
if (cargo_type < NUM_CARGO && cargo_capacity > 0) {
|
||||
(*cargoes)[cargo_type] += cargo_capacity;
|
||||
if (IsEngineRefittable(engine)) SetBit(*refits, cargo_type);
|
||||
}
|
||||
|
||||
if (!e->IsGroundVehicle() || !HasBit(e->info.callback_mask, CBM_VEHICLE_ARTIC_ENGINE)) return;
|
||||
|
||||
for (uint i = 1; i < MAX_ARTICULATED_PARTS; i++) {
|
||||
EngineID artic_engine = GetNextArticulatedPart(i, engine);
|
||||
if (artic_engine == INVALID_ENGINE) break;
|
||||
|
||||
cargo_capacity = GetVehicleDefaultCapacity(artic_engine, &cargo_type);
|
||||
if (cargo_type < NUM_CARGO && cargo_capacity > 0) {
|
||||
(*cargoes)[cargo_type] += cargo_capacity;
|
||||
if (IsEngineRefittable(artic_engine)) SetBit(*refits, cargo_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether any of the articulated parts is refittable
|
||||
* @param engine the first part
|
||||
|
||||
@@ -346,7 +346,7 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic
|
||||
|
||||
/* Build the new vehicle */
|
||||
VehicleID new_veh_id;
|
||||
std::tie(cost, new_veh_id, std::ignore, std::ignore) = Command<CMD_BUILD_VEHICLE>::Do(DC_EXEC | DC_AUTOREPLACE, old_veh->tile, e, true, CT_INVALID, INVALID_CLIENT_ID);
|
||||
std::tie(cost, new_veh_id, std::ignore, std::ignore, std::ignore) = Command<CMD_BUILD_VEHICLE>::Do(DC_EXEC | DC_AUTOREPLACE, old_veh->tile, e, true, CT_INVALID, INVALID_CLIENT_ID);
|
||||
if (cost.Failed()) return cost;
|
||||
|
||||
Vehicle *new_veh = Vehicle::Get(new_veh_id);
|
||||
@@ -422,6 +422,7 @@ static CommandCost CopyHeadSpecificThings(Vehicle *old_head, Vehicle *new_head,
|
||||
if (cost.Succeeded() && old_head != new_head && (flags & DC_EXEC) != 0) {
|
||||
/* Copy other things which cannot be copied by a command and which shall not stay resetted from the build vehicle command */
|
||||
new_head->CopyVehicleConfigAndStatistics(old_head);
|
||||
GroupStatistics::AddProfitLastYear(new_head);
|
||||
|
||||
/* Switch vehicle windows/news to the new vehicle, so they are not closed/deleted when the old vehicle is sold */
|
||||
ChangeVehicleViewports(old_head->index, new_head->index);
|
||||
|
||||
+71
-15
@@ -33,11 +33,11 @@
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group);
|
||||
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group);
|
||||
|
||||
static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
return Engine::Get(a)->list_position < Engine::Get(b)->list_position;
|
||||
return Engine::Get(a.engine_id)->list_position < Engine::Get(b.engine_id)->list_position;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,6 +113,26 @@ class ReplaceVehicleWindow : public Window {
|
||||
return true;
|
||||
}
|
||||
|
||||
void AddChildren(const GUIEngineList &source, GUIEngineList &target, EngineID parent, int indent, int side)
|
||||
{
|
||||
for (const auto &item : source) {
|
||||
if (item.variant_id != parent || item.engine_id == parent) continue;
|
||||
|
||||
const Engine *e = Engine::Get(item.engine_id);
|
||||
EngineDisplayFlags flags = item.flags;
|
||||
if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded;
|
||||
target.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent);
|
||||
|
||||
/* Add variants if not folded */
|
||||
if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) {
|
||||
/* Add this engine again as a child */
|
||||
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) {
|
||||
target.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1);
|
||||
}
|
||||
AddChildren(source, target, item.engine_id, indent + 1, side);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate an engines list
|
||||
@@ -120,12 +140,12 @@ class ReplaceVehicleWindow : public Window {
|
||||
*/
|
||||
void GenerateReplaceVehList(bool draw_left)
|
||||
{
|
||||
std::vector<EngineID> variants;
|
||||
EngineID selected_engine = INVALID_ENGINE;
|
||||
VehicleType type = (VehicleType)this->window_number;
|
||||
byte side = draw_left ? 0 : 1;
|
||||
|
||||
GUIEngineList *list = &this->engines[side];
|
||||
list->clear();
|
||||
GUIEngineList list;
|
||||
|
||||
for (const Engine *e : Engine::IterateType(type)) {
|
||||
if (!draw_left && !this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
||||
@@ -155,15 +175,37 @@ class ReplaceVehicleWindow : public Window {
|
||||
if (!CheckAutoreplaceValidity(this->sel_engine[0], eid, _local_company)) continue;
|
||||
}
|
||||
|
||||
list->push_back(eid);
|
||||
EngineDisplayFlags flags = (side == 0) ? EngineDisplayFlags::None : e->display_flags;
|
||||
if (side == 1 && eid == this->sel_engine[0]) flags |= EngineDisplayFlags::Shaded;
|
||||
list.emplace_back(eid, e->info.variant_id, flags, 0);
|
||||
|
||||
if (side == 1 && e->info.variant_id != INVALID_ENGINE) variants.push_back(e->info.variant_id);
|
||||
if (eid == this->sel_engine[side]) selected_engine = eid; // The selected engine is still in the list
|
||||
}
|
||||
|
||||
if (side == 1) {
|
||||
/* ensure primary engine of variant group is in list */
|
||||
for (const auto &variant : variants) {
|
||||
if (std::find(list.begin(), list.end(), variant) == list.end()) {
|
||||
const Engine *e = Engine::Get(variant);
|
||||
list.emplace_back(variant, e->info.variant_id, e->display_flags | EngineDisplayFlags::Shaded, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this->sel_engine[side] = selected_engine; // update which engine we selected (the same or none, if it's not in the list anymore)
|
||||
if (draw_left) {
|
||||
EngList_Sort(list, &EngineNumberSorter);
|
||||
EngList_Sort(&list, &EngineNumberSorter);
|
||||
} else {
|
||||
_engine_sort_direction = this->descending_sort_order;
|
||||
EngList_Sort(list, _engine_sort_functions[this->window_number][this->sort_criteria]);
|
||||
EngList_Sort(&list, _engine_sort_functions[this->window_number][this->sort_criteria]);
|
||||
}
|
||||
|
||||
this->engines[side].clear();
|
||||
if (side == 1) {
|
||||
AddChildren(list, this->engines[side], INVALID_ENGINE, 0, side);
|
||||
} else {
|
||||
this->engines[side].swap(list);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +219,7 @@ class ReplaceVehicleWindow : public Window {
|
||||
this->GenerateReplaceVehList(true);
|
||||
this->vscroll[0]->SetCount((uint)this->engines[0].size());
|
||||
if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && this->engines[0].size() != 0) {
|
||||
this->sel_engine[0] = this->engines[0][0];
|
||||
this->sel_engine[0] = this->engines[0][0].engine_id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,8 +240,8 @@ class ReplaceVehicleWindow : public Window {
|
||||
this->vscroll[1]->SetCount((uint)this->engines[1].size());
|
||||
if (this->reset_sel_engine && this->sel_engine[1] != INVALID_ENGINE) {
|
||||
int position = 0;
|
||||
for (EngineID &eid : this->engines[1]) {
|
||||
if (eid == this->sel_engine[1]) break;
|
||||
for (const auto &item : this->engines[1]) {
|
||||
if (item.engine_id == this->sel_engine[1]) break;
|
||||
++position;
|
||||
}
|
||||
this->vscroll[1]->ScrollTowards(position);
|
||||
@@ -433,7 +475,7 @@ public:
|
||||
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, &this->engines[side], start, end, this->sel_engine[side], side == 0, this->sel_group);
|
||||
DrawEngineList((VehicleType)this->window_number, r, this->engines[side], start, end, this->sel_engine[side], side == 0, this->sel_group);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -481,8 +523,7 @@ public:
|
||||
const Engine *e = Engine::Get(this->sel_engine[side]);
|
||||
TestedEngineDetails ted;
|
||||
ted.cost = 0;
|
||||
ted.cargo = e->GetDefaultCargoType();
|
||||
ted.capacity = e->GetDisplayDefaultCapacity(&ted.mail_capacity);
|
||||
ted.FillDefaultCapacities(e);
|
||||
|
||||
const Rect r = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS)->GetCurrentRect()
|
||||
.Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect);
|
||||
@@ -579,7 +620,22 @@ public:
|
||||
uint i = this->vscroll[click_side]->GetScrolledRowFromWidget(pt.y, this, widget);
|
||||
size_t engine_count = this->engines[click_side].size();
|
||||
|
||||
EngineID e = engine_count > i ? this->engines[click_side][i] : INVALID_ENGINE;
|
||||
EngineID e = INVALID_ENGINE;
|
||||
if (i < engine_count) {
|
||||
const auto &item = this->engines[click_side][i];
|
||||
const Rect r = this->GetWidget<NWidgetBase>(widget)->GetCurrentRect().Shrink(WidgetDimensions::scaled.matrix).WithWidth(WidgetDimensions::scaled.hsep_indent * (item.indent + 1), _current_text_dir == TD_RTL);
|
||||
if ((item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None && IsInsideMM(r.left, r.right, pt.x)) {
|
||||
/* toggle folded flag on engine */
|
||||
assert(item.variant_id != INVALID_ENGINE);
|
||||
Engine *engine = Engine::Get(item.variant_id);
|
||||
engine->display_flags ^= EngineDisplayFlags::IsFolded;
|
||||
|
||||
InvalidateWindowData(WC_REPLACE_VEHICLE, (VehicleType)this->window_number, 0); // Update the autoreplace window
|
||||
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
|
||||
return;
|
||||
}
|
||||
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) e = item.engine_id;
|
||||
}
|
||||
|
||||
/* If Ctrl is pressed on the left side and we don't have any engines of the selected type, stop autoreplacing.
|
||||
* This is most common when we have finished autoreplacing the engine and want to remove it from the list. */
|
||||
|
||||
+6
-1
@@ -367,7 +367,12 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||
info->palette_size = ReadDword(buffer); // number of colours in palette
|
||||
SkipBytes(buffer, header_size - 16); // skip the end of info header
|
||||
}
|
||||
if (info->palette_size == 0) info->palette_size = 1 << info->bpp;
|
||||
|
||||
uint maximum_palette_size = 1U << info->bpp;
|
||||
if (info->palette_size == 0) info->palette_size = maximum_palette_size;
|
||||
|
||||
/* More palette colours than palette indices is not supported. */
|
||||
if (info->palette_size > maximum_palette_size) return false;
|
||||
|
||||
data->palette = CallocT<Colour>(info->palette_size);
|
||||
|
||||
|
||||
+23
-16
@@ -130,6 +130,23 @@ private:
|
||||
this->SetWidgetDirty(WID_BBS_BRIDGE_LIST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the StringID to draw in the selection list and set the appropriate DParams.
|
||||
* @param bridge_data the bridge to get the StringID of.
|
||||
* @return the StringID.
|
||||
*/
|
||||
StringID GetBridgeSelectString(const BuildBridgeData &bridge_data) const
|
||||
{
|
||||
SetDParam(0, bridge_data.spec->material);
|
||||
SetDParam(1, bridge_data.spec->speed);
|
||||
SetDParam(2, bridge_data.cost);
|
||||
/* If the bridge has no meaningful speed limit, don't display it. */
|
||||
if (bridge_data.spec->speed == UINT16_MAX) {
|
||||
return _game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_INFO_NAME : STR_SELECT_BRIDGE_INFO_NAME_COST;
|
||||
}
|
||||
return _game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED : STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST;
|
||||
}
|
||||
|
||||
public:
|
||||
BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, TransportType transport_type, byte road_rail_type, GUIBridgeList *bl) : Window(desc),
|
||||
start_tile(start),
|
||||
@@ -183,14 +200,9 @@ public:
|
||||
case WID_BBS_BRIDGE_LIST: {
|
||||
Dimension sprite_dim = {0, 0}; // Biggest bridge sprite dimension
|
||||
Dimension text_dim = {0, 0}; // Biggest text dimension
|
||||
for (int i = 0; i < (int)this->bridges->size(); i++) {
|
||||
const BridgeSpec *b = this->bridges->at(i).spec;
|
||||
sprite_dim = maxdim(sprite_dim, GetSpriteSize(b->sprite));
|
||||
|
||||
SetDParam(2, this->bridges->at(i).cost);
|
||||
SetDParam(1, b->speed);
|
||||
SetDParam(0, b->material);
|
||||
text_dim = maxdim(text_dim, GetStringBoundingBox(_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO));
|
||||
for (const BuildBridgeData &bridge_data : *this->bridges) {
|
||||
sprite_dim = maxdim(sprite_dim, GetSpriteSize(bridge_data.spec->sprite));
|
||||
text_dim = maxdim(text_dim, GetStringBoundingBox(GetBridgeSelectString(bridge_data)));
|
||||
}
|
||||
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.
|
||||
@@ -224,15 +236,10 @@ public:
|
||||
case WID_BBS_BRIDGE_LIST: {
|
||||
Rect tr = r.WithHeight(this->resize.step_height).Shrink(WidgetDimensions::scaled.matrix);
|
||||
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges->size(); i++) {
|
||||
const BridgeSpec *b = this->bridges->at(i).spec;
|
||||
|
||||
SetDParam(2, this->bridges->at(i).cost);
|
||||
SetDParam(1, b->speed);
|
||||
SetDParam(0, b->material);
|
||||
|
||||
const BuildBridgeData &bridge_data = this->bridges->at(i);
|
||||
const BridgeSpec *b = bridge_data.spec;
|
||||
DrawSprite(b->sprite, b->pal, tr.left, tr.bottom - GetSpriteSize(b->sprite).height);
|
||||
DrawStringMultiLine(tr.Indent(this->bridgetext_offset, false),
|
||||
_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO);
|
||||
DrawStringMultiLine(tr.Indent(this->bridgetext_offset, false), GetBridgeSelectString(bridge_data));
|
||||
tr = tr.Translate(0, this->resize.step_height);
|
||||
}
|
||||
break;
|
||||
|
||||
+232
-118
@@ -106,9 +106,9 @@ static CargoID _engine_sort_last_cargo_criteria[] = {CF_ANY, CF_ANY, CF_ANY, CF_
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
int r = Engine::Get(a)->list_position - Engine::Get(b)->list_position;
|
||||
int r = Engine::Get(a.engine_id)->list_position - Engine::Get(b.engine_id)->list_position;
|
||||
|
||||
return _engine_sort_direction ? r > 0 : r < 0;
|
||||
}
|
||||
@@ -119,10 +119,10 @@ static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineIntroDateSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineIntroDateSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
const int va = Engine::Get(a)->intro_date;
|
||||
const int vb = Engine::Get(b)->intro_date;
|
||||
const int va = Engine::Get(a.engine_id)->intro_date;
|
||||
const int vb = Engine::Get(b.engine_id)->intro_date;
|
||||
const int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -139,19 +139,19 @@ static EngineID _last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE };
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineNameSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineNameSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
static char last_name[2][64] = { "", "" };
|
||||
|
||||
if (a != _last_engine[0]) {
|
||||
_last_engine[0] = a;
|
||||
SetDParam(0, a);
|
||||
if (a.engine_id != _last_engine[0]) {
|
||||
_last_engine[0] = a.engine_id;
|
||||
SetDParam(0, a.engine_id);
|
||||
GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0]));
|
||||
}
|
||||
|
||||
if (b != _last_engine[1]) {
|
||||
_last_engine[1] = b;
|
||||
SetDParam(0, b);
|
||||
if (b.engine_id != _last_engine[1]) {
|
||||
_last_engine[1] = b.engine_id;
|
||||
SetDParam(0, b.engine_id);
|
||||
GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1]));
|
||||
}
|
||||
|
||||
@@ -168,10 +168,10 @@ static bool EngineNameSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineReliabilitySorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineReliabilitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
const int va = Engine::Get(a)->reliability;
|
||||
const int vb = Engine::Get(b)->reliability;
|
||||
const int va = Engine::Get(a.engine_id)->reliability;
|
||||
const int vb = Engine::Get(b.engine_id)->reliability;
|
||||
const int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -185,10 +185,10 @@ static bool EngineReliabilitySorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineCostSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineCostSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
Money va = Engine::Get(a)->GetCost();
|
||||
Money vb = Engine::Get(b)->GetCost();
|
||||
Money va = Engine::Get(a.engine_id)->GetCost();
|
||||
Money vb = Engine::Get(b.engine_id)->GetCost();
|
||||
int r = ClampToI32(va - vb);
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -202,10 +202,10 @@ static bool EngineCostSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineSpeedSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineSpeedSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
int va = Engine::Get(a)->GetDisplayMaxSpeed();
|
||||
int vb = Engine::Get(b)->GetDisplayMaxSpeed();
|
||||
int va = Engine::Get(a.engine_id)->GetDisplayMaxSpeed();
|
||||
int vb = Engine::Get(b.engine_id)->GetDisplayMaxSpeed();
|
||||
int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -219,10 +219,10 @@ static bool EngineSpeedSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EnginePowerSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EnginePowerSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
int va = Engine::Get(a)->GetPower();
|
||||
int vb = Engine::Get(b)->GetPower();
|
||||
int va = Engine::Get(a.engine_id)->GetPower();
|
||||
int vb = Engine::Get(b.engine_id)->GetPower();
|
||||
int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -236,10 +236,10 @@ static bool EnginePowerSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineTractiveEffortSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineTractiveEffortSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
int va = Engine::Get(a)->GetDisplayMaxTractiveEffort();
|
||||
int vb = Engine::Get(b)->GetDisplayMaxTractiveEffort();
|
||||
int va = Engine::Get(a.engine_id)->GetDisplayMaxTractiveEffort();
|
||||
int vb = Engine::Get(b.engine_id)->GetDisplayMaxTractiveEffort();
|
||||
int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -253,10 +253,10 @@ static bool EngineTractiveEffortSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EngineRunningCostSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EngineRunningCostSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
Money va = Engine::Get(a)->GetRunningCost();
|
||||
Money vb = Engine::Get(b)->GetRunningCost();
|
||||
Money va = Engine::Get(a.engine_id)->GetRunningCost();
|
||||
Money vb = Engine::Get(b.engine_id)->GetRunningCost();
|
||||
int r = ClampToI32(va - vb);
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -270,10 +270,10 @@ static bool EngineRunningCostSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool EnginePowerVsRunningCostSorter(const EngineID &a, const EngineID &b)
|
||||
static bool EnginePowerVsRunningCostSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
const Engine *e_a = Engine::Get(a);
|
||||
const Engine *e_b = Engine::Get(b);
|
||||
const Engine *e_a = Engine::Get(a.engine_id);
|
||||
const Engine *e_b = Engine::Get(b.engine_id);
|
||||
uint p_a = e_a->GetPower();
|
||||
uint p_b = e_b->GetPower();
|
||||
Money r_a = e_a->GetRunningCost();
|
||||
@@ -312,13 +312,13 @@ static bool EnginePowerVsRunningCostSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool TrainEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
||||
static bool TrainEngineCapacitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
const RailVehicleInfo *rvi_a = RailVehInfo(a);
|
||||
const RailVehicleInfo *rvi_b = RailVehInfo(b);
|
||||
const RailVehicleInfo *rvi_a = RailVehInfo(a.engine_id);
|
||||
const RailVehicleInfo *rvi_b = RailVehInfo(b.engine_id);
|
||||
|
||||
int va = GetTotalCapacityOfArticulatedParts(a) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
||||
int vb = GetTotalCapacityOfArticulatedParts(b) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
||||
int va = GetTotalCapacityOfArticulatedParts(a.engine_id) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
||||
int vb = GetTotalCapacityOfArticulatedParts(b.engine_id) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
||||
int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -332,10 +332,10 @@ static bool TrainEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool TrainEnginesThenWagonsSorter(const EngineID &a, const EngineID &b)
|
||||
static bool TrainEnginesThenWagonsSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
int val_a = (RailVehInfo(a)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
||||
int val_b = (RailVehInfo(b)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
||||
int val_a = (RailVehInfo(a.engine_id)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
||||
int val_b = (RailVehInfo(b.engine_id)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
||||
int r = val_a - val_b;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -351,10 +351,10 @@ static bool TrainEnginesThenWagonsSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool RoadVehEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
||||
static bool RoadVehEngineCapacitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
int va = GetTotalCapacityOfArticulatedParts(a);
|
||||
int vb = GetTotalCapacityOfArticulatedParts(b);
|
||||
int va = GetTotalCapacityOfArticulatedParts(a.engine_id);
|
||||
int vb = GetTotalCapacityOfArticulatedParts(b.engine_id);
|
||||
int r = va - vb;
|
||||
|
||||
/* Use EngineID to sort instead since we want consistent sorting */
|
||||
@@ -370,10 +370,10 @@ static bool RoadVehEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool ShipEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
||||
static bool ShipEngineCapacitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
const Engine *e_a = Engine::Get(a);
|
||||
const Engine *e_b = Engine::Get(b);
|
||||
const Engine *e_a = Engine::Get(a.engine_id);
|
||||
const Engine *e_b = Engine::Get(b.engine_id);
|
||||
|
||||
int va = e_a->GetDisplayDefaultCapacity();
|
||||
int vb = e_b->GetDisplayDefaultCapacity();
|
||||
@@ -392,10 +392,10 @@ static bool ShipEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool AircraftEngineCargoSorter(const EngineID &a, const EngineID &b)
|
||||
static bool AircraftEngineCargoSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
const Engine *e_a = Engine::Get(a);
|
||||
const Engine *e_b = Engine::Get(b);
|
||||
const Engine *e_a = Engine::Get(a.engine_id);
|
||||
const Engine *e_b = Engine::Get(b.engine_id);
|
||||
|
||||
uint16 mail_a, mail_b;
|
||||
int va = e_a->GetDisplayDefaultCapacity(&mail_a);
|
||||
@@ -420,10 +420,10 @@ static bool AircraftEngineCargoSorter(const EngineID &a, const EngineID &b)
|
||||
* @param b second engine to compare
|
||||
* @return for descending order: returns true if a < b. Vice versa for ascending order
|
||||
*/
|
||||
static bool AircraftRangeSorter(const EngineID &a, const EngineID &b)
|
||||
static bool AircraftRangeSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
|
||||
{
|
||||
uint16 r_a = Engine::Get(a)->GetRange();
|
||||
uint16 r_b = Engine::Get(b)->GetRange();
|
||||
uint16 r_a = Engine::Get(a.engine_id)->GetRange();
|
||||
uint16 r_b = Engine::Get(b.engine_id)->GetRange();
|
||||
|
||||
int r = r_a - r_b;
|
||||
|
||||
@@ -537,14 +537,14 @@ const StringID _engine_sort_listing[][12] = {{
|
||||
}};
|
||||
|
||||
/** Filters vehicles by cargo and engine (in case of rail vehicle). */
|
||||
static bool CDECL CargoAndEngineFilter(const EngineID *eid, const CargoID cid)
|
||||
static bool CDECL CargoAndEngineFilter(const GUIEngineListItem *item, const CargoID cid)
|
||||
{
|
||||
if (cid == CF_ANY) {
|
||||
return true;
|
||||
} else if (cid == CF_ENGINES) {
|
||||
return Engine::Get(*eid)->GetPower() != 0;
|
||||
return Engine::Get(item->engine_id)->GetPower() != 0;
|
||||
} else {
|
||||
CargoTypes refit_mask = GetUnionOfArticulatedRefitMasks(*eid, true) & _standard_cargo_mask;
|
||||
CargoTypes refit_mask = GetUnionOfArticulatedRefitMasks(item->engine_id, true) & _standard_cargo_mask;
|
||||
return (cid == CF_NONE ? refit_mask == 0 : HasBit(refit_mask, cid));
|
||||
}
|
||||
}
|
||||
@@ -553,18 +553,29 @@ static GUIEngineList::FilterFunction * const _filter_funcs[] = {
|
||||
&CargoAndEngineFilter,
|
||||
};
|
||||
|
||||
static int DrawCargoCapacityInfo(int left, int right, int y, EngineID engine, TestedEngineDetails &te)
|
||||
static uint GetCargoWeight(const CargoArray &cap, VehicleType vtype)
|
||||
{
|
||||
CargoArray cap;
|
||||
CargoTypes refits;
|
||||
GetArticulatedVehicleCargoesAndRefits(engine, &cap, &refits, te.cargo, te.capacity);
|
||||
|
||||
uint weight = 0;
|
||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||
if (cap[c] == 0) continue;
|
||||
if (cap[c] != 0) {
|
||||
if (vtype == VEH_TRAIN) {
|
||||
weight += CargoSpec::Get(c)->WeightOfNUnitsInTrain(cap[c]);
|
||||
} else {
|
||||
weight += CargoSpec::Get(c)->WeightOfNUnits(cap[c]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return weight;
|
||||
}
|
||||
|
||||
static int DrawCargoCapacityInfo(int left, int right, int y, TestedEngineDetails &te, bool refittable)
|
||||
{
|
||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||
if (te.all_capacities[c] == 0) continue;
|
||||
|
||||
SetDParam(0, c);
|
||||
SetDParam(1, cap[c]);
|
||||
SetDParam(2, HasBit(refits, c) ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY);
|
||||
SetDParam(1, te.all_capacities[c]);
|
||||
SetDParam(2, refittable ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY);
|
||||
DrawString(left, right, y, STR_PURCHASE_INFO_CAPACITY);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
}
|
||||
@@ -591,8 +602,7 @@ static int DrawRailWagonPurchaseInfo(int left, int right, int y, EngineID engine
|
||||
/* Wagon weight - (including cargo) */
|
||||
uint weight = e->GetDisplayWeight();
|
||||
SetDParam(0, weight);
|
||||
uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(te.cargo)->WeightOfNUnitsInTrain(te.capacity) : 0);
|
||||
SetDParam(1, cargo_weight + weight);
|
||||
SetDParam(1, GetCargoWeight(te.all_capacities, VEH_TRAIN) + weight);
|
||||
DrawString(left, right, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
|
||||
@@ -685,8 +695,7 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n
|
||||
/* Road vehicle weight - (including cargo) */
|
||||
int16 weight = e->GetDisplayWeight();
|
||||
SetDParam(0, weight);
|
||||
uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(te.cargo)->WeightOfNUnits(te.capacity) : 0);
|
||||
SetDParam(1, cargo_weight + weight);
|
||||
SetDParam(1, GetCargoWeight(te.all_capacities, VEH_ROAD) + weight);
|
||||
DrawString(left, right, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
|
||||
@@ -868,6 +877,21 @@ static uint ShowAdditionalText(int left, int right, int y, EngineID engine)
|
||||
return result;
|
||||
}
|
||||
|
||||
void TestedEngineDetails::FillDefaultCapacities(const Engine *e)
|
||||
{
|
||||
this->cargo = e->GetDefaultCargoType();
|
||||
if (e->type == VEH_TRAIN || e->type == VEH_ROAD) {
|
||||
this->all_capacities = GetCapacityOfArticulatedParts(e->index);
|
||||
this->capacity = this->all_capacities[this->cargo];
|
||||
this->mail_capacity = 0;
|
||||
} else {
|
||||
this->capacity = e->GetDisplayDefaultCapacity(&this->mail_capacity);
|
||||
this->all_capacities[this->cargo] = this->capacity;
|
||||
this->all_capacities[CT_MAIL] = this->mail_capacity;
|
||||
}
|
||||
if (this->all_capacities.GetCount() == 0) this->cargo = CT_INVALID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the purchase info details of a vehicle at a given location.
|
||||
* @param left,right,y location where to draw the info
|
||||
@@ -909,7 +933,7 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number,
|
||||
|
||||
if (articulated_cargo) {
|
||||
/* Cargo type + capacity, or N/A */
|
||||
int new_y = DrawCargoCapacityInfo(left, right, y, engine_number, te);
|
||||
int new_y = DrawCargoCapacityInfo(left, right, y, te, refittable);
|
||||
|
||||
if (new_y == y) {
|
||||
SetDParam(0, CT_INVALID);
|
||||
@@ -962,21 +986,22 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number,
|
||||
* @param show_count Whether to show the amount of engines or not
|
||||
* @param selected_group the group to list the engines of
|
||||
*/
|
||||
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group)
|
||||
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group)
|
||||
{
|
||||
static const int sprite_y_offsets[] = { -1, -1, -2, -2 };
|
||||
|
||||
/* Obligatory sanity checks! */
|
||||
assert(max <= eng_list->size());
|
||||
assert(max <= eng_list.size());
|
||||
|
||||
bool rtl = _current_text_dir == TD_RTL;
|
||||
int step_size = GetEngineListHeight(type);
|
||||
int sprite_left = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_left;
|
||||
int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right;
|
||||
int sprite_width = sprite_left + sprite_right;
|
||||
int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width);
|
||||
int linecolour = _colour_gradient[COLOUR_ORANGE][4];
|
||||
|
||||
Rect ir = r.WithHeight(step_size).Shrink(WidgetDimensions::scaled.matrix);
|
||||
int sprite_x = ir.WithWidth(sprite_width, rtl).left + sprite_left;
|
||||
int sprite_y_offset = ScaleSpriteTrad(sprite_y_offsets[type]) + ir.Height() / 2;
|
||||
|
||||
Dimension replace_icon = {0, 0};
|
||||
@@ -987,7 +1012,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_li
|
||||
count_width = GetStringBoundingBox(STR_TINY_BLACK_COMA).width;
|
||||
}
|
||||
|
||||
Rect tr = ir.Indent(sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position
|
||||
Rect tr = ir.Indent(circle_width + WidgetDimensions::scaled.hsep_normal + sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position
|
||||
Rect cr = tr.Indent(replace_icon.width + WidgetDimensions::scaled.hsep_wide, !rtl).WithWidth(count_width, !rtl); // Count position
|
||||
Rect rr = tr.WithWidth(replace_icon.width, !rtl); // Replace icon position
|
||||
if (show_count) tr = tr.Indent(count_width + WidgetDimensions::scaled.hsep_normal + replace_icon.width + WidgetDimensions::scaled.hsep_wide, !rtl);
|
||||
@@ -998,22 +1023,40 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_li
|
||||
|
||||
int y = ir.top;
|
||||
for (; min < max; min++, y += step_size) {
|
||||
const EngineID engine = (*eng_list)[min];
|
||||
const auto &item = eng_list[min];
|
||||
uint indent = item.indent * WidgetDimensions::scaled.hsep_indent;
|
||||
bool has_variants = (item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None;
|
||||
bool is_folded = (item.flags & EngineDisplayFlags::IsFolded) != EngineDisplayFlags::None;
|
||||
bool shaded = (item.flags & EngineDisplayFlags::Shaded) != EngineDisplayFlags::None;
|
||||
/* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_company here. */
|
||||
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, engine);
|
||||
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, item.engine_id);
|
||||
|
||||
const Engine *e = Engine::Get(engine);
|
||||
const Engine *e = Engine::Get(item.engine_id);
|
||||
bool hidden = HasBit(e->company_hidden, _local_company);
|
||||
StringID str = hidden ? STR_HIDDEN_ENGINE_NAME : STR_ENGINE_NAME;
|
||||
TextColour tc = (engine == selected_id) ? TC_WHITE : (TC_NO_SHADE | (hidden ? TC_GREY : TC_BLACK));
|
||||
TextColour tc = (item.engine_id == selected_id) ? TC_WHITE : (TC_NO_SHADE | ((hidden | shaded) ? TC_GREY : TC_BLACK));
|
||||
|
||||
SetDParam(0, engine);
|
||||
DrawString(tr.left, tr.right, y + normal_text_y_offset, str, tc);
|
||||
DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, engine, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_company), EIT_PURCHASE);
|
||||
SetDParam(0, item.engine_id);
|
||||
Rect itr = tr.Indent(indent, rtl);
|
||||
DrawString(itr.left, itr.right, y + normal_text_y_offset, str, tc);
|
||||
int sprite_x = ir.Indent(indent + circle_width + WidgetDimensions::scaled.hsep_normal, rtl).WithWidth(sprite_width, rtl).left + sprite_left;
|
||||
DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, item.engine_id, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(item.engine_id, _local_company), EIT_PURCHASE);
|
||||
if (show_count) {
|
||||
SetDParam(0, num_engines);
|
||||
DrawString(cr.left, cr.right, y + small_text_y_offset, STR_TINY_BLACK_COMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
|
||||
if (EngineHasReplacementForCompany(Company::Get(_local_company), engine, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset);
|
||||
if (EngineHasReplacementForCompany(Company::Get(_local_company), item.engine_id, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset);
|
||||
}
|
||||
if (has_variants) {
|
||||
Rect fr = ir.Indent(indent, rtl).WithWidth(circle_width, rtl);
|
||||
DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, y, fr.right, y + ir.Height() - 1}, false, SA_CENTER);
|
||||
}
|
||||
if (indent > 0) {
|
||||
/* Draw tree lines */
|
||||
Rect fr = ir.Indent(indent - WidgetDimensions::scaled.hsep_indent, rtl).WithWidth(circle_width, rtl);
|
||||
int ycenter = y + normal_text_y_offset + FONT_HEIGHT_NORMAL / 2;
|
||||
bool continues = (min + 1U) < eng_list.size() && eng_list[min + 1].indent == item.indent;
|
||||
GfxDrawLine(fr.left + circle_width / 2, y - WidgetDimensions::scaled.matrix.top, fr.left + circle_width / 2, continues ? y - WidgetDimensions::scaled.matrix.top + step_size - 1 : ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top);
|
||||
GfxDrawLine(fr.left + circle_width / 2, ycenter, fr.right, ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1078,6 +1121,27 @@ struct BuildVehicleWindow : Window {
|
||||
}
|
||||
}
|
||||
|
||||
void AddChildren(const GUIEngineList &source, EngineID parent, int indent)
|
||||
{
|
||||
for (const auto &item : source) {
|
||||
if (item.variant_id != parent || item.engine_id == parent) continue;
|
||||
|
||||
const Engine *e = Engine::Get(item.engine_id);
|
||||
EngineDisplayFlags flags = item.flags;
|
||||
if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded;
|
||||
this->eng_list.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent);
|
||||
|
||||
/* Add variants if not folded */
|
||||
if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) {
|
||||
/* Add this engine again as a child */
|
||||
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) {
|
||||
this->eng_list.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1);
|
||||
}
|
||||
AddChildren(source, item.engine_id, indent + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc)
|
||||
{
|
||||
this->vehicle_type = type;
|
||||
@@ -1123,12 +1187,12 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
this->eng_list.ForceRebuild();
|
||||
this->GenerateBuildList(); // generate the list, since we need it in the next line
|
||||
/* Select the first engine in the list as default when opening the window */
|
||||
if (this->eng_list.size() > 0) {
|
||||
this->SelectEngine(this->eng_list[0]);
|
||||
} else {
|
||||
this->SelectEngine(INVALID_ENGINE);
|
||||
}
|
||||
|
||||
/* Select the first unshaded engine in the list as default when opening the window */
|
||||
EngineID engine = INVALID_ENGINE;
|
||||
auto it = std::find_if(this->eng_list.begin(), this->eng_list.end(), [&](GUIEngineListItem &item){ return (item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None; });
|
||||
if (it != this->eng_list.end()) engine = it->engine_id;
|
||||
this->SelectEngine(engine);
|
||||
}
|
||||
|
||||
/** Set the filter type according to the depot type */
|
||||
@@ -1221,28 +1285,23 @@ struct BuildVehicleWindow : Window {
|
||||
if (this->sel_engine == INVALID_ENGINE) return;
|
||||
|
||||
const Engine *e = Engine::Get(this->sel_engine);
|
||||
if (!e->CanCarryCargo()) {
|
||||
this->te.cost = 0;
|
||||
this->te.cargo = CT_INVALID;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this->listview_mode) {
|
||||
/* Query for cost and refitted capacity */
|
||||
auto [ret, veh_id, refit_capacity, refit_mail] = Command<CMD_BUILD_VEHICLE>::Do(DC_QUERY_COST, this->window_number, this->sel_engine, true, cargo, INVALID_CLIENT_ID);
|
||||
auto [ret, veh_id, refit_capacity, refit_mail, cargo_capacities] = Command<CMD_BUILD_VEHICLE>::Do(DC_QUERY_COST, this->window_number, this->sel_engine, true, cargo, INVALID_CLIENT_ID);
|
||||
if (ret.Succeeded()) {
|
||||
this->te.cost = ret.GetCost() - e->GetCost();
|
||||
this->te.capacity = refit_capacity;
|
||||
this->te.mail_capacity = refit_mail;
|
||||
this->te.cargo = (cargo == CT_INVALID) ? e->GetDefaultCargoType() : cargo;
|
||||
this->te.all_capacities = cargo_capacities;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Purchase test was not possible or failed, fill in the defaults instead. */
|
||||
this->te.cost = 0;
|
||||
this->te.capacity = e->GetDisplayDefaultCapacity(&this->te.mail_capacity);
|
||||
this->te.cargo = e->GetDefaultCargoType();
|
||||
this->te.FillDefaultCapacities(e);
|
||||
}
|
||||
|
||||
void OnInit() override
|
||||
@@ -1257,7 +1316,7 @@ struct BuildVehicleWindow : Window {
|
||||
if (0 == this->eng_list.size()) { // no engine passed through the filter, invalidate the previously selected engine
|
||||
this->SelectEngine(INVALID_ENGINE);
|
||||
} else if (std::find(this->eng_list.begin(), this->eng_list.end(), this->sel_engine) == this->eng_list.end()) { // previously selected engine didn't pass the filter, select the first engine of the list
|
||||
this->SelectEngine(this->eng_list[0]);
|
||||
this->SelectEngine(this->eng_list[0].engine_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1265,17 +1324,18 @@ struct BuildVehicleWindow : Window {
|
||||
bool FilterSingleEngine(EngineID eid)
|
||||
{
|
||||
CargoID filter_type = this->cargo_filter[this->cargo_filter_criteria];
|
||||
return CargoAndEngineFilter(&eid, filter_type);
|
||||
GUIEngineListItem item = {eid, eid, EngineDisplayFlags::None, 0};
|
||||
return CargoAndEngineFilter(&item, filter_type);
|
||||
}
|
||||
|
||||
/* Figure out what train EngineIDs to put in the list */
|
||||
void GenerateBuildTrainList()
|
||||
void GenerateBuildTrainList(GUIEngineList &list)
|
||||
{
|
||||
std::vector<EngineID> variants;
|
||||
EngineID sel_id = INVALID_ENGINE;
|
||||
int num_engines = 0;
|
||||
int num_wagons = 0;
|
||||
size_t num_engines = 0;
|
||||
|
||||
this->eng_list.clear();
|
||||
list.clear();
|
||||
|
||||
/* Make list of all available train engines and wagons.
|
||||
* Also check to see if the previously selected engine is still available,
|
||||
@@ -1292,17 +1352,22 @@ struct BuildVehicleWindow : Window {
|
||||
/* Filter now! So num_engines and num_wagons is valid */
|
||||
if (!FilterSingleEngine(eid)) continue;
|
||||
|
||||
this->eng_list.push_back(eid);
|
||||
|
||||
if (rvi->railveh_type != RAILVEH_WAGON) {
|
||||
num_engines++;
|
||||
} else {
|
||||
num_wagons++;
|
||||
}
|
||||
list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
||||
|
||||
if (rvi->railveh_type != RAILVEH_WAGON) num_engines++;
|
||||
if (e->info.variant_id != eid && e->info.variant_id != INVALID_ENGINE) variants.push_back(e->info.variant_id);
|
||||
if (eid == this->sel_engine) sel_id = eid;
|
||||
}
|
||||
|
||||
/* ensure primary engine of variant group is in list */
|
||||
for (const auto &variant : variants) {
|
||||
if (std::find(list.begin(), list.end(), variant) == list.end()) {
|
||||
const Engine *e = Engine::Get(variant);
|
||||
list.emplace_back(variant, e->info.variant_id, e->display_flags | EngineDisplayFlags::Shaded, 0);
|
||||
if (e->u.rail.railveh_type != RAILVEH_WAGON) num_engines++;
|
||||
}
|
||||
}
|
||||
|
||||
this->SelectEngine(sel_id);
|
||||
|
||||
/* invalidate cached values for name sorter - engine names could change */
|
||||
@@ -1310,14 +1375,14 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
/* make engines first, and then wagons, sorted by selected sort_criteria */
|
||||
_engine_sort_direction = false;
|
||||
EngList_Sort(&this->eng_list, TrainEnginesThenWagonsSorter);
|
||||
EngList_Sort(&list, TrainEnginesThenWagonsSorter);
|
||||
|
||||
/* and then sort engines */
|
||||
_engine_sort_direction = this->descending_sort_order;
|
||||
EngList_SortPartial(&this->eng_list, _engine_sort_functions[0][this->sort_criteria], 0, num_engines);
|
||||
EngList_SortPartial(&list, _engine_sort_functions[0][this->sort_criteria], 0, num_engines);
|
||||
|
||||
/* and finally sort wagons */
|
||||
EngList_SortPartial(&this->eng_list, _engine_sort_functions[0][this->sort_criteria], num_engines, num_wagons);
|
||||
EngList_SortPartial(&list, _engine_sort_functions[0][this->sort_criteria], num_engines, list.size() - num_engines);
|
||||
}
|
||||
|
||||
/* Figure out what road vehicle EngineIDs to put in the list */
|
||||
@@ -1333,7 +1398,7 @@ struct BuildVehicleWindow : Window {
|
||||
if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue;
|
||||
if (this->filter.roadtype != INVALID_ROADTYPE && !HasPowerOnRoad(e->u.road.roadtype, this->filter.roadtype)) continue;
|
||||
|
||||
this->eng_list.push_back(eid);
|
||||
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
||||
|
||||
if (eid == this->sel_engine) sel_id = eid;
|
||||
}
|
||||
@@ -1350,7 +1415,7 @@ struct BuildVehicleWindow : Window {
|
||||
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
||||
EngineID eid = e->index;
|
||||
if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue;
|
||||
this->eng_list.push_back(eid);
|
||||
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
||||
|
||||
if (eid == this->sel_engine) sel_id = eid;
|
||||
}
|
||||
@@ -1377,7 +1442,7 @@ struct BuildVehicleWindow : Window {
|
||||
/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
|
||||
if (!this->listview_mode && !CanVehicleUseStation(eid, st)) continue;
|
||||
|
||||
this->eng_list.push_back(eid);
|
||||
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
||||
if (eid == this->sel_engine) sel_id = eid;
|
||||
}
|
||||
|
||||
@@ -1392,13 +1457,18 @@ struct BuildVehicleWindow : Window {
|
||||
/* Update filter type in case the road/railtype of the depot got converted */
|
||||
this->UpdateFilterByTile();
|
||||
|
||||
this->eng_list.clear();
|
||||
|
||||
GUIEngineList list;
|
||||
|
||||
switch (this->vehicle_type) {
|
||||
default: NOT_REACHED();
|
||||
case VEH_TRAIN:
|
||||
this->GenerateBuildTrainList();
|
||||
this->GenerateBuildTrainList(list);
|
||||
AddChildren(list, INVALID_ENGINE, 0);
|
||||
this->eng_list.shrink_to_fit();
|
||||
this->eng_list.RebuildDone();
|
||||
return; // trains should not reach the last sorting
|
||||
return;
|
||||
case VEH_ROAD:
|
||||
this->GenerateBuildRoadVehList();
|
||||
break;
|
||||
@@ -1412,9 +1482,23 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
this->FilterEngineList();
|
||||
|
||||
/* ensure primary engine of variant group is in list after filtering */
|
||||
std::vector<EngineID> variants;
|
||||
for (const auto &item : this->eng_list) {
|
||||
if (item.engine_id != item.variant_id && item.variant_id != INVALID_ENGINE) variants.push_back(item.variant_id);
|
||||
}
|
||||
for (const auto &variant : variants) {
|
||||
if (std::find(this->eng_list.begin(), this->eng_list.end(), variant) == this->eng_list.end()) {
|
||||
const Engine *e = Engine::Get(variant);
|
||||
this->eng_list.emplace_back(variant, e->info.variant_id, e->display_flags | EngineDisplayFlags::Shaded, 0);
|
||||
}
|
||||
}
|
||||
|
||||
_engine_sort_direction = this->descending_sort_order;
|
||||
EngList_Sort(&this->eng_list, _engine_sort_functions[this->vehicle_type][this->sort_criteria]);
|
||||
|
||||
this->eng_list.swap(list);
|
||||
AddChildren(list, INVALID_ENGINE, 0);
|
||||
this->eng_list.shrink_to_fit();
|
||||
this->eng_list.RebuildDone();
|
||||
}
|
||||
@@ -1440,7 +1524,23 @@ struct BuildVehicleWindow : Window {
|
||||
case WID_BV_LIST: {
|
||||
uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_BV_LIST);
|
||||
size_t num_items = this->eng_list.size();
|
||||
this->SelectEngine((i < num_items) ? this->eng_list[i] : INVALID_ENGINE);
|
||||
EngineID e = INVALID_ENGINE;
|
||||
if (i < num_items) {
|
||||
const auto &item = this->eng_list[i];
|
||||
const Rect r = this->GetWidget<NWidgetBase>(widget)->GetCurrentRect().Shrink(WidgetDimensions::scaled.matrix).WithWidth(WidgetDimensions::scaled.hsep_indent * (item.indent + 1), _current_text_dir == TD_RTL);
|
||||
if ((item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None && IsInsideMM(r.left, r.right, pt.x)) {
|
||||
/* toggle folded flag on engine */
|
||||
assert(item.variant_id != INVALID_ENGINE);
|
||||
Engine *engine = Engine::Get(item.variant_id);
|
||||
engine->display_flags ^= EngineDisplayFlags::IsFolded;
|
||||
|
||||
InvalidateWindowData(WC_REPLACE_VEHICLE, this->vehicle_type, 0); // Update the autoreplace window
|
||||
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
|
||||
return;
|
||||
}
|
||||
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) e = item.engine_id;
|
||||
}
|
||||
this->SelectEngine(e);
|
||||
this->SetDirty();
|
||||
if (_ctrl_pressed) {
|
||||
this->OnClick(pt, WID_BV_SHOW_HIDE, 1);
|
||||
@@ -1476,6 +1576,20 @@ struct BuildVehicleWindow : Window {
|
||||
} else {
|
||||
Command<CMD_BUILD_VEHICLE>::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildPrimaryVehicle, this->window_number, sel_eng, true, cargo, INVALID_CLIENT_ID);
|
||||
}
|
||||
|
||||
/* Update last used variant and refresh if necessary. */
|
||||
bool refresh = false;
|
||||
int recursion = 10; /* In case of infinite loop */
|
||||
for (Engine *e = Engine::Get(sel_eng); recursion > 0; e = Engine::Get(e->info.variant_id), --recursion) {
|
||||
refresh |= (e->display_last_variant != sel_eng);
|
||||
e->display_last_variant = sel_eng;
|
||||
if (e->info.variant_id == INVALID_ENGINE) break;
|
||||
}
|
||||
if (refresh) {
|
||||
InvalidateWindowData(WC_REPLACE_VEHICLE, this->vehicle_type, 0); // Update the autoreplace window
|
||||
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1589,7 +1703,7 @@ struct BuildVehicleWindow : Window {
|
||||
DrawEngineList(
|
||||
this->vehicle_type,
|
||||
r,
|
||||
&this->eng_list,
|
||||
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,
|
||||
|
||||
@@ -331,6 +331,7 @@ enum Commands : uint16 {
|
||||
|
||||
CMD_MOVE_ORDER, ///< move an order
|
||||
CMD_CHANGE_TIMETABLE, ///< change the timetable for a vehicle
|
||||
CMD_BULK_CHANGE_TIMETABLE, ///< change the timetable for all orders of a vehicle
|
||||
CMD_SET_VEHICLE_ON_TIME, ///< set the vehicle on time feature (timetable)
|
||||
CMD_AUTOFILL_TIMETABLE, ///< autofill the timetable
|
||||
CMD_SET_TIMETABLE_START, ///< set the date that a timetable should start
|
||||
|
||||
+2
-1
@@ -560,7 +560,8 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
|
||||
ResetCompanyLivery(c);
|
||||
_company_colours[c->index] = (Colours)c->colour;
|
||||
|
||||
c->money = c->current_loan = (std::min<int64>(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000;
|
||||
/* Scale the initial loan based on the inflation rounded down to the loan interval. The maximum loan has already been inflation adjusted. */
|
||||
c->money = c->current_loan = std::min<int64>((INITIAL_LOAN * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL, _economy.max_loan);
|
||||
|
||||
std::fill(c->share_owners.begin(), c->share_owners.end(), INVALID_OWNER);
|
||||
|
||||
|
||||
+80
-2
@@ -23,6 +23,7 @@
|
||||
#include "settings_func.h"
|
||||
#include "fios.h"
|
||||
#include "fileio_func.h"
|
||||
#include "fontcache.h"
|
||||
#include "screenshot.h"
|
||||
#include "genworld.h"
|
||||
#include "strings_func.h"
|
||||
@@ -453,8 +454,8 @@ DEF_CONSOLE_CMD(ConRemove)
|
||||
_console_file_list.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
if (item != nullptr) {
|
||||
if (!FiosDelete(item->name)) {
|
||||
IConsolePrint(CC_ERROR, "Failed to delete '{}'.", file);
|
||||
if (unlink(item->name) != 0) {
|
||||
IConsolePrint(CC_ERROR, "Failed to delete '{}'.", item->name);
|
||||
}
|
||||
} else {
|
||||
IConsolePrint(CC_ERROR, "'{}' could not be found.", file);
|
||||
@@ -1982,6 +1983,82 @@ DEF_CONSOLE_CMD(ConContent)
|
||||
}
|
||||
#endif /* defined(WITH_ZLIB) */
|
||||
|
||||
DEF_CONSOLE_CMD(ConFont)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsolePrint(CC_HELP, "Manage the fonts configuration.");
|
||||
IConsolePrint(CC_HELP, "Usage 'font'.");
|
||||
IConsolePrint(CC_HELP, " Print out the fonts configuration.");
|
||||
IConsolePrint(CC_HELP, "Usage 'font [medium|small|large|mono] [<name>] [<size>] [aa|noaa]'.");
|
||||
IConsolePrint(CC_HELP, " Change the configuration for a font.");
|
||||
IConsolePrint(CC_HELP, " Omitting an argument will keep the current value.");
|
||||
IConsolePrint(CC_HELP, " Set <name> to \"\" for the sprite font (size and aa have no effect on sprite font).");
|
||||
return true;
|
||||
}
|
||||
|
||||
FontSize argfs;
|
||||
for (argfs = FS_BEGIN; argfs < FS_END; argfs++) {
|
||||
if (argc > 1 && strcasecmp(argv[1], FontSizeToName(argfs)) == 0) break;
|
||||
}
|
||||
|
||||
/* First argument must be a FontSize. */
|
||||
if (argc > 1 && argfs == FS_END) return false;
|
||||
|
||||
if (argc > 2) {
|
||||
FontCacheSubSetting *setting = GetFontCacheSubSetting(argfs);
|
||||
std::string font = setting->font;
|
||||
uint size = setting->size;
|
||||
bool aa = setting->aa;
|
||||
|
||||
byte arg_index = 2;
|
||||
|
||||
if (argc > arg_index) {
|
||||
/* We may encounter "aa" or "noaa" but it must be the last argument. */
|
||||
if (strcasecmp(argv[arg_index], "aa") == 0 || strcasecmp(argv[arg_index], "noaa") == 0) {
|
||||
aa = strncasecmp(argv[arg_index++], "no", 2) != 0;
|
||||
if (argc > arg_index) return false;
|
||||
} else {
|
||||
/* For <name> we want a string. */
|
||||
uint v;
|
||||
if (!GetArgumentInteger(&v, argv[arg_index])) {
|
||||
font = argv[arg_index++];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (argc > arg_index) {
|
||||
/* For <size> we want a number. */
|
||||
uint v;
|
||||
if (GetArgumentInteger(&v, argv[arg_index])) {
|
||||
size = v;
|
||||
arg_index++;
|
||||
}
|
||||
}
|
||||
|
||||
if (argc > arg_index) {
|
||||
/* Last argument must be "aa" or "noaa". */
|
||||
if (strcasecmp(argv[arg_index], "aa") != 0 && strcasecmp(argv[arg_index], "noaa") != 0) return false;
|
||||
aa = strncasecmp(argv[arg_index++], "no", 2) != 0;
|
||||
if (argc > arg_index) return false;
|
||||
}
|
||||
|
||||
SetFont(argfs, font, size, aa);
|
||||
}
|
||||
|
||||
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
|
||||
FontCache *fc = FontCache::Get(fs);
|
||||
FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
|
||||
/* Make sure all non sprite fonts are loaded. */
|
||||
if (!setting->font.empty() && !fc->HasParent()) {
|
||||
InitFontCache(fs == FS_MONO);
|
||||
fc = FontCache::Get(fs);
|
||||
}
|
||||
IConsolePrint(CC_DEFAULT, "{}: \"{}\" {} {} [\"{}\" {} {}]", FontSizeToName(fs), fc->GetFontName(), fc->GetFontSize(), GetFontAAState(fs) ? "aa" : "noaa", setting->font, setting->size, setting->aa ? "aa" : "noaa");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConSetting)
|
||||
{
|
||||
if (argc == 0) {
|
||||
@@ -2480,6 +2557,7 @@ void IConsoleStdLibRegister()
|
||||
IConsole::CmdRegister("cd", ConChangeDirectory);
|
||||
IConsole::CmdRegister("pwd", ConPrintWorkingDirectory);
|
||||
IConsole::CmdRegister("clear", ConClearBuffer);
|
||||
IConsole::CmdRegister("font", ConFont);
|
||||
IConsole::CmdRegister("setting", ConSetting);
|
||||
IConsole::CmdRegister("setting_newgame", ConSettingNewgame);
|
||||
IConsole::CmdRegister("list_settings", ConListSettings);
|
||||
|
||||
@@ -176,6 +176,9 @@ public:
|
||||
inline constexpr bool operator <= (const int other) const { return !(*this > other); }
|
||||
|
||||
inline constexpr operator T () const { return this->m_value; }
|
||||
|
||||
static inline constexpr OverflowSafeInt<T> max() { return T_MAX; }
|
||||
static inline constexpr OverflowSafeInt<T> min() { return T_MIN; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -757,8 +757,8 @@ bool AddInflation(bool check_year)
|
||||
*/
|
||||
void RecomputePrices()
|
||||
{
|
||||
/* Setup maximum loan */
|
||||
_economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000;
|
||||
/* Setup maximum loan as a rounded down multiple of LOAN_INTERVAL. */
|
||||
_economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL;
|
||||
|
||||
/* Setup price bases */
|
||||
for (Price i = PR_BEGIN; i < PR_END; i++) {
|
||||
@@ -1494,7 +1494,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
|
||||
if (st->goods[cid].cargo.HasCargoFor(next_station)) {
|
||||
/* Try to find out if auto-refitting would succeed. In case the refit is allowed,
|
||||
* the returned refit capacity will be greater than zero. */
|
||||
auto [cc, refit_capacity, mail_capacity] = Command<CMD_REFIT_VEHICLE>::Do(DC_QUERY_COST, v_start->index, cid, 0xFF, true, false, 1); // Auto-refit and only this vehicle including artic parts.
|
||||
auto [cc, refit_capacity, mail_capacity, cargo_capacities] = Command<CMD_REFIT_VEHICLE>::Do(DC_QUERY_COST, v_start->index, cid, 0xFF, true, false, 1); // Auto-refit and only this vehicle including artic parts.
|
||||
/* Try to balance different loadable cargoes between parts of the consist, so that
|
||||
* all of them can be loaded. Avoid a situation where all vehicles suddenly switch
|
||||
* to the first loadable cargo for which there is only one packet. If the capacities
|
||||
|
||||
+6
-7
@@ -485,10 +485,11 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||
/*
|
||||
* The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
|
||||
* Therefore it is safe to use GetSlopePixelZ() for the elevation.
|
||||
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps.
|
||||
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps, so we round the result up or
|
||||
* down to the nearest full height change.
|
||||
*/
|
||||
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
|
||||
sss->x_size, sss->y_size, sss->z_size, GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_offset,
|
||||
sss->x_size, sss->y_size, sss->z_size, (GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + 4) / 8 * 8 + sss->z_offset,
|
||||
IsTransparencySet(TO_CATENARY));
|
||||
}
|
||||
}
|
||||
@@ -596,16 +597,14 @@ void SettingsDisableElrail(int32 new_value)
|
||||
{
|
||||
bool disable = (new_value != 0);
|
||||
|
||||
/* we will now walk through all electric train engines and change their railtypes if it is the wrong one*/
|
||||
const RailType old_railtype = disable ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL;
|
||||
/* pick appropriate railtype for elrail engines depending on setting */
|
||||
const RailType new_railtype = disable ? RAILTYPE_RAIL : RAILTYPE_ELECTRIC;
|
||||
|
||||
/* walk through all train engines */
|
||||
for (Engine *e : Engine::IterateType(VEH_TRAIN)) {
|
||||
RailVehicleInfo *rv_info = &e->u.rail;
|
||||
/* if it is an electric rail engine and its railtype is the wrong one */
|
||||
if (rv_info->engclass == 2 && rv_info->railtype == old_railtype) {
|
||||
/* change it to the proper one */
|
||||
/* update railtype of engines intended to use elrail */
|
||||
if (rv_info->intended_railtype == RAILTYPE_ELECTRIC) {
|
||||
rv_info->railtype = new_railtype;
|
||||
}
|
||||
}
|
||||
|
||||
+77
-14
@@ -73,6 +73,7 @@ Engine::Engine(VehicleType type, EngineID base)
|
||||
this->grf_prop.local_id = base;
|
||||
this->list_position = base;
|
||||
this->preview_company = INVALID_COMPANY;
|
||||
this->display_last_variant = INVALID_ENGINE;
|
||||
|
||||
/* Check if this base engine is within the original engine data range */
|
||||
if (base >= _engine_counts[type]) {
|
||||
@@ -93,6 +94,8 @@ Engine::Engine(VehicleType type, EngineID base)
|
||||
}
|
||||
/* Set cargo aging period to the default value. */
|
||||
this->info.cargo_age_period = CARGO_AGING_TICKS;
|
||||
/* Not a variant */
|
||||
this->info.variant_id = INVALID_ENGINE;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -535,7 +538,7 @@ void SetupEngines()
|
||||
_engine_pool.CleanPool();
|
||||
|
||||
assert(_engine_mngr.size() >= _engine_mngr.NUM_DEFAULT_ENGINES);
|
||||
uint index = 0;
|
||||
[[maybe_unused]] uint index = 0;
|
||||
for (const EngineIDMapping &eid : _engine_mngr) {
|
||||
/* Assert is safe; there won't be more than 256 original vehicles
|
||||
* in any case, and we just cleaned the pool. */
|
||||
@@ -559,13 +562,32 @@ static bool IsWagon(EngineID index)
|
||||
return e->type == VEH_TRAIN && e->u.rail.railveh_type == RAILVEH_WAGON;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure engine is not set as the last used variant for any other engine.
|
||||
* @param engine_id Engine being removed.
|
||||
* @param type Type of engine.
|
||||
*/
|
||||
static void ClearLastVariant(EngineID engine_id, VehicleType type)
|
||||
{
|
||||
for (Engine *e : Engine::IterateType(type)) {
|
||||
if (e->display_last_variant == engine_id) e->display_last_variant = INVALID_ENGINE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update #Engine::reliability and (if needed) update the engine GUIs.
|
||||
* @param e %Engine to update.
|
||||
*/
|
||||
static void CalcEngineReliability(Engine *e)
|
||||
void CalcEngineReliability(Engine *e, bool new_month)
|
||||
{
|
||||
uint age = e->age;
|
||||
/* Get source engine for reliability age. This is normally our engine unless variant reliability syncing is requested. */
|
||||
Engine *re = e;
|
||||
while (re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
|
||||
re = Engine::Get(re->info.variant_id);
|
||||
}
|
||||
|
||||
uint age = re->age;
|
||||
if (new_month && re->index > e->index && age != MAX_DAY) age++; /* parent variant's age has not yet updated. */
|
||||
|
||||
/* Check for early retirement */
|
||||
if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) {
|
||||
@@ -574,6 +596,7 @@ static void CalcEngineReliability(Engine *e)
|
||||
if (retire_early != 0 && age >= retire_early_max_age) {
|
||||
/* Early retirement is enabled and we're past the date... */
|
||||
e->company_avail = 0;
|
||||
ClearLastVariant(e->index, e->type);
|
||||
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
|
||||
}
|
||||
}
|
||||
@@ -594,10 +617,10 @@ static void CalcEngineReliability(Engine *e)
|
||||
e->company_avail = 0;
|
||||
e->reliability = e->reliability_final;
|
||||
/* Kick this engine out of the lists */
|
||||
ClearLastVariant(e->index, e->type);
|
||||
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
|
||||
}
|
||||
SetWindowClassesDirty(WC_BUILD_VEHICLE); // Update to show the new reliability
|
||||
SetWindowClassesDirty(WC_REPLACE_VEHICLE);
|
||||
|
||||
}
|
||||
|
||||
/** Compute the value for #_year_engine_aging_stops. */
|
||||
@@ -625,8 +648,9 @@ void SetYearEngineAgingStops()
|
||||
* Start/initialise one engine.
|
||||
* @param e The engine to initialise.
|
||||
* @param aging_date The date used for age calculations.
|
||||
* @param seed Random seed.
|
||||
*/
|
||||
void StartupOneEngine(Engine *e, Date aging_date)
|
||||
void StartupOneEngine(Engine *e, Date aging_date, uint32 seed)
|
||||
{
|
||||
const EngineInfo *ei = &e->info;
|
||||
|
||||
@@ -639,7 +663,7 @@ void StartupOneEngine(Engine *e, Date aging_date)
|
||||
* Make sure they use the same randomisation of the date. */
|
||||
SavedRandomSeeds saved_seeds;
|
||||
SaveRandomSeeds(&saved_seeds);
|
||||
SetRandomSeed(_settings_game.game_creation.generation_seed ^
|
||||
SetRandomSeed(_settings_game.game_creation.generation_seed ^ seed ^
|
||||
ei->base_intro ^
|
||||
e->type ^
|
||||
e->GetGRFID());
|
||||
@@ -655,7 +679,17 @@ void StartupOneEngine(Engine *e, Date aging_date)
|
||||
e->flags |= ENGINE_AVAILABLE;
|
||||
}
|
||||
|
||||
RestoreRandomSeeds(saved_seeds);
|
||||
/* Get parent variant index for syncing reliability via random seed. */
|
||||
const Engine *re = e;
|
||||
while (re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
|
||||
re = Engine::Get(re->info.variant_id);
|
||||
}
|
||||
|
||||
SetRandomSeed(_settings_game.game_creation.generation_seed ^ seed ^
|
||||
(re->index << 16) ^ (re->info.base_intro << 12) ^ (re->info.decay_speed << 8) ^
|
||||
(re->info.lifelength << 4) ^ re->info.retire_early ^
|
||||
e->type ^
|
||||
e->GetGRFID());
|
||||
|
||||
r = Random();
|
||||
e->reliability_start = GB(r, 16, 14) + 0x7AE0;
|
||||
@@ -667,9 +701,9 @@ void StartupOneEngine(Engine *e, Date aging_date)
|
||||
e->duration_phase_2 = GB(r, 5, 4) + ei->base_life * 12 - 96;
|
||||
e->duration_phase_3 = GB(r, 9, 7) + 120;
|
||||
|
||||
e->reliability_spd_dec = ei->decay_speed << 2;
|
||||
RestoreRandomSeeds(saved_seeds);
|
||||
|
||||
CalcEngineReliability(e);
|
||||
e->reliability_spd_dec = ei->decay_speed << 2;
|
||||
|
||||
/* prevent certain engines from ever appearing. */
|
||||
if (!HasBit(ei->climates, _settings_game.game_creation.landscape)) {
|
||||
@@ -686,9 +720,13 @@ void StartupEngines()
|
||||
{
|
||||
/* Aging of vehicles stops, so account for that when starting late */
|
||||
const Date aging_date = std::min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1));
|
||||
uint32 seed = Random();
|
||||
|
||||
for (Engine *e : Engine::Iterate()) {
|
||||
StartupOneEngine(e, aging_date);
|
||||
StartupOneEngine(e, aging_date, seed);
|
||||
}
|
||||
for (Engine *e : Engine::Iterate()) {
|
||||
CalcEngineReliability(e, false);
|
||||
}
|
||||
|
||||
/* Update the bitmasks for the vehicle lists */
|
||||
@@ -699,6 +737,9 @@ void StartupEngines()
|
||||
|
||||
/* Invalidate any open purchase lists */
|
||||
InvalidateWindowClassesData(WC_BUILD_VEHICLE);
|
||||
|
||||
SetWindowClassesDirty(WC_BUILD_VEHICLE);
|
||||
SetWindowClassesDirty(WC_REPLACE_VEHICLE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -747,6 +788,7 @@ static void DisableEngineForCompany(EngineID eid, CompanyID company)
|
||||
}
|
||||
|
||||
if (company == _local_company) {
|
||||
ClearLastVariant(e->index, e->type);
|
||||
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
|
||||
}
|
||||
}
|
||||
@@ -755,8 +797,9 @@ static void DisableEngineForCompany(EngineID eid, CompanyID company)
|
||||
* Company \a company accepts engine \a eid for preview.
|
||||
* @param eid Engine being accepted (is under preview).
|
||||
* @param company Current company previewing the engine.
|
||||
* @param recursion_depth Recursion depth to avoid infinite loop.
|
||||
*/
|
||||
static void AcceptEnginePreview(EngineID eid, CompanyID company)
|
||||
static void AcceptEnginePreview(EngineID eid, CompanyID company, int recursion_depth = 0)
|
||||
{
|
||||
Engine *e = Engine::Get(eid);
|
||||
|
||||
@@ -771,6 +814,16 @@ static void AcceptEnginePreview(EngineID eid, CompanyID company)
|
||||
* we have to use the GUI-scope scheduling of InvalidateWindowData.
|
||||
*/
|
||||
InvalidateWindowData(WC_ENGINE_PREVIEW, eid);
|
||||
|
||||
/* Don't search for variants to include if we are 10 levels deep already. */
|
||||
if (recursion_depth >= 10) return;
|
||||
|
||||
/* Find variants to be included in preview. */
|
||||
for (Engine *ve : Engine::IterateType(e->type)) {
|
||||
if (ve->index != eid && ve->info.variant_id == eid && (ve->info.extra_flags & ExtraEngineFlags::JoinPreview) != ExtraEngineFlags::None) {
|
||||
AcceptEnginePreview(ve->index, company, recursion_depth + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -994,7 +1047,7 @@ static void NewVehicleAvailable(Engine *e)
|
||||
if (!IsVehicleTypeDisabled(e->type, true)) AI::BroadcastNewEvent(new ScriptEventEngineAvailable(index));
|
||||
|
||||
/* Only provide the "New Vehicle available" news paper entry, if engine can be built. */
|
||||
if (!IsVehicleTypeDisabled(e->type, false)) {
|
||||
if (!IsVehicleTypeDisabled(e->type, false) && (e->info.extra_flags & ExtraEngineFlags::NoNews) == ExtraEngineFlags::None) {
|
||||
SetDParam(0, GetEngineCategoryName(index));
|
||||
SetDParam(1, index);
|
||||
AddNewsItem(STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE, NT_NEW_VEHICLES, NF_VEHICLE, NR_ENGINE, index);
|
||||
@@ -1013,11 +1066,13 @@ static void NewVehicleAvailable(Engine *e)
|
||||
void EnginesMonthlyLoop()
|
||||
{
|
||||
if (_cur_year < _year_engine_aging_stops) {
|
||||
bool refresh = false;
|
||||
for (Engine *e : Engine::Iterate()) {
|
||||
/* Age the vehicle */
|
||||
if ((e->flags & ENGINE_AVAILABLE) && e->age != MAX_DAY) {
|
||||
e->age++;
|
||||
CalcEngineReliability(e);
|
||||
CalcEngineReliability(e, true);
|
||||
refresh = true;
|
||||
}
|
||||
|
||||
/* Do not introduce invalid engines */
|
||||
@@ -1036,6 +1091,9 @@ void EnginesMonthlyLoop()
|
||||
/* Do not introduce new rail wagons */
|
||||
if (IsWagon(e->index)) continue;
|
||||
|
||||
/* Engine has no preview */
|
||||
if ((e->info.extra_flags & ExtraEngineFlags::NoPreview) != ExtraEngineFlags::None) continue;
|
||||
|
||||
/* Show preview dialog to one of the companies. */
|
||||
e->flags |= ENGINE_EXCLUSIVE_PREVIEW;
|
||||
e->preview_company = INVALID_COMPANY;
|
||||
@@ -1044,6 +1102,11 @@ void EnginesMonthlyLoop()
|
||||
}
|
||||
|
||||
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // rebuild the purchase list (esp. when sorted by reliability)
|
||||
|
||||
if (refresh) {
|
||||
SetWindowClassesDirty(WC_BUILD_VEHICLE);
|
||||
SetWindowClassesDirty(WC_REPLACE_VEHICLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,15 @@ struct WagonOverride {
|
||||
const SpriteGroup *group;
|
||||
};
|
||||
|
||||
/** Flags used client-side in the purchase/autorenew engine list. */
|
||||
enum class EngineDisplayFlags : byte {
|
||||
None = 0, ///< No flag set.
|
||||
HasVariants = (1U << 0), ///< Set if engine has variants.
|
||||
IsFolded = (1U << 1), ///< Set if display of variants should be folded (hidden).
|
||||
Shaded = (1U << 2), ///< Set if engine should be masked.
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(EngineDisplayFlags)
|
||||
|
||||
typedef Pool<Engine, EngineID, 64, 64000> EnginePool;
|
||||
extern EnginePool _engine_pool;
|
||||
|
||||
@@ -45,6 +54,9 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
|
||||
uint8 original_image_index; ///< Original vehicle image index, thus the image index of the overridden vehicle
|
||||
VehicleType type; ///< %Vehicle type, ie #VEH_ROAD, #VEH_TRAIN, etc.
|
||||
|
||||
EngineDisplayFlags display_flags; ///< NOSAVE client-side-only display flags for build engine list.
|
||||
EngineID display_last_variant; ///< NOSAVE client-side-only last variant selected.
|
||||
|
||||
EngineInfo info;
|
||||
|
||||
union {
|
||||
|
||||
+2
-2
@@ -24,9 +24,9 @@ extern const uint8 _engine_offsets[4];
|
||||
|
||||
bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company);
|
||||
bool IsEngineRefittable(EngineID engine);
|
||||
void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity);
|
||||
void SetYearEngineAgingStops();
|
||||
void StartupOneEngine(Engine *e, Date aging_date);
|
||||
void CalcEngineReliability(Engine *e, bool new_month);
|
||||
void StartupOneEngine(Engine *e, Date aging_date, uint32 seed);
|
||||
|
||||
uint GetTotalCapacityOfArticulatedParts(EngineID engine);
|
||||
|
||||
|
||||
+3
-2
@@ -24,6 +24,7 @@
|
||||
#include "ship.h"
|
||||
#include "aircraft.h"
|
||||
#include "engine_cmd.h"
|
||||
#include "zoom_func.h"
|
||||
|
||||
#include "widgets/engine_widget.h"
|
||||
|
||||
@@ -94,7 +95,7 @@ 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 = std::max<int>(40, y - y_offs);
|
||||
this->vehicle_space = std::max<int>(ScaleSpriteTrad(40), y - y_offs);
|
||||
|
||||
size->width = std::max(size->width, x - x_offs);
|
||||
SetDParam(0, GetEngineCategoryName(engine));
|
||||
@@ -336,7 +337,7 @@ void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare)
|
||||
* @param begin start of sorting
|
||||
* @param num_items count of items to be sorted
|
||||
*/
|
||||
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items)
|
||||
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, size_t begin, size_t num_items)
|
||||
{
|
||||
if (num_items < 2) return;
|
||||
assert(begin < el->size());
|
||||
|
||||
+16
-3
@@ -14,12 +14,25 @@
|
||||
#include "sortlist_type.h"
|
||||
#include "gfx_type.h"
|
||||
#include "vehicle_type.h"
|
||||
#include "engine_base.h"
|
||||
|
||||
typedef GUIList<EngineID, CargoID> GUIEngineList;
|
||||
struct GUIEngineListItem {
|
||||
EngineID engine_id; ///< Engine to display in build purchase list
|
||||
EngineID variant_id; ///< Variant group of the engine.
|
||||
EngineDisplayFlags flags; ///< Flags for toggling/drawing (un)folded status and controlling indentation.
|
||||
int8 indent; ///< Display indentation level.
|
||||
|
||||
typedef bool EngList_SortTypeFunction(const EngineID&, const EngineID&); ///< argument type for #EngList_Sort.
|
||||
GUIEngineListItem(EngineID engine_id, EngineID variant_id, EngineDisplayFlags flags, int indent) : engine_id(engine_id), variant_id(variant_id), flags(flags), indent(indent) {}
|
||||
|
||||
/* Used when searching list only by engine_id. */
|
||||
bool operator == (const EngineID &other) const { return this->engine_id == other; }
|
||||
};
|
||||
|
||||
typedef GUIList<GUIEngineListItem, CargoID> GUIEngineList;
|
||||
|
||||
typedef bool EngList_SortTypeFunction(const GUIEngineListItem&, const GUIEngineListItem&); ///< argument type for #EngList_Sort.
|
||||
void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare);
|
||||
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items);
|
||||
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, size_t begin, size_t num_items);
|
||||
|
||||
StringID GetEngineCategoryName(EngineID engine);
|
||||
StringID GetEngineInfoString(EngineID engine);
|
||||
|
||||
+14
-2
@@ -43,7 +43,8 @@ struct RailVehicleInfo {
|
||||
byte image_index;
|
||||
RailVehicleTypes railveh_type;
|
||||
byte cost_factor; ///< Purchase cost factor; For multiheaded engines the sum of both engine prices.
|
||||
RailType railtype;
|
||||
RailType railtype; ///< Railtype, mangled if elrail is disabled.
|
||||
RailType intended_railtype; ///< Intended railtype, regardless of elrail being enabled or disabled.
|
||||
uint16 max_speed; ///< Maximum speed (1 unit = 1/1.6 mph = 1 km-ish/h)
|
||||
uint16 power; ///< Power of engine (hp); For multiheaded engines the sum of both engine powers.
|
||||
uint16 weight; ///< Weight of vehicle (tons); For multiheaded engines the weight of each single engine.
|
||||
@@ -126,6 +127,15 @@ struct RoadVehicleInfo {
|
||||
RoadType roadtype; ///< Road type
|
||||
};
|
||||
|
||||
enum class ExtraEngineFlags : uint32 {
|
||||
None = 0,
|
||||
NoNews = (1U << 0), ///< No 'new vehicle' news will be generated.
|
||||
NoPreview = (1U << 1), ///< No exclusive preview will be offered.
|
||||
JoinPreview = (1U << 2), ///< Engine will join exclusive preview with variant parent.
|
||||
SyncReliability = (1U << 3), ///< Engine reliability will be synced with variant parent.
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(ExtraEngineFlags);
|
||||
|
||||
/**
|
||||
* Information about a vehicle
|
||||
* @see table/engines.h
|
||||
@@ -145,6 +155,8 @@ struct EngineInfo {
|
||||
int8 retire_early; ///< Number of years early to retire vehicle
|
||||
StringID string_id; ///< Default name of engine
|
||||
uint16 cargo_age_period; ///< Number of ticks before carried cargo is aged.
|
||||
EngineID variant_id; ///< Engine variant ID. If set, will be treated specially in purchase lists.
|
||||
ExtraEngineFlags extra_flags;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -155,7 +167,7 @@ enum EngineMiscFlags {
|
||||
EF_ROAD_TRAM = 0, ///< Road vehicle is a tram/light rail vehicle
|
||||
EF_USES_2CC = 1, ///< Vehicle uses two company colours
|
||||
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
|
||||
EF_RAIL_FLIPS = 3, ///< Rail vehicle can be flipped in the depot
|
||||
EF_RAIL_FLIPS = 3, ///< Rail vehicle has old depot-flip handling
|
||||
EF_AUTO_REFIT = 4, ///< Automatic refitting is allowed
|
||||
EF_NO_DEFAULT_CARGO_MULTIPLIER = 5, ///< Use the new capacity algorithm. The default cargotype of the vehicle does not affect capacity multipliers. CB 15 is also called in purchase list.
|
||||
EF_NO_BREAKDOWN_SMOKE = 6, ///< Do not show black smoke during a breakdown.
|
||||
|
||||
+10
-10
@@ -418,7 +418,7 @@ uint TarScanner::DoScan(Subdirectory sd)
|
||||
|
||||
/* static */ uint TarScanner::DoScan(TarScanner::Mode mode)
|
||||
{
|
||||
Debug(misc, 1, "Scanning for tars");
|
||||
Debug(misc, 2, "Scanning for tars");
|
||||
TarScanner fs;
|
||||
uint num = 0;
|
||||
if (mode & TarScanner::BASESET) {
|
||||
@@ -439,7 +439,7 @@ uint TarScanner::DoScan(Subdirectory sd)
|
||||
num += fs.DoScan(SCENARIO_DIR);
|
||||
num += fs.DoScan(HEIGHTMAP_DIR);
|
||||
}
|
||||
Debug(misc, 1, "Scan complete, found {} files", num);
|
||||
Debug(misc, 2, "Scan complete, found {} files", num);
|
||||
return num;
|
||||
}
|
||||
|
||||
@@ -571,7 +571,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co
|
||||
|
||||
/* Only allow relative links */
|
||||
if (link[0] == PATHSEPCHAR) {
|
||||
Debug(misc, 1, "Ignoring absolute link in tar: {} -> {}", name, link);
|
||||
Debug(misc, 5, "Ignoring absolute link in tar: {} -> {}", name, link);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -597,7 +597,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co
|
||||
} else if (strcmp(pos, "..") == 0) {
|
||||
/* level up */
|
||||
if (dest[0] == '\0') {
|
||||
Debug(misc, 1, "Ignoring link pointing outside of data directory: {} -> {}", name, link);
|
||||
Debug(misc, 5, "Ignoring link pointing outside of data directory: {} -> {}", name, link);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -652,7 +652,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co
|
||||
pos += skip;
|
||||
}
|
||||
|
||||
Debug(misc, 1, "Found tar '{}' with {} new files", filename, num);
|
||||
Debug(misc, 4, "Found tar '{}' with {} new files", filename, num);
|
||||
fclose(f);
|
||||
|
||||
/* Resolve file links and store directory links.
|
||||
@@ -690,7 +690,7 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir)
|
||||
|
||||
/* The file doesn't have a sub directory! */
|
||||
if (dirname.empty()) {
|
||||
Debug(misc, 1, "Extracting {} failed; archive rejected, the contents must be in a sub directory", tar_filename);
|
||||
Debug(misc, 3, "Extracting {} failed; archive rejected, the contents must be in a sub directory", tar_filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -987,7 +987,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
|
||||
|
||||
for (Searchpath sp : _valid_searchpaths) {
|
||||
if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue;
|
||||
Debug(misc, 4, "{} added as search path", _searchpaths[sp]);
|
||||
Debug(misc, 3, "{} added as search path", _searchpaths[sp]);
|
||||
}
|
||||
|
||||
std::string config_dir;
|
||||
@@ -1020,7 +1020,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
|
||||
_config_file = config_dir + "openttd.cfg";
|
||||
}
|
||||
|
||||
Debug(misc, 3, "{} found as config directory", config_dir);
|
||||
Debug(misc, 1, "{} found as config directory", config_dir);
|
||||
|
||||
_highscore_file = config_dir + "hs.dat";
|
||||
extern std::string _hotkeys_file;
|
||||
@@ -1056,7 +1056,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
|
||||
FioCreateDirectory(_personal_dir);
|
||||
#endif
|
||||
|
||||
Debug(misc, 3, "{} found as personal directory", _personal_dir);
|
||||
Debug(misc, 1, "{} found as personal directory", _personal_dir);
|
||||
|
||||
static const Subdirectory default_subdirs[] = {
|
||||
SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR
|
||||
@@ -1068,7 +1068,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
|
||||
|
||||
/* If we have network we make a directory for the autodownloading of content */
|
||||
_searchpaths[SP_AUTODOWNLOAD_DIR] = _personal_dir + "content_download" PATHSEP;
|
||||
Debug(misc, 4, "{} added as search path", _searchpaths[SP_AUTODOWNLOAD_DIR]);
|
||||
Debug(misc, 3, "{} added as search path", _searchpaths[SP_AUTODOWNLOAD_DIR]);
|
||||
FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]);
|
||||
FillValidSearchPaths(only_local_path);
|
||||
|
||||
|
||||
+48
-7
@@ -13,6 +13,11 @@
|
||||
#include "blitter/factory.hpp"
|
||||
#include "gfx_layout.h"
|
||||
#include "fontcache/spritefontcache.h"
|
||||
#include "openttd.h"
|
||||
#include "settings_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "viewport_func.h"
|
||||
#include "window_func.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
@@ -70,15 +75,51 @@ bool GetFontAAState(FontSize size, bool check_blitter)
|
||||
/* AA is only supported for 32 bpp */
|
||||
if (check_blitter && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false;
|
||||
|
||||
switch (size) {
|
||||
default: NOT_REACHED();
|
||||
case FS_NORMAL: return _fcsettings.medium.aa;
|
||||
case FS_SMALL: return _fcsettings.small.aa;
|
||||
case FS_LARGE: return _fcsettings.large.aa;
|
||||
case FS_MONO: return _fcsettings.mono.aa;
|
||||
}
|
||||
return GetFontCacheSubSetting(size)->aa;
|
||||
}
|
||||
|
||||
void SetFont(FontSize fontsize, const std::string& font, uint size, bool aa)
|
||||
{
|
||||
FontCacheSubSetting *setting = GetFontCacheSubSetting(fontsize);
|
||||
bool changed = false;
|
||||
|
||||
if (setting->font != font) {
|
||||
setting->font = font;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (setting->size != size) {
|
||||
setting->size = size;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (setting->aa != aa) {
|
||||
setting->aa = aa;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (!changed) return;
|
||||
|
||||
if (fontsize != FS_MONO) {
|
||||
/* Try to reload only the modified font. */
|
||||
FontCacheSettings backup = _fcsettings;
|
||||
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
|
||||
if (fs == fontsize) continue;
|
||||
FontCache *fc = FontCache::Get(fs);
|
||||
GetFontCacheSubSetting(fs)->font = fc->HasParent() ? fc->GetFontName() : "";
|
||||
}
|
||||
CheckForMissingGlyphs();
|
||||
_fcsettings = backup;
|
||||
} else {
|
||||
InitFontCache(true);
|
||||
}
|
||||
|
||||
LoadStringWidthTable();
|
||||
UpdateAllVirtCoords();
|
||||
ReInitAllWindows(true);
|
||||
|
||||
if (_save_config) SaveToConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* (Re)initialize the font cache related things, i.e. load the non-sprite fonts.
|
||||
|
||||
+19
-2
@@ -29,12 +29,12 @@ protected:
|
||||
int descender; ///< The descender value of the font.
|
||||
int units_per_em; ///< The units per EM value of the font.
|
||||
|
||||
static int GetDefaultFontHeight(FontSize fs);
|
||||
|
||||
public:
|
||||
FontCache(FontSize fs);
|
||||
virtual ~FontCache();
|
||||
|
||||
static int GetDefaultFontHeight(FontSize fs);
|
||||
|
||||
/**
|
||||
* Get the FontSize of the font.
|
||||
* @return The FontSize.
|
||||
@@ -218,10 +218,27 @@ struct FontCacheSettings {
|
||||
|
||||
extern FontCacheSettings _fcsettings;
|
||||
|
||||
/**
|
||||
* Get the settings of a given font size.
|
||||
* @param fs The font size to look up.
|
||||
* @return The settings.
|
||||
*/
|
||||
static inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs)
|
||||
{
|
||||
switch (fs) {
|
||||
default: NOT_REACHED();
|
||||
case FS_SMALL: return &_fcsettings.small;
|
||||
case FS_NORMAL: return &_fcsettings.medium;
|
||||
case FS_LARGE: return &_fcsettings.large;
|
||||
case FS_MONO: return &_fcsettings.mono;
|
||||
}
|
||||
}
|
||||
|
||||
void InitFontCache(bool monospace);
|
||||
void UninitFontCache();
|
||||
bool HasAntialiasedFonts();
|
||||
|
||||
bool GetFontAAState(FontSize size, bool check_blitter = true);
|
||||
void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa);
|
||||
|
||||
#endif /* FONTCACHE_H */
|
||||
|
||||
@@ -65,14 +65,14 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
|
||||
{
|
||||
if (pixels == 0) {
|
||||
/* Try to determine a good height based on the minimal height recommended by the font. */
|
||||
int scaled_height = ScaleGUITrad(this->GetDefaultFontHeight(this->fs));
|
||||
int scaled_height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
|
||||
pixels = scaled_height;
|
||||
|
||||
TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
|
||||
if (head != nullptr) {
|
||||
/* Font height is minimum height plus the difference between the default
|
||||
* height for this font size and the small size. */
|
||||
int diff = scaled_height - ScaleGUITrad(this->GetDefaultFontHeight(FS_SMALL));
|
||||
int diff = scaled_height - ScaleGUITrad(FontCache::GetDefaultFontHeight(FS_SMALL));
|
||||
/* Clamp() is not used as scaled_height could be greater than MAX_FONT_SIZE, which is not permitted in Clamp(). */
|
||||
pixels = std::min(std::max(std::min<int>(head->Lowest_Rec_PPEM, MAX_FONT_MIN_REC_SIZE) + diff, scaled_height), MAX_FONT_SIZE);
|
||||
}
|
||||
@@ -122,14 +122,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
|
||||
*/
|
||||
void LoadFreeTypeFont(FontSize fs)
|
||||
{
|
||||
FontCacheSubSetting *settings = nullptr;
|
||||
switch (fs) {
|
||||
default: NOT_REACHED();
|
||||
case FS_SMALL: settings = &_fcsettings.small; break;
|
||||
case FS_NORMAL: settings = &_fcsettings.medium; break;
|
||||
case FS_LARGE: settings = &_fcsettings.large; break;
|
||||
case FS_MONO: settings = &_fcsettings.mono; break;
|
||||
}
|
||||
FontCacheSubSetting *settings = GetFontCacheSubSetting(fs);
|
||||
|
||||
if (settings->font.empty()) return;
|
||||
|
||||
@@ -197,8 +190,7 @@ void LoadFreeTypeFont(FontSize fs)
|
||||
|
||||
FT_Done_Face(face);
|
||||
|
||||
static const char *SIZE_TO_NAME[] = { "medium", "small", "large", "mono" };
|
||||
ShowInfoF("Unable to use '%s' for %s font, FreeType reported error 0x%X, using sprite font instead", font_name, SIZE_TO_NAME[fs], error);
|
||||
ShowInfoF("Unable to use '%s' for %s font, FreeType reported error 0x%X, using sprite font instead", font_name, FontSizeToName(fs), error);
|
||||
return;
|
||||
|
||||
found_face:
|
||||
|
||||
@@ -28,8 +28,8 @@ static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter.
|
||||
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid_map(nullptr)
|
||||
{
|
||||
this->InitializeUnicodeGlyphMap();
|
||||
this->height = ScaleGUITrad(this->GetDefaultFontHeight(this->fs));
|
||||
this->ascender = (this->height - ScaleSpriteTrad(this->GetDefaultFontHeight(this->fs))) / 2;
|
||||
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
|
||||
this->ascender = (this->height - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,8 +105,8 @@ void SpriteFontCache::ClearGlyphToSpriteMap()
|
||||
void SpriteFontCache::ClearFontCache()
|
||||
{
|
||||
Layouter::ResetFontCache(this->fs);
|
||||
this->height = ScaleGUITrad(this->GetDefaultFontHeight(this->fs));
|
||||
this->ascender = (this->height - ScaleSpriteTrad(this->GetDefaultFontHeight(this->fs))) / 2;
|
||||
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
|
||||
this->ascender = (this->height - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
|
||||
}
|
||||
|
||||
const Sprite *SpriteFontCache::GetGlyph(GlyphID key)
|
||||
|
||||
@@ -87,11 +87,6 @@ public:
|
||||
*/
|
||||
static void Save();
|
||||
|
||||
/**
|
||||
* Load data for a GameScript from a savegame.
|
||||
*/
|
||||
static void Load(int version);
|
||||
|
||||
/** Wrapper function for GameScanner::GetConsoleList */
|
||||
static std::string GetConsoleList(bool newest_only = false);
|
||||
/** Wrapper function for GameScanner::GetConsoleLibraryList */
|
||||
|
||||
+6
-12
@@ -73,6 +73,9 @@
|
||||
{
|
||||
if (Game::instance != nullptr) return;
|
||||
|
||||
/* Don't start GameScripts in intro */
|
||||
if (_game_mode == GM_MENU) return;
|
||||
|
||||
/* Clients shouldn't start GameScripts */
|
||||
if (_networking && !_network_server) return;
|
||||
|
||||
@@ -88,6 +91,8 @@
|
||||
Game::info = info;
|
||||
Game::instance = new GameInstance();
|
||||
Game::instance->Initialize(info);
|
||||
Game::instance->LoadOnStack(config->GetToLoadData());
|
||||
config->SetToLoadData(nullptr);
|
||||
|
||||
cur_company.Restore();
|
||||
|
||||
@@ -199,6 +204,7 @@
|
||||
InvalidateWindowData(WC_AI_LIST, 0, 1);
|
||||
SetWindowClassesDirty(WC_AI_DEBUG);
|
||||
InvalidateWindowClassesData(WC_AI_SETTINGS);
|
||||
InvalidateWindowClassesData(WC_GAME_OPTIONS);
|
||||
}
|
||||
|
||||
|
||||
@@ -213,18 +219,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ void Game::Load(int version)
|
||||
{
|
||||
if (Game::instance != nullptr && (!_networking || _network_server)) {
|
||||
Backup<CompanyID> cur_company(_current_company, OWNER_DEITY, FILE_LINE);
|
||||
Game::instance->Load(version);
|
||||
cur_company.Restore();
|
||||
} else {
|
||||
/* Read, but ignore, the load data */
|
||||
GameInstance::LoadEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ std::string Game::GetConsoleList(bool newest_only)
|
||||
{
|
||||
return Game::scanner_info->GetConsoleList(newest_only);
|
||||
|
||||
+34
-4
@@ -32,6 +32,7 @@
|
||||
#include "video/video_driver.hpp"
|
||||
#include "ai/ai_gui.hpp"
|
||||
#include "game/game_gui.hpp"
|
||||
#include "industry.h"
|
||||
|
||||
#include "widgets/genworld_widget.h"
|
||||
|
||||
@@ -399,7 +400,7 @@ static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_
|
||||
static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE, INVALID_STRING_ID};
|
||||
static const StringID _landscape[] = {STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL, STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS, INVALID_STRING_ID};
|
||||
static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID};
|
||||
static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, INVALID_STRING_ID};
|
||||
static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID};
|
||||
static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH, INVALID_STRING_ID};
|
||||
|
||||
static_assert(lengthof(_num_inds) == ID_END + 1);
|
||||
@@ -461,8 +462,19 @@ struct GenerateLandscapeWindow : public Window {
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_GL_INDUSTRY_PULLDOWN: SetDParam(0, _game_mode == GM_EDITOR ? STR_CONFIG_SETTING_OFF : _num_inds[_settings_newgame.difficulty.industry_density]); break;
|
||||
case WID_GL_INDUSTRY_PULLDOWN:
|
||||
if (_game_mode == GM_EDITOR) {
|
||||
SetDParam(0, STR_CONFIG_SETTING_OFF);
|
||||
} else if (_settings_newgame.difficulty.industry_density == ID_CUSTOM) {
|
||||
SetDParam(0, STR_NUM_CUSTOM_NUMBER);
|
||||
SetDParam(1, _settings_newgame.game_creation.custom_industry_number);
|
||||
} else {
|
||||
SetDParam(0, _num_inds[_settings_newgame.difficulty.industry_density]);
|
||||
}
|
||||
break;
|
||||
|
||||
case WID_GL_LANDSCAPE_PULLDOWN: SetDParam(0, _landscape[_settings_newgame.game_creation.land_generator]); break;
|
||||
|
||||
case WID_GL_TERRAIN_PULLDOWN:
|
||||
if (_settings_newgame.difficulty.terrain_type == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) {
|
||||
SetDParam(0, STR_TERRAIN_TYPE_CUSTOM_VALUE);
|
||||
@@ -619,7 +631,12 @@ struct GenerateLandscapeWindow : public Window {
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER));
|
||||
break;
|
||||
|
||||
case WID_GL_INDUSTRY_PULLDOWN: strs = _num_inds; break;
|
||||
case WID_GL_INDUSTRY_PULLDOWN:
|
||||
strs = _num_inds;
|
||||
SetDParamMaxValue(0, IndustryPool::MAX_SIZE);
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER));
|
||||
break;
|
||||
|
||||
case WID_GL_LANDSCAPE_PULLDOWN: strs = _landscape; break;
|
||||
|
||||
case WID_GL_TERRAIN_PULLDOWN:
|
||||
@@ -919,7 +936,15 @@ struct GenerateLandscapeWindow : public Window {
|
||||
}
|
||||
break;
|
||||
|
||||
case WID_GL_INDUSTRY_PULLDOWN: _settings_newgame.difficulty.industry_density = index; break;
|
||||
case WID_GL_INDUSTRY_PULLDOWN:
|
||||
if ((uint)index == ID_CUSTOM) {
|
||||
this->widget_id = widget;
|
||||
SetDParam(0, _settings_newgame.game_creation.custom_industry_number);
|
||||
ShowQueryString(STR_JUST_INT, STR_MAPGEN_NUMBER_OF_INDUSTRIES, 5, this, CS_NUMERAL, QSF_NONE);
|
||||
}
|
||||
_settings_newgame.difficulty.industry_density = index;
|
||||
break;
|
||||
|
||||
case WID_GL_TERRAIN_PULLDOWN: {
|
||||
if ((uint)index == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) {
|
||||
this->widget_id = widget;
|
||||
@@ -959,6 +984,7 @@ struct GenerateLandscapeWindow : public Window {
|
||||
case WID_GL_SNOW_COVERAGE_TEXT: value = DEF_SNOW_COVERAGE; break;
|
||||
case WID_GL_DESERT_COVERAGE_TEXT: value = DEF_DESERT_COVERAGE; break;
|
||||
case WID_GL_TOWN_PULLDOWN: value = 1; break;
|
||||
case WID_GL_INDUSTRY_PULLDOWN: value = 1; break;
|
||||
case WID_GL_TERRAIN_PULLDOWN: value = MIN_MAP_HEIGHT_LIMIT; break;
|
||||
case WID_GL_WATER_PULLDOWN: value = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE; break;
|
||||
default: NOT_REACHED();
|
||||
@@ -990,6 +1016,10 @@ struct GenerateLandscapeWindow : public Window {
|
||||
_settings_newgame.game_creation.custom_town_number = Clamp(value, 1, CUSTOM_TOWN_MAX_NUMBER);
|
||||
break;
|
||||
|
||||
case WID_GL_INDUSTRY_PULLDOWN:
|
||||
_settings_newgame.game_creation.custom_industry_number = Clamp(value, 1, IndustryPool::MAX_SIZE);
|
||||
break;
|
||||
|
||||
case WID_GL_TERRAIN_PULLDOWN:
|
||||
_settings_newgame.game_creation.custom_terrain_type = Clamp(value, MIN_CUSTOM_TERRAIN_TYPE, GetMapHeightLimit());
|
||||
break;
|
||||
|
||||
+15
@@ -922,6 +922,21 @@ Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize)
|
||||
return GetStringBoundingBox(buffer, start_fontsize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get maximum width of a list of strings.
|
||||
* @param list List of strings, terminated with INVALID_STRING_ID.
|
||||
* @param fontsize Font size to use.
|
||||
* @return Width of longest string within the list.
|
||||
*/
|
||||
uint GetStringListWidth(const StringID *list, FontSize fontsize)
|
||||
{
|
||||
uint width = 0;
|
||||
for (const StringID *str = list; *str != INVALID_STRING_ID; str++) {
|
||||
width = std::max(width, GetStringBoundingBox(*str, fontsize).width);
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the leading corner of a character in a single-line string relative
|
||||
* to the start of the string.
|
||||
|
||||
@@ -148,6 +148,7 @@ static inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FI
|
||||
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize = FS_NORMAL);
|
||||
Dimension GetStringBoundingBox(const std::string &str, FontSize start_fontsize = FS_NORMAL);
|
||||
Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize = FS_NORMAL);
|
||||
uint GetStringListWidth(const StringID *list, FontSize fontsize = FS_NORMAL);
|
||||
int GetStringHeight(const char *str, int maxw, FontSize fontsize = FS_NORMAL);
|
||||
int GetStringHeight(StringID str, int maxw);
|
||||
int GetStringLineCount(StringID str, int maxw);
|
||||
|
||||
+5
-6
@@ -11,6 +11,7 @@
|
||||
#include "gfx_layout.h"
|
||||
#include "string_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "zoom_func.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include "table/control_codes.h"
|
||||
@@ -345,11 +346,11 @@ FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const
|
||||
for (int i = 0; i < this->glyph_count; i++) {
|
||||
this->glyphs[i] = font->fc->MapCharToGlyph(chars[i]);
|
||||
if (isbuiltin) {
|
||||
this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender.
|
||||
this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender.
|
||||
} else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) {
|
||||
this->positions[2 * i + 1] = font->fc->GetAscender() - font->fc->GetGlyph(this->glyphs[i])->height - 1; // Align sprite glyphs to font baseline.
|
||||
this->positions[2 * i + 1] = (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2; // Align sprite font to centre
|
||||
} else {
|
||||
this->positions[2 * i + 1] = 0; // No ascender adjustment.
|
||||
this->positions[2 * i + 1] = 0; // No ascender adjustment.
|
||||
}
|
||||
this->positions[2 * i + 2] = this->positions[2 * i] + font->fc->GetGlyphWidth(this->glyphs[i]);
|
||||
this->glyph_to_char[i] = i;
|
||||
@@ -551,8 +552,6 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
|
||||
|
||||
next_run = this->buffer_begin + iter->first;
|
||||
begin = this->buffer;
|
||||
|
||||
last_space = nullptr;
|
||||
}
|
||||
|
||||
if (IsWhitespace(c)) last_space = this->buffer;
|
||||
@@ -590,7 +589,7 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
|
||||
this->buffer++;
|
||||
}
|
||||
|
||||
if (l->size() == 0 || last_char - begin != 0) {
|
||||
if (l->size() == 0 || last_char - begin > 0) {
|
||||
int w = l->GetWidth();
|
||||
l->emplace_back(iter->second, begin, last_char - begin, w);
|
||||
}
|
||||
|
||||
@@ -214,6 +214,13 @@ enum FontSize {
|
||||
};
|
||||
DECLARE_POSTFIX_INCREMENT(FontSize)
|
||||
|
||||
static inline const char *FontSizeToName(FontSize fs)
|
||||
{
|
||||
static const char *SIZE_TO_NAME[] = { "medium", "small", "large", "mono" };
|
||||
assert(fs < FS_END);
|
||||
return SIZE_TO_NAME[fs];
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to only draw a part of the sprite.
|
||||
* Draw the subsprite in the rect (sprite_x_offset + left, sprite_y_offset + top) to (sprite_x_offset + right, sprite_y_offset + bottom).
|
||||
|
||||
+11
-9
@@ -23,15 +23,14 @@ extern GroupPool _group_pool; ///< Pool of groups.
|
||||
|
||||
/** Statistics and caches on the vehicles in a group. */
|
||||
struct GroupStatistics {
|
||||
uint16 num_vehicle; ///< Number of vehicles.
|
||||
Money profit_last_year; ///< Sum of profits for all vehicles.
|
||||
Money profit_last_year_min_age; ///< Sum of profits for vehicles considered for profit statistics.
|
||||
uint16 *num_engines; ///< Caches the number of engines of each type the company owns.
|
||||
|
||||
uint16 num_vehicle; ///< Number of vehicles.
|
||||
uint16 num_vehicle_min_age; ///< Number of vehicles considered for profit statistics;
|
||||
bool autoreplace_defined; ///< Are any autoreplace rules set?
|
||||
bool autoreplace_finished; ///< Have all autoreplacement finished?
|
||||
|
||||
uint16 num_profit_vehicle; ///< Number of vehicles considered for profit statistics;
|
||||
Money profit_last_year; ///< Sum of profits for all vehicles.
|
||||
|
||||
GroupStatistics();
|
||||
~GroupStatistics();
|
||||
|
||||
@@ -39,8 +38,10 @@ struct GroupStatistics {
|
||||
|
||||
void ClearProfits()
|
||||
{
|
||||
this->num_profit_vehicle = 0;
|
||||
this->profit_last_year = 0;
|
||||
|
||||
this->num_vehicle_min_age = 0;
|
||||
this->profit_last_year_min_age = 0;
|
||||
}
|
||||
|
||||
void ClearAutoreplace()
|
||||
@@ -55,7 +56,8 @@ struct GroupStatistics {
|
||||
|
||||
static void CountVehicle(const Vehicle *v, int delta);
|
||||
static void CountEngine(const Vehicle *v, int delta);
|
||||
static void VehicleReachedProfitAge(const Vehicle *v);
|
||||
static void AddProfitLastYear(const Vehicle *v);
|
||||
static void VehicleReachedMinAge(const Vehicle *v);
|
||||
|
||||
static void UpdateProfits();
|
||||
static void UpdateAfterLoad();
|
||||
@@ -104,8 +106,8 @@ static inline bool IsAllGroupID(GroupID id_g)
|
||||
|
||||
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
|
||||
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
|
||||
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type);
|
||||
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type);
|
||||
uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type);
|
||||
Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type);
|
||||
|
||||
void SetTrainGroupID(Train *v, GroupID grp);
|
||||
void UpdateTrainGroupID(Train *v);
|
||||
|
||||
+37
-19
@@ -43,8 +43,9 @@ GroupStatistics::~GroupStatistics()
|
||||
void GroupStatistics::Clear()
|
||||
{
|
||||
this->num_vehicle = 0;
|
||||
this->num_profit_vehicle = 0;
|
||||
this->profit_last_year = 0;
|
||||
this->num_vehicle_min_age = 0;
|
||||
this->profit_last_year_min_age = 0;
|
||||
|
||||
/* This is also called when NewGRF change. So the number of engines might have changed. Reallocate. */
|
||||
free(this->num_engines);
|
||||
@@ -136,13 +137,15 @@ void GroupStatistics::Clear()
|
||||
GroupStatistics &stats = GroupStatistics::Get(v);
|
||||
|
||||
stats_all.num_vehicle += delta;
|
||||
stats_all.profit_last_year += v->GetDisplayProfitLastYear() * delta;
|
||||
stats.num_vehicle += delta;
|
||||
stats.profit_last_year += v->GetDisplayProfitLastYear() * delta;
|
||||
|
||||
if (v->age > VEHICLE_PROFIT_MIN_AGE) {
|
||||
stats_all.num_profit_vehicle += delta;
|
||||
stats_all.profit_last_year += v->GetDisplayProfitLastYear() * delta;
|
||||
stats.num_profit_vehicle += delta;
|
||||
stats.profit_last_year += v->GetDisplayProfitLastYear() * delta;
|
||||
stats_all.num_vehicle_min_age += delta;
|
||||
stats_all.profit_last_year_min_age += v->GetDisplayProfitLastYear() * delta;
|
||||
stats.num_vehicle_min_age += delta;
|
||||
stats.profit_last_year_min_age += v->GetDisplayProfitLastYear() * delta;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,19 +162,31 @@ void GroupStatistics::Clear()
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a vehicle to the profit sum of its group.
|
||||
* Add a vehicle's last year profit to the profit sum of its group.
|
||||
*/
|
||||
/* static */ void GroupStatistics::VehicleReachedProfitAge(const Vehicle *v)
|
||||
/* static */ void GroupStatistics::AddProfitLastYear(const Vehicle *v)
|
||||
{
|
||||
GroupStatistics &stats_all = GroupStatistics::GetAllGroup(v);
|
||||
GroupStatistics &stats = GroupStatistics::Get(v);
|
||||
|
||||
stats_all.num_profit_vehicle++;
|
||||
stats_all.profit_last_year += v->GetDisplayProfitLastYear();
|
||||
stats.num_profit_vehicle++;
|
||||
stats.profit_last_year += v->GetDisplayProfitLastYear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a vehicle to the profit sum of its group.
|
||||
*/
|
||||
/* static */ void GroupStatistics::VehicleReachedMinAge(const Vehicle *v)
|
||||
{
|
||||
GroupStatistics &stats_all = GroupStatistics::GetAllGroup(v);
|
||||
GroupStatistics &stats = GroupStatistics::Get(v);
|
||||
|
||||
stats_all.num_vehicle_min_age++;
|
||||
stats_all.profit_last_year_min_age += v->GetDisplayProfitLastYear();
|
||||
stats.num_vehicle_min_age++;
|
||||
stats.profit_last_year_min_age += v->GetDisplayProfitLastYear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recompute the profits for all groups.
|
||||
*/
|
||||
@@ -191,7 +206,10 @@ void GroupStatistics::Clear()
|
||||
}
|
||||
|
||||
for (const Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->IsPrimaryVehicle() && v->age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedProfitAge(v);
|
||||
if (v->IsPrimaryVehicle()) {
|
||||
GroupStatistics::AddProfitLastYear(v);
|
||||
if (v->age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedMinAge(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -789,30 +807,30 @@ uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
|
||||
* @param type The vehicle type of the group
|
||||
* @return The number of vehicles above profit minimum age in the group
|
||||
*/
|
||||
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type)
|
||||
uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type)
|
||||
{
|
||||
uint count = 0;
|
||||
for (const Group *g : Group::Iterate()) {
|
||||
if (g->parent == id_g) count += GetGroupNumProfitVehicle(company, g->index, type);
|
||||
if (g->parent == id_g) count += GetGroupNumVehicleMinAge(company, g->index, type);
|
||||
}
|
||||
return count + GroupStatistics::Get(company, id_g, type).num_profit_vehicle;
|
||||
return count + GroupStatistics::Get(company, id_g, type).num_vehicle_min_age;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last year's profit for the group with GroupID
|
||||
* id_g and its sub-groups.
|
||||
* Get last year's profit of vehicles above minimum age
|
||||
* for the group with GroupID id_g and its sub-groups.
|
||||
* @param company The company the group belongs to
|
||||
* @param id_g The GroupID of the group used
|
||||
* @param type The vehicle type of the group
|
||||
* @return Last year's profit for the group
|
||||
* @return Last year's profit of vehicles above minimum age for the group
|
||||
*/
|
||||
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type)
|
||||
Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type)
|
||||
{
|
||||
Money sum = 0;
|
||||
for (const Group *g : Group::Iterate()) {
|
||||
if (g->parent == id_g) sum += GetGroupProfitLastYear(company, g->index, type);
|
||||
if (g->parent == id_g) sum += GetGroupProfitLastYearMinAge(company, g->index, type);
|
||||
}
|
||||
return sum + GroupStatistics::Get(company, id_g, type).profit_last_year;
|
||||
return sum + GroupStatistics::Get(company, id_g, type).profit_last_year_min_age;
|
||||
}
|
||||
|
||||
void RemoveAllGroupsForCompany(const CompanyID company)
|
||||
|
||||
+35
-14
@@ -27,6 +27,7 @@
|
||||
#include "gui.h"
|
||||
#include "group_cmd.h"
|
||||
#include "vehicle_cmd.h"
|
||||
#include "gfx_func.h"
|
||||
|
||||
#include "widgets/group_widget.h"
|
||||
|
||||
@@ -72,15 +73,21 @@ static const NWidgetPart _nested_group_widgets[] = {
|
||||
/* right part */
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GL_GROUP_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_GROUP_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_FILTER_BY_CARGO), SetMinimalSize(167, 12), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GL_GROUP_BY_ORDER), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_GROUP_BY_DROPDOWN), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_FILTER_BY_CARGO), SetMinimalSize(0, 12), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_VEHICLE), SetMinimalSize(248, 0), SetMatrixDataTip(1, 0, STR_NULL), SetResize(1, 1), SetFill(1, 0), SetScrollbar(WID_GL_LIST_VEHICLE_SCROLLBAR),
|
||||
@@ -295,13 +302,13 @@ private:
|
||||
/* draw the profit icon */
|
||||
x = rtl ? x - WidgetDimensions::scaled.hsep_normal - this->column_size[VGC_PROFIT].width : x + WidgetDimensions::scaled.hsep_normal + this->column_size[VGC_AUTOREPLACE].width;
|
||||
SpriteID spr;
|
||||
uint num_profit_vehicle = GetGroupNumProfitVehicle(this->vli.company, g_id, this->vli.vtype);
|
||||
Money profit_last_year = GetGroupProfitLastYear(this->vli.company, g_id, this->vli.vtype);
|
||||
if (num_profit_vehicle == 0) {
|
||||
uint num_vehicle_min_age = GetGroupNumVehicleMinAge(this->vli.company, g_id, this->vli.vtype);
|
||||
Money profit_last_year_min_age = GetGroupProfitLastYearMinAge(this->vli.company, g_id, this->vli.vtype);
|
||||
if (num_vehicle_min_age == 0) {
|
||||
spr = SPR_PROFIT_NA;
|
||||
} else if (profit_last_year < 0) {
|
||||
} else if (profit_last_year_min_age < 0) {
|
||||
spr = SPR_PROFIT_NEGATIVE;
|
||||
} else if (profit_last_year < VEHICLE_PROFIT_THRESHOLD * num_profit_vehicle) {
|
||||
} else if (profit_last_year_min_age < VEHICLE_PROFIT_THRESHOLD * num_vehicle_min_age) {
|
||||
spr = SPR_PROFIT_SOME;
|
||||
} else {
|
||||
spr = SPR_PROFIT_LOT;
|
||||
@@ -406,6 +413,20 @@ public:
|
||||
size->height = 4 * resize->height;
|
||||
break;
|
||||
|
||||
case WID_GL_GROUP_BY_DROPDOWN:
|
||||
size->width = GetStringListWidth(this->vehicle_group_by_names) + padding.width;
|
||||
break;
|
||||
|
||||
case WID_GL_SORT_BY_DROPDOWN:
|
||||
size->width = GetStringListWidth(this->vehicle_group_none_sorter_names);
|
||||
size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names));
|
||||
size->width += padding.width;
|
||||
break;
|
||||
|
||||
case WID_GL_FILTER_BY_CARGO:
|
||||
size->width = GetStringListWidth(this->cargo_filter_texts) + padding.width;
|
||||
break;
|
||||
|
||||
case WID_GL_MANAGE_VEHICLES_DROPDOWN: {
|
||||
Dimension d = this->GetActionDropdownSize(true, true);
|
||||
d.height += padding.height;
|
||||
|
||||
@@ -126,7 +126,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
|
||||
void Close() override
|
||||
{
|
||||
if (!_networking) Command<CMD_PAUSE>::Post(PM_PAUSED_NORMAL, false); // unpause
|
||||
ShowHighscoreTable(this->window_number, this->rank);
|
||||
if (_game_mode != GM_MENU) ShowHighscoreTable(this->window_number, this->rank);
|
||||
this->EndGameHighScoreBaseWindow::Close();
|
||||
}
|
||||
|
||||
|
||||
+18
-5
@@ -2040,12 +2040,14 @@ CommandCost CmdBuildIndustry(DoCommandFlag flags, TileIndex tile, IndustryType i
|
||||
Industry *ind = nullptr;
|
||||
if (deity_prospect || (_game_mode != GM_EDITOR && _current_company != OWNER_DEITY && _settings_game.construction.raw_industry_construction == 2 && indspec->IsRawIndustry())) {
|
||||
if (flags & DC_EXEC) {
|
||||
/* Prospected industries are build as OWNER_TOWN to not e.g. be build on owned land of the founder */
|
||||
Backup<CompanyID> cur_company(_current_company, OWNER_TOWN, FILE_LINE);
|
||||
/* Prospecting has a chance to fail, however we cannot guarantee that something can
|
||||
* be built on the map, so the chance gets lower when the map is fuller, but there
|
||||
* is nothing we can really do about that. */
|
||||
if (deity_prospect || Random() <= indspec->prospecting_chance) {
|
||||
bool prospect_success = deity_prospect || Random() <= indspec->prospecting_chance;
|
||||
if (prospect_success) {
|
||||
/* Prospected industries are build as OWNER_TOWN to not e.g. be build on owned land of the founder */
|
||||
IndustryAvailabilityCallType calltype = _current_company == OWNER_DEITY ? IACT_RANDOMCREATION : IACT_PROSPECTCREATION;
|
||||
Backup<CompanyID> cur_company(_current_company, OWNER_TOWN, FILE_LINE);
|
||||
for (int i = 0; i < 5000; i++) {
|
||||
/* We should not have more than one Random() in a function call
|
||||
* because parameter evaluation order is not guaranteed in the c++ standard
|
||||
@@ -2056,13 +2058,20 @@ CommandCost CmdBuildIndustry(DoCommandFlag flags, TileIndex tile, IndustryType i
|
||||
/* Check now each layout, starting with the random one */
|
||||
for (size_t j = 0; j < num_layouts; j++) {
|
||||
layout = (layout + 1) % num_layouts;
|
||||
ret = CreateNewIndustryHelper(tile, it, flags, indspec, layout, random_var8f, random_initial_bits, cur_company.GetOriginalValue(), _current_company == OWNER_DEITY ? IACT_RANDOMCREATION : IACT_PROSPECTCREATION, &ind);
|
||||
ret = CreateNewIndustryHelper(tile, it, flags, indspec, layout, random_var8f, random_initial_bits, cur_company.GetOriginalValue(), calltype, &ind);
|
||||
if (ret.Succeeded()) break;
|
||||
}
|
||||
if (ret.Succeeded()) break;
|
||||
}
|
||||
cur_company.Restore();
|
||||
}
|
||||
if (ret.Failed() && IsLocalCompany()) {
|
||||
if (prospect_success) {
|
||||
ShowErrorMessage(STR_ERROR_CAN_T_PROSPECT_INDUSTRY, STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING, WL_INFO);
|
||||
} else {
|
||||
ShowErrorMessage(STR_ERROR_CAN_T_PROSPECT_INDUSTRY, STR_ERROR_PROSPECTING_WAS_UNLUCKY, WL_INFO);
|
||||
}
|
||||
}
|
||||
cur_company.Restore();
|
||||
}
|
||||
} else {
|
||||
size_t layout = first_layout;
|
||||
@@ -2228,10 +2237,14 @@ static uint GetNumberOfIndustries()
|
||||
25, // low
|
||||
55, // normal
|
||||
80, // high
|
||||
0, // custom
|
||||
};
|
||||
|
||||
assert(lengthof(numof_industry_table) == ID_END);
|
||||
uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.industry_density : (uint)ID_VERY_LOW;
|
||||
|
||||
if (difficulty == ID_CUSTOM) return std::min<uint>(IndustryPool::MAX_SIZE, _settings_game.game_creation.custom_industry_number);
|
||||
|
||||
return std::min<uint>(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty]));
|
||||
}
|
||||
|
||||
|
||||
+23
-17
@@ -380,7 +380,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
NWidget(WWT_PANEL, COLOUR_BROWN),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 8),
|
||||
|
||||
/* 'generate game' and 'load game' buttons */
|
||||
/* 'New Game' and 'Load Game' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GENERATE_GAME), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
@@ -390,7 +390,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'play scenario' and 'play heightmap' buttons */
|
||||
/* 'Play Scenario' and 'Play Heightmap' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_PLAY_SCENARIO), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
@@ -400,7 +400,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'edit scenario' and 'play multiplayer' buttons */
|
||||
/* 'Scenario Editor' and 'Multiplayer' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_EDIT_SCENARIO), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_SCENARIO_EDITOR, STR_INTRO_TOOLTIP_SCENARIO_EDITOR), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
@@ -410,7 +410,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 7),
|
||||
|
||||
/* climate selection buttons */
|
||||
/* Climate selection buttons */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_SGI_TEMPERATE_LANDSCAPE), SetMinimalSize(77, 55),
|
||||
@@ -439,7 +439,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
|
||||
/* 'game options' and 'advanced settings' buttons */
|
||||
/* 'Game Options' and 'Settings' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_OPTIONS), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_GAME_OPTIONS, STR_INTRO_TOOLTIP_GAME_OPTIONS), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
@@ -449,29 +449,35 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'AO settings', 'Game Script settings', and 'newgrf settings' buttons */
|
||||
/* 'AI Settings' and 'Game Script Settings' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_AI_SETTINGS), SetMinimalSize(105, 12),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_AI_SETTINGS), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_AI_SETTINGS, STR_INTRO_TOOLTIP_AI_SETTINGS), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GS_SETTINGS), SetMinimalSize(106, 12),
|
||||
SetDataTip(STR_INTRO_GAMESCRIPT_SETTINGS, STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS), SetPadding(0, 0, 0, 0), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GRF_SETTINGS), SetMinimalSize(105, 12),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GS_SETTINGS), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_GAMESCRIPT_SETTINGS, STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS), SetPadding(0, 10, 0, 0), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'Check Online Content' and 'NewGRF Settings' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_CONTENT_DOWNLOAD), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GRF_SETTINGS), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_INTRO_TOOLTIP_NEWGRF_SETTINGS), SetPadding(0, 10, 0, 0), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'online content' and 'highscore' buttons */
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_CONTENT_DOWNLOAD), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_HIGHSCORE), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE), SetPadding(0, 10, 0, 0), SetFill(1, 0),
|
||||
/* 'Highscore Table' button */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_HIGHSCORE), SetMinimalSize(316, 12),
|
||||
SetDataTip(STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE), SetPadding(0, 10, 0, 10), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'exit program' button */
|
||||
/* 'Exit' button */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_EXIT), SetMinimalSize(128, 12),
|
||||
|
||||
+77
-28
@@ -500,7 +500,7 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||
if (!IsNonContinuousFoundation(f)) {
|
||||
/* Lower part of foundation */
|
||||
AddSortableSpriteToDraw(
|
||||
leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z
|
||||
leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z
|
||||
);
|
||||
}
|
||||
|
||||
@@ -512,38 +512,44 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||
byte inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
||||
|
||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
|
||||
f == FOUNDATION_INCLINED_X ? 16 : 1,
|
||||
f == FOUNDATION_INCLINED_Y ? 16 : 1,
|
||||
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
|
||||
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
|
||||
TILE_HEIGHT, ti->z
|
||||
);
|
||||
OffsetGroundSprite(31, 9);
|
||||
OffsetGroundSprite(0, 0);
|
||||
} else if (IsLeveledFoundation(f)) {
|
||||
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z - TILE_HEIGHT);
|
||||
OffsetGroundSprite(31, 1);
|
||||
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z - TILE_HEIGHT);
|
||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||
} else if (f == FOUNDATION_STEEP_LOWER) {
|
||||
/* one corner raised */
|
||||
OffsetGroundSprite(31, 1);
|
||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||
} else {
|
||||
/* halftile foundation */
|
||||
int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? 8 : 0);
|
||||
int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? 8 : 0);
|
||||
int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
||||
int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
||||
|
||||
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, 8, 8, 7, ti->z + TILE_HEIGHT);
|
||||
OffsetGroundSprite(31, 9);
|
||||
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z + TILE_HEIGHT);
|
||||
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
||||
* RemapCoords() but without zoom scaling. */
|
||||
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
||||
OffsetGroundSprite(-pt.x, -pt.y);
|
||||
}
|
||||
} else {
|
||||
if (IsLeveledFoundation(f)) {
|
||||
/* leveled foundation */
|
||||
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
|
||||
OffsetGroundSprite(31, 1);
|
||||
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
|
||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||
} else if (IsNonContinuousFoundation(f)) {
|
||||
/* halftile foundation */
|
||||
Corner halftile_corner = GetHalftileFoundationCorner(f);
|
||||
int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? 8 : 0);
|
||||
int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? 8 : 0);
|
||||
int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
||||
int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
||||
|
||||
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, 8, 8, 7, ti->z);
|
||||
OffsetGroundSprite(31, 9);
|
||||
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z);
|
||||
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
||||
* RemapCoords() but without zoom scaling. */
|
||||
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
||||
OffsetGroundSprite(-pt.x, -pt.y);
|
||||
} else if (IsSpecialRailFoundation(f)) {
|
||||
/* anti-zig-zag foundation */
|
||||
SpriteID spr;
|
||||
@@ -554,18 +560,18 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||
/* tile-slope = sloped along X/Y, foundation-slope = three corners raised */
|
||||
spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0);
|
||||
}
|
||||
AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
|
||||
OffsetGroundSprite(31, 9);
|
||||
AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
|
||||
OffsetGroundSprite(0, 0);
|
||||
} else {
|
||||
/* inclined foundation */
|
||||
byte inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
||||
|
||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
|
||||
f == FOUNDATION_INCLINED_X ? 16 : 1,
|
||||
f == FOUNDATION_INCLINED_Y ? 16 : 1,
|
||||
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
|
||||
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
|
||||
TILE_HEIGHT, ti->z
|
||||
);
|
||||
OffsetGroundSprite(31, 9);
|
||||
OffsetGroundSprite(0, 0);
|
||||
}
|
||||
ti->z += ApplyPixelFoundationToSlope(f, &ti->tileh);
|
||||
}
|
||||
@@ -1089,7 +1095,7 @@ static bool RiverMakeWider(TileIndex tile, void *data)
|
||||
/* If the tile is at height 0 after terraforming but the ocean hasn't flooded yet, don't build river. */
|
||||
if (GetTileMaxZ(tile) == 0) return false;
|
||||
|
||||
TileIndex origin_tile = *(TileIndex *)data;;
|
||||
TileIndex origin_tile = *(TileIndex *)data;
|
||||
Slope cur_slope = GetTileSlope(tile);
|
||||
Slope desired_slope = GetTileSlope(origin_tile); // Initialize matching the origin tile as a shortcut if no terraforming is needed.
|
||||
|
||||
@@ -1127,7 +1133,7 @@ static bool RiverMakeWider(TileIndex tile, void *data)
|
||||
}
|
||||
}
|
||||
/* If we find an adjacent river tile, remember it. We'll terraform to match it later if we don't find a slope. */
|
||||
if (IsTileFlat(tile)) flat_river_found = true;
|
||||
if (IsTileFlat(other_tile)) flat_river_found = true;
|
||||
}
|
||||
}
|
||||
/* We didn't find either an inclined or flat river, so we're climbing the wrong slope. Bail out. */
|
||||
@@ -1176,17 +1182,57 @@ static bool RiverMakeWider(TileIndex tile, void *data)
|
||||
Command<CMD_TERRAFORM_LAND>::Do(DC_EXEC | DC_AUTO, tile, to_change, true);
|
||||
}
|
||||
}
|
||||
/* Update cur_slope after possibly terraforming. */
|
||||
cur_slope = GetTileSlope(tile);
|
||||
}
|
||||
|
||||
/* Sloped rivers need water both upstream and downstream. */
|
||||
if (IsInclinedSlope(cur_slope)) {
|
||||
DiagDirection slope_direction = GetInclinedSlopeDirection(cur_slope);
|
||||
|
||||
TileIndex upstream_tile = TileAddByDiagDir(tile, slope_direction);
|
||||
TileIndex downstream_tile = TileAddByDiagDir(tile, ReverseDiagDir(slope_direction));
|
||||
|
||||
/* Don't look outside the map. */
|
||||
if (!IsValidTile(upstream_tile) || !IsValidTile(downstream_tile)) return false;
|
||||
|
||||
/* Downstream might be new ocean created by our terraforming, and it hasn't flooded yet. */
|
||||
bool downstream_is_ocean = GetTileZ(downstream_tile) == 0 && (GetTileSlope(downstream_tile) == SLOPE_FLAT || IsSlopeWithOneCornerRaised(GetTileSlope(downstream_tile)));
|
||||
|
||||
/* If downstream is dry, flat, and not ocean, try making it a river tile. */
|
||||
if (!IsWaterTile(downstream_tile) && !downstream_is_ocean) {
|
||||
/* If the tile upstream isn't flat, don't bother. */
|
||||
if (GetTileSlope(downstream_tile) != SLOPE_FLAT) return false;
|
||||
|
||||
MakeRiver(downstream_tile, Random());
|
||||
MarkTileDirtyByTile(downstream_tile);
|
||||
|
||||
/* Remove desert directly around the river tile. */
|
||||
TileIndex cur_tile = downstream_tile;
|
||||
CircularTileSearch(&cur_tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
|
||||
}
|
||||
|
||||
/* If upstream is dry and flat, try making it a river tile. */
|
||||
if (!IsWaterTile(upstream_tile)) {
|
||||
/* If the tile upstream isn't flat, don't bother. */
|
||||
if (GetTileSlope(upstream_tile) != SLOPE_FLAT) return false;
|
||||
|
||||
MakeRiver(upstream_tile, Random());
|
||||
MarkTileDirtyByTile(upstream_tile);
|
||||
|
||||
/* Remove desert directly around the river tile. */
|
||||
TileIndex cur_tile = upstream_tile;
|
||||
CircularTileSearch(&cur_tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
|
||||
}
|
||||
}
|
||||
/* Update cur_slope after possibly terraforming. */
|
||||
cur_slope = GetTileSlope(tile);
|
||||
|
||||
/* If the tile slope matches the desired slope, add a river tile. */
|
||||
if (cur_slope == desired_slope) {
|
||||
MakeRiver(tile, Random());
|
||||
MarkTileDirtyByTile(tile);
|
||||
|
||||
/* Remove desert directly around the river tile. */
|
||||
TileIndex cur_tile = tile;
|
||||
MarkTileDirtyByTile(cur_tile);
|
||||
CircularTileSearch(&cur_tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
|
||||
}
|
||||
|
||||
@@ -1289,7 +1335,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
|
||||
current_river_length = DistanceManhattan(data->spring, tile);
|
||||
radius = std::min(3u, (current_river_length / (long_river_length / 3u)) + 1u);
|
||||
|
||||
if (radius > 1) CircularTileSearch(&tile, radius + RandomRange(1), RiverMakeWider, (void *)&path->node.tile);
|
||||
if (radius > 1) CircularTileSearch(&tile, radius, RiverMakeWider, (void *)&path->node.tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1460,6 +1506,9 @@ static void CreateRivers()
|
||||
}
|
||||
}
|
||||
|
||||
/* Widening rivers may have left some tiles requiring to be watered. */
|
||||
ConvertGroundTilesIntoWaterTiles();
|
||||
|
||||
/* Run tile loop to update the ground density. */
|
||||
for (uint i = 0; i != 256; i++) {
|
||||
if (i % 64 == 0) IncreaseGeneratingWorldProgress(GWP_RIVER);
|
||||
|
||||
@@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Regs
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum aanvanklike lening: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimum bedrag wat 'n maatskappy kan leen (sonder die inagneming van inflasie)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Rentekoers: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lening rentekoers: beheer ook inflasie indien aangeskakel
|
||||
@@ -2482,8 +2483,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Verhoog
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies Spoor Brug
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selekteer Pad Brug
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuring - klik op jou verkose brug om dit te bou
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Kabelstut, Staal
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Balk, Staal
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrydraer, Staal
|
||||
@@ -3054,6 +3053,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Gaan na vorige normale sprite, en ignoreer enige pseudo/her-kleur/font sprite en spring terug na die einde
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorstelling van geselekteerde sprite. Die belyning word geignoreer waneer sprite geteken word
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Beweeg die sprite rond, verander die X en Y afwyking. Ctrl-klik om die sprite agt lengtes rond te beweeg op 'n slag
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Relatiewe herstel
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel die huidige relatiewe verplasing
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X verplasing: {NUM}, Y verplasing: {NUM} (Werklik)
|
||||
|
||||
@@ -199,6 +199,7 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}ح
|
||||
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}حصان
|
||||
STR_UNITS_POWER_SI :{COMMA}{NBSP}ك واط
|
||||
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
|
||||
|
||||
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP} طن
|
||||
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}طن
|
||||
@@ -956,11 +957,14 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}اختر
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :اخرى
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}تسريع الأجهزة
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}حدد هذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}اخترهذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}لن يعمل الإعداد إلا بعد إعادة تشغيل اللعبة
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}حدد هذا المربع لمزامنة الشاشة (v-sync). سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة. يعمل فقط مع تمكين تسريع الأجهزة (hardware acceleration)
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}الكشف التلقائي عن الحجم
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}اختر هذا المربع لكشف حجم الواجهة تلقائيا
|
||||
|
||||
|
||||
|
||||
@@ -1129,6 +1133,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :يسار
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :متوسط
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :سعر الفائدة على القرض يتحكم أيضًا في التضخم ، إذا تم تمكينه
|
||||
|
||||
@@ -1146,6 +1151,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} سنة
|
||||
|
||||
STR_CONFIG_SETTING_RECESSIONS :حالات الركود: {STRING}
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_REVERSING :عدم السماح بعودة القطار إلى الخلف في المحطات: {STRING}
|
||||
|
||||
STR_CONFIG_SETTING_DISASTERS :الكوارث: {STRING}
|
||||
|
||||
@@ -1183,6 +1189,7 @@ STR_CONFIG_SETTING_INFLATION_HELPTEXT :تمكين ال
|
||||
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :الارتفاع الأقصى لبناء الجسور
|
||||
|
||||
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :الطول الأقصى لبناء الأنفاق
|
||||
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :طريقة بناء المصانع الأولية يدوية : {STRING}
|
||||
###length 3
|
||||
@@ -1269,6 +1276,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} ثان
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL :أعرض عدد السكان مع الاسم على العلامة: {STRING}
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :اعرض عدد سكان البلدات في علماتها على الخريطة
|
||||
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :سمك الخطوط في العرض: {STRING}
|
||||
|
||||
@@ -1347,6 +1355,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :اخضر غام
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :بنفسجي
|
||||
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :رمادي إلى أحمر
|
||||
|
||||
###length 4
|
||||
|
||||
@@ -1391,7 +1400,7 @@ STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :اختر الو
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :استخدم {STRING} نمط التاريخ لاسم اللعبة المحفوظة
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :طويل - 31 ديسمبر 2008
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :قصير - 31 - 12 - 2008
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :قصير (31-12-2008)
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ايزو 31-12-2008
|
||||
|
||||
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :إيقاف اللعبة تلقائيا عند بدأ لعبة جديدة: {STRING}
|
||||
@@ -1477,6 +1486,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح ب
|
||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :السماح بلاعبين كمبيوترالذكاء الصناعي بالمشاركة في الالعاب الجماعية.
|
||||
|
||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes قبل تعليق الاسكربت: {STRING}
|
||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
||||
|
||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT :فترات الصيانة بالنسبة المئوية : {STRING}
|
||||
|
||||
@@ -1490,6 +1500,7 @@ STR_CONFIG_SETTING_WAGONSPEEDLIMITS :السماح ب
|
||||
STR_CONFIG_SETTING_DISABLE_ELRAILS :تعطيل سكة القطار الكهربائي: {STRING}
|
||||
|
||||
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :وصول اول مركبة لمحطة اللاعب: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :عرض جريدة عندما تصل السيارة الأولى إلى محطة اللاعب الجديد
|
||||
|
||||
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :وصول اول مركبة لمحطة الخصوم: {STRING}
|
||||
|
||||
@@ -1543,6 +1554,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_ZERO :لا تنتهي
|
||||
STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :مجمد
|
||||
|
||||
STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :عند التمكين ، السماح بشراء وبيع أسهم الشركة. ستكون الأسهم متاحة فقط للشركات التي بلغت سنًا معينة
|
||||
|
||||
|
||||
|
||||
@@ -1551,11 +1563,13 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :عند السح
|
||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING}
|
||||
|
||||
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :الدوران خلال الاشارات: {STRING}
|
||||
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :حدد أنواع الإشارات التي تريد التنقل خلالها عند النقر (Ctrl+Click) فوق إشارة مبنية باستخدام أداة الإشارة
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :اشارات الطريق فقط
|
||||
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :الكل واضح
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :اشارات الطريق فقط
|
||||
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT :تصميم الطرق للمدن الجديدة : {STRING}
|
||||
###length 5
|
||||
@@ -1577,6 +1591,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :محذور
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :مسموح
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :مسموح - نمط مدينة قابل للتعديل
|
||||
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :توليد البضائع في المدينة: {STRING}
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :تربيعي (أصلي)
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :خطي
|
||||
@@ -1587,9 +1602,11 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :تنموا ول
|
||||
|
||||
STR_CONFIG_SETTING_TOOLBAR_POS :موقع شريط الأدوات الرئيسي: {STRING}
|
||||
STR_CONFIG_SETTING_STATUSBAR_POS :موقع شريط المعلومات: {STRING}
|
||||
STR_CONFIG_SETTING_SNAP_RADIUS :دائرة تثبيت النافذة: {STRING}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :غير مفعل
|
||||
STR_CONFIG_SETTING_SOFT_LIMIT :حدود نعومة النوافذ - غير ملتصقة - :{STRING}
|
||||
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :عدد النوافذ المفتوحة غير اللاصقة قبل أن يتم إغلاق النوافذ القديمة تلقائيًا لإفساح المجال للنوافذ الجديدة
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :غير مفعل
|
||||
|
||||
@@ -1615,6 +1632,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :سريع
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :سريع جدا
|
||||
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :عدد المدن التي ستصبح مدينة كبيرة، وبالتالي اي مدينة تبدء اكبر وتنمو بطريقة سريعة.
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 في {COMMA}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف المدن المبدئي: {STRING}
|
||||
|
||||
@@ -1626,6 +1644,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :كلما قمت
|
||||
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :ضبط هذا إلى أقل من 100٪ يؤدي إلى جعل التوزيع المتماثل يتصرف مثل التوزيع غير المتماثل. سيتم إعادة شحنات أقل غصبا إذا تم إرسال مبلغ معين إلى المحطة. إذا قمت بتعيينه على 0٪ ، فإن التوزيع المتماثل يتصرف تمامًا مثل التوزيع غير المتماثل
|
||||
|
||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :تشبع المسارات القصيرة قبل استخدام المسارات عالية القدرة: {STRING}
|
||||
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :وحدات السرعة: {STRING}
|
||||
###length 4
|
||||
@@ -1669,11 +1688,13 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE} مصا
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :توزيع البضائع{ORANGE}
|
||||
STR_CONFIG_SETTING_AI :{ORANGE}المتنافسين
|
||||
STR_CONFIG_SETTING_AI_NPC :{ORANGE} لاعبين الحاسوب
|
||||
STR_CONFIG_SETTING_NETWORK :{ORANGE}شبكة الاتصال
|
||||
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :موجد الطريق- قصاص الطريق - للقطارات:{STRING}
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :موجد الطريق (قصاص الأثر) للعربات: {STRING}
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :مكتشف المسار لاستخدامه لعربات الطرق
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :موجد طريق العبور للسفن: {STRING}
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :مكتشف المسار لاستخدامه للسفن
|
||||
STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :العكس عند الإشارات: {STRING}
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_PATHFINDER_NPF :NPF
|
||||
@@ -1951,6 +1972,8 @@ STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}اللاعبون عبر الإنترنت
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}الاسم
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :المشاهدين
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(شركة جديدة)
|
||||
|
||||
# Matches ConnectionType
|
||||
@@ -1961,6 +1984,7 @@ STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :منع
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}هل أنت متأكد أنك تريد طرد اللاعب '{STRING}'؟
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}هل أنت متأكد أنك تريد حظر اللاعب '{STRING}'؟
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}هل أنت متأكد أنك تريد حذف شركة '{COMPANY}'؟
|
||||
|
||||
STR_NETWORK_ASK_RELAY_NO :{BLACK}لا
|
||||
|
||||
@@ -2251,8 +2275,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}زياد
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}اختر جسر السكة
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}اختر الجسر المناسب
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}بناء الجسور - اختر الجسر المفضل لديك لبنائة
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :تعليق, حديدي
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :العارضة, حديدية
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :الحامل, حديدي
|
||||
@@ -2594,6 +2616,8 @@ STR_FRAMERATE_GAMESCRIPT :{BLACK} مخط
|
||||
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
|
||||
|
||||
###length 15
|
||||
STR_FRAMETIME_CAPTION_GL_TRAINS : تكتكة القطار
|
||||
STR_FRAMETIME_CAPTION_GL_LINKGRAPH :تأخر ارتباط الرسم البياني
|
||||
STR_FRAMETIME_CAPTION_SOUND :اختلاط الصوت
|
||||
STR_FRAMETIME_CAPTION_GAMESCRIPT :كتابة اللعبة
|
||||
|
||||
@@ -2638,7 +2662,9 @@ STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}عدد
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}قم بزيادة أقصى ارتفاع لأعلى قمة على الخريطة بواحد
|
||||
STR_MAPGEN_SNOW_COVERAGE :{BLACK}تغطية الثلج:
|
||||
STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}تقليل تغطية الثلوج بنسبة عشرة بالمائة
|
||||
STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_DESERT_COVERAGE :{BLACK}مدى تغطيت السحراء:
|
||||
STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}تقليل التغطية الصحراوية بنسبة عشرة بالمائة
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_LAND_GENERATOR :{BLACK}مولد الخريطة:
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK} نوع التضاريس
|
||||
@@ -2804,7 +2830,12 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}اذهب
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}العفريتة السابقة.
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}نابع للعفريتة الطبيعية التالية، تجاوز اي عفريتة موقوفة/ مصبوغة/مخطوطة و انهي في البداية.
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}عرض العفريتة المختارة حاليا. يتم تجاهل الموائمة عند رسم هذا العفريت.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}حرك العفريتة في الجوار، غير الاحداثيات س ، ص.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}حرك الرسمة، وقم بتغيير إزاحة X وY. قم ب Ctrl+Click لتحريك الكائن ثماني وحدات في المرة الواحدة
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}الازاحة (X): {NUM}، الازاحة (Y): {NUM} (نسبي)
|
||||
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}اختر عفريتة
|
||||
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}اختر عفريتة من اي مكان في الشاشة.
|
||||
|
||||
@@ -3022,8 +3053,10 @@ STR_STATION_VIEW_GROUP :{BLACK}جمع
|
||||
STR_STATION_VIEW_WAITING_AMOUNT :الكمية: في الانتظار
|
||||
STR_STATION_VIEW_PLANNED_AMOUNT :المبلغ: تم تخطيطه
|
||||
STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} من {STATION}
|
||||
STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} من خلال {STATION}
|
||||
STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} إلى {STATION}
|
||||
STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHORT} إلى أي محطة
|
||||
STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} بدون توقف
|
||||
|
||||
STR_STATION_VIEW_GROUP_V_S_D :عبر-المصدر-الوجهة
|
||||
|
||||
@@ -3276,6 +3309,7 @@ STR_PURCHASE_INFO_COST :{BLACK}التك
|
||||
STR_PURCHASE_INFO_COST_REFIT :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}{BLACK} (تكلفة التغيير: {GOLD}{CURRENCY_LONG}{BLACK})
|
||||
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}الوزن: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT})
|
||||
STR_PURCHASE_INFO_COST_SPEED :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}{BLACK} السرعة : {GOLD}{VELOCITY}
|
||||
STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}{BLACK} (تكلفة التغير: {GOLD}{CURRENCY_LONG}{BLACK}) السرعة: {GOLD}{VELOCITY}
|
||||
STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK} السعة {GOLD}{CARGO_LONG}, {CARGO_LONG}
|
||||
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} العربات ذات الطاقة: {GOLD}+{POWER}{BLACK} الوزن: {GOLD}+{WEIGHT_SHORT}
|
||||
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING}
|
||||
@@ -3301,6 +3335,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}شراء
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}شراء العربة وتجديد بضائعها
|
||||
STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}شراء وإعادة تجهيز السفينة
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة الموضحة
|
||||
@@ -3818,13 +3853,14 @@ STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}حول
|
||||
STR_TIMETABLE_TOOLTIP :{BLACK}جدولة الأوامر - اضغط على الامر لاظهارة
|
||||
|
||||
STR_TIMETABLE_NO_TRAVEL :لا رحيل
|
||||
STR_TIMETABLE_NOT_TIMETABLEABLE :المغادرة (ذاتي: بواسطة الامر اليدوي التالي)
|
||||
STR_TIMETABLE_NOT_TIMETABLEABLE :المغادرة (ذاتي: مجدول بواسطة الامر اليدوي التالي)
|
||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :مسافر (غير مجدوله)
|
||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :سافر(بدون جدول زمني) مع تقريبا {2:VELOCITY}
|
||||
STR_TIMETABLE_TRAVEL_FOR :مسافر لـ {STRING}
|
||||
STR_TIMETABLE_TRAVEL_FOR_SPEED :سافر لي {STRING} بمعدل {VELOCITY}
|
||||
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :سافر(إلى {STRING}, بدون جدول زمني)
|
||||
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :سافر (إلى {STRING}, بدون الجدول الزمني) مع تقريبا {VELOCITY}
|
||||
STR_TIMETABLE_STAY_FOR_ESTIMATED :(البقاء ل{STRING}، ليس مجدول)
|
||||
STR_TIMETABLE_STAY_FOR :ويبقى لـ {STRING}
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR :ويسافر لـ {STRING}
|
||||
STR_TIMETABLE_DAYS :{COMMA}يوم
|
||||
@@ -3900,7 +3936,10 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}واحد
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW} شاشة اخطاء الذكاء الصناعي متوفرة فقط للخادم (سرڤر)
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}اعدادات االذكاء الاصطناعي
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}تكوين مخطوط اللعبة
|
||||
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}مخطوطات اللعبة الذي سيتم تحميله في اللعبة التالية
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}الذكاء الاصطناعي الذي سيتم تحميله في اللعبة التالية
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :لاعب انساني
|
||||
STR_AI_CONFIG_RANDOM_AI :ذكاء صناعي عشوائي
|
||||
STR_AI_CONFIG_NONE :(لا شيء)
|
||||
@@ -4185,6 +4224,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :مستودع خ
|
||||
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} طويل للغايه بعد اﻹستبدال
|
||||
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}لا يوجد نظام مطبق للتبديل/ التجديد
|
||||
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(حدود التكلفة للتبديل)
|
||||
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}العربة الجديدة لا تستطيع حمل {STRING}
|
||||
|
||||
# Rail construction errors
|
||||
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}تركيبة سكك غير صالحة
|
||||
@@ -4213,6 +4253,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_ROAD :{WHITE}لا يوجد طريق مناسب
|
||||
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}لا يوجد ترام مناسب
|
||||
|
||||
# Waterway construction errors
|
||||
|
||||
+5
-2
@@ -1108,6 +1108,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Eskuina
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Gehienezko mailegua joko hasieran: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Konpainiek eskatu dezaketen gehienezko mailegua(inflazioa kontua hartu gabe)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Interes tasa: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Maileguen interes tasa; inflazioa ere kontrolatuko du, gaitzen bada
|
||||
@@ -2354,8 +2355,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Seinale
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Trenbide zubia aukeratu
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Errepide zubia aukeratu
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Zubi aukerak - eraiki nahi duzun zubian klik egin
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Altzairuzko zubi esekia
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Altzairuzko habe zubia
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Altzairuzko mentsula zubia
|
||||
@@ -2876,6 +2875,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Aldez au
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Aurreko grafiko arruntera joan, pseudo/birkoloretu/grafiko tipoak desgaituz
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Orain aukeratutako grafikoaren aurkezpena. Alineazioa ez da kontua hartzen grafiko hau egiterakoan
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite-a mugitu ingurunean, X eta Y-ren desplazamenduak aldatuz. Ctrl+Klik sprite-a zortzi unitatero mugitzeko
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Erlatiboa berezarri
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Momentuan dauden desplazamendu erlatiboak erreseteatu
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X desplazamendua: {NUM}, Y desplazamendua: {NUM} (Absolutua)
|
||||
|
||||
@@ -1456,6 +1456,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :правару
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максымальная сума пазыкі: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максымальная сума пазыкі для кампаніі (без уліку інфляцыі)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Адсоткавая стаўка: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Адсоткавая стаўка па пазыках; таксама кантралюе інфляцыю, калі тая ўключана
|
||||
@@ -2830,8 +2831,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Павя
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Выберыце чыгуначны мост
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Выберыце аўтамабiльны мост
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Выбар моста — пстрыкніце па малюнку моста, які Вы хочаце пабудаваць
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Падвесны сталёвы
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Бэлечны сталёвы
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Кансольны сталёвы
|
||||
@@ -3404,6 +3403,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Папя
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Перайсьці да папярэдняга звычайнага спрайта, прапускаючы змяняючыя колер, шрыфтавыя, псэўдаспрайты. Пераход з пачатку сьпісу да апошняга спрайта.
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Прадстаўленьне выбранага спрайта. Выраўноўваньне не ўлічваецца пры прарысоўцы гэтага спрайта.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Рухайце спрайт, зьмяняючы зрушэньне па X і па Y. Ctrl+пстрычка, каб зрушыць спрайт на восем адзінак за раз
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Скід зрушэння
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Скінуць значэнні адноснага зрушэння
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Зрушэнне X: {NUM}; зрушэнне Y: {NUM} (абсалютнае)
|
||||
|
||||
@@ -201,6 +201,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp
|
||||
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv
|
||||
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
|
||||
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
|
||||
|
||||
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}T
|
||||
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
|
||||
@@ -228,8 +237,8 @@ STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Filtro:
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Digite o filtro de série
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma palavra-chave para filtrar a lista
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Insira uma ou mais palavras-chave para filtrar a lista
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Insira uma ou mais palavras-chave para filtrar a lista
|
||||
|
||||
STR_TOOLTIP_GROUP_ORDER :{BLACK}Selecionar ordem de agrupamento
|
||||
STR_TOOLTIP_SORT_ORDER :{BLACK}Selecione ordem de classificação (descendente/ascendente)
|
||||
@@ -378,9 +387,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Geraçã
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Geração de indústria
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Contrução de rodovias
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construção de trilho de bonde
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Shift alterna construção/exibição de preço estimado
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Shift alterna construção/preço estimado
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
|
||||
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
@@ -396,6 +405,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Sair
|
||||
###length 15
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Opções do jogo
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações
|
||||
STR_SETTINGS_MENU_AI_SETTINGS :Definições de IA
|
||||
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Definições de script do jogo
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Definições do NewGRF
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de Transparência
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Nomes de cidades exibidos
|
||||
@@ -735,7 +746,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Exibir i
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Exibir fluxo de carga no mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Exibir rotas de transporte no mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Exibir vegetação no mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Exibir proprietários de terreno no mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Exibir proprietários de terrenos no mapa
|
||||
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para alternar sua exibição. Ctrl+Clique desabilita todos os tipos exceto a selecionada. Ctrl+Clique nela novamente para habilitar todos os tipos de indústrias
|
||||
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma compania para alternar a exibição de suas propriedades. Ctrl+Clique desabilita todas as companias exceto a selecionada. Ctrl+Clique nela novamente para habilitar todas as companias
|
||||
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique numa carga para alternar a exibição de sua propriedade. Ctrl+Clique desativa todas as cargas exceto a selecionada. Ctrl+Clique novamente para exibir todas
|
||||
@@ -996,10 +1007,21 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A config
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para habilitar o v-sync na tela. Qualquer mudança nesta configuração só será aplicada após reiniciar o jogo. Só funciona com a aceleração de hardware habilitada
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Motorista atual: {STRING}
|
||||
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Driver de vídeo atual: {STRING}
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface
|
||||
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho do interface. Mantenha pressionada a tecla Ctrl para um ajuste contínuo
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detectar tamanho automaticamente
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detectar o tamanho da interface automaticamente
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar de chanfros
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar os chanfros por tamanho de interface
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_1X :1x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_2X :2x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_3X :3x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_4X :4x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_5X :5x
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos
|
||||
|
||||
@@ -1185,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Empréstimo Inicial Máximo: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima a ser emprestada para uma companhia (sem levar em conta a inflação)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Taxa de Juros: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Juros de empréstimo; também controla inflação, se ativado
|
||||
@@ -1411,6 +1434,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da li
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicione uma linha à janela de construção do veículo, mostrando de qual NewGRF o veículo selecionado vem.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Quando ativado, a carga transportável do veículo aparecerá acima dela nas listas de veículos
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :O terreno define a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das cidades. NewGRF's e Scripts de Jogo permitem um controle mais fino
|
||||
@@ -1902,13 +1927,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Demore {STRING}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tempo tomado para cada recálculo de um componente de um gráfico. Quando um recálculo começa, um processo é criado e é executado por esse número de dias. Quanto menos dias você define, maior a chance do processo não terminar quando era para ter terminado. Nesse caso, o jogo irá parar até ele terminar ("lag"). Quanto maior você definir isso, mais tempo leva para a distribuição ser atualizada quando as rotas mudarem.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simétrico" significa que aproximadamente a mesma quantidade de passageiros será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que a quantidade de passageiros enviada em ambas as direções será arbitrária. "manual" significa que não haverá distribuição automática.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática para os passageiros.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correios: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simétrico" significa que aproximadamente a mesma quantidade de correio será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que a quantidade de correio enviada em ambas as direções será arbitrária. "manual" significa que não haverá distribuição automática.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá por correio.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para classe BLINDADOS de carga: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe BLINDADO indica objetos de valor no clima temperado, diamantes no subtropical ou ouro no subártico. NewGRF's podem mudar isso. "simétrico" significa que aproximadamente a mesma quantidade de carga será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que quantidades de carga arbitrárias serão enviadas em ambas as direções. "manual" significa que não haverá distribuição automática. Para objetos de valor, sugere-se usar "assimétrico" ou "manual" para subártico, já que bancos não enviam ouro de volta a minas. Para temperado e subtropical você pode selecionar "simétrico", já que bancos trocam objetos de valor entre si.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem mudar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"assimétrico" significa que quantidades de carga arbitrárias serão enviadas em ambas as direções. "manual" significa que não haverá distribuição automática. Você provavelmente irá querer usar "assimétrico" ou "manual".
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :assimétrico
|
||||
@@ -2046,6 +2071,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Pontuaç
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configurações
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configurar NewGRF
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Checar conteúdo on-line
|
||||
STR_INTRO_AI_SETTINGS :{BLACK}Definições de IA
|
||||
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Definições de Script do Jogo
|
||||
STR_INTRO_QUIT :{BLACK}Sair
|
||||
|
||||
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique para pular a configuração do mapa
|
||||
@@ -2065,6 +2092,8 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Exibe as
|
||||
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Config. de exibição
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Exibir configs. dos NewGRF
|
||||
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Checar por conteúdo novo e atualizado para baixar
|
||||
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Mostrar definições de IA
|
||||
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Mostrar definições de Script do Jogo
|
||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair do 'OpenTTD'
|
||||
|
||||
STR_INTRO_BASESET :{BLACK}Faltam {NUM} "sprite{P "" s}" no conjunto de gráficos base selecionado. Por favor verifique se há atualizações para ele.
|
||||
@@ -2455,13 +2484,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :aguardando atua
|
||||
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :saindo
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} entrou no jogo
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} entrou no jogo (Client #{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} entrou na companhia #{2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} entrou no jogo (Client #{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} entrou na empresa #{2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} está assistindo ao jogo
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} abriu uma nova companhia (#{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} saiu do jogo ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} iniciou uma nova empresa (#{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} saiu do jogo ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} mudou seu nome para {STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu {2:CURRENCY_LONG} a {1:STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} deu {2:CURRENCY_LONG} a {1:STRING}
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor fechou a sessão
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde...
|
||||
STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi kickado. Motivo: ({STRING})
|
||||
@@ -2472,7 +2501,7 @@ STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Seu serv
|
||||
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Outros jogadores não poderão se conectar ao seu servidor
|
||||
|
||||
# Content downloading window
|
||||
STR_CONTENT_TITLE :{WHITE}Baixando conteúdo
|
||||
STR_CONTENT_TITLE :{WHITE}Download de conteúdo
|
||||
STR_CONTENT_TYPE_CAPTION :{BLACK}Tipo
|
||||
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo do conteúdo
|
||||
STR_CONTENT_NAME_CAPTION :{BLACK}Nome
|
||||
@@ -2494,7 +2523,7 @@ STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar
|
||||
STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Baixar
|
||||
STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Baixa o conteúdo selecionado
|
||||
STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Tamanho total do download: {WHITE}{BYTES}
|
||||
STR_CONTENT_DETAIL_TITLE :{SILVER}INFO DO CONT.
|
||||
STR_CONTENT_DETAIL_TITLE :{SILVER}INFORMAÇÕES DO CONTEÚDO
|
||||
|
||||
###length 5
|
||||
STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Você não selecionou para ser baixado
|
||||
@@ -2576,6 +2605,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
|
||||
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}sobrecarregado
|
||||
|
||||
# Linkgraph tooltip
|
||||
STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} a ser transportado mensalmente de {STATION} para {STATION} ({COMMA}% da capacidade){STRING}
|
||||
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} para ser transportado de volta ({COMMA}% da capacidade)
|
||||
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tempo médio de viagem: {NUM}{NBSP}dia{P "" s}
|
||||
|
||||
# Base for station construction window(s)
|
||||
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Destacar cobertura
|
||||
@@ -2585,6 +2617,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Não des
|
||||
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Destacar área de cobertura da construção proposta
|
||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Aceita: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Suprimentos: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Custo de manutenção: {GOLD}{CURRENCY_SHORT}/ano
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Unir estação
|
||||
@@ -2667,8 +2700,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Ferroviária
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Rodoviária
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - clique na ponte desejada para construir
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensa, Aço
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Vigas, Aço
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Aço
|
||||
@@ -2772,11 +2807,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Terreno
|
||||
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Baixar um canto do terreno. Arrastar abaixa o primeiro canto selecionado e nivela a área selecionada à altura do novo canto. CTRL seleciona a área diagonalmente. Shift alterna construção/preço estimado
|
||||
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK} Elevar um canto do terreno. Arrastar eleva o primeiro canto selecionado e nivela a área selecionada à nova altura do canto. Ctrl seleciona a área diagonalmente. Shift alterna contrução/preço estimado
|
||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl seleciona uma área diagonalmente. Shift alterna contrução/preço estimado
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Shift altera construção/preço estimado
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
|
||||
|
||||
# Object construction window
|
||||
STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecione o objeto a ser construído. Shift alterna construção/preço estimado
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecione o objeto para construir. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
|
||||
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecione uma categoria de objeto para construir
|
||||
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto
|
||||
STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados
|
||||
@@ -2788,15 +2823,15 @@ STR_OBJECT_CLASS_TRNS :Transmissores
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Árvores
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Selecionar um tipo de árvore para plantar. Se o local já tiver uma árvore, isso irá adicionar mais árvores do tipo misto indepentendemente do tipo selecionado
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório, Shift alterna entre construção/preço estimado
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Coloque árvores de tipo aleatório. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta árvores aleatoriamente pelo terreno
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente pelo terreno
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta árvores isoladas ao arrastar pelo terreno.
|
||||
STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque
|
||||
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta pequenas florestas ao arrastar pelo terreno.
|
||||
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar pequenas florestas ao arrastar sobre o terreno.
|
||||
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta
|
||||
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planta florestas grandes ao arrastar pelo terreno.
|
||||
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar pelo terreno.
|
||||
|
||||
# Land generation window (SE)
|
||||
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Gerar Terreno
|
||||
@@ -2820,6 +2855,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Cidade A
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Constrói cidade num local aleatório
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias cidades aleatórias
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com cidades colocadas aleatoriamente
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir todas as cidades
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as cidades cresçam ligeiramente
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da cidade:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Coloque o nome da cidade
|
||||
@@ -3120,6 +3157,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Regularidade
|
||||
STR_MAPGEN_VARIETY :{BLACK}Distribuição da variedade
|
||||
STR_MAPGEN_GENERATE :{WHITE}Gerar
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Definições de NewGRF
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de NewGRF
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}Definições de IA
|
||||
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de IA
|
||||
STR_MAPGEN_GS_SETTINGS :{BLACK}Definições de Script do Jogo
|
||||
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de script do jogo
|
||||
|
||||
###length 21
|
||||
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Inglês (Original)
|
||||
@@ -3288,6 +3331,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}"Sprite"
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Retorna ao "sprite" normal anterior, pulando quaisquer "sprites" falsos, recoloridos ou de fontes, e junta tudo do primeiro ao último
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do "sprite" atualmente selecionado. O alinhamento é ignorado ao desenhar esse "sprite"
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o "sprite", alterando os offsets X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centralizado
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Mira
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Resetar relativo
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reseta os offsets relativos atuais
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absoluto)
|
||||
@@ -3306,14 +3356,14 @@ STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Um erro
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}Um erro NewGRF ocorreu:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} não irá funcionar com a versão do TTDPatch encontrada pelo OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} funciona na versão {STRING} de TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é projetado para ser usado com {STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :parâmetro inválido para {1:STRING}: parâmetro {STRING} ({NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve ser carregado antes de {STRING}
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {STRING}
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer versão {STRING} ou maior do OpenTTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é projetado para ser usado com {2:STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Parâmetro inválido para {1:STRING}: parâmetro {2:STRING} ({3:NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve ser carregado antes de {2:STRING}
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING}
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer versão {STRING} ou superior do OpenTTD
|
||||
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF foi designado para tradução
|
||||
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Muitas NewGRFs estão carregadas
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como um NewGRF estático em conjunto com {STRING} pode causar desincronias
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar dessincronizações
|
||||
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :"Sprite" inesperado (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação Desconhecida 0 {4:HEX} (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM})
|
||||
@@ -3445,14 +3495,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar exclusi
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a prefeitura
|
||||
|
||||
###length 8
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um pequeno raio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária média, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Iniciar uma grande campanha publicitária, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um grande raio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financiar a reconstrução da malha rodoviária urbana.{}Causa engarrafamentos consideráveis ao tráfego por até 6 meses.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Fornece um aumento permanente na avaliação da estação nesta cidade.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financiar a construção de edifícios comerciais novos na cidade.{}Fornece um aumento temporário do crescimento da cidade nesta cidade.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Comprar a exclusividade dos serviços durante 1 ano na cidade.{}A prefeitura da cidade não permitirá que passageiros e cargas usem as estações de seus concorrentes.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Subornar a prefeitura para aumentar a sua avaliação, correndo o risco de uma penalidade severa se apanhado.{}Preço: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um pequeno raio ao redor do centro da cidade.{}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária média, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma grande campanha publicitária, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um grande raio ao redor do centro da cidade{}{POP_COLOUR}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Financiar obras de reconstrução da malha rodoviária urbana.{}Causa engarrafamentos consideráveis ao tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Fornece um aumento permanente na classificação da estação nesta cidade..{}{POP_COLOUR}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na cidade.{}Providencia um aumento temporário no crescimento desta cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Comprar a exclusividade dos serviços durante 1 ano na cidade.{}A prefeitura da cidade não permitirá que passageiros e cargas utilizem as estações de seus concorrentes..{}{POP_COLOUR}Custo: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação, correndo o risco de uma penalidade severa se for pego.{}{POP_COLOUR}Custo: {CURRENCY_LONG}
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Objetivos
|
||||
@@ -3625,14 +3675,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Navios
|
||||
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Juros do Empréstimo
|
||||
STR_FINANCES_SECTION_OTHER :{GOLD}Outros
|
||||
|
||||
STR_FINANCES_TOTAL_CAPTION :{WHITE}Total
|
||||
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
|
||||
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
|
||||
STR_FINANCES_PROFIT :{WHITE}Lucro
|
||||
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanço Bancário
|
||||
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Fundos Próprios
|
||||
STR_FINANCES_LOAN_TITLE :{WHITE}Empréstimo
|
||||
STR_FINANCES_INTEREST_RATE :{WHITE}Juro do Empréstimo: {BLACK}{NUM}%
|
||||
STR_FINANCES_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_BUTTON :{BLACK}Pedir {CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Pedir empréstimo. Ctrl+Clique pede o máximo possível
|
||||
STR_FINANCES_REPAY_BUTTON :{BLACK}Pagar {CURRENCY_LONG}
|
||||
@@ -3733,7 +3787,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produz:
|
||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING}
|
||||
|
||||
STR_CONFIG_GAME_PRODUCTION :{WHITE}Modificar produção (múltiplo de 8, até 2040)
|
||||
@@ -3763,6 +3817,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Substituir veículos
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para Manutenção
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lucro anual: {CURRENCY_LONG} (último ano: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar para Depósito
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar para Garagem
|
||||
@@ -3855,6 +3911,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance:
|
||||
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING}
|
||||
|
||||
###length 3
|
||||
STR_CARGO_TYPE_FILTER_ALL :Todos os tipos de carga
|
||||
STR_CARGO_TYPE_FILTER_FREIGHT :Frete
|
||||
STR_CARGO_TYPE_FILTER_NONE :Nenhum
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de trens - clique num trem para informações. Cltr+Clique para alterar a visibilidade do tipo de trem
|
||||
@@ -4024,7 +4083,7 @@ STR_ENGINE_PREVIEW_AIRCRAFT :aeronave
|
||||
STR_ENGINE_PREVIEW_SHIP :embarcação
|
||||
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Preço: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade: {VELOCITY} Potência: {POWER}{}Custo de manutenção: {CURRENCY_LONG}/ano{}Capacidade: {CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Preço: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Vel.: {VELOCITY} Potência: {POWER} Tração Máx: {6:FORCE}{}Custo de manutenção: {4:CURRENCY_LONG}/yr{}Capacidade: {5:CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Custo: {0:CURRENCY_LONG} Peso: {1:WEIGHT_SHORT}{}Velocidade: {2:VELOCITY} Potência: {3:POWER} Tração Máx: {6:FORCE}{}Custo de Operação: {4:CURRENCY_LONG}/ano{}Capacidade: {5:CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Preço: {CURRENCY_LONG} Vel. Max.: {VELOCITY}{}Capacidade: {CARGO_LONG}{}Custo de manuteção: {CURRENCY_LONG}/ano
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel Máx.: {VELOCITY}{}Tipo de aeronave: {STRING}{}Capacidade: {CARGO_LONG}, {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel Máx.: {VELOCITY}{}Tipo de aeronave: {STRING}{}Capacidade: {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano
|
||||
@@ -4183,11 +4242,12 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {L
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Força: {LTBLUE}{POWER}{BLACK} Velocidade Max: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE}
|
||||
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros desse ano: {LTBLUE}{CURRENCY_LONG} (ano passado: {CURRENCY_LONG})
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro deste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Performance min.: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
|
||||
|
||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG}
|
||||
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacidade: {LTBLUE}Nenhuma{STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacidade: {LTBLUE}{0:CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacidade: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
|
||||
|
||||
@@ -4454,25 +4514,25 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este hor
|
||||
STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horário começará em{STRING}
|
||||
|
||||
STR_TIMETABLE_STARTING_DATE :{BLACK}Data de início
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleciona uma data como ponto de partida para esse horário. Ctrl+Clique define o ponto de partida desse horário, e distribui todos os veículos que compartilham essa ordem igualmente, baseados na sua ordem relativa, mesmo que a ordem esteja totalmente tabelada
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleciona uma data como ponto de partida para esse horário. Ctrl+Clique define o ponto de partida desse horário e distribui todos os veículos que compartilham essa ordem igualmente, baseados na sua ordem relativa, mesmo que a ordem esteja totalmente tabelada
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar horário
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a quantidade de tempo que a ordem destacada deverá levar
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a duração do tempo que a ordem em destaque deve durar. Ctrl+Clique define o tempo para todas as ordens
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Limpar Horário
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpar a quantidade de tempo para a ordem destacada
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpar a duração do tempo da ordem destacada. Ctrl+Clique limpa os tempos para todas as ordens
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Alterar Limite de Vel.
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Altera a velocidade máxima de viagem para a ordem selecionada
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Altera a velocidade máxima de viagem para a ordem selecionada. Ctrl+Clique define a velocidade para todas as ordens
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Limpa Limite de Vel.
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Limpar a velocidade máxima de viagem para a ordem selecionada
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Limpar a velocidade máxima de viagem da ordem em destaque. Ctrl+Clique limpa as velocidades para todas as ordens
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Restabelecer Contador de Atraso
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Restabelecer o contador de atraso,então o veículo estará pontual
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Autopreencher
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima jornada. (CTRL+Clique para tentar manter os tempos de espera)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Esperado
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Agendado
|
||||
@@ -4516,8 +4576,10 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos s
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Depuração de I.A./Script do jogo só é acessível pelo servidor
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuração de IA
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuração de Script de Jogo
|
||||
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O script do jogo que será carregado no próximo jogo
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serão carregadas no próximo jogo
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs que serão carregadas no próximo jogo
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano
|
||||
STR_AI_CONFIG_RANDOM_AI :IA aleatória
|
||||
STR_AI_CONFIG_NONE :{G=m}(nenhum)
|
||||
@@ -4529,10 +4591,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Descer
|
||||
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Mover a IA selecionada para baixo na lista
|
||||
|
||||
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script do jogo
|
||||
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parâmetros
|
||||
STR_AI_CONFIG_AI :{G=f}{SILVER}IAs
|
||||
|
||||
STR_AI_CONFIG_CHANGE_AI :{G=f}IA
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Script do jogo
|
||||
STR_AI_CONFIG_CHANGE_AI :{BLACK}Selecionar IA
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selecionar Script do Jogo
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carregar outro script
|
||||
STR_AI_CONFIG_CONFIGURE :{BLACK}Configurar
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parâmetros do Script
|
||||
@@ -4561,7 +4624,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura
|
||||
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa
|
||||
|
||||
# AI Parameters
|
||||
STR_AI_SETTINGS_CAPTION_AI :{G=f}IA
|
||||
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parâmetros de IA
|
||||
STR_AI_SETTINGS_CLOSE :{BLACK}Fechar
|
||||
STR_AI_SETTINGS_RESET :{BLACK}Resetar
|
||||
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
@@ -4571,11 +4634,11 @@ STR_AI_SETTINGS_START_DELAY :Número de dias
|
||||
# Textfile window
|
||||
STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebra de linha
|
||||
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :[BLACK}Quebra linhas automaticamente para que o texto caiba na janela
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Ler o Leiame
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Ver o leia-me
|
||||
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Log de mudanças
|
||||
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença
|
||||
###length 3
|
||||
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} Leiame de {STRING}
|
||||
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} Leia-me de {STRING}
|
||||
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} log de mudanças de {STRING}
|
||||
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licença de {STRING}
|
||||
|
||||
@@ -4725,6 +4788,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... exis
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Impossível gerar indústrias...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Impossível construir {STRING} aqui...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossível construir este tipo de indústria aqui...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Não é possível prospectar indústria...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muito perto de outra indústria
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... deve construir uma cidade antes
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por cidade
|
||||
@@ -4739,6 +4803,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... a fl
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só pode ser construído acima do nível da neve
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só pode ser construída abaixo do nível da neve
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar esta indústria
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não existe locais aceitáveis para '{STRING}' indústrias
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Mude os parâmetros de geração do mapa para obter um mapa melhor
|
||||
|
||||
@@ -4884,7 +4950,7 @@ STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Remova a
|
||||
STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Impossível iniciar e terminar no mesmo ponto
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Ponte é muito baixa para o terreno
|
||||
STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte está muito alta para esse terreno.
|
||||
STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte está muito alta para este terreno.
|
||||
STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim devem estar alinhados
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra
|
||||
STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa
|
||||
@@ -4906,6 +4972,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objeto n
|
||||
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sede de empresa no caminho
|
||||
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Impossível comprar esta área...
|
||||
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... já a possui!
|
||||
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... limite de construção de objetos atingido
|
||||
|
||||
# Group related errors
|
||||
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossível criar grupo...
|
||||
@@ -4978,6 +5045,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Impossí
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... veículo está destruído
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem todos os veículos são idênticos
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Não haverá nenhum veículo disponível
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Altere sua configuração de NewGRF
|
||||
@@ -5005,6 +5073,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossí
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... o veículo não pode chegar a todas as estações
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... o veículo não chega àquela estação
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo com essa mesma ordem não chega àquela estação
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos possuem as mesmas ordens
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos estão compartilhando ordens
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Impossível compartilhar a lista de ordens...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Impossível compartilhar lista de ordens...
|
||||
|
||||
@@ -1128,6 +1128,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :дясно
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимален начален заем: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Лихвен процент: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Лихвен процент на заемите; също така контролира инфлацията ако е разрешена
|
||||
@@ -2402,8 +2403,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увел
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Избери ЖП мост
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Избор на асфалтов мост
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Избиране на мост - натисни върху избрания от теб мост, за да се построи
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Висящ, Стоманен
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Гредоред, Стоманен
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Конзолен, Стоманен
|
||||
@@ -2937,6 +2936,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Пред
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Продължи към предишен нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Показване на избрания sprite. Подредбата се пренебрегва при рисуването му.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Преместване на sprite, променяйки X и Y координатите
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Избери sprite
|
||||
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Избери sprite от целия екран
|
||||
|
||||
|
||||
+107
-40
@@ -201,6 +201,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}cv
|
||||
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv
|
||||
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
|
||||
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}CV/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}CV/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}CV/Mg
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}CV/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}CV/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}CV/Mg
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
|
||||
|
||||
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
|
||||
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
|
||||
@@ -378,7 +387,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generaci
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generació d'indústries
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcció de carreteres
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcció de vies de tramvia
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planta arbres. Shift per sols mostrar el cost estimat.
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planta arbres. Amb Ctrl, es selecciona una àrea diagonal. Amb Maj, no es realitza l'acció però es mostra el seu cost estimat.
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situa un senyal
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Crea un objecte. Amb Ctrl, es selecciona una àrea diagonal. Amb Maj, es commuta entre construir o mostrar el cost estimat.
|
||||
|
||||
@@ -396,6 +405,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Surt
|
||||
###length 15
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Opcions de la partida
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configuració
|
||||
STR_SETTINGS_MENU_AI_SETTINGS :Configuració de la IA
|
||||
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configuració de l'script de partida
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Extensions NewGRF
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opcions de transparència
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostra els noms de les poblacions
|
||||
@@ -998,8 +1009,19 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Seleccio
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Controlador actual: {STRING}
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Mida de la interfície
|
||||
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arrossegueu el botó lliscant per a triar la mida de la interfície. Mantingueu premut Ctrl per a un ajustament contigu.
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detecta la mida automàticament
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marqueu aquesta opció si voleu que s'ajusti la mida de la interfície automàticament.
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escala els bisells
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marqueu aquesta opció si voleu que s'escalin els bisells segons la mida de la interfície.
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_1X :x1
|
||||
STR_GAME_OPTIONS_GUI_SCALE_2X :x2
|
||||
STR_GAME_OPTIONS_GUI_SCALE_3X :x3
|
||||
STR_GAME_OPTIONS_GUI_SCALE_4X :x4
|
||||
STR_GAME_OPTIONS_GUI_SCALE_5X :x5
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gràfics
|
||||
|
||||
@@ -1185,6 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dreta
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstec inicial màxim: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació)
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sense préstec {RED}Fa falta un script de partida que doni els fons inicials
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Taxa d'interès: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tipus d'interès dels préstecs; també controla la inflació, si està activada
|
||||
@@ -1411,6 +1436,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Gruix de la lí
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostra el nom del NewGRF a la finestra de construcció de vehicles: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Afegeix una línia a la finestra de construcció de vehicles que mostri de quin NewGRF és el vehicle seleccionat.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostra les càrregues que poden portar els vehicles a les finestres de llistes {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Si s'activa, la càrrega transportable del vehicle apareixerà al damunt de les llistes dels vehicles.
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Paisatge: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :El tipus de paisatge defineix escenaris amb diferents tipus de càrrega i requisits per al creixement de les poblacions. Els NewGRF i l'script de partida poden modificar-ne l'aparença i el comportament.
|
||||
@@ -1902,13 +1929,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Empra {STRING}{
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Temps dedicat a cada recàlcul d'un component del graf de connexions. Quan un recàlcul s'inicia, el programa crea un fil que pot executar-se durant aquest nombre de dies. Com més curt el valor, més probable que el fil no hagi acabat quan s'espera. Aleshores el programa s'atura fins que el fil acaba ("ralentització"). Com més llarg el valor, més temps requereix l'actualització de la distribució quan les rutes canvien.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Mode de distribució per passatgers: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simètric" vol dir que aproximadament el mateix nombre de passatgers aniran des de l'estació A a la B que de B a A. "asimètric" significa que un nombre arbitrari de passatgers poden anar en qualsevol dels dos sentits. "manual" vol dir que no s'aplicarà una distribució automàtica pels passatgers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simètric" vol dir que aproximadament el mateix nombre de passatgers aniran des de l'estació A a la B que de B a A. "Asimètric" significa que un nombre arbitrari de passatgers poden anar en qualsevol dels dos sentits. "Manual" vol dir que no s'aplicarà una distribució automàtica pels passatgers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Mode de distribució pel correu: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simètric" vol dir que aproximadament la mateixa quantitat de correu serà enviada des de l'estació A a la B que de B a A. "asimètric" significa que una quantitat arbitrària de correu pot ser enviada en qualsevol dels dos sentits. "manual" vol dir que no s'aplicarà una distribució automàtica pel correu.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simètric" vol dir que aproximadament la mateixa quantitat de correu serà enviada des de l'estació A a la B que de B a A. "Asimètric" significa que una quantitat arbitrària de correu pot ser enviada en qualsevol dels dos sentits. "Manual" vol dir que no s'aplicarà una distribució automàtica pel correu.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Mode de distribució per la classe de càrrega BLINDADA: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de càrrega BLINDADA conté objectes de valor a la zona temperada, diamants a la subtropical o or al clima subàrtic. Els NewGRF poden canviar això. "simètric" significa que aproximadament la mateixa quantitat d'aquesta càrrega s'enviarà de l'estació A a la B que de B a A. "asimètric" vol dir que quantitats arbitràries d'aquesta càrrega poden ser enviades en qualsevol sentit. "manual" significa que no s'aplicarà cap distribució automàtica a aquesta càrrega. Es recomana indicar asimètric o manual en clima subàrtic, doncs els bancs no enviaran or de tornada a les mines. Pels climes temperat i subtropical podeu també seleccionar simètric, doncs els bancs enviaran objectes de valor de tornada al banc d'origen.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de càrrega BLINDADA conté objectes de valor a la zona temperada, diamants a la subtropical o or al clima subàrtic. Els NewGRF poden canviar això. "Simètric" significa que aproximadament la mateixa quantitat d'aquesta càrrega s'enviarà de l'estació A a la B que de B a A. "Asimètric" vol dir que quantitats arbitràries d'aquesta càrrega poden ser enviades en qualsevol sentit. "Manual" significa que no s'aplicarà cap distribució automàtica a aquesta càrrega. Es recomana indicar asimètric o manual en clima subàrtic, doncs els bancs no enviaran or de tornada a les mines. Pels climes temperat i subtropical també podeu seleccionar simètric, doncs els bancs enviaran objectes de valor de tornada al banc d'origen.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Mode de distribució per altres classes de càrrega: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asimètric" vol dir que quantitats arbitràries de càrrega poden ser enviades en qualsevol sentit. "manual" significa que no s'aplicarà cap distribució automàtica a aquestes càrregues.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimètric" vol dir que quantitats arbitràries de càrrega poden ser enviades en qualsevol sentit. "Manual" significa que no s'aplicarà cap distribució automàtica a aquestes càrregues.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimètric
|
||||
@@ -2046,6 +2073,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Taula de
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configuració
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Extensions NewGRF
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Contingut en línia
|
||||
STR_INTRO_AI_SETTINGS :{BLACK}Configuració de la IA
|
||||
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configuració de l'script de partida
|
||||
STR_INTRO_QUIT :{BLACK}Surt
|
||||
|
||||
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Comença una partida nova. Ctrl+Clic salta la configuració del mapa
|
||||
@@ -2065,6 +2094,8 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostra l
|
||||
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostra la finestra de configuració
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra la configuració de les extensions NewGRF
|
||||
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Comprova si hi ha continguts nous i actualitzats per a descarregar
|
||||
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Mostra les opcions d'IA
|
||||
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Mostra la configuració de l'script de partida
|
||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Surt de l'OpenTTD.
|
||||
|
||||
STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu si hi ha actualitzacions disponibles.
|
||||
@@ -2455,13 +2486,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :s'espera que s'
|
||||
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :deixant
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} s'ha unit a la partida
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} s'ha unit a la partida (Client #{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} s'ha unit a la companyia #{2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} s'ha unit a la partida (Client #{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} s'ha unit a la companyia #{2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} s'ha unit als espectadors
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ha començat una nova companyia (#{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ha deixat la partida ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} ha començat una nova companyia (#{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0: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_GIVE_MONEY :*** {0: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}
|
||||
@@ -2588,6 +2619,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}No marca
|
||||
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Marcar l'àrea de cobertura del lloc proposat
|
||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Accepta: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Provisions: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Cost de manteniment: {GOLD}{CURRENCY_SHORT}/any
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Ajuntar estació
|
||||
@@ -2670,8 +2702,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenta
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecciona Pont de Tren
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecciona Pont de Carretera
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selecció de pont - clica sobre el pont triat per construir-lo
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Pont penjant d'acer
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Pont biga d'acer
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Pont en mènsula d'acer
|
||||
@@ -2791,7 +2825,7 @@ STR_OBJECT_CLASS_TRNS :Transmissors
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Arbres
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Selecciona el tipus d'arbre a plantar. Si la casella ja conté un arbre, s'afegiran més arbres d'altres espècies independentment de quin estigui seleccionat
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Arbres de tipus aleatori
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Situar arbres de tipus aleatori. Shift commuta construeix/mostra el cost estimat
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Situa arbres de tipus aleatori. Amb Ctrl, es selecciona una àrea diagonal. Amb Maj., es commuta entre construir i mostrar el cost estimat.
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Planta arbres
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta arbres aleatòriament al paisatge
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
@@ -2823,6 +2857,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Crea una
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Funda una població en un lloc aleatori
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Crea moltes poblacions aleatòries
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Omple el mapa amb poblacions situades aleatòriament
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandeix totes les poblacions
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fes que totes les poblacions creixin una mica.
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nom de la població nova:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introdueix el nom de la població
|
||||
@@ -3123,6 +3159,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Quantita
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Suavitat:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Varietat:
|
||||
STR_MAPGEN_GENERATE :{WHITE}Genera
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Configuració del NewGRF
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de NewGRF
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}Configuració d'IA
|
||||
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de la IA
|
||||
STR_MAPGEN_GS_SETTINGS :{BLACK}Configuració de l'script de partida
|
||||
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de l'script de partida.
|
||||
|
||||
###length 21
|
||||
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Anglès
|
||||
@@ -3291,6 +3333,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite a
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Procedeix cap a l'sprite normal anterior, saltant qualsevol sprite pseudo/recolor/font i passant del primer sprite a l'últim
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representació de l'sprite seleccionat actualment. L'alineació s'ignora quan es dibuixa aquest sprite
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Desplaça l'sprite un píxel en el sentit indicat. Amb Ctrl+Clic el desplaça 8 píxels.
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Modificador centrat
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centrat
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Punt de mira
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Restableix relatius
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Restableix els desplaçaments relatius actuals
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Desplaçament X: {NUM}, Desplaçament Y: {NUM} (Absolut)
|
||||
@@ -3308,15 +3357,15 @@ STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SI
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}S'ha produït un error fatal de NewGRF:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}S'ha produït un error relacionat amb els NewGRF:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} no funcionarà amb la versió TTDPatch informada per l'OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} és per la versió {STRING} de TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} està dissenyat per ser utilitzat amb {STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Paràmetre invàlid per {1:STRING}: paràmetre {STRING} ({NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} ha de ser carregat abans de {STRING}
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} ha de ser carregat després de {STRING}
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} necessita l'OpenTTD versió {STRING} o superior
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} és per a la versió {2:STRING} del TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} està dissenyat per a fer-se servir amb {2:STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Paràmetre no vàlid per a {1:STRING}: paràmetre {2:STRING} ({3:NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} s'ha de carregar abans de {2:STRING}
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} s'ha de carregar després de {2:STRING}
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} necessita la versió {2:STRING} de l'OpenTTD o posterior
|
||||
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :l'arxiu GRF dissenyat està pendent de traduir
|
||||
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Hi ha massa arxius NewGRF carregats
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregant {1:STRING} com a NewGRF estàtic amb {STRING} podria causar desincronitzacions
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Si es carrega {1:STRING} com a NewGRF estàtic amb {2:STRING}, pot provocar desincronitzacions
|
||||
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperat (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propietat d'acció 0 desconeguda {4:HEX} (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_INVALID_ID :Intent d'utilitzar una ID invàlid (sprite {3:NUM})
|
||||
@@ -3448,14 +3497,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Compra els dret
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Suborna les autoritats locals
|
||||
|
||||
###length 8
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi petit al voltant del centre de la població.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins un radi mitjà al voltant del centre de la població.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi gran al voltant del centre de la població.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Causa molèsties considerables al trànsit de vehicles de carretera durant 6 mesos.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Proporciona una millora permanent dels ratis d'estació de la població.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Proporciona una millora temporal del creixement d'aquesta població.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}L'autoritat local no permetrà que els passatgers i càrregues locals usin les estacions dels oponents.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi petit al voltant del centre de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins un radi mitjà al voltant del centre de la població.{}{PUSH_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi gran al voltant del centre de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Causa molèsties considerables al trànsit de vehicles de carretera durant 6 mesos.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Proporciona una millora permanent dels ratis d'estació de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Proporciona una millora temporal del creixement d'aquesta població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}L'autoritat local no permetrà que els passatgers i càrregues locals usin les estacions dels oponents.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius
|
||||
@@ -3628,15 +3677,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Vaixells
|
||||
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Interessos del préstec
|
||||
STR_FINANCES_SECTION_OTHER :{GOLD}Altres
|
||||
|
||||
STR_FINANCES_TOTAL_CAPTION :{WHITE}Total
|
||||
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
|
||||
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
|
||||
STR_FINANCES_PROFIT :{WHITE}Benefici
|
||||
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanç bancari
|
||||
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Fons propis
|
||||
STR_FINANCES_LOAN_TITLE :{WHITE}Préstec
|
||||
STR_FINANCES_INTEREST_RATE :{WHITE}Interès del préstec: {BLACK}{NUM}{NBSP}%
|
||||
STR_FINANCES_MAX_LOAN :{WHITE}Préstec màxim: {BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_BUTTON :{BLACK}Demana {CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Augmenta l'import del préstec Ctrl+Clic per demanar tants diners com sigui possible
|
||||
STR_FINANCES_REPAY_BUTTON :{BLACK}Amortitza {CURRENCY_LONG}
|
||||
@@ -3737,7 +3789,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produeix
|
||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING}
|
||||
|
||||
STR_CONFIG_GAME_PRODUCTION :{WHITE}Canvia la producció (múltiple de 8, fins a 2040)
|
||||
@@ -3767,6 +3819,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Substitueix vehicles
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envia a fer revisió
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Benefici enguany: {CURRENCY_LONG} (darrer any: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Envia a la cotxera
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Envia a la cotxera
|
||||
@@ -3859,6 +3913,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {
|
||||
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipus d'aeronau: {GOLD}{STRING}
|
||||
|
||||
###length 3
|
||||
STR_CARGO_TYPE_FILTER_ALL :Tots els tipus de càrrega
|
||||
STR_CARGO_TYPE_FILTER_FREIGHT :Càrrega
|
||||
STR_CARGO_TYPE_FILTER_NONE :Cap
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Llista de selecció de trens i vagons. Clica al vehicle per més informació. Ctrl+Click per a alternar entre mostrar/ocultar el vehicle ferroviari
|
||||
@@ -4028,7 +4085,7 @@ STR_ENGINE_PREVIEW_AIRCRAFT :{G=Masculin}avi
|
||||
STR_ENGINE_PREVIEW_SHIP :{G=Masculin}vaixell
|
||||
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY_LONG} Pes: {WEIGHT_SHORT}{}Velocitat: {VELOCITY} Potència: {POWER}{}Cost de circulació: {CURRENCY_LONG}/any{}Capacitat: {CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {CURRENCY_LONG} Pes: {WEIGHT_SHORT}{}Velocitat: {VELOCITY} Potència: {POWER} Màx. E.T.: {6:FORCE}{}Cost d'utilització: {4:CURRENCY_LONG}/any{}Capacitat: {5:CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {0:CURRENCY_LONG} Pes: {1:WEIGHT_SHORT}{}Velocitat: {2:VELOCITY} Potència: {3:POWER} Màx. E.T.: {6:FORCE}{}Cost d'utilització: {4:CURRENCY_LONG}/any{}Capacitat: {5:CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Vel. Màx: {VELOCITY}{}Capacitat: {CARGO_LONG}{}Cost d'utilització: {CURRENCY_LONG}/any
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Velocitat màx.: {VELOCITY}{}Tipus d'aeronau: {STRING}{}Capacitat: {CARGO_LONG}, {CARGO_LONG}{}Cost de circulació: {CURRENCY_LONG} per any
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Velocitat màx.: {VELOCITY}{}Tipus d'aeronau: {STRING}{}Capacitat: {CARGO_LONG}{}Cost de circulació: {CURRENCY_LONG} per any
|
||||
@@ -4187,12 +4244,13 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Pes: {LT
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Pes: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potència: {LTBLUE}{POWER}{BLACK} Vel. màx: {LTBLUE}{VELOCITY} {BLACK}E.T. màx.: {LTBLUE}{FORCE}
|
||||
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Benefici d'aquest any: {LTBLUE}{CURRENCY_LONG} (darrer any: {CURRENCY_LONG})
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Benefici aquest any: {LTBLUE}{CURRENCY_LONG} (l'any passat: {CURRENCY_LONG}) {BLACK}Rendiment mínim: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilitat: {LTBLUE}{COMMA}% {BLACK}Avaries des de la darrera revisió: {LTBLUE}{COMMA}
|
||||
|
||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Fabricat: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG}
|
||||
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacitat: {LTBLUE}Cap{STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacitat: {LTBLUE}{CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacitat: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacitat: {LTBLUE}{0:CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacitat: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacitat: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
|
||||
|
||||
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transferir crèdits: {LTBLUE}{CURRENCY_LONG}
|
||||
@@ -4461,22 +4519,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Data de
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleccioneu una data com a punt de partida d'aquest horari. Amb Ctrl+Clic, distribueix els vehicles que comparteixen aquesta ruta a partir de la data establerta i la seva ordre relativa, sempre que la ruta tingui l'horari complet.
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Canvia Temps
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia la quantitat de temps que l'ordre marcada hauria de prendre
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia el emps que l'ordre marcada hauria de prendre. Amb Ctrl+clic estableix el temps per a totes les ordres.
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Esborra Temps
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Esborra la quantitat de temps de l'ordre marcada
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Esborra la quantitat de temps de l'ordre marcada. Amb Ctrl+clic, s'esborra el temps per a totes les ordres.
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Canvia el límit de velocitat
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Canvia la velocitat de viatge màxima de l'ordre seleccionada
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Canvia la velocitat de viatge màxima de l'ordre seleccionada. Amb Ctrl+clic s'estableix la velocitat per a totes les ordres.
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Esborra el límit de velocitat
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Esborra la velocitat de viatge màxima de l'ordre seleccionada
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Esborra la velocitat de viatge màxima de l'ordre seleccionada. Amb Ctrl+clic s'esborra la velocitat per a totes les ordres.
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Restablir Retard
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Restableix el comptador de retards, de manera que el vehicle serà puntual
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Autoomple
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Omple automàticament l'horari amb valors del proper viatge (CTRL+clic per intentar mantenir els temps d'espera)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Omple automàticament l'horari amb valors del proper viatge. CTRL+clic per a intentar mantenir els temps d'espera.
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Esperat
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Planificat
|
||||
@@ -4520,6 +4578,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La finestra de depuració dels scripts d'IA/partida només està disponible al servidor.
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuració de la IA
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuració de l'script de partida
|
||||
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Aquest és l'script que s'usarà a la propera partida.
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Aquesta llista conté les IA que es carregaran a la propera partida.
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :Jugador humà
|
||||
@@ -4533,10 +4593,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Mou aval
|
||||
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Desplaça la IA seleccionada una posició cap avall.
|
||||
|
||||
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de partida
|
||||
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Paràmetres
|
||||
STR_AI_CONFIG_AI :{SILVER}IA
|
||||
|
||||
STR_AI_CONFIG_CHANGE_AI :una IA
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :un script de partida
|
||||
STR_AI_CONFIG_CHANGE_AI :{BLACK}Trieu una IA
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Tria un script de partida
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carrega un altre script
|
||||
STR_AI_CONFIG_CONFIGURE :{BLACK}Configura
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configura els paràmetres de l'script
|
||||
@@ -4565,7 +4626,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura
|
||||
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa
|
||||
|
||||
# AI Parameters
|
||||
STR_AI_SETTINGS_CAPTION_AI :de la IA
|
||||
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Paràmetres de la IA
|
||||
STR_AI_SETTINGS_CLOSE :{BLACK}Tanca
|
||||
STR_AI_SETTINGS_RESET :{BLACK}Restableix
|
||||
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
@@ -4729,6 +4790,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... mass
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}No es poden generar indústries...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Aquí no es pot construir {STRING}...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Aquí no es pot construir aquest tipus d'indústria...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}No es pot fer la prospecció per a la indústria...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... massa prop d'altres indústries
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}...abans s'ha de fundar una població.
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... només un permès per població
|
||||
@@ -4743,6 +4805,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... el b
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... només es pot construir en estatges amb neu
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... només es pot construir en estatges sense neu
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}La fundació ha fallat la prospecció per mala sort. Proveu-ho de nou.
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}No hi havia llocs apropiats per a fer la prospecció per a aquesta indústria.
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}No hi havia llocs adequats per a indústries '{STRING}'
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Canvia els paràmetres de generació de mapa per a obtenir-ne un de millor
|
||||
|
||||
@@ -4983,6 +5047,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}No es po
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehicle està destruït
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... no tots els vehicles són idèntics.
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No hi haurà cap vehicle disponible
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvia la teva configuració dels NewGRF
|
||||
@@ -5010,6 +5075,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossib
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... el vehicle no pot anar a totes les estacions
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... el vehicle no pot anar a aquesta estació
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... un vehicle que comparteix aquesta ordre no pot anar a aquesta estació
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... no tots els vehicles tenen les mateixes ordres.
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... no tots els vehicles comparteixen ordres.
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}No es pot compartir la llista d'ordres...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}No es pot deixar de compartir la llista d'ordres...
|
||||
|
||||
@@ -578,6 +578,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахай
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
@@ -1239,6 +1240,10 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Объект
|
||||
|
||||
# Sprite aligner window
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
# NewGRF (self) generated warnings/errors
|
||||
STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING}
|
||||
|
||||
@@ -1248,6 +1248,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći početni zajam: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji tvrtka može pozajmiti (ne uzimajući inflaciju u obzir)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Kamatna stopa: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Kamatna stopa zajmova; također kontrolira i inflaciju ako je uključena
|
||||
@@ -2625,8 +2626,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Povećaj
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Odaberi željeznički most
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Odaberi cestovni most
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Izbor mosta - klikni na most koji želiš izgraditi
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Viseći, čelični
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Noseći, čelični
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konzolni, čelični
|
||||
@@ -3224,6 +3223,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Prethodn
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Otiđi na prethodni normalni sprite, preskačući svaki pseudo/prebojani/font sprite i {BLACK}Otiđi na sljedeći normalni sprite, preskačući svaki pseudo/prebojani/font sprite i nakon dolaska na prvi prebaci na zadnjeg
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Prikaz trenutno odabranog spritea. Poravnjanje se ignorira kod crtanja ovog spritea.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pomakni sprite mijenjajući X i Y pomake. Ctrl+Click za micanje po 8 jedinica odjednom.
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Poništi relativne
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Poništi trenutne relativne pomake
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X pomak: {NUM}, Y pomak: {NUM} (Apsolutni)
|
||||
|
||||
+119
-49
@@ -275,6 +275,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp
|
||||
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp
|
||||
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
|
||||
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
|
||||
|
||||
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
|
||||
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
|
||||
@@ -302,8 +311,8 @@ STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Filtrovat řetězec:
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Vložte filtr
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Vložte klíčové slovo pro filtr seznamu
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Vložte jedno nebo více klíčových slov pro filtr seznamu
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Vložte jedno nebo více klíčových slov pro filtr seznamu
|
||||
|
||||
STR_TOOLTIP_GROUP_ORDER :{BLACK}Vyber pořadí seskupení
|
||||
STR_TOOLTIP_SORT_ORDER :{BLACK}Vyber způsob řazeni (sestupně/vzestupně)
|
||||
@@ -452,9 +461,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generov
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generování průmyslu
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Výstavba silniční sítě
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba tramvajové tratě
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Vysadit stromy. Shift zobrazí odhad ceny
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Vysadit stromy. Ctrl vybírá území úhlopříčně. Shift zobrazí odhad ceny
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umístit popisek
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umisťte objekt. Shift zobrazí odhad ceny
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umisťte objekt. Pro zobrazení odhadu ceny podrž Shift. Ctrl vybírá oblast diagonálně
|
||||
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
@@ -470,6 +479,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Ukončit
|
||||
###length 15
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti hry
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Nastavení
|
||||
STR_SETTINGS_MENU_AI_SETTINGS :Nastavení AI
|
||||
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Nastavení herních skriptů
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavení grafik
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Nastavení průhlednosti
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Zobrazení jmen měst
|
||||
@@ -988,8 +999,8 @@ STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLAC
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Nabídka dotace:{}{}Doprava {STRING} z {STRING} do {STRING} bude {NUM} rok dotována místní správou!
|
||||
###length 4
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}!{}{}Doprava {STRING.gen} z{NBSP}{STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” ů ů} vynášet 150{NBSP}% normální ceny
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}!{}{} Doprava {STRING} z{NBSP}{STRING} do {STRING} bude po {NUM} rok{P “” “” ů} vynášet dvojnásobek normální ceny!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}.{}{}Doprava {STRING.gen} z{NBSP}{STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” ů ů} vynášet trojnásobek normální ceny!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}!{}{} Doprava {STRING} z{NBSP}{STRING} do {STRING} bude po {NUM} rok{P "" "" ů} vynášet dvojnásobek normální ceny!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Dotace na přepravu přidělena společnosti {STRING}!{}{}Přeprava {STRING.gen} z {STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” y ů} vynášet trojnásobek normální sazby!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}.{}{}Doprava {STRING.gen} z{STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” ů ů} vynášet čtyřnásobek normální ceny!
|
||||
|
||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN} zažívá dopravní chaos!{}{}Program přestavby ulic sponzorovaný {STRING} přináší motoristům 6 měsíců utrpení!
|
||||
@@ -1084,8 +1095,19 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Zaškrtn
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Aktuální ovladač: {STRING}
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Velikost uživatelského rozhraní
|
||||
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Přetažením posuvníku změníš velikost rozhraní. Drž Ctrl pro plynulé přizpůsobení
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Automaticky detekovat velikost
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Zaškrtni pro automatické nastavení velikosti uživatelského rozhraní
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Škálovat úkosy
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Zaškrtni toto políčko pro škálování úkosů dle velikosti uživatelského rozhraní
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_1X :1x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_2X :2x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_3X :3x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_4X :4x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_5X :5x
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafiky
|
||||
|
||||
@@ -1205,13 +1227,13 @@ STR_TERRAIN_TYPE_CUSTOM_VALUE :Vlastní výšk
|
||||
STR_CITY_APPROVAL_LENIENT :Shovívavý
|
||||
STR_CITY_APPROVAL_TOLERANT :tolerantní
|
||||
STR_CITY_APPROVAL_HOSTILE :zaujatý
|
||||
STR_CITY_APPROVAL_PERMISSIVE :nezaujatý
|
||||
STR_CITY_APPROVAL_PERMISSIVE :Nezaujatý (bez vlivu na počínání společnosti)
|
||||
|
||||
STR_WARNING_NO_SUITABLE_AI :{WHITE}Žádná vhodná AI není k dispozici...{}Některé AI lze stáhnout pomocí služby "Stahovat součásti"
|
||||
|
||||
# Settings tree window
|
||||
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Nastavení
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrovat podle:
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrovat:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Rozbalit vše
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sbalit vše
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Vymazat všechny hodnoty
|
||||
@@ -1271,6 +1293,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximální půjčka: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jak moc si může společnost půjčit (bez ohledu na inflaci)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Výše úroků: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Výše úroků z půjček; rovněž ovlivňuje inflaci, pokud je zapnuta
|
||||
@@ -1306,7 +1329,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Pokud je zapnut
|
||||
STR_CONFIG_SETTING_DISASTERS :Katastrofy: {STRING}
|
||||
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Katastrofy, které mohou občas zablokovat či zničit vozidla nebo infrastrukturu
|
||||
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL :Postoj městské rady k úpravám v oblasti: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL :Postoj městské správy k úpravám v oblasti: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vyber jak moc hluku a změn prostředí poškozuje hodnocení společnosti u města a tak dále komplikuje budoucí stavbu na jeho území
|
||||
|
||||
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Maximální výška mapy: {STRING}
|
||||
@@ -1497,6 +1520,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Tloušťka čá
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobrazovat název NewGRF v okně nákupu vozidel: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Přidá řádek do okna nákupu vozidel informující, ze které NewGRF vybrané vozidlo pochází.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Zobrazit druhy nákladu, které vozidlo může přepravovat, v oknech seznamů {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Pokud je povoleno, zobrazí se nad ním v seznamech vozidel přepravitelný náklad vozidla
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Klima: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Klima určuje základy herního scénáře s rozdílnými druhy nákladu a požadavky na růst měst. Nové GRaFiky a Herní Skripty umožní ještě jemnější kontrolu
|
||||
@@ -1988,13 +2013,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Zaber si {STRIN
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Čas vyhrazený pro každý přepočet části grafu spojení. Pokud přepočet začne, je vytvořeno nové vlákno, které má dovoleno běžet po zvolený počet dnů. Čím nižší hodnotu nastavíš tím je pravděpodobnější, že vlákno nebude dokončeno kdy má. Pokud se tak stane, hra se zastaví ("lagne") dokud dokončeno nebude. Čím vyšší hodnotu nastavíš, tím déle bude trvat aktualizace grafu pokud se trasy změní.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Mód distribuce pro cestující: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství cestujících chce cestovat ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolné množství cestujících může cestovat v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro cestující.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství cestujících chce cestovat ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný" znamená, že libovolné množství cestujících může cestovat v jakémkoliv směru. "Manuální" znamená, že zde nebude žádná automatická distribuce pro cestující.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Mód distribuce pro poštu: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství pošty bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolné množství pošty může být odesláno v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro poštu.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství pošty bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný" znamená, že libovolné množství pošty může být odesláno v jakémkoli směru. "Manuální" znamená, že zde nebude žádná automatická distribuce pro poštu.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Mód distribuce pro náklady pancéřových vozů: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Pancéřované vozy převážejí ceniny v mírném, diamanty v subtropickém nebo zlato v subarktickém klimatu. Nové grafiky však toho mohou změnit. "Rovnoměrný" znamená, že téměř stejné množství nákladu bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolná množství nákladu mohou být odeslána v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu. Je doporučeno nastavit "nerovnoměrný" nebo "manuální" při hraní v subarktickém klimatu, neboť banky neposílají do dolů žádné zlato. Pro mírné a subtropické klima můžeš nastavit "rovnoměrné", neboť banky odesílají zpět do původní banky nějaký náklad cenin.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Pancéřované vozy převážejí ceniny v mírném, diamanty v subtropickém nebo zlato v subarktickém klimatu. Nové grafiky však toho mohou změnit. "Rovnoměrný" znamená, že téměř stejné množství nákladu bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný" znamená, že libovolná množství nákladu mohou být odeslána v jakémkoliv směru. "Manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu. Je doporučeno nastavit "nerovnoměrný" nebo "manuální" při hraní v subarktickém klimatu, neboť banky neposílají do dolů žádné zlato. Pro mírné a subtropické klima můžeš nastavit "rovnoměrné", neboť banky odesílají zpět do původní banky nějaký náklad cenin.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Módy distribuce pro ostatní třídy nákladu: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství nákladu bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolná množství nákladu mohou být odeslána v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu. Pravděpodobně chceš nastavit "nerovnoměrná" nebo "manuální"."
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Nerovnoměrný" znamená, že libovolná množství nákladu mohou být odeslána v jakémkoli směru. "manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuální
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :nerovnoměrný
|
||||
@@ -2132,6 +2157,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Nejlepš
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Nastavení
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Nastavení grafik
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Stahovat součásti
|
||||
STR_INTRO_AI_SETTINGS :{BLACK}Nastavení AI
|
||||
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Nastavení herních skriptů
|
||||
STR_INTRO_QUIT :{BLACK}Ukončit
|
||||
|
||||
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Hrát novou hru. Pomocí Ctrl přeskočíš nastavení mapy
|
||||
@@ -2149,8 +2176,10 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Země hr
|
||||
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Zobrazit možnosti hry
|
||||
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Zobrazit tabulku nejlepších výsledků
|
||||
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Nastavení zobrazení
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ukázat nastavení NewGRF
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Zobrazit nastavení NewGRF
|
||||
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Ukázat, jaký nový nebo upravený obsah se dá stáhnout
|
||||
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Zobrazit nastavení AI
|
||||
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Zobrazit nastavení herních skriptů
|
||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Ukončit 'OpenTTD'
|
||||
|
||||
STR_INTRO_BASESET :{BLACK}V aktuálně zvolené základní sadě grafiky chybí {NUM} sprit{P "" y ů}. Zkuste, prosím, vyhledat aktualizovanou základní sadu.
|
||||
@@ -2542,12 +2571,12 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :čekám na aktu
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :odpojování
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} se připojil do hry
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} se připojil do hry (klient č. {2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} se přidává ke společnosti č. {2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} se přidal ke společnosti č. {2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} se stává pozorovatelem
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} zakládá novou společnost (č. {2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opouští hru ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} zakládá novou společnost (č. {2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} opouští hru ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} si změnil jméno na {STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} poslal(a) {2:CURRENCY_LONG} společnosti {1:STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} poslal(a) {2:CURRENCY_LONG} společnosti {1:STRING}
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server ukončil relaci
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server se restartuje...{}Počkejte prosím...
|
||||
STR_NETWORK_MESSAGE_KICKED :*** {STRING} byl vyhozen. Důvod: ({STRING})
|
||||
@@ -2662,6 +2691,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
|
||||
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}přetížení
|
||||
|
||||
# Linkgraph tooltip
|
||||
STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} nákladu měsíčně k přepravě z {STATION} do {STATION} ({COMMA}% z kapacity){STRING}
|
||||
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} má být přepraveno zpět ({COMMA}% z kapacity)
|
||||
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Průměrná doba cesty: {NUM}{NBSP}{P "den" "dny" "dnů"}
|
||||
|
||||
# Base for station construction window(s)
|
||||
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Zvýraznění oblasti pokrytí
|
||||
@@ -2671,6 +2703,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Nezvýra
|
||||
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Zvýraznit oblast pokrytí
|
||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Přijímá: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Poskytuje: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Náklady na údržbu: {GOLD}{CURRENCY_SHORT}/rok
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Spojování stanic
|
||||
@@ -2753,8 +2786,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zvýšit
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Zvolit železniční most
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Zvolit silniční most
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Výběr mostů - staví se kliknutím na obrázek mostu
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Zavěšený, ocelový
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Trámový, ocelový
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konzolový, ocelový
|
||||
@@ -2858,11 +2893,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Úpravy
|
||||
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Snížit roh země. Tažení sníží první vybraný roh a vybranou oblast na jeho novou výšku. Ctrl vybírá diagonální oblast. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšit roh země. Tažení zvyšuje první vybraný roh a vybranou oblast na jeho novou výšku. Ctrl vybírá diagonální oblast. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Srovnat terén na výšku prvního vybraného rohu. Ctrl vybírá diagonální oblast. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakoupit pozemek pro budoucí užití. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakoupit pozemek pro budoucí užití. Držet Shift pro zobrazení odhadu ceny
|
||||
|
||||
# Object construction window
|
||||
STR_OBJECT_BUILD_CAPTION :{WHITE}Výběr objektu
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt, který se má postavit. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt, který se má postavit. Ctrl vybírá diagonální oblast. Shift zobrazí odhad ceny
|
||||
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte třídu objektu, který chcete postavit
|
||||
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Náhled objektu
|
||||
STR_OBJECT_BUILD_SIZE :{BLACK}Velikost: {GOLD}{NUM}{NBSP}x{NBSP}{NUM}
|
||||
@@ -2874,7 +2909,7 @@ STR_OBJECT_CLASS_TRNS :Vysílače
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Stromy
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Zvol druh stromu na vysazení. Pokud se na políčku už nějaký strom nachází, přidá se k němu několik různých druhů bez ohledu na výběr druhu
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Různé stromy
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umístit nahodné stromy. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umístit nahodné stromy. Ctrl vybírá území úhlopříčně. Stisknutý Shift pro zobrazení odhadu ceny
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Umístit stromy náhodně po krajině
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normální
|
||||
@@ -2906,6 +2941,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Náhodn
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Vybuduj město na náhodné pozici
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Hodně náhodných měst
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Pokryje krajinu mnoha náhodnými městy
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Rozbalit všechna města
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Nechte všechna města mírně růst
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Název města:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Zadej název města
|
||||
@@ -3212,6 +3249,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Řeky:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Členitost krajiny:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Rozmanitost terénu:
|
||||
STR_MAPGEN_GENERATE :{WHITE}Vytvořit
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Nastavení NewGRF
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Zobrazit nastavení NewGRF
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}Nastavení AI
|
||||
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Zobrazit nastavení AI
|
||||
STR_MAPGEN_GS_SETTINGS :{BLACK}Nastavení herních skriptů
|
||||
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Zobrazit nastavení herních skriptů
|
||||
|
||||
###length 21
|
||||
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Anglická (původní)
|
||||
@@ -3380,6 +3423,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Předcho
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jít na předchozí normální sprite (s grafikou), přičemž se přeskakují pseudo-/barvící/znakové sprity a při dosažení začátku se jde na konec
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Zobrazení vybraného spritu. Posun se při jeho vykreslení neuvažoval
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Posouvání spritu změnou souřadnic X a Y. Ctrl+kliknutí posouvá o osm jednotek najednou.
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Posunutí vystředění
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprit vycentrován
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Zaměřovač
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Resetovat
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Resetovat aktuání relativní posunutí
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Posunutí v ose X: {NUM}, Posunutí v ose Y: {NUM} (Absolutní)
|
||||
@@ -3397,12 +3447,12 @@ STR_NEWGRF_ERROR_MSG_FATAL :{RED}Závažná
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vyskytla se kritická chyba v NewGRF:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}Došlo k chybě v NewGRF:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nebude fungovat s verzí TTDPatche, kterou OpenTTD hlásí
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pro TTD verzi {STRING}
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pro TTD verzi {2:STRING}
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je navržen pro práci s {STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Neplatný parametr pro {1:STRING}: parametr {STRING} ({NUM})
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Neplatný parametr pro {1:STRING}: parametr {2:STRING} ({3:NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} musí být nahráván před {STRING}
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} musí být nahráván po {STRING}
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} potřebuje verzi OpenTTD {STRING} nebo vyšší
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} musí být nahráván po {2:STRING}
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} potřebuje verzi OpenTTD {2:STRING} nebo vyšší
|
||||
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :grafika, která se měla přeložit
|
||||
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Je nahráno příliš mnoho grafik
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Nahrání {1:STRING} jako statické grafiky spolu s {STRING} může způsobit chybu synchronizace
|
||||
@@ -3537,14 +3587,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koupit výhradn
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Podplatit místní správu
|
||||
|
||||
###length 8
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Zahájit malou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v blízkém okolí městského centra.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Zahájit středně velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy ve středně širokém okolí městského centra.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Zahájit velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v širokém okolí městského centra.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Dotovat rekonstrukci sítě místních ulic.{}Způsobí problémy v dopravě po dobu až 6ti měsíců.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Postavit sochu jako poctu tvé společnosti.{}Poskytuje trvalý bonus k hodnocení stanic v tomto městě.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Dotovat stavbu nových obchodních budov ve městě.{}Poskytuje dočasné zvýšení rychlosti růstu města.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Koupit 1 roční výhradní přepravní práva z tohoto města. Místní správa nedovolí dovolí cestujícím ani nákladu používat stanice tvých konkurentů.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podplatit místní správu pro zvýšení hodnocení společnosti. Riziko trestu v případě přistižení.{}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Zahájit malou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v blízkém okolí městského centra.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Zahájit středně velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy ve středně širokém okolí městského centra.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Zahájit velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v širokém okolí městského centra.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Dotovat rekonstrukci sítě místních ulic.{}Způsobí problémy v dopravě po dobu až 6 měsíců.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Postavit sochu jako poctu tvé společnosti.{}Poskytuje permanentní bonus k hodnocení stanic v tomto městě.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Dotovat stavbu nových obchodních budov ve městě.{}Poskytuje dočasné zvýšení rychlosti růstu města.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Koupit roční výhradní přepravní práva pro toto město. Místní správa nedovolí dovolí cestujícím ani nákladu používat stanice konkurentů.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Podplatit místní správu pro zvýšení hodnocení společnosti. Riziko trestu v případě přistižení.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Cíle
|
||||
@@ -3706,7 +3756,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitál
|
||||
STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Výstavba
|
||||
STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nové dopravní prostředky
|
||||
STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Vlaky
|
||||
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Provoz silničních vozidel
|
||||
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Silniční vozidla
|
||||
STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Provoz letadel
|
||||
STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Provoz lodí
|
||||
STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Infrastruktura
|
||||
@@ -3717,14 +3767,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Lodě
|
||||
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Úroky z půjček
|
||||
STR_FINANCES_SECTION_OTHER :{GOLD}Další
|
||||
|
||||
STR_FINANCES_TOTAL_CAPTION :{WHITE}Celkem
|
||||
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
|
||||
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
|
||||
STR_FINANCES_PROFIT :{WHITE}Zisk
|
||||
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Stav na účtu
|
||||
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Vlastní Prostředky
|
||||
STR_FINANCES_LOAN_TITLE :{WHITE}Půjčka
|
||||
STR_FINANCES_INTEREST_RATE :{WHITE}Úrok z půjčky: {BLACK}{NUM}%
|
||||
STR_FINANCES_MAX_LOAN :{WHITE}Maximální půjčka: {BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_BUTTON :{BLACK}Půjčit {CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Půjčit si více
|
||||
STR_FINANCES_REPAY_BUTTON :{BLACK}Vrátit {CURRENCY_LONG}
|
||||
@@ -3825,7 +3879,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produkuj
|
||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje:
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ček{P á ají á}{STRING}
|
||||
|
||||
STR_CONFIG_GAME_PRODUCTION :{WHITE}Změnit produkci (násobky 8, až do 2040)
|
||||
@@ -3854,7 +3908,9 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Upravit
|
||||
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Poslat příkazy všem vozidlům v tomto seznamu
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Vyměňování vozidel
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Provést údržbu
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Zisk tento rok: {CURRENCY_LONG} (minulý rok: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Letošní zisk: {CURRENCY_LONG} (vloni: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Poslat do depa
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslat do depa
|
||||
@@ -3947,6 +4003,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Dosah: {
|
||||
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Typ letadla: {GOLD}{STRING}
|
||||
|
||||
###length 3
|
||||
STR_CARGO_TYPE_FILTER_ALL :Všechny druhy nákladu
|
||||
STR_CARGO_TYPE_FILTER_FREIGHT :Náklad
|
||||
STR_CARGO_TYPE_FILTER_NONE :Žádný
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Seznam vlaků - pro informace klikni na vlak. Ctrl+kliknutí způsobí přepínání skrytí typů lokomotiv a vagónů.
|
||||
@@ -4278,12 +4337,13 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Hmotnost
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Hmotnost: {LTBLUE}{WEIGHT_SHORT} {BLACK}Výkon: {LTBLUE}{POWER}{BLACK} Max. rychlost: {LTBLUE}{VELOCITY} {BLACK}Max. tažná síla: {LTBLUE}{FORCE}
|
||||
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Letošní zisk: {LTBLUE}{CURRENCY_LONG} (vloni: {CURRENCY_LONG})
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Letošní zisk: {LTBLUE}{CURRENCY_LONG} (vloni: {CURRENCY_LONG}) {BLACK}Min. výkon: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Spolehlivost: {LTBLUE}{COMMA}% {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
|
||||
|
||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY_LONG}
|
||||
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapacita: {LTBLUE}nic{STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacita: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacita: {LTBLUE}{0:CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacita: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
|
||||
|
||||
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Podíl za převoz: {LTBLUE}{CURRENCY_LONG}
|
||||
@@ -4549,25 +4609,25 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tento j
|
||||
STR_TIMETABLE_STATUS_START_AT :{BLACK}Tento jízdní řád začne v {STRING}
|
||||
|
||||
STR_TIMETABLE_STARTING_DATE :{BLACK}Datum začátku
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyber počáteční datum tohoto jízdního řádu. Ctrl+Klik nastaví počáteční datum jízdního řádu všem vozidlům sdílejícím příkazy vzhledem k jejich pořadí
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyber počáteční datum tohoto jízdního řádu. Ctrl+Klik rovnoměrně rozloží odjezdy jednotlivých vozidel sdílejích příkazy s ohledem na současný jízdní řád.
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Změnit čas
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Změnit čas pro splnění jízdního příkazu
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Změnit čas pro splnění jízdního příkazu. Ctrl+klik změní čas pro všechny příkazy.
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Smazat čas
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Zrušit čas pro splnění jízdního příkazu
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Zrušit čas pro splnění jízdního příkazu. Ctrl+klik zruší čas pro všechny příkazy
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Změnit rychlostní limit
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Změnit maximální cestovní rychlost u vybraného příkazu
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Změnit maximální cestovní rychlost u vybraného příkazu. Ctrl+klik nastaví rychlost pro všechny příkazy
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Odstranit rychlostní limit
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstranit maximální cestovní rychlost u vybraného příkazu
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstranit maximální cestovní rychlost u vybraného příkazu. Ctrl+klik odstraní maximální rychlosti u všech příkazů
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Zapomenout zpoždění
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Smazat zpoždění, takže vozidlo pojede na čas
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Automaticky
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Automaticky vyplň rozvrh hodnotami z následující cesty (Ctrl+klik pro zachování vyčkávací doby)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Automaticky vyplň rozvrh hodnotami z následující cesty. Ctrl+klik pro zachování vyčkávací doby.
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Očekávaný
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Plánovaný
|
||||
@@ -4611,6 +4671,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Někter
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno na ladění AI / herních skriptů je dostupné pouze na serveru
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}Nastavení AI
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Možnosti herních skriptů
|
||||
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Herní skripty, které budou načteny v příští hře
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI, které budou načteny v příští hře
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :Lidský hráč
|
||||
@@ -4624,10 +4686,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Přesuno
|
||||
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Přesunout vybranou AI v seznamu níže
|
||||
|
||||
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Herní skript
|
||||
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametry
|
||||
STR_AI_CONFIG_AI :{SILVER}AI
|
||||
|
||||
STR_AI_CONFIG_CHANGE_AI :AI
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Herní skript
|
||||
STR_AI_CONFIG_CHANGE_AI :{BLACK}Vybrat AI
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Vybrat herní skript
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Načíst další skript
|
||||
STR_AI_CONFIG_CONFIGURE :{BLACK}Nastavit
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Nastavit parametry skriptu
|
||||
@@ -4656,7 +4719,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Snímek
|
||||
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Snímek (náhledové) mapy světa
|
||||
|
||||
# AI Parameters
|
||||
STR_AI_SETTINGS_CAPTION_AI :AI
|
||||
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametry AI
|
||||
STR_AI_SETTINGS_CLOSE :{BLACK}Zavřít
|
||||
STR_AI_SETTINGS_RESET :{BLACK}Obnovit nastavení
|
||||
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
@@ -4820,6 +4883,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... př
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nelze vygenerovat žádný průmysl...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Zde nelze postavit {STRING} ...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Zde nelze postavit tento druh průmyslu...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Není možné založit průmysl ...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... příliš blízko k jinému průmyslu
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... je nutné nejprve vystavět město
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... je povolena jen jedna na město
|
||||
@@ -4834,6 +4898,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... les
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... může být postaven pouze nad sněžnou čarou
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... může být postaven pouze pod sněžnou čarou
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Smůla, financování průzkumu se nezdařilo; zkus to znovu
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Na mapě nebyla žádná vhodná místa pro založení tohoto typu průmyslu
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Na mapě nebyla žádná vhodná místa pro '{STRING}'
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Pro získání lepší mapy změňte parametry jejího generování
|
||||
|
||||
@@ -5008,6 +5074,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}V cestě
|
||||
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... v cestě je ředitelství společnosti
|
||||
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Nelze zakoupit tento pozemek...
|
||||
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... již vlastníš!
|
||||
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... dosažen limit pro výstavbu objektů
|
||||
|
||||
# Group related errors
|
||||
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nelze vytvořit skupinu...
|
||||
@@ -5080,6 +5147,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Nelze zm
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vozidlo bylo zničeno
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... všechna vozidla nejsou identická
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Žádná vozidla nejsou dostupná
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmeň nastavení NewGRF
|
||||
@@ -5107,6 +5175,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Nelze p
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... prostředek se nedostane do všech stanic
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... do této stanice se prostředek nedostane
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... do této stanice se prostředek sdílející tento příkaz nedostane
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... ne všechna vozidla mají stejné příkazy
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... ne všechna vozidla sdílí příkazy
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Nelze sdílet seznam příkazů...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Nelze zastavit sdílení seznamu příkazů...
|
||||
|
||||
+5
-2
@@ -1182,6 +1182,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Højre
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum startlån: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimumbeløb et selskab kan låne (uden at tage inflation i betragtning)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Lånerente: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerer også inflationen hvis aktiveret
|
||||
@@ -2658,8 +2659,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg t
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vælg jernbanebro
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vælg vejbro
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Valg af bro - klik på din foretrukne brotype for at bygge den
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hængebro, stål
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Bjælkebro, stål
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Gerberbro, stål
|
||||
@@ -3279,6 +3278,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, spring pseudo/omfarvning/font-sprites over og omløb fra starten til slutningen
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nulstil relativ
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nulstil den nuværende relative forskydning
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Absolut)
|
||||
|
||||
+35
-11
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsont
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Wegenbouw
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramsporen bouwen
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Bomen planten. Shift schakelt tussen planten/inschatting van de kosten
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Bomen planten. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen planten/inschatting van de kosten
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Bord plaatsen
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Object plaatsen. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven.
|
||||
|
||||
@@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie)
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Geen lening {RED}Spelscript vereist voor aanvankelijk saldo
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Rente van lening: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Percentage rente op lening; bepaald ook het inflatiecijfer wanneer ingeschakeld
|
||||
@@ -1432,6 +1435,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Naam van NewGRF weergeven in venster voor voertuigen bouwen: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Voeg een regel toe aan het venster voor voertuigen bouwen die aangeeft uit welke NewGRF het geselecteerde voertuig komt.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mogelijke lading van voertuigen weergeven in lijstvensters {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Wanneer ingeschakeld, verschijnt de mogelijke lading van het voertuig erboven in voertuiglijsten
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Landschap: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landschappen definiëren standaard spelscenario's met verschillende vracht- en stadsgroei-eisen. NewGRF en spelscripts kunnen daarentegen fijnere controle bieden.
|
||||
@@ -1927,9 +1932,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :'Symmetrisch' b
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributiemodus voor post: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid post wordt verzonden van station A naar station B als van B naar A. 'Asymmetrisch' betekent dat willekeurige hoeveelheden post in beide richtingen worden verzonden. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor post.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributiemodus voor de GEPANTSERDE ladingsklasse: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :De GEPANTSERDE ladingsklasse bevat waardevolle spullen in het gematigde klimaat, diamanten in het subtropische klimaat of goud in het subarctische klimaat. NewGRF's kunnen dat veranderen. 'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid lading wordt verzonden van een station A naar station B als van B naar A. 'Asymmetrisch' betekent dat deze vracht willekeurig in beide richtingen kan worden verzonden. 'Handmatig' betekent dat er geen automatische distributie zal plaatsvinden voor die lading. Het wordt aanbevolen om dit op 'Asymmetrisch' of 'Handmatig' te zetten bij het spelen in subarctisch klimaat omdat banken geen goud terugsturen naar goudmijnen. Voor gematigd en subtropisch klimaat kun je ook 'Symmetrisch' kiezen omdat banken waardevolle spullen terug kunnen sturen naar de oorspronkelijke bank.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :De GEPANTSERDE ladingsklasse bevat waardevolle spullen in het gematigde klimaat, diamanten in het subtropische klimaat of goud in het subarctische klimaat. NewGRF's kunnen dat veranderen. 'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid lading wordt verzonden van een station A naar station B als van B naar A. 'Asymmetrisch' betekent dat deze vracht willekeurig in beide richtingen kan worden verzonden. 'Handmatig' betekent dat er geen automatische distributie zal plaatsvinden voor die lading. Het wordt aanbevolen om dit op 'Asymmetrisch' of 'Handmatig' te zetten bij het spelen in subarctisch of subtropisch klimaat omdat banken daar alleen vracht kunnen accepteren, niet versturen. Voor gematigd klimaat kun je ook 'Symmetrisch' kiezen omdat banken kostbaarheden terug kunnen sturen naar de oorspronkelijke bank.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributiemodus voor andere vrachtsoorten: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Symmetrisch' betekent dat willekeurige hoeveelheden lading in beide richtingen kunnen worden gestuurd. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor die lading.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Asymmetrisch' betekent dat willekeurige hoeveelheden lading in beide richtingen kunnen worden gestuurd. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor die lading.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Handmatig
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asymmetrisch
|
||||
@@ -2696,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Dichthei
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecteer type spoorbrug
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecteer type wegbrug
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuze - klik op de gewenste brug om die te bouwen
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, staal
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Ligger, staal
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, staal
|
||||
@@ -2817,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Zendmasten
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Bomen
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Selecteer een soort boom om te planten. Als de tegel al bomen bevat, komen er meer bomen van verschillende typen bij, onafhankelijk van het geselecteerde type
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten.
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Ctrl selecteert het gebied diagonaal. 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
|
||||
@@ -2849,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Willekeu
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Hiermee sticht je een stad op een willekeurige locatie
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veel willekeurige steden
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Verspreid willekeurig geplaatste steden over de kaart
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Alle steden uitbreiden
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Laat alle steden een klein beetje groeien
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Plaatsnaam:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Plaatsnaam invoeren
|
||||
@@ -3323,6 +3332,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite.
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite verplaatsen, dit verandert X en Y offsets. Ctr+klik om de sprite 8 eenheden per keer te verplaatsen.
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Op offset gecentreerd
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Op sprite gecentreerd
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Richtkruis
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Relatief herstellen
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel de huidige relatieve offsets
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-offset: {NUM}, Y-offset: {NUM} (absoluut)
|
||||
@@ -3802,6 +3818,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Stuur in
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Vervang voertuigen
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Stuur voor onderhoud
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Winst dit jaar: {CURRENCY_LONG} (vorig jaar: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Stuur naar depot
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Stuur naar garage
|
||||
@@ -4500,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Startdat
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als startpunt voor deze dienstregeling. Ctrl+klik verdeelt alle voertuigen die deze orders delen gelijkmatig vanaf deze datum op basis van hun relatieve volgorde, als de order volledig is ingeroosterd
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Tijd wijzigen
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren. Met Ctrl+klik stel je de tijd voor alle orders in
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Tijd wissen
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de tijdsduur die de geselecteerde order mag duren
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de tijdsduur die de geselecteerde order mag duren. Met Ctrl+klik wis je de tijd voor alle orders
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Maximumsnelheid wijzigen
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximumsnelheid voor de gekozen order
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximumsnelheid voor de gekozen order. Met Ctrl+klik stel je de snelheid voor alle orders in
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Snelheidslimiet wissen
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Verwijder de maximumsnelheid van de gekozen order
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Verwijder de maximumsnelheid van de gekozen order. Met Ctrl+klik wis je de snelheid voor alle orders
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Vertragingsteller terugstellen
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Stel de vertragingsteller terug zodat het voertuig op tijd is
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Automatisch vullen
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vul de dienstregeling automatisch in aan de hand van de volgende reis (Ctrl+klik om te proberen om wachttijden te bewaren)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vul de dienstregeling automatisch in aan de hand van de volgende reis. Ctrl+klik om te proberen om wachttijden te bewaren
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Verwacht
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Volgens dienstregeling
|
||||
@@ -4771,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... te v
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan geen industrieën genereren...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kan {STRING} hier niet bouwen...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kan dit type industrie hier niet bouwen...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Kan industrie niet onderzoeken...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... te dicht bij een andere industrie
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... moet eerst dorp bouwen
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... slechts één per stad toegestaan
|
||||
@@ -4785,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... boss
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... kan alleen boven de sneeuwlijn gebouwd worden
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... kan alleen onder de sneeuwlijn gebouwd worden
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}De financiering is mislukt vanwege domme pech. Probeer het opnieuw.
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Er was geen geschikte plek voor onderzoek voor deze industrie
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Er waren geen geschikte locaties voor {STRING}-industrieën
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Wijzig de instellingen van wereldontwikkeling om een betere kaart te krijgen
|
||||
|
||||
@@ -5025,6 +5046,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan onde
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... voertuig is vernietigd
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... niet alle voertuigen zijn identiek
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Er zullen geen voertuigen beschikbaar zijn
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Pas je NewGRF-configuratie aan
|
||||
@@ -5052,6 +5074,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan gese
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... voertuig kan niet naar alle stations
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... voertuig kan niet naar dat station
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... een voertuig die deze order deelt kan niet naar dat station
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... niet alle voertuigen hebben dezelfde orders
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... niet alle voertuigen delen hun orders
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Kan orderlijst niet delen...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Kan niet stoppen met delen van orderlijst...
|
||||
|
||||
+30
-13
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town gen
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramway construction
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
|
||||
@@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING2}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING2}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled
|
||||
@@ -1925,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Take {STRING2}{
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of days. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING2}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "asymmetric" means that arbitrary numbers of passengers can go in either direction. "manual" means that no automatic distribution will take place for passengers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING2}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of mail can be sent in either direction. "manual" means that no automatic distribution will take place for mail.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMOURED cargo class: {STRING2}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical or gold in subarctic climate. NewGRFs may change that. "symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic, as banks won't send any gold back to gold mines. For temperate and subtropical you can also choose symmetric as banks will send valuables back to the origin bank of some load of valuables.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING2}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "manual" means that no automatic distribution will take place for those cargoes.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric
|
||||
@@ -2698,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Select Road Bridge
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bridge selection - click on your preferred bridge to build it
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspension, Steel
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Girder, Steel
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Steel
|
||||
@@ -2819,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Transmitters
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Trees
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
@@ -2851,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Random T
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Found town in random location
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Many random towns
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cover the map with randomly placed towns
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expand all towns
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Make all towns grow slightly
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Town name:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Enter town name
|
||||
@@ -3325,6 +3332,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centred
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centred
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Crosshair
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
|
||||
@@ -4504,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Start da
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Clear Time
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order. Ctrl+Click clears the time for all orders
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Change Speed Limit
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order. Ctrl+Click sets the speed for all orders
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Speed Limit
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey (Ctrl+Click to try to keep waiting times)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Expected
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled
|
||||
@@ -4775,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Can't build {STRING} here...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Can't construct this industry type here...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Can't prospect industry...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... too close to another industry
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... must found town first
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... only one allowed per town
|
||||
@@ -4789,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}The funding failed to prospect due to bad luck; try again
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}There were no suitable places to prospect for this industry
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
|
||||
|
||||
|
||||
+31
-13
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town gen
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramway construction
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
|
||||
@@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled
|
||||
@@ -1925,13 +1926,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Take {STRING}{N
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of days. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "asymmetric" means that arbitrary numbers of passengers can go in either direction. "manual" means that no automatic distribution will take place for passengers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of mail can be sent in either direction. "manual" means that no automatic distribution will take place for mail.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMOURED cargo class: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical or gold in subarctic climate. NewGRFs may change that. "symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary of that cargo can be sent in either direction. "manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic, as banks won't send any gold back to gold mines. For temperate and subtropical you can also choose symmetric as banks will send valuables back to the origin bank of some load of valuables.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "manual" means that no automatic distribution will take place for those cargoes.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric
|
||||
@@ -2698,8 +2699,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Select Road Bridge
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bridge selection - click on your preferred bridge to build it
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspension, Steel
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Girder, Steel
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Steel
|
||||
@@ -2819,7 +2822,7 @@ STR_OBJECT_CLASS_TRNS :Transmitters
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Trees
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
@@ -2851,6 +2854,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Random T
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Found town in random location
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Many random towns
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cover the map with randomly placed towns
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expand all towns
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Make all towns grow slightly
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Town name:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Enter town name
|
||||
@@ -3325,6 +3330,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the begin
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centred
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centred
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Crosshair
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
|
||||
@@ -4504,22 +4516,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Start da
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Clear Time
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order. Ctrl+Click clears the time for all orders
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Change Speed Limit
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order. Ctrl+Click sets the speed for all orders
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Speed Limit
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey (Ctrl+Click to try to keep waiting times)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Expected
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled
|
||||
@@ -4775,6 +4787,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Can't build {STRING} here...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Can't construct this industry type here...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Can't prospect industry...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... too close to another industry
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... must found town first
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... only one allowed per town
|
||||
@@ -4789,6 +4802,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}The funding failed to prospect due to bad luck; try again
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}There were no suitable places to prospect for this industry
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
|
||||
|
||||
@@ -5029,6 +5044,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Can't ch
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehicle is destroyed
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... not all vehicles are identical
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No vehicles will be available at all
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration
|
||||
@@ -5056,6 +5072,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Can't sk
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... vehicle can't go to all stations
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... vehicle can't go to that station
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... a vehicle sharing this order can't go to that station
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles have the same orders
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles are sharing orders
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Can't share order list...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Can't stop sharing order list...
|
||||
|
||||
+37
-13
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town gen
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Streetcar line construction
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
|
||||
@@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled
|
||||
@@ -1432,6 +1435,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the li
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargos the vehicles can carry in the list windows {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :If enabled, the vehicle's transportable load will appear above it in the vehicle lists
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargos and town growth requirements. NewGRF and Game Scripts allow finer control though
|
||||
@@ -1923,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Take {STRING}{N
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of days. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "asymmetric" means that arbitrary numbers of passengers can go in either direction. "manual" means that no automatic distribution will take place for passengers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of mail can be sent in either direction. "manual" means that no automatic distribution will take place for mail.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMORED cargo class: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMORED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic, as banks won't send any gold back to gold mines. For temperate and subtropical you can also choose symmetric as banks will send valuables back to the origin bank of some load of valuables.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMORED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "manual" means that no automatic distribution will take place for those cargos.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric
|
||||
@@ -2696,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Select Road Bridge
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bridge selection - click on your preferred bridge to build it
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspension, Steel
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Girder, Steel
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Steel
|
||||
@@ -2817,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Transmitters
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Trees
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
@@ -2849,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Random T
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Found town in random location
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Many random towns
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cover the map with randomly placed towns
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expand all towns
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Make all towns grow slightly
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Town name:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Enter town name
|
||||
@@ -3323,6 +3332,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the first sprite to the last
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centered
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centered
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Crosshair
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
|
||||
@@ -3802,6 +3818,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send ins
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Maintenance
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot
|
||||
@@ -4500,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Start Da
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Clear Time
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order. Ctrl+Click clears the time for all orders
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Change Speed Limit
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order. Ctrl+Click sets the speed for all orders
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Speed Limit
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey (Ctrl+Click to try to keep waiting times)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Expected
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled
|
||||
@@ -4771,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Can't build {STRING} here...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Can't construct this industry type here...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Can't prospect industry...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... too close to another industry
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... must found town first
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... only one allowed per town
|
||||
@@ -4785,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}The funding failed to prospect due to bad luck; try again
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}There were no suitable places to prospect for this industry
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
|
||||
|
||||
@@ -5025,6 +5046,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Can't ch
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehicle is destroyed
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... not all vehicles are identical
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No vehicles will be available at all
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration
|
||||
@@ -5052,6 +5074,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Can't sk
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... vehicle can't go to all stations
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... vehicle can't go to that station
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... a vehicle sharing this order can't go to that station
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles have the same orders
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles are sharing orders
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Can't share order list...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Can't stop sharing order list...
|
||||
|
||||
@@ -1090,6 +1090,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dekstre
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimuma komenca prunto: {STRING}
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Rentumtarifoj: {STRING}
|
||||
|
||||
@@ -2062,8 +2063,6 @@ STR_BUILD_SIGNAL_CAPTION :{WHITE}Elekto d
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Elektu Relan Ponton
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Elektu Vojan Ponton
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Pontelekto - klaku vian preferatan ponton por konstrui ĝin
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Ŝtala pendanta
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Ŝtala ebena
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Ŝtala luksa
|
||||
@@ -2539,6 +2538,10 @@ STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sekvanta
|
||||
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Iru al bildeto
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Antaŭa bildeto
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Movadi la bildeton, ŝanĝante la X kaj Y distancojn. Stir-klako por movi la bildeton je 8 unuoj samtempe
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Elektu bildeto
|
||||
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Elektu bildeton ie el la ekrano
|
||||
|
||||
|
||||
@@ -1231,6 +1231,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Intressimäär: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Laenu intressimäär; ühtlasi juhib inflatsiooni, kui inflatsioon on aktiveeritud
|
||||
@@ -2663,8 +2664,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenda
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vali raudteesild
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vali sillatüüp
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Silla valik - ehitamiseks klõpsi sobival sillal
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Rippsild, terasest
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Raamistikuga, terasest
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsool, terasest
|
||||
@@ -3284,6 +3283,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Eelmine
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the begin
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liiguta spraiti, muutes X ja Y tasakaalu. Ctrl+klõps, et liigutada kaheksa ühiku võrra korraga
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Lähtesta suhteline
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Lähtesta praegused suhtelised kõrvalekalded
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X kõrvalekalle: {NUM}, Y kõrvalekalle: {NUM} (Absoluutne)
|
||||
|
||||
@@ -1087,6 +1087,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høgra
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Hægst loyvda byrjunar lán: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Mest loyvda upphæddin ein fyritøka kann lána (uttan at taka virðisminkan til eftirtektar)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Rentu stigi: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rentustigi á láni, stýrir eisini virðisminkan um hon er sligin til
|
||||
@@ -2233,8 +2234,6 @@ STR_BUILD_SIGNAL_CAPTION :{WHITE}Úrval a
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vel jarnbreyta brúgv
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vel vega brúgv
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brúgva úrval - trýst á ta brúnna tær dámar fyri at byggja hana
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Heingibrúgv, stál
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Bjálkabrúgv, stál
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, stál
|
||||
@@ -2697,6 +2696,10 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF v
|
||||
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING})
|
||||
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
# NewGRF (self) generated warnings/errors
|
||||
STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING}
|
||||
|
||||
+153
-81
@@ -200,6 +200,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hv
|
||||
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hv
|
||||
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
|
||||
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hv/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hv/t
|
||||
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hv/Mg
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hv/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hv/t
|
||||
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hv/Mg
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
|
||||
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
|
||||
|
||||
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
|
||||
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
|
||||
@@ -226,9 +235,9 @@ STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m
|
||||
STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Suodatinteksti:
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Syötä suodatinteksti
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Syötä avainsana suodattaaksesi listan
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Suodatin:
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Syötä yksi tai useampi avainsana listan suodattamiseksi
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Syötä yksi tai useampi avainsana listan suodattamiseksi
|
||||
|
||||
STR_TOOLTIP_GROUP_ORDER :{BLACK}Valitse ryhmittelytapa
|
||||
STR_TOOLTIP_SORT_ORDER :{BLACK}Valitse järjestys (laskeva/nouseva)
|
||||
@@ -377,9 +386,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kuntien
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Teollisuuden luonti
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Tienrakennus
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Raitiotien rakentaminen
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Shift vaihtaa istutustilan ja kustannusarvion välillä
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Ctrl valitsee alueen vinottain. Shift vaihtaa istutustilan ja kustannusarvion välillä
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Sijoita kyltti
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Ctrl valitsee alueen vinottain. Shift vaihtaa rakennustilan ja kustannusarvion välillä
|
||||
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
@@ -395,6 +404,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Lopeta
|
||||
###length 15
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Pelin valinnat
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset
|
||||
STR_SETTINGS_MENU_AI_SETTINGS :Tekoälyasetukset
|
||||
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Peliskriptiasetukset
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä
|
||||
@@ -498,8 +509,8 @@ STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus
|
||||
STR_ABOUT_MENU_SHOW_FRAMERATE :Näytä kuvataajuus
|
||||
STR_ABOUT_MENU_ABOUT_OPENTTD :Tietoja OpenTTD:stä
|
||||
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-kohdistaja
|
||||
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Reunat päälle/pois
|
||||
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Likaisten ruutujen värjäys päälle/pois
|
||||
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Rajakehikot päälle/pois
|
||||
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Likaisten lohkojen värjäys päälle/pois
|
||||
|
||||
# Place in highscore window
|
||||
###length 15
|
||||
@@ -669,7 +680,7 @@ STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKG
|
||||
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
|
||||
STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------
|
||||
STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Musiikkia ei ole saatavilla
|
||||
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}"
|
||||
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}”{STRING}”
|
||||
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Raita
|
||||
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Nimi
|
||||
STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Sekoita
|
||||
@@ -690,7 +701,7 @@ STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näytä
|
||||
|
||||
# Playlist window
|
||||
STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista – ”{STRING}”
|
||||
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
|
||||
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} ”{STRING}”
|
||||
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Raita
|
||||
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista – ”{STRING}”
|
||||
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä
|
||||
@@ -997,8 +1008,19 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Valitse
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Nykyinen ajuri: {STRING}
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Käyttöliittymän koko
|
||||
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Vedä liukusäädintä asettaaksesi käyttöliittymän koon. Pidä Ctrl-näppäintä painettuna säätääksesi portaattomasti
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Tunnista koko automaattisesti
|
||||
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Valitse tämä ruutu käyttöliittymän koon tunnistamiseksi automaattisesti
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaalaa viisteet
|
||||
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Valitse tämä ruutu reunusten skaalaamiseksi käyttöliittymän koon mukaan
|
||||
|
||||
STR_GAME_OPTIONS_GUI_SCALE_1X :1×
|
||||
STR_GAME_OPTIONS_GUI_SCALE_2X :2×
|
||||
STR_GAME_OPTIONS_GUI_SCALE_3X :3×
|
||||
STR_GAME_OPTIONS_GUI_SCALE_4X :4×
|
||||
STR_GAME_OPTIONS_GUI_SCALE_5X :5×
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafiikka
|
||||
|
||||
@@ -1124,7 +1146,7 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}Ei sovel
|
||||
|
||||
# Settings tree window
|
||||
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Asetukset
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatinteksti:
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatin:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Avaa kaikki
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulje kaikki
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Palauta oletukset
|
||||
@@ -1184,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :oikealla
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurin mahdollinen yhtiön ottama laina (ottamatta huomioon inflaatiota)
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ei lainaa {RED}Vaatii peliskriptin, joka tarjoaa alkupääoman
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Korko: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lainan korko; ohjaa myös inflaatiota mikäli käytössä
|
||||
@@ -1249,10 +1274,10 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Kulkuneuvon sav
|
||||
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määrittää kuinka paljon savua tai kipinöitä kulkuneuvot saavat aikaan
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Junien kiihdytysmalli: {STRING}
|
||||
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Valitsee junien käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa junia mäissä tasapuolisesti. "Realistinen" malli hidastaa junia mäissä ja mutkissa junan ominaisuuksista riippuen
|
||||
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Valitsee junien kiihtyvyyden fysiikkamallin. ”Alkuperäisessä” mallissa mäet vaikuttavat kaikkiin juniin samalla tavalla. ”Realistinen” malli hidastaa junia mäissä ja kaarteissa riippuen kokoonpanon ominaisuuksista, kuten pituudesta ja vetovoimasta
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Ajoneuvojen kiihdytysmalli: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Valitsee ajoneuvojen käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa ajoneuvoja mäissä tasapuolisesta. "Realistinen" malli hidastaa ajoneuvoja mäissä niiden ominaisuuksista riippuen
|
||||
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Valitsee ajoneuvojen kiihtyvyyden fysiikkamallin. ”Alkuperäisessä” mallissa mäet vaikuttavat kaikkiin ajoneuvoihin samalla tavalla. ”Realistinen” malli ottaa huomioon ajoneuvon ominaisuudet, kuten esimerkiksi vetovoiman
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Mäkien jyrkkyys junille: {STRING}
|
||||
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys junille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa
|
||||
@@ -1306,7 +1331,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt o
|
||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin kulkuneuvon kohdalla
|
||||
|
||||
STR_CONFIG_SETTING_STOP_LOCATION :Uudet junien käskyt pysäyttävät junan aseman {STRING}
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. ”Alkuun” tarkoittaa, että junan viimeinen vaunu pysähtyy laiturin alkuun; ”keskelle” tarkoittaa junan pysähtymistä keskelle laituria; ja ”loppuun” tarkoittaa, että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää vain oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. ”Alkuun” tarkoittaa, että junan viimeinen vaunu pysähtyy laiturin alkuun; ”keskelle” tarkoittaa junan pysähtymistä keskelle laituria; ja ”loppuun” tarkoittaa, että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää vain oletusarvon uusille käskyille. Yksittäisten käskyjen kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alkuun
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskelle
|
||||
@@ -1368,7 +1393,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Varoita, jos ku
|
||||
STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Lähetä viesti, jos kulkuneuvo ei löydä reittiä määränpäähänsä
|
||||
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW :Tarkista kulkuneuvojen pysähdykset: {STRING}
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Mikäli käytössä, kulkuneuvojen määräykset tarkistetaan väliajoin ja havaituista ongelmista ilmoitetaan uutisviestillä
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Mikäli käytössä, kulkuneuvojen käskyjä tarkastetaan väliajoin, ja havaituista ongelmista ilmoitetaan uutisviestillä
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Ei
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Kyllä, mutta ei pysäytetyille
|
||||
@@ -1410,6 +1435,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys k
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF:n nimi kulkuneuvoikkunassa: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo on peräisin.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Näytä kulkuneuvojen kuljetettavissa olevat rahdit listaikkunoissa {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Mikäli käytössä, kuljetettavissa oleva rahti näytetään kulkuneuvolistoissa kulkuneuvon yllä
|
||||
|
||||
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.
|
||||
@@ -1874,9 +1901,9 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Korkein käytettävä sprite-resoluutio: {STRING}
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Rajoita suurinta spriteille käytettävää resoluutiota. Resoluution rajoittaminen estää korkean tarkkuuden grafiikoiden käyttämisen vaikka niitä olisi saatavilla. Tämä voi auttaa pitämään pelin ulkoasun yhtenäisenä käytettäessä sekaisin GRF-tiedostoja, joista osalla on ja osalla ei ole korkean tarkkuuden grafiikoita.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4×
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2×
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1×
|
||||
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH :Kuntien kasvunopeus: {STRING}
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kunnan kasvunopeus
|
||||
@@ -1901,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Käytä {STRING
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Jokaisen yhteyskuvaajan komponentin uudelleenlaskemiseen käytettävä aika. Uudelleenlaskun alkaessa käynnistetään uusi säie, jonka annetaan toimia näin monta päivää. Mitä lyhyemmäksi määrität tämän, sitä todennäköisempää on, että säie ei ole valmis ajoissa. Tällöin peli pysähtyy kunnes lasku on suoritettu loppuun (peli pätkii). Mitä pidemmäksi määrität asetuksen, sitä pitempään rahdin jakauman päivittämiseen kuluu aikaa reittien muuttuessa.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Matkustajien jakautuminen: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä matkustajia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että eri suuntiin voi kulkea eriävä määrä matkustajia. ”Manuaalinen” tarkoittaa, että automaattinen rahdin jakautuminen on pois käytöstä matkustajilla.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä matkustajia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että matkustajia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta matkustajiin.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Postin jakautuminen: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä postia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että eri suuntiin voidaan lähettää eriävä määrä postia. ”Manuaalinen” tarkoittaa, että automaattinen rahdin jakautuminen on pois käytöstä postilla.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä postia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että postia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta postiin.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Arvokuljetusten jakautuminen: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Arvokuljetuksiin kuuluvat arvotavarat lauhkeassa ilmastossa, timantit subtrooppisessa ilmastossa ja kulta pohjoisessa ilmastossa. NewGRF:t voivat kuitenkin muuttaa näitä rahteja. ”Symmetrinen” tarkoittaa, että suunnilleen sama määrä rahtia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että eri suuntiin voidaan lähettää eriävä määrä rahtia. ”Manuaalinen” tarkoittaa, että automaattinen rahdin jakautuminen on poistettu käytöstä rahdilta. Suositeltavia asetuksia ovat ”epäsymmetrinen” tai ”manuaalinen” pelattaessa pohjoisessa ilmastossa, sillä pankit eivät lähetä kultaa takaisin kaivoksille. Lauhkeassa ja subtrooppisessa ilmastossa pelatessa voidaan myös valita ”symmetrinen”, sillä pankit lähettävät arvotavaroita takaisin alkuperäiselle pankille.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Arvokuljetuksiin kuuluvat arvotavarat lauhkeassa ilmastossa, timantit subtrooppisessa ilmastossa ja kulta pohjoisessa ilmastossa. NewGRF:t voivat kuitenkin muuttaa näitä rahteja. ”Symmetrinen” tarkoittaa, että suunnilleen sama määrä rahtia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että tätä rahtia lähetetään mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta tähän rahtiin. Suositeltavia asetuksia ovat ”epäsymmetrinen” tai ”manuaalinen” pelattaessa pohjoisessa tai subtrooppisessa ilmastossa, sillä näissä pankit ottavat ainoastaan vastaan rahtia. Lauhkeassa ilmastossa pelatessa voidaan myös valita ”symmetrinen”, sillä pankit myös lähettävät arvotavaroita takaisin lähtöpankille.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Muiden rahtityyppien jakautuminen: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :”Epäsymmetrinen” tarkoittaa, että eri suuntiin voidaan lähettää eriäviä määriä rahtia. ”Manuaalinen” tarkoittaa, että automaattinen jakautuminen ei ole käytössä rahdille.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :”Epäsymmetrinen” tarkoittaa, että rahtia lähetetään mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta näihin rahteihin.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuaalinen
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :epäsymmetrinen
|
||||
@@ -2024,7 +2051,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ohit
|
||||
STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ohitetaan äänipaketti ”{STRING}”: ei löydetty
|
||||
STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohitetaan musiikkipaketti ”{STRING}”: ei löydetty
|
||||
STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Muisti lopussa
|
||||
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32bpp-grafiikat ja/tai lähennystasoja
|
||||
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32 bpp -grafiikat ja/tai lähennystasoja
|
||||
|
||||
# Video initalization errors
|
||||
STR_VIDEO_DRIVER_ERROR :{WHITE}Virhe näyttöasetuksissa…
|
||||
@@ -2045,6 +2072,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Pistetau
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Asetukset
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista online-sisältö
|
||||
STR_INTRO_AI_SETTINGS :{BLACK}Tekoälyasetukset
|
||||
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Peliskriptiasetukset
|
||||
STR_INTRO_QUIT :{BLACK}Sulje
|
||||
|
||||
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+napsautus ohittaa kartan asetusten valinnan.
|
||||
@@ -2064,6 +2093,8 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Näytä
|
||||
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Näytä asetukset
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Näytä NewGRF-asetukset
|
||||
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tarkista uutta ja päivitettyä sisältöä ladattavaksi
|
||||
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Näytä tekoälyasetukset
|
||||
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Näytä peliskriptiasetukset
|
||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Lopeta OpenTTD
|
||||
|
||||
STR_INTRO_BASESET :{BLACK}Valitusta perusgrafiikkapaketista puuttuu {NUM} sprite{P "" ä}. Tarkista, onko sille päivityksiä.
|
||||
@@ -2454,13 +2485,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :odotetaan yhtey
|
||||
|
||||
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 nro {2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön nro {2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} liittyi peliin (asiakas nro{NBSP}{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0: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 (nro {2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} on poistunut pelistä ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} on aloittanut uuden yhtiön (nro{NBSP}{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} on poistunut pelistä ({2:STRING})
|
||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muuttanut nimekseen {STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi {2:CURRENCY_LONG} yhtiölle {1:STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} antoi {2:CURRENCY_LONG} yhtiölle {1:STRING}
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Palvelin sulki istunnon
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Palvelin käynnistyy uudelleen...{}Odota, ole hyvä...
|
||||
STR_NETWORK_MESSAGE_KICKED :{STRING} potkaistiin ulos. Syy: ({STRING})
|
||||
@@ -2512,7 +2543,7 @@ STR_CONTENT_DETAIL_FILESIZE :{SILVER}Latauks
|
||||
STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Valittu seuraavan takia: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Vaatimukset: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_TAGS :{SILVER}Avainsanat: {WHITE}{STRING}
|
||||
STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD on käännetty ilman "zlib"-tukea...
|
||||
STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD on käännetty ilman ”zlib”-tukea…
|
||||
STR_CONTENT_NO_ZLIB_SUB :{WHITE}... sisällön lataus ei ole mahdollista!
|
||||
|
||||
# Order of these is important!
|
||||
@@ -2575,6 +2606,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
|
||||
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}kuormittunut
|
||||
|
||||
# Linkgraph tooltip
|
||||
STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} kuljetettavana kuukausittain asemalta {STATION} asemalle {STATION} ({COMMA}%{NBSP} kapasiteetista){STRING}
|
||||
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} kuljetettavana takaisin ({COMMA}{NBSP}% kapasiteetista)
|
||||
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Keskimääräinen matka-aika: {NUM}{NBSP}vrk
|
||||
|
||||
# Base for station construction window(s)
|
||||
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Vaikutusalueen korostus
|
||||
@@ -2584,6 +2618,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä ko
|
||||
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue
|
||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tuottaa: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Maintenance cost: {GOLD}{CURRENCY_SHORT}/v
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Liitä asema
|
||||
@@ -2648,13 +2683,13 @@ STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Edistyne
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Suojastusopastin (siipiopastin){}Kaikkein alkeellisin opastin, joka sallii vain yhden junan samalla osuudella kerrallaan
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Tulo-opastin (siipiopastin){}Näyttää vihreää aina, kun yksi tai useampi seuraavista poistumisopastimista näyttää vihreää. Muutoin se näyttää punaista
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Poistumisopastin (siipiopastin){}Käyttäytyy samalla tavalla kuin suojastusopastin, mutta on välttämätön oikean valon näyttämiseen tulo- ja yhdistelmäopastimissa
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (siipiopastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria "opastinpuita"
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (siipiopastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria ”opastinpuita”
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Reittiopastin (siipiopastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Tavalliset reittiopastimet voi ohittaa takakautta
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Yksisuuntainen reittiopastin (siipiopastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Yksisuuntaisia opastimia ei voi ohittaa takakautta
|
||||
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Suojastusopastin (valo-opastin){}Kaikkein alkeellisin opastin, joka sallii vain yhden junan osuudella kerrallaan
|
||||
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Tulo-opastin (valo-opastin){}Näyttää vihreää aina, kun yksi tai useampi seuraavista poistumisopastimista näyttää vihreää. Muutoin se näyttää punaista
|
||||
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Poistumisopastin (valo-opastin){}Käyttäytyy samalla tavalla kuin suojastusopastin, mutta on välttämätön oikean valon näyttämiseen tulo- ja yhdistelmäopastimissa
|
||||
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (valo-opastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria "opastinpuita"
|
||||
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (valo-opastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria ”opastinpuita”
|
||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Tavalliset reittiopastimet voi ohittaa takakautta
|
||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Yksisuuntainen reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Yksisuuntaisia opastimia ei voi ohittaa takakautta
|
||||
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Opastinten muuntaminen{}Kun tämä on valittu, olemassaolevan opastimen napsauttaminen muuntaa sen valituntyyppiseksi ja -muotoiseksi. Ctrl+napsautus vaihtaa nykyistä opastimen muotoa. Vaihto+napsautus näyttää muuntamisen kustannusarvion.
|
||||
@@ -2666,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenna
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Valitse rautatiesilta
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Valitse maantiesilta
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sillan valinta – napsauta valittua siltaa rakentaaksesi sen
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Riippusilta, terästä
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Palkki, terästä
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Ulokepalkki, terästä
|
||||
@@ -2771,11 +2808,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Maastonm
|
||||
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Laske ruudun kulmaa. Vetäminen laskee ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä
|
||||
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Nosta ruudun kulmaa. Vetäminen nostaa ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä
|
||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasoita maata ensimmäisen valitun kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Shift vaihtaa ostotilan ja kustannusarvion välillä
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Ctrl valitsee alueen vinottain. Shift vaihtaa ostotilan ja kustannusarvion välillä
|
||||
|
||||
# Object construction window
|
||||
STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin valinta
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Ctrl valitsee alueen vinottain. 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
|
||||
@@ -2787,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Lähettimet
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Puita
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Valitse istutettava puutyyppi. Jos ruudussa on jo puu, tämä lisää uusia puita riippumatta valitun puun tyypistä
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Sattumanvaraisia puita
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Aseta sattumanvaraisia puita. Shift vaihtaa istutustilan ja kustannusarvion välillä
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Istuta sattumanvaraisia puulajeja. Ctrl valitsee alueen vinottain. Shift vaihtaa istutustilan ja kustannusarvion välillä
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Satunnaisia puita.
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta puita satunnaisesti maastoon
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Tavallinen
|
||||
@@ -2819,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnai
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kunta satunnaiseen paikkaan
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kuntaa
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Täytä kartta satunnaisesti sijoitetuilla kunnilla
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Laajenna kaikkia kuntia
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Kasvata kaikkia kuntia hieman
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kunnan nimi:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kunnan nimi
|
||||
@@ -3083,7 +3122,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Tietoja
|
||||
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tietoja ei ole saatavilla
|
||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
|
||||
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
|
||||
STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti:
|
||||
STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatin:
|
||||
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Tiedosto on jo olemassa
|
||||
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Haluatko varmasti korvata olemassaolevan tiedoston?
|
||||
STR_SAVELOAD_DIRECTORY :{STRING} (hakemisto)
|
||||
@@ -3119,6 +3158,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Joet:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Tasaisuus:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Vaihtelu:
|
||||
STR_MAPGEN_GENERATE :{WHITE}Generoi
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Näytä NewGRF-asetukset
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}Tekoälyasetukset
|
||||
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Näytä tekoälyasetukset
|
||||
STR_MAPGEN_GS_SETTINGS :{BLACK}Peliskriptiasetukset
|
||||
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Näytä peliskriptiasetukset
|
||||
|
||||
###length 21
|
||||
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Englantilainen
|
||||
@@ -3200,7 +3245,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Tarkat N
|
||||
STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Käytössä olevat NewGRF-tiedostot
|
||||
STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Pois käytöstä olevat NewGRF-tiedostot
|
||||
STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Valitse valmislista:
|
||||
STR_NEWGRF_FILTER_TITLE :{ORANGE}Suodatinteksti:
|
||||
STR_NEWGRF_FILTER_TITLE :{ORANGE}Suodatin:
|
||||
STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Lataa valittu valmislista
|
||||
STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Tallenna valmislistaksi
|
||||
STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Tallenna nykyinen lista valmislistaksi
|
||||
@@ -3280,17 +3325,24 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF m
|
||||
# Sprite aligner window
|
||||
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Kohdistetaan spriteä {COMMA} ({STRING})
|
||||
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seuraava sprite
|
||||
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mene seuraavaan tavalliseen spriteen ja hyppää yli pseudo-/uudelleenväritetyt/fontti- spritet ja mene alkuun kun päästään viimeiseen
|
||||
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Siirry seuraavaan tavalliseen spriteen; mahdolliset pseudo-, uudelleenväritys- ja fonttispritet ohitetaan; viimeisen spriten jälkeen siirrytään ensimmäiseen
|
||||
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mene spriteen
|
||||
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Mene valittuun spriteen. Jos sprite ei ole tavallinen, jatka seuraavaan tavalliseen spriteen
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edelinen sprite
|
||||
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Siirry valittuun spriteen. Jos sprite ei ole tavallinen, jatka seuraavaan tavalliseen spriteen
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edellinen sprite
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jatka edelliseen tavalliseen spriteen ja hyppää yli kaikki pseudo-/uudelleenväritetyt/fontti- spritet ja mene loppuun kun päästään ensimmäiseen
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten näyttö. Sijaintia ei huomioida spriteä piirrettäessä
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten esitys. Siirrosta ei huomioida tätä spriteä piirrettäessä
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liikuta spriteä ympäriinsä, muuttaen X- ja Y-sijainteja. Ctrl+napsautus siirtää spriteä kahdeksan yksikköä kerralla.
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Siirros keskitetty
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite keskitetty
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Hiusristikko
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nollaa suhteelliset
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nollaa suhteelliset erotukset
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-erotus: {NUM}, Y-erotus: {NUM} (absoluuttinen)
|
||||
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-erotus: {NUM}, Y-erotus: {NUM} (suhteellinen)
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nollaa tämänhetkiset suhteelliset siirrokset
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-siirros: {NUM}, Y-siirros: {NUM} (absoluuttinen)
|
||||
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-siirros: {NUM}, Y-siirros: {NUM} (suhteellinen)
|
||||
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Valitse sprite
|
||||
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Valitse sprite ruudulta
|
||||
|
||||
@@ -3304,15 +3356,15 @@ STR_NEWGRF_ERROR_MSG_FATAL :{RED}Virhe: {SI
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vakava NewGRF-virhe on tapahtunut:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-virhe on tapahtunut:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ei toimi OpenTTD:n ilmoittaman TTDPatch-version kanssa
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {STRING}-versiota varten
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ja {STRING} on suunniteltu toimimaan yhdessä
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Virheellinen parametri: {1:STRING}: {STRING} ({NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} tulee ladata ennen kuin {STRING}
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} tulee ladata {STRING} jälkeen
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} vaatii OpenTTD:n version {STRING} tai uudemman
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {2:STRING}-versiota varten
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on suunniteltu toimimaan lisäosan {2:STRING} kanssa
|
||||
STR_NEWGRF_ERROR_INVALID_PARAMETER :Virheellinen parametri lisäosalle {1:STRING}: {2:STRING} ({3:NUM})
|
||||
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} on ladattava ennen kuin {2:STRING} voidaan ladata
|
||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} tulee ladata lisäosan {2:STRING} jälkeen
|
||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} vaatii OpenTTD:n version {2:STRING} tai uudemman
|
||||
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-tiedosto, jonka se muuntaa
|
||||
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Liian monta NewGRF:ää on ladattu
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :NewGRF:n {1:STRING} lataaminen staattisena NewGRF:nä {STRING}:n kanssa saattaa aiheuttaa nykimistä
|
||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Lisäosan {1:STRING} lataaminen staattisena NewGRF:nä lisäosan {2:STRING} kanssa voi johtaa tahdistusvirheisiin
|
||||
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Odottamaton sprite (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Tuntematon Action 0-ominaisuus {4:HEX} (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_INVALID_ID :Yritys käyttää virheellistä ID:tä (sprite {3:NUM})
|
||||
@@ -3323,7 +3375,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-re
|
||||
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Virheellinen/tuntematon spriten asettelumuoto (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Liian monta elementtiä ominaisuusarvolistassa (sprite {3:NUM}, ominaisuus {4:HEX})
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virhe teollisuuden tuotannon takaisinkutsussa (sprite {3:NUM}, "{2:STRING}")
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virheellinen teollisuuslaitoksen tuotannon takaisinkutsu (sprite {3:NUM}, ”{2:STRING}”)
|
||||
|
||||
# NewGRF related 'general' warnings
|
||||
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varoitus!
|
||||
@@ -3444,14 +3496,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Osta yksinoikeu
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Lahjo viranomaisia
|
||||
|
||||
###length 8
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Käynnistä pieni mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita pienellä säteellä kunnan keskustan ympärillä.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita keskikokoisella säteellä kunnan keskustan ympärillä.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita suurella säteellä kunnan keskustan ympärillä.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Rahoita tieverkon uudelleenrakentamista.{}Aiheuttaa huomattavaa häiriötä tieliikenteessä jopa kuuden kuukauden ajan.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Rakenna patsas yhtiösi kunniaksi.{}Parantaa asemien arvioita pysyvästi tässä kunnassa.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Rahoita uusien liikerakennusten rakentamista kunnassa.{}Tämä kiihdyttää tämän kunnan kasvua tilapäisesti.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Osta vuoden yksinoikeudet kunnan liikennöintiin.{}Tällöin paikallisviranomaiset eivät salli matkustajien ja rahdin käyttää kilpailijoittesi asemia.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Lahjo viranomaisia lisätäksesi arviotasi; rangaistus voi olla kuitenkin suuri, jos jäät kiinni.{}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Käynnistä pieni mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita pienellä säteellä kunnan keskustan ympärillä.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita keskikokoisella säteellä kunnan keskustan ympärillä.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita suurella säteellä kunnan keskustan ympärillä.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Rahoita tieverkon uudelleenrakentamista.{}Aiheuttaa huomattavaa häiriötä tieliikenteessä jopa kuuden kuukauden ajan.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Rakenna patsas yhtiösi kunniaksi.{}Parantaa asemien arvioita pysyvästi tässä kunnassa.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Rahoita uusien rakennusten rakentamista kunnassa.{}Tämä kiihdyttää tämän kunnan kasvua tilapäisesti.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Osta vuodeksi yksinoikeudet kunnan liikennöintiin.{}Tällöin paikallisviranomaiset eivät salli matkustajien ja rahdin käyttää kilpailijoittesi asemia.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Lahjo viranomaisia lisätäksesi arviotasi; rangaistus voi kuitenkin olla ankara, jos jäät kiinni.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Tavoitteet
|
||||
@@ -3624,14 +3676,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Laivat
|
||||
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Lainan korko
|
||||
STR_FINANCES_SECTION_OTHER :{GOLD}Muut
|
||||
|
||||
STR_FINANCES_TOTAL_CAPTION :{WHITE}Yhteensä
|
||||
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
|
||||
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
|
||||
STR_FINANCES_PROFIT :{WHITE}Tuotto
|
||||
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Tilin saldo
|
||||
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Omat varat
|
||||
STR_FINANCES_LOAN_TITLE :{WHITE}Laina
|
||||
STR_FINANCES_INTEREST_RATE :{WHITE}Lainan korko: {BLACK}{NUM}{NBSP}%
|
||||
STR_FINANCES_MAX_LOAN :{WHITE}Laina enintään: {BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_BUTTON :{BLACK}Nosta lainaa {CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Ota lisää lainaa. Ctrl+napsautus nostaa lainaa niin paljon kuin mahdollista.
|
||||
STR_FINANCES_REPAY_BUTTON :{BLACK}Lyhennä lainaa {CURRENCY_LONG}
|
||||
@@ -3732,7 +3788,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Tuottaa:
|
||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee:
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} odottamassa{STRING}
|
||||
|
||||
STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa tuotantoa (8:n kerroin, 2040:een asti)
|
||||
@@ -3762,6 +3818,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa ka
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Korvaa kulkuneuvoja
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Lähetä huoltoon
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Tuotto tänä vuonna: {CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Lähetä varikolle
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Lähetä varikolle
|
||||
@@ -3849,11 +3907,14 @@ STR_PURCHASE_INFO_ALL_TYPES :Kaikki rahtityy
|
||||
STR_PURCHASE_INFO_NONE :Ei mitään
|
||||
STR_PURCHASE_INFO_ENGINES_ONLY :Vain veturit
|
||||
STR_PURCHASE_INFO_ALL_BUT :Kaikki paitsi {CARGO_LIST}
|
||||
STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurin vetovoima: {GOLD}{FORCE}
|
||||
STR_PURCHASE_INFO_MAX_TE :{BLACK}Maksimivetovoima: {GOLD}{FORCE}
|
||||
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Toimintasäde: {GOLD}{COMMA} ruutua
|
||||
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Ilma-alustyyppi: {GOLD}{STRING}
|
||||
|
||||
###length 3
|
||||
STR_CARGO_TYPE_FILTER_ALL :Kaikki rahtityypit
|
||||
STR_CARGO_TYPE_FILTER_FREIGHT :Rahti
|
||||
STR_CARGO_TYPE_FILTER_NONE :Ei mikään
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Raideliikennevälineiden valintaluettelo. Napsauta kulkuneuvoa saadaksesi lisää tietoa. Ctrl+napsautus näyttää tai piilottaa kulkuneuvon tyypin.
|
||||
@@ -3933,7 +3994,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ku
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat - vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun
|
||||
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat – vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun
|
||||
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot – napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja
|
||||
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat – napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja.
|
||||
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet – napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja
|
||||
@@ -4023,12 +4084,12 @@ STR_ENGINE_PREVIEW_AIRCRAFT :ilma-alus
|
||||
STR_ENGINE_PREVIEW_SHIP :laiva
|
||||
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Hinta: {CURRENCY_LONG} Paino: {WEIGHT_SHORT}{}Nopeus: {VELOCITY} Teho: {POWER}{}Käyttökustannukset: {CURRENCY_LONG}/vuosi{}Kapasiteetti: {CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hinta: {CURRENCY_LONG} Paino: {WEIGHT_SHORT}{}Nopeus: {VELOCITY} Teho: {POWER} Maks. vetovoima: {6:FORCE}{}Käyttökustannukset: {4:CURRENCY_LONG}/v{}Kapasiteetti: {5:CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hinta: {0:CURRENCY_LONG} Paino: {1:WEIGHT_SHORT}{}Nopeus: {2:VELOCITY} Teho: {3:POWER} Maksimivetovoima: {6:FORCE}{}Käyttökustannukset: {4:CURRENCY_LONG}/yr{}Kapasiteetti: {5:CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
|
||||
|
||||
# Autoreplace window
|
||||
STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} – {STRING}
|
||||
@@ -4178,16 +4239,17 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} vu
|
||||
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Ilma-alustyyppi: {LTBLUE}{STRING}
|
||||
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Ilma-alustyyppi: {LTBLUE}{STRING} {BLACK}Toimintamatka: {LTBLUE}{COMMA} ruutua
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. vetovoima: {LTBLUE}{FORCE}
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Maksimivetovoima: {LTBLUE}{FORCE}
|
||||
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) {BLACK}Vähimmäissuorituskyky: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}{NBSP}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA}
|
||||
|
||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY_LONG}
|
||||
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}-{STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapasiteetti: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{0:CARGO_LONG}{3:STRING}
|
||||
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapasiteetti: {LTBLUE}{0:CARGO_LONG}{3:STRING} (×{4:NUM})
|
||||
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
|
||||
|
||||
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Siirron arvo: {LTBLUE}{CURRENCY_LONG}
|
||||
@@ -4456,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Aloitusp
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloitusajankohdaksi. Ctrl+napsautus levittää kaikki tämän käskyjoukon jakavat kulkuneuvot tasaisesti niiden keskinäisen järjestyksen mukaan, mikäli käskyjoukko on kokonaan aikataulutettu
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Aseta kuinka kauan käskyn tulisi kestää
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuta aikaa, jonka valitun käskyn tulisi kestää. Ctrl+napsautus asettaa keston kaikille käskyille
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Nollaa aika
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nollaa tämän rivin aika
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nollaa valitun käskyn keston. Ctrl+napsautus nollaa kaikkien käskyjen kestot
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Muuta nopeusrajoitusta
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuta valitun määräyksen suurinta sallittua nopeutta
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuta suurinta sallittua nopeutta valitulle käskylle. Ctrl+napsautus asettaa nopeusrajoituksen kaikille käskyille
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Tyhjennä nopeusrajoitus
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Tyhjennä valitun määräyksen suurin sallittu nopeus
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Poista suurin sallittu nopeus valitulta käskyltä. Ctrl+napsautus poistaa kaikkien käskyjen nopeusrajoitukset
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Nollaa myöhästymislaskuri
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nollaa myöhästymislaskuri, jotta vaunu olisi taas aikataulussa
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Automaattinen
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Täytä aikataulu automaattisesti seuraavan matkan arvoilla (Ctrl+napsautus: yritä säilyttää odotusajat)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Täytä aikataulu automaattisesti seuraavan matkan arvoilla. Ctrl+napsautus: yritä säilyttää odotusajat
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Odotettu
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Aikataulu
|
||||
@@ -4515,6 +4577,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi kä
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoälyn/peliskriptin virheenjäljitysikkuna on vain palvelimen käytettävissä
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}Tekoälyasetukset
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Peliskriptiasetukset
|
||||
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattava peliskripti
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattavat tekoälyt
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :Ihmispelaaja
|
||||
@@ -4528,10 +4592,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Siirrä
|
||||
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Siirrä valittua tekoälyä alaspäin listalla
|
||||
|
||||
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Peliskripti
|
||||
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametrit
|
||||
STR_AI_CONFIG_AI :{SILVER}Tekoälyt
|
||||
|
||||
STR_AI_CONFIG_CHANGE_AI :Tekoäly
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Peliskripti
|
||||
STR_AI_CONFIG_CHANGE_AI :{BLACK}Valitse tekoäly
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Valitse peliskripti
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lataa toinen skripti
|
||||
STR_AI_CONFIG_CONFIGURE :{BLACK}Määritä
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Määritä skriptin parametrit
|
||||
@@ -4560,7 +4625,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeusk
|
||||
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pienoiskartan kuvakaappaus
|
||||
|
||||
# AI Parameters
|
||||
STR_AI_SETTINGS_CAPTION_AI :Tekoäly
|
||||
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Tekoälyn parametrit
|
||||
STR_AI_SETTINGS_CLOSE :{BLACK}Sulje
|
||||
STR_AI_SETTINGS_RESET :{BLACK}Palauta
|
||||
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
@@ -4724,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liik
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Teollisuuslaitoksia ei voi luoda...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING}: tähän ei voi rakentaa...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Teollisuustyyppiä ei voi rakentaa tähän...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Ei voida koekaivaa…
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... liian lähellä toista teollisuuslaitosta
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... kunta pitää perustaa ensin
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... vain yksi on sallittu kuntaa kohden
|
||||
@@ -4738,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mets
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan yläpuolelle
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan alapuolelle
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Rahoittamasi koekaivaus epäonnistui; yritä uudelleen
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Ei ollut sopivia paikkoja tämän teollisuuslaitoksen koekaivauksille
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Ei ollut sopivia paikkoja ”{STRING}”-teollisuuslaitoksille
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Muuta kartan parametreja saadaksesi paremman kartan
|
||||
|
||||
@@ -4905,6 +4973,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objekti
|
||||
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... yhtiön päärakennus on tiellä.
|
||||
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Maa-aluetta ei voi hankkia...
|
||||
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... omistat sen jo!
|
||||
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}… objektien rakentamisen raja saavutettu
|
||||
|
||||
# Group related errors
|
||||
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei voi luoda ryhmää.
|
||||
@@ -4977,6 +5046,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Huoltov
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kulkuneuvo on tuhoutunut
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}… kaikki kulkuneuvot eivät ole identtisiä
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään kulkuneuvoa ei ole saatavilla
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta NewGRF-asetuksiasi
|
||||
@@ -5004,6 +5074,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Tähän
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... kulkuneuvo ei pääse kaikille asemille
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... kulkuneuvo ei pääse tälle asemalle
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... kulkuneuvo, jonka kanssa käskyt on jaettu, ei pääse tälle asemalle
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}… kaikkien kulkuneuvojen käskyt eivät ole samat
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}… kaikki kulkuneuvot eivät jaa käskyjä
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Käskyjä ei voida jakaa...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Käskyjen jakamista ei voida lopettaa...
|
||||
|
||||
+35
-13
@@ -387,7 +387,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Créatio
|
||||
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Création des industries
|
||||
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construction routière
|
||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construction de tramway
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planter des arbres.{}Shift pour afficher seulement le coût estimé.
|
||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planter des arbres.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé.
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Placer un panneau
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Placer un objet.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé.
|
||||
|
||||
@@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :À droite
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Emprunt initial maximum{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Taux d'intérêt{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taux d’intérêt de l'emprunt{NBSP}; contrôle également l'inflation si activé
|
||||
@@ -1433,6 +1434,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Épaisseur de l
|
||||
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Afficher le nom du NewGRF dans la fenêtre d'achat des véhicules{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ajoute une ligne à la fenêtre d'achat des véhicules, montrant de quel NewGRF provient le véhicule sélectionné.
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Afficher les cargaisons que peuvent transporter les véhicules dans les fenêtres de liste {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Quand il est actif, ce qu'un véhicule peut transporter est affiché au dessus de lui dans les listes de véhicules
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Paysage{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Les paysages définissent les scénarios de jouabilité classique avec différentes marchandises et exigences pour la croissance des villes. Les NewGRFs et les scripts de jeux autorisent cependant un contrôle plus fin
|
||||
@@ -1924,13 +1927,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Prendre {STRING
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Durée maximale (en jours) du recalcul d'une composante du graphe. À chaque itération, un thread est initié, qui a une durée maximale définie par ce réglage. Plus celui-ci est court, plus la probabilité que le thread ne termine pas sa tâche à temps est élevée. Le jeu s'interrompt alors jusqu'à la fin du recalcul ("lag"). Plus le réglage est long, et moins rapidement la distribution sera réactualisée en cas de changement de routes.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Type de distribution pour les passagers{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symétrique" signifie qu'autant de passagers iront d'une station A vers une station B, que de la station B vers la station A. "asymétrique" signifie qu'un nombre arbitraire de passagers peut être envoyé dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour les passagers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symétrique" signifie qu'autant de passagers iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'un nombre arbitraire de passagers peut être envoyé dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour les passagers.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Type de distribution pour le courrier{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symétrique" signifie qu'autant de courrier ira d'une station A vers une station B, que de la station B vers la station A. "asymétrique" signifie qu'une quantité arbitraire de courrier peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour le courrier.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symétrique" signifie qu'autant de courrier ira d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de courrier peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour le courrier.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Type de distribution pour les cargaisons de classe ARMOURED{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de cargaison ARMOURED contient des biens de valeur dans les climats tempéré, des diamants dans le climat subtropical, et de l'or dans le climat subarctique. Les NewGRFs peuvent changer ça. "symétrique" signifie qu'autant de ces cargaisons iront d'une station A vers une station B, que de la station B vers la station A. "asymétrique" signifie qu'une quantité arbitraire de ces cargaisons peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour ces cargaisons. Il est conseillé de choisir "asymétrique" ou "manuel" dans le climat subarctique, car les banques n'enverront pas d'or en retour vers les mines d'or. Dans les climats tempéré et subtropical, on peut choisir aussi "symétrique", car les banques peuvent renvoyer en retour des biens de valeurs aux banques qui en envoient à l'origine.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de cargaison ARMOURED contient des biens de valeur dans les climats tempéré, des diamants dans le climat subtropical, et de l'or dans le climat subarctique. Les NewGRFs peuvent changer ça. "Symétrique" signifie qu'autant de ces cargaisons iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de ces cargaisons peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour ces cargaisons. Il est conseillé de choisir "asymétrique" ou "manuel" dans les climats subarctique ou subtropical, car les banques ne font que recevoir des marchandises dans ces climats. Dans le climat tempéré, on peut choisir aussi "symétrique", car les banques peuvent renvoyer en retour des biens de valeurs aux banques qui en envoient à l'origine.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Type de distribution pour les autres classes de cargaison{NBSP}: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison.
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuel
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymétrique
|
||||
@@ -2697,8 +2700,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmente
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Choisir un pont ferroviaire
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Choisir un pont routier
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sélection de pont - Cliquer sur le type de pont désiré pour le construire.
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspendu en acier
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :À poutres en acier
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Porte-à-faux en acier
|
||||
@@ -2818,7 +2823,7 @@ STR_OBJECT_CLASS_TRNS :Transmetteurs
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}Arbres
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK}Choix du type d'arbre. S'il y a déjà un arbre dans la case, plusieurs arbres de types différents y seront ajoutés, indépendamment du type sélectionné.
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}Au hasard
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Planter des arbres provenant d'espèces choisies au hasard.{}Shift pour afficher seulement le coût estimé.
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Planter des arbres provenant d'espèces choisies au hasard.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé.
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Ajouter des arbres au hasard
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Semer des arbres au hasard sur l'ensemble du terrain
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
@@ -2850,6 +2855,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Créer u
|
||||
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fonder une ville à un emplacement choisi au hasard
|
||||
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Beaucoup de villes au hasard
|
||||
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Couvrir la carte de villes placées au hasard
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Étendre toutes les villes
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Faire croître toutes les villes légèrement
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nom de la ville{NBSP}:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Entrer un nom de ville
|
||||
@@ -3324,6 +3331,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite p
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Se rendre au précédent sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du premier vers le dernier
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation du sprite actuellement séléctionné. L'alignement est ignoré lors de l'affichage de ce sprite
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Déplacer le sprite, en modifiant les décalages X et Y. Ctrl-clic pour déplacer le sprite de 8 unités à la fois.
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Décalage centré
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centré
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Croix
|
||||
|
||||
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Réinitialiser les relatifs
|
||||
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Réinitialiser les décalages relatifs courants
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Décalage X{NBSP}: {NUM}, décalage Y{NBSP}: {NUM} (Absolu)
|
||||
@@ -3803,6 +3817,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envoyer
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Remplacer des véhicules
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envoyer à l'entretien
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit cette année{NBSP}: {CURRENCY_LONG} (année précédente{NBSP}: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Envoyer au dépôt
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Envoyer au dépôt
|
||||
@@ -4501,22 +4517,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Date de
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Choisir une date comme point de départ de cet horaire. Ctrl-clic pour répartir tous les véhicules partageant cet ordre uniformément à partir de la date donnée selon leur ordre relatif, si l'ordre est complètement planifié
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifier la durée
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifier la durée de l'ordre sélectionné
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifier la durée de l'ordre sélectionné. Ctrl-clic pour définir la durée pour tous les ordres
|
||||
|
||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Annuler la durée
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Annuler la durée de l'ordre sélectionné
|
||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Annuler la durée de l'ordre sélectionné. Ctrl-clic pour annuler la durée de tous les ordres
|
||||
|
||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Modifier la vitesse limite
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Modifier la vitesse maximale de déplacement de l'ordre sélectionné
|
||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Modifier la vitesse maximale de déplacement de l'ordre sélectionné. Ctrl-Clic pour définir la vitesse pour tous les ordres
|
||||
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Annuler la vitesse limite
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Annuler la vitesse maximale de déplacement de l'ordre sélectionné
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Annuler la vitesse maximale de déplacement de l'ordre sélectionné. Ctrl-clic pour annuler la vitesse de tous les ordres
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}RAZ compteur de retard
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Remettre à zéro le compteur de retard (le véhicule sera donc à l'heure)
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Autoremplir
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Remplir l'horaire automatiquement avec les valeurs du prochain trajet (Ctrl-clic pour essayer de préserver les temps d'attente)
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Remplir l'horaire automatiquement avec les valeurs du prochain trajet. Ctrl-clic pour essayer de préserver les temps d'attente
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}Attendu
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Planifié
|
||||
@@ -4772,6 +4788,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... trop
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Ne peut pas générer les industries...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Impossible de construire {STRING} ici...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossible de construire cette industrie ici...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Impossible de prospecter l'industrie...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... trop proche d'une autre industrie
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... une ville doit d'abord être construite
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... droit à un seul par ville
|
||||
@@ -4786,6 +4803,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... les
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... peut seulement être construit au dessus de l'altitude d'enneigement
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... peut seulement être construit en dessous de l'altitude d'enneigement
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}La prospection a échoué par manque de chance; essayez à nouveau
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Il n'y avait pas d'emplacements appropriés pour la prospection de cette industrie
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Il n'y avait pas d'emplacements appropriés pour les industries '{STRING}'
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modifier les paramètres de la génération de la carte pour obtenir une meilleure carte
|
||||
|
||||
@@ -5026,6 +5045,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Impossib
|
||||
|
||||
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... véhicule détruit
|
||||
|
||||
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... les véhicules ne sont pas tous identiques
|
||||
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Aucun véhicule ne sera disponible
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifier votre configuration NewGRF
|
||||
@@ -5053,6 +5073,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossib
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... le véhicule ne peut pas aller dans toutes les stations
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... le véhicule ne peut pas aller dans cette station
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... un véhicule partageant cet ordre ne peut pas aller dans cette station
|
||||
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... les véhicules n'ont pas tous les même ordres
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... les véhicules ne partagent pas tous les ordres
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Impossible de partager les ordres...
|
||||
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Impossible d'arrêter le partage des ordres...
|
||||
|
||||
@@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rjochts
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimale startersliening: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimale bedrach hokker troch in bedriuw lient wurde kin (sûnder acht te slaan op de ynflaasje)
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :Rinte: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rinte op liening; behearsket ek ynflaasje at dizze oan stiet
|
||||
@@ -2340,8 +2341,6 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Bloksein
|
||||
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selektear Spoarbrêge
|
||||
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selektear brêge
|
||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brêge seleksje - klik op de brêge dyst boue wolst
|
||||
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hingbrêge, Stiel
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Brêge mei balken, Stiel
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Fakwurkbrêge, Stiel
|
||||
@@ -2857,6 +2856,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Foarig f
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Gean tebek nei de foarige ôfbylding, sla pseudo/werkleure/lettertype ôfbyldings oer en begjin wer oernei at it begjin berikke is
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Represintaasje fan de no selektearre ôfbylding. Dizze wurdt net rjochte by it tekenjen
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Ferweech de ôfbylding, feroarje de X en Y útslach
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X útslach: {NUM}, Y útslach: {NUM} (Absolút)
|
||||
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X útslach: {NUM}, Y útslach: {NUM} (Relatyf)
|
||||
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Kies ôfbylding
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user