Compare commits
198 Commits
1.9.0-beta
...
1.9.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6643952ce | ||
|
|
8808c6d033 | ||
|
|
c7ace459a7 | ||
|
|
acb63cb4d4 | ||
|
|
fb8f4119f3 | ||
|
|
7653def300 | ||
|
|
224bb105bc | ||
|
|
e5021a0587 | ||
|
|
fb51a18357 | ||
|
|
9f1d80e93b | ||
|
|
6369e0693d | ||
|
|
da086a3fde | ||
|
|
83f1839e71 | ||
|
|
8afc1a7253 | ||
|
|
c70d12ee38 | ||
|
|
ee7ca008c9 | ||
|
|
b18c2d140c | ||
|
|
a76e5e1970 | ||
|
|
59e4ccd7dc | ||
|
|
a82f21f24d | ||
|
|
46908fb63a | ||
|
|
8efa99f445 | ||
|
|
c6251426d9 | ||
|
|
9026736cc1 | ||
|
|
b7a2166962 | ||
|
|
8ea68421b1 | ||
|
|
afc5962881 | ||
|
|
9239381d56 | ||
|
|
9dded61af9 | ||
|
|
8fbc5c090b | ||
|
|
00bdd316d7 | ||
|
|
f34284f1a0 | ||
|
|
c77659c995 | ||
|
|
e6877d0823 | ||
|
|
beba12f9d6 | ||
|
|
95fd4ec649 | ||
|
|
0fa41c7493 | ||
|
|
60cbcf0742 | ||
|
|
e38a4e1e57 | ||
|
|
5965f184c2 | ||
|
|
db20c7f461 | ||
|
|
e2e8872e82 | ||
|
|
4750d2836c | ||
|
|
b1c31f9500 | ||
|
|
a6879e9180 | ||
|
|
5eb7d49024 | ||
|
|
69c0332813 | ||
|
|
b11942cf44 | ||
|
|
ef6995e8d4 | ||
|
|
c0fd2b969b | ||
|
|
683778fd7a | ||
|
|
63eeadef17 | ||
|
|
e526b2ccd3 | ||
|
|
b61ef7e0d2 | ||
|
|
120d76c5c1 | ||
|
|
316ecb07ee | ||
|
|
2c21f52e1d | ||
|
|
0a8e9e9757 | ||
|
|
6bfec89fcf | ||
|
|
1f39a31eb7 | ||
|
|
abc0325ef1 | ||
|
|
54451a18c6 | ||
|
|
d3e9e8c2ce | ||
|
|
0b340fd376 | ||
|
|
05b3467021 | ||
|
|
88f2084646 | ||
|
|
1303aba5ea | ||
|
|
124650c554 | ||
|
|
685af3629e | ||
|
|
9ae1726eed | ||
|
|
3f0268b4b3 | ||
|
|
cf7a1fc8c6 | ||
|
|
7a9782e6f4 | ||
|
|
6a1f217d30 | ||
|
|
174b0da90f | ||
|
|
a2c4f9314d | ||
|
|
652289972e | ||
|
|
0a5b3b955c | ||
|
|
79d2acff24 | ||
|
|
e3a082ce7c | ||
|
|
213c490e73 | ||
|
|
4e17e2bc6e | ||
|
|
56a69f1de7 | ||
|
|
64726d5213 | ||
|
|
712936745a | ||
|
|
2fb4575f5f | ||
|
|
5e9d39e8bc | ||
|
|
490d6ad51f | ||
|
|
38e93182c5 | ||
|
|
3a97b541af | ||
|
|
80dd397ce4 | ||
|
|
47596d3eda | ||
|
|
f7f1efc84f | ||
|
|
383e2d1082 | ||
|
|
aefe44e67e | ||
|
|
1de8e1b801 | ||
|
|
54c5bac8f7 | ||
|
|
948de16255 | ||
|
|
88c5122b39 | ||
|
|
eb46a89855 | ||
|
|
39cda89e85 | ||
|
|
8016b8b3e9 | ||
|
|
4ac81b3ebb | ||
|
|
d9b4ada7e9 | ||
|
|
1a663d9efc | ||
|
|
93a6fd42d1 | ||
|
|
c61acc7fc1 | ||
|
|
c91e0058c2 | ||
|
|
5a5944867d | ||
|
|
5d3ccae6c5 | ||
|
|
e0c2ad1b65 | ||
|
|
3c047b124e | ||
|
|
b62452903a | ||
|
|
8139b14e9c | ||
|
|
5e40338543 | ||
|
|
90a4737bf6 | ||
|
|
b242a04c7d | ||
|
|
780593ae60 | ||
|
|
cbaf52fbe1 | ||
|
|
c3bc7d657e | ||
|
|
63fe6c6598 | ||
|
|
7ecfae8f7f | ||
|
|
1447661d20 | ||
|
|
9ad5112628 | ||
|
|
76f983a8e7 | ||
|
|
50a0cf1915 | ||
|
|
03264059e4 | ||
|
|
adb50cebcc | ||
|
|
9b99b95955 | ||
|
|
7ac17f5ae4 | ||
|
|
c2e4a8c9bf | ||
|
|
93c6398810 | ||
|
|
6ff02f0615 | ||
|
|
919d7accd7 | ||
|
|
fa2bea7394 | ||
|
|
d24a9dfe98 | ||
|
|
77ab6f8ec7 | ||
|
|
0bb395b21d | ||
|
|
195fd0dc60 | ||
|
|
91eee793e1 | ||
|
|
87ebfe1227 | ||
|
|
f240f61fb2 | ||
|
|
eeae4512ae | ||
|
|
13962a8475 | ||
|
|
7e1e2756d4 | ||
|
|
4adb91202d | ||
|
|
fde5bd0ccf | ||
|
|
00d28a500d | ||
|
|
56a6d7aec8 | ||
|
|
69928df3f0 | ||
|
|
fb1b6fa47a | ||
|
|
690d1dd6a4 | ||
|
|
456e67ac1c | ||
|
|
673f6753e9 | ||
|
|
5ab1a73a8a | ||
|
|
8a6e03c4d2 | ||
|
|
6733b71300 | ||
|
|
6dfe36b5cd | ||
|
|
de9f54ccc1 | ||
|
|
66d23e3e86 | ||
|
|
19fa960d83 | ||
|
|
21f009dc78 | ||
|
|
21d8636722 | ||
|
|
ba55f93f41 | ||
|
|
c4fe46a475 | ||
|
|
45ce517105 | ||
|
|
6ca637b8c1 | ||
|
|
349cbee6e9 | ||
|
|
84961034e4 | ||
|
|
ef7e47a53a | ||
|
|
aadcf40b9b | ||
|
|
548ec05a48 | ||
|
|
ebe84b9d4c | ||
|
|
1585eb1a3e | ||
|
|
7c31a32c2b | ||
|
|
4919c8db13 | ||
|
|
5dc377244d | ||
|
|
3a4b6b476b | ||
|
|
57734fd85d | ||
|
|
1f182c44c9 | ||
|
|
045503e728 | ||
|
|
c0c8fb25fb | ||
|
|
830ed6be61 | ||
|
|
46d97239c4 | ||
|
|
412e6132b6 | ||
|
|
6b5ebe2b09 | ||
|
|
aa737715dd | ||
|
|
75d3054ae4 | ||
|
|
cac2f6226c | ||
|
|
22f33fdd08 | ||
|
|
13af2b88b4 | ||
|
|
4d5d21be76 | ||
|
|
148e5b41d6 | ||
|
|
2ff10327d7 | ||
|
|
748d72202a | ||
|
|
0df95811ce | ||
|
|
70e1c57f81 | ||
|
|
d242875d27 |
@@ -91,6 +91,8 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
|
||||
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
||||
ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
|
||||
GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ')
|
||||
ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ')
|
||||
ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ')
|
||||
|
||||
# Make sure we have something in VERSION and ISODATE
|
||||
ifeq ($(VERSION),)
|
||||
@@ -276,10 +278,10 @@ endif
|
||||
# Revision files
|
||||
|
||||
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
|
||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/rev.cpp
|
||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/rev.cpp
|
||||
|
||||
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
|
||||
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/os/windows/ottdres.rc
|
||||
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc
|
||||
|
||||
FORCE:
|
||||
|
||||
|
||||
38
README.md
38
README.md
@@ -310,22 +310,22 @@ your operating system:
|
||||
Different types of data or extensions go into different subdirectories of the
|
||||
chosen main OpenTTD directory:
|
||||
|
||||
| data type | directory | additional info |
|
||||
| --- | --- | --- |
|
||||
| Config File | (no subdirectory) | |
|
||||
| Screenshots | screenshot | |
|
||||
| Base Graphics | baseset | (or a subdirectory thereof) |
|
||||
| Sound Sets | baseset | (or a subdirectory thereof) |
|
||||
| NewGRFs | newgrf | (or a subdirectory thereof) |
|
||||
| 32bpp Sets | newgrf | (or a subdirectory thereof) |
|
||||
| Music Sets | baseset | (or a subdirectory thereof) |
|
||||
| AIs | ai | (or a subdirectory thereof) |
|
||||
| AI Libraries | ai/library | (or a subdirectory thereof) |
|
||||
| Game Scripts (GS) | game | (or a subdirectory thereof) |
|
||||
| GS Libraries | game/library | (or a subdirectory thereof) |
|
||||
| Savegames | save | |
|
||||
| Automatic Savegames | save/autosave | |
|
||||
| Scenarios | scenario | |
|
||||
| data type | directory | additional info |
|
||||
| ------------------- | ----------------- | --------------------------- |
|
||||
| Config File | (no subdirectory) | |
|
||||
| Screenshots | screenshot | |
|
||||
| Base Graphics | baseset | (or a subdirectory thereof) |
|
||||
| Sound Sets | baseset | (or a subdirectory thereof) |
|
||||
| NewGRFs | newgrf | (or a subdirectory thereof) |
|
||||
| 32bpp Sets | newgrf | (or a subdirectory thereof) |
|
||||
| Music Sets | baseset | (or a subdirectory thereof) |
|
||||
| AIs | ai | (or a subdirectory thereof) |
|
||||
| AI Libraries | ai/library | (or a subdirectory thereof) |
|
||||
| Game Scripts (GS) | game | (or a subdirectory thereof) |
|
||||
| GS Libraries | game/library | (or a subdirectory thereof) |
|
||||
| Savegames | save | |
|
||||
| Automatic Savegames | save/autosave | |
|
||||
| Scenarios | scenario | |
|
||||
|
||||
The (automatically created) directory content_download is for OpenTTD's internal
|
||||
use and no files should be added to it or its subdirectories manually.
|
||||
@@ -476,6 +476,12 @@ The following is an explanation of the different statistics:
|
||||
- *World ticks* - Time spent on other world/landscape processing. This
|
||||
includes towns growing, building animations, updates of farmland and trees,
|
||||
and station rating updates.
|
||||
- *GS/AI total*, *Game script*, and *AI players* - Time spent running logic
|
||||
for game scripts and AI players. The total may show as less than the current
|
||||
sum of the individual scripts, this is because AI players at lower
|
||||
difficulty settings do not run every game tick, and hence contribute less
|
||||
to the average across all ticks. Keep in mind that the "Current" figure is
|
||||
also an average, just only over short term.
|
||||
- *Link graph delay* - Time overruns of the cargo distribution link graph
|
||||
update thread. Usually the link graph is updated in a background thread,
|
||||
but these updates need to synchronise with the main game loop occasionally,
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
trigger:
|
||||
- master
|
||||
- release/*
|
||||
pr:
|
||||
- master
|
||||
- release/*
|
||||
|
||||
jobs:
|
||||
- job: windows
|
||||
@@ -36,10 +38,14 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
commit-checker: {}
|
||||
linux-amd64-clang-3.8: {}
|
||||
linux-amd64-gcc-6: {}
|
||||
linux-i386-gcc-6: {}
|
||||
commit-checker:
|
||||
Tag: 'commit-checker'
|
||||
linux-amd64-clang-3.8:
|
||||
Tag: 'linux-amd64-clang-3.8'
|
||||
linux-amd64-gcc-6:
|
||||
Tag: 'linux-amd64-gcc-6'
|
||||
linux-i386-gcc-6:
|
||||
Tag: 'linux-i386-gcc-6'
|
||||
|
||||
steps:
|
||||
- template: azure-pipelines/templates/ci-git-rebase.yml
|
||||
@@ -48,13 +54,16 @@ jobs:
|
||||
- template: azure-pipelines/templates/linux-build.yml
|
||||
parameters:
|
||||
Image: compile-farm-ci
|
||||
Tag: $(Agent.JobName)
|
||||
Tag: $(Tag)
|
||||
|
||||
- job: macos
|
||||
displayName: 'MacOS'
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
|
||||
variables:
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.9
|
||||
|
||||
steps:
|
||||
- template: azure-pipelines/templates/ci-git-rebase.yml
|
||||
- template: azure-pipelines/templates/osx-dependencies.yml
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
tag=$(git describe --tags 2>/dev/null)
|
||||
|
||||
# If we are a tag, show the part of the changelog that matches the tag.
|
||||
# In case of a stable, also show all betas and RCs.
|
||||
# If we are a tag, show the part of the changelog till (but excluding) the last stable
|
||||
if [ -n "$tag" ]; then
|
||||
grep="."
|
||||
if [ "$(echo $tag | grep '-')" = "" ]; then
|
||||
grep='^[0-9]\.[0-9]\.[0-9][^-]'
|
||||
fi
|
||||
grep='^[0-9]\.[0-9]\.[0-9][^-]'
|
||||
next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//')
|
||||
cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9].[0-9].[0-9]/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }'
|
||||
exit 0
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
steps:
|
||||
# Rebase to origin/master for every PR. This means users don't have to
|
||||
# rebase every time master changes. As long as the PR applies cleanly, we
|
||||
# Rebase to target branch for every PR. This means users don't have to
|
||||
# rebase every time target branch changes. As long as the PR applies cleanly, we
|
||||
# will validate it.
|
||||
- script: |
|
||||
- bash: |
|
||||
git config user.email 'info@openttd.org'
|
||||
git config user.name 'OpenTTD CI'
|
||||
git rebase origin/master
|
||||
displayName: 'Rebase to master'
|
||||
git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH}
|
||||
displayName: 'Rebase to target branch'
|
||||
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
|
||||
|
||||
@@ -4,11 +4,27 @@ parameters:
|
||||
ContainerCommand: ''
|
||||
|
||||
steps:
|
||||
# 'envVars' in the 'Docker@1' task is a bit funky. When you want to use a
|
||||
# variable, you have to quote it. But the quote is also sent directly to
|
||||
# Docker and ends up in the variable, which you don't want. To work around
|
||||
# this, we set the correct variable first (which becomes an env-variable), and
|
||||
# pass that env-variable through to Docker. We cannot use the normal
|
||||
# 'variables' entry, as we are a template. So that results in this bit of
|
||||
# Bash code. Not because it is pretty, but it is the only way we found that
|
||||
# works.
|
||||
- bash: |
|
||||
echo "##vso[task.setvariable variable=TARGET_BRANCH]${SYSTEM_PULLREQUEST_TARGETBRANCH}"
|
||||
echo "Target branch is ${SYSTEM_PULLREQUEST_TARGETBRANCH}"
|
||||
displayName: "Set target branch"
|
||||
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
|
||||
|
||||
- task: Docker@1
|
||||
${{ if eq(parameters.Image, 'compile-farm') }}:
|
||||
displayName: 'Build'
|
||||
${{ if eq(parameters.Image, 'compile-farm-ci') }}:
|
||||
displayName: 'Build and test'
|
||||
# Run the commit-checker only if it is a Pull Request
|
||||
condition: and(succeeded(), or(not(contains(variables['Agent.JobName'], 'commit-checker')), eq(variables['Build.Reason'], 'PullRequest')))
|
||||
inputs:
|
||||
command: 'Run an image'
|
||||
imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }}
|
||||
@@ -16,3 +32,5 @@ steps:
|
||||
workingDirectory: '$(Build.SourcesDirectory)'
|
||||
containerCommand: ${{ parameters.ContainerCommand }}
|
||||
runInBackground: false
|
||||
envVars: |
|
||||
TARGET_BRANCH
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
steps:
|
||||
- script: |
|
||||
set -ex
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng freetype
|
||||
# Remove the dynamic libraries of these libraries, to ensure we use
|
||||
# the static versions. That is important, as it is unlikely any
|
||||
# end-user has these brew libraries installed.
|
||||
rm /usr/local/Cellar/lzo/*/lib/*.dylib
|
||||
rm /usr/local/Cellar/xz/*/lib/*.dylib
|
||||
rm /usr/local/Cellar/libpng/*/lib/*.dylib
|
||||
rm /usr/local/Cellar/freetype/*/lib/*.dylib
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
@@ -110,14 +110,22 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
linux-ubuntu-xenial-i386-gcc: {}
|
||||
linux-ubuntu-xenial-amd64-gcc: {}
|
||||
linux-ubuntu-bionic-i386-gcc: {}
|
||||
linux-ubuntu-bionic-amd64-gcc: {}
|
||||
linux-debian-jessie-i386-gcc: {}
|
||||
linux-debian-jessie-amd64-gcc: {}
|
||||
linux-debian-stretch-i386-gcc: {}
|
||||
linux-debian-stretch-amd64-gcc: {}
|
||||
linux-ubuntu-xenial-i386-gcc:
|
||||
Tag: 'linux-ubuntu-xenial-i386-gcc'
|
||||
linux-ubuntu-xenial-amd64-gcc:
|
||||
Tag: 'linux-ubuntu-xenial-amd64-gcc'
|
||||
linux-ubuntu-bionic-i386-gcc:
|
||||
Tag: 'linux-ubuntu-bionic-i386-gcc'
|
||||
linux-ubuntu-bionic-amd64-gcc:
|
||||
Tag: 'linux-ubuntu-bionic-amd64-gcc'
|
||||
linux-debian-jessie-i386-gcc:
|
||||
Tag: 'linux-debian-jessie-i386-gcc'
|
||||
linux-debian-jessie-amd64-gcc:
|
||||
Tag: 'linux-debian-jessie-amd64-gcc'
|
||||
linux-debian-stretch-i386-gcc:
|
||||
Tag: 'linux-debian-stretch-i386-gcc'
|
||||
linux-debian-stretch-amd64-gcc:
|
||||
Tag: 'linux-debian-stretch-amd64-gcc'
|
||||
|
||||
steps:
|
||||
- template: release-fetch-source.yml
|
||||
@@ -125,7 +133,7 @@ jobs:
|
||||
parameters:
|
||||
Image: compile-farm
|
||||
ContainerCommand: '$(Build.BuildNumber)'
|
||||
Tag: $(Agent.JobName)
|
||||
Tag: $(Tag)
|
||||
- template: linux-claim-bundles.yml
|
||||
- template: release-bundles.yml
|
||||
|
||||
@@ -135,6 +143,9 @@ jobs:
|
||||
vmImage: 'macOS-10.13'
|
||||
dependsOn: source
|
||||
|
||||
variables:
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.9
|
||||
|
||||
steps:
|
||||
- template: release-fetch-source.yml
|
||||
- template: osx-dependencies.yml
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
steps:
|
||||
- bash: |
|
||||
set -ex
|
||||
|
||||
curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip
|
||||
unzip windows-dependencies.zip
|
||||
rm -f windows-dependencies.zip
|
||||
displayName: 'Download dependencies'
|
||||
workingDirectory: $(Build.ArtifactStagingDirectory)
|
||||
- script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install
|
||||
|
||||
mv windows-dependencies/installed /c/vcpkg/
|
||||
rm -rf windows-dependencies
|
||||
displayName: 'Install dependencies'
|
||||
workingDirectory: $(Build.ArtifactStagingDirectory)
|
||||
- script: c:\vcpkg\vcpkg.exe integrate install
|
||||
displayName: 'Integrate vcpkg'
|
||||
|
||||
@@ -374,3 +374,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -126,3 +126,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -63,3 +63,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
|
||||
{
|
||||
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
|
||||
}
|
||||
|
||||
/* 1.9 adds parent_group_id to CreateGroup function */
|
||||
AIGroup._CreateGroup <- AIGroup.CreateGroup;
|
||||
AIGroup.CreateGroup <- function(vehicle_type)
|
||||
{
|
||||
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
|
||||
}
|
||||
|
||||
@@ -574,7 +574,7 @@ function Regression::Group()
|
||||
local vehicle = AIVehicle.BuildVehicle(10000, 116);
|
||||
print(" AIVehicle.BuildVehicle(): " + vehicle);
|
||||
print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116));
|
||||
local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD);
|
||||
local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD, AIGroup.GROUP_INVALID);
|
||||
print(" CreateGroup(): " + group);
|
||||
print(" MoveVehicle(): " + AIGroup.MoveVehicle(group, vehicle));
|
||||
print(" GetNumEngines(): " + AIGroup.GetNumEngines(group, 116));
|
||||
|
||||
Binary file not shown.
121
changelog.txt
121
changelog.txt
@@ -1,8 +1,125 @@
|
||||
1.9.0-beta2 (2018-02-09)
|
||||
1.9.3 (2019-09-16)
|
||||
------------------------------------------------------------------------
|
||||
- Change: Use natural sort when sorting the file list (#7727)
|
||||
- Fix #7479: Don't close construction windows when changing client name (#7728)
|
||||
- Fix #7731: Files sorting by modification time on Windows XP (#7731)
|
||||
- Fix #7644: [OSX] Better solution for colourspace/performance issues (#7741)
|
||||
|
||||
|
||||
1.9.3-RC1 (2019-09-07)
|
||||
------------------------------------------------------------------------
|
||||
- Add: Can now click industries to make orders to their neutral station (e.g. oil rig) (#7709)
|
||||
- Fix #7644: [OSX] Poor framerate on certain systems (#7721)
|
||||
- Fix #7702: Highscore screen UI scaling (#7714)
|
||||
- Fix #7704: [OSX] Handle malformed UTF8 strings, leading to crashes in server browser (#7705)
|
||||
- Fix #7188: [AI] Possible crash when reloading an AI in multiplayer games (#7701, #7725)
|
||||
- Fix: RemoveAirport function now returns 'Aircraft in the way' error message when occupied (#7690)
|
||||
- Fix: Spelling in running costs setting help text (#7686)
|
||||
- Fix #7655: 'Decrease' buttons in cheat window not working properly with UI scaling (#7669)
|
||||
- Fix: [GS] Could not create elements on Storybook pages with ID > 255 (#7657)
|
||||
- Fix #7626: Allow building road stops over town-owned one-way roads, instead of crashing (#7627)
|
||||
|
||||
|
||||
1.9.2 (2019-07-07)
|
||||
------------------------------------------------------------------------
|
||||
- Change: Set default setting in server browser of "Advertised" to "Yes" (#7568)
|
||||
- Change: Allow building road stops over self-owned one-way/blocked road (#7547)
|
||||
- Fix #7463: Promote scroll mode setting to basic category (#7586)
|
||||
- Fix: Inconsistent GUI scaling (#7539)
|
||||
- Fix #7491: Send company update admin message when bankruptcy counter changes (#7492)
|
||||
- Fix #7553: Check bounds when loading strings (#7554)
|
||||
- Fix: Really increase the maximum number of GameScript texts to 64k (#7555)
|
||||
- Fix: Crash when attempting to load old save game with GRFs set (#7546)
|
||||
- Fix #6507: Don't try to load invalid depots from older savegames (#7546)
|
||||
- Fix: Railtype bits were moved too late, leading to rails under bridges losing their type (#7546)
|
||||
- Fix: Bounds check access to railtype_map (#7529)
|
||||
- Fix: Spurious errors when using more than 32 railtypes (#7533)
|
||||
- Fix #7633: Allow zero-cost track conversion to succeed (#7634)
|
||||
- Fix #7577: Check if linkgraph station index is valid before dereferencing (#7583)
|
||||
- Fix #7224: Drag and drop vehicle group creation does not work correctly (#7581)
|
||||
- Fix #7570: Show Github URL in the crashlog window (#7571)
|
||||
- Fix: Clicking on scrollbar 'thumb' moved position up instantly (#7549)
|
||||
- Fix #7255: Prevent crashlog corruption by only printing the 32 most recent news messages (#7542)
|
||||
- Fix #5685: Check for free wagons in ScriptVehicleList (#7617)
|
||||
- Fix: Make GSGoal.QuestionClient work correctly at least for clients with ID < 2**16 (#7560)
|
||||
- Fix #6666: Mismatched parentheses in RTL languages (#7480)
|
||||
- Fix: [Windows] Various reliability and correctness improvements to MIDI on Windows (#7620)
|
||||
|
||||
|
||||
1.9.1 (2019-04-08)
|
||||
------------------------------------------------------------------------
|
||||
- Fix #6564: Enforce types of arguments for station name strings (#7419)
|
||||
- Fix #7433: Don't use AirportSpec substitute if it's not enabled (#7435)
|
||||
- Fix #7447, #7466, #7476: Missing NewGRF strings due to Action 4 feature check skipping pseudo-feature 48 (#7449)
|
||||
- Fix #6222: Advanced sprite layout sometimes showed incorrect railtype ground tile. (#7460)
|
||||
- Fix #7439: CompanyRemoveReason overwritten by ClientID (#7465)
|
||||
- Fix: [Windows] Incorrect error handling could lead to cascading error windows (#7482)
|
||||
- Fix #7478: Don't remove NewGRF objects on company take-over. (#7483)
|
||||
|
||||
|
||||
1.9.0 (2019-04-01)
|
||||
------------------------------------------------------------------------
|
||||
- Fix #7411: Use industry production callback (if used) on initial industry cargo generation (#7412)
|
||||
|
||||
|
||||
1.9.0-RC2 (2019-03-24)
|
||||
------------------------------------------------------------------------
|
||||
- Fix #7400: WaterClass for tree tiles was not converted for old saves preventing industry creation (#7405)
|
||||
- Fix: Filtered file list did not scroll properly (#7402)
|
||||
- Fix #7391: Don't invalidate go to depot orders of non-aircraft when invalidating hangar orders that happen to share IDs (#7392)
|
||||
- Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered (#7389)
|
||||
- Fix: Wrong company performance rating when money exceeds INT_MAX (#7382)
|
||||
- Fix: Permit loading of industry production callback with invalid cargo type (#7364)
|
||||
- Fix: Spelling for a few real town names (#7338)
|
||||
- Fix: Runway too short for large aircraft message should not depend on plane crashes setting (#7325)
|
||||
- Fix #7334: Ship lost after crossing bridge due to path cache not being consumed while on final bridge end (#7335)
|
||||
|
||||
|
||||
1.9.0-RC1 (2019-03-03)
|
||||
------------------------------------------------------------------------
|
||||
- Add: Various AI/GS functions for vehicle groups (#7225)
|
||||
- Change: Synchronise introduction date and reliability randomness across vehicles with the same base introduction date (#7147)
|
||||
- Change: Allow towns to build bridges over rails and one-way roads (#7291)
|
||||
- Fix: Detection of coast tiles with trees on them (#7309)
|
||||
- Fix: Emergency netsave saved the title game instead of the broken game in question (#7298)
|
||||
- Fix: Company livery window showed incorrect groups when opened in multiplayer (#7288)
|
||||
- Fix: Unable to select last group in open livery window (#7283)
|
||||
- Fix: Goto hangar orders were not invalidated when rebuilding airports (#7100)
|
||||
|
||||
|
||||
1.9.0-beta3 (2019-02-24)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: Option to adjust font size separately from GUI size (#7003)
|
||||
- Feature: Increase maximum number of orders from 64000 to ~16.7m (#7220)
|
||||
- Add: Show performance of AI and GS in framerate window
|
||||
- Add: News menu entry and shortcut for deleting all messages (#7240)
|
||||
- Change: [OSX] Improved scrolling behaviour when using touchpads
|
||||
- Change: Add scrollbar to cargo legend in cargo payment rates window
|
||||
- Change: Owner of vehicle with exclusive transport rights may now load cargo from neutral stations (#7256)
|
||||
- Change: Improved UI behaviour when dragging sound volume sliders with the mouse (#7227)
|
||||
- Change: Use selected vehicle group as parent when creating a new group (#7224)
|
||||
- Change: Use SlErrorCorrupt() on pool index error when loading a savegame, instead of terminating (#7219)
|
||||
- Change: Skip reliability decay if servicing is disabled
|
||||
- Fix: Remove desert around lakes upon generation
|
||||
- Fix: Re-sorting file list did not update filtered rows
|
||||
- Fix #7159: Waiting time at red one-way signals was too short
|
||||
- Fix #7189: Fluidsynth volume gain too high
|
||||
- Fix #7004: Cargo flow legend was not properly refreshed after zooming (#7265)
|
||||
- Fix: Possibility to modify wrong AI/GS settings when switching AI/GS scripts around (#7090, #7091)
|
||||
- Fix: Use more descriptive "spectator" strings for story book and goal dropdown menus
|
||||
- Fix #6599: Disable build and rename button in build vehicle window when no vehicle is selected
|
||||
- Fix: Do not mangle tagged revision strings for network revision strings
|
||||
- Fix #7151: AI start date deviation was still applied when not set to a random AI (#7223)
|
||||
- Fix #7197: Invalidate depot buttons when necessary (#7212)
|
||||
- Doc: [AI] UnshareOrders empties the orders list of the vehicle
|
||||
|
||||
|
||||
1.9.0-beta2 (2019-02-09)
|
||||
------------------------------------------------------------------------
|
||||
- Fix: Non-Windows builds did not get correct git hash
|
||||
|
||||
1.9.0-beta1 (2018-02-09)
|
||||
|
||||
1.9.0-beta1 (2019-02-09)
|
||||
------------------------------------------------------------------------
|
||||
Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers
|
||||
- Feature: Group liveries, and livery window usability enhancements (#7108)
|
||||
|
||||
16
config.lib
16
config.lib
@@ -57,8 +57,8 @@ set_default() {
|
||||
enable_translator="0"
|
||||
enable_unicode="1"
|
||||
enable_console="1";
|
||||
enable_assert="1"
|
||||
enable_strip="0"
|
||||
enable_assert="0"
|
||||
enable_strip="1"
|
||||
enable_universal="0"
|
||||
enable_osx_g5="0"
|
||||
enable_cocoa_quartz="1"
|
||||
@@ -820,7 +820,7 @@ check_params() {
|
||||
pre_detect_with_zlib=$with_zlib
|
||||
detect_zlib
|
||||
|
||||
if [ "$with_zlib" = "0" ] || [ -z "$zlib-config" ]; then
|
||||
if [ "$with_zlib" = "0" ] || [ -z "$zlib_config" ]; then
|
||||
log 1 "WARNING: zlib was not detected or disabled"
|
||||
log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features"
|
||||
log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps,"
|
||||
@@ -1681,12 +1681,10 @@ make_cflags_and_ldflags() {
|
||||
CFLAGS="$CFLAGS -DWITH_SDL"
|
||||
# SDL must not add _GNU_SOURCE as it breaks many platforms
|
||||
CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
|
||||
if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
|
||||
if [ "$enable_static" != "0" ]; then
|
||||
LIBS="$LIBS `$sdl_config --static-libs`"
|
||||
else
|
||||
LIBS="$LIBS `$sdl_config --libs`"
|
||||
fi
|
||||
if [ "$enable_static" != "0" ]; then
|
||||
LIBS="$LIBS `$sdl_config --static --libs`"
|
||||
else
|
||||
LIBS="$LIBS `$sdl_config --libs`"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -759,6 +759,7 @@
|
||||
<td valign=top nowrap> </td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>m1 bits 6..5: water class (sea or land)</li>
|
||||
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> (normally <tt>10</tt>)</li>
|
||||
<li>m2 bits 8..6: ground
|
||||
<table>
|
||||
|
||||
@@ -194,7 +194,7 @@ the array so you can quickly see what is used and what is not.
|
||||
<td class="caption">trees</td>
|
||||
<td class="bits">XXXX XXXX</td>
|
||||
<td class="bits">XXXX XXXX</td>
|
||||
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
|
||||
<td class="bits"><span class="free">O</span>XX<span class="option">~ ~~~~</span></td>
|
||||
<td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td>
|
||||
<td class="bits"><span class="option">~~</span>XX XXXX</td>
|
||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||
|
||||
@@ -82,8 +82,16 @@ if [ -d "$ROOT_DIR/.git" ]; then
|
||||
|
||||
if [ -n "$TAG" ]; then
|
||||
VERSION="${TAG}"
|
||||
ISTAG="1"
|
||||
if [ -n "`echo \"${TAG}\" | grep \"^[0-9.]*$\"`" ]; then
|
||||
ISSTABLETAG="1"
|
||||
else
|
||||
ISSTABLETAG="0"
|
||||
fi
|
||||
else
|
||||
VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}"
|
||||
ISTAG="0"
|
||||
ISSTABLETAG="0"
|
||||
fi
|
||||
|
||||
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
||||
@@ -99,6 +107,8 @@ else
|
||||
ISODATE=""
|
||||
TAG=""
|
||||
VERSION=""
|
||||
ISTAG="0"
|
||||
ISSTABLETAG="0"
|
||||
fi
|
||||
|
||||
echo "$VERSION $ISODATE $MODIFIED $HASH"
|
||||
echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
OpenTTD's known bugs
|
||||
Last updated: 2019-02-09
|
||||
Release version: 1.9.0-beta2
|
||||
Last updated: 2019-09-16
|
||||
Release version: 1.9.3
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,51 @@
|
||||
openttd (1.9.3-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.3
|
||||
|
||||
-- OpenTTD <info@openttd.org> Mon, 16 Sep 2019 21:00:00 +0200
|
||||
|
||||
openttd (1.9.3~RC1-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.3-RC1
|
||||
|
||||
-- OpenTTD <info@openttd.org> Sat, 07 Sep 2019 23:30:00 +0200
|
||||
|
||||
openttd (1.9.2-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.2
|
||||
|
||||
-- OpenTTD <info@openttd.org> Sun, 07 Jul 2019 23:00:00 +0200
|
||||
|
||||
openttd (1.9.1-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.1
|
||||
|
||||
-- OpenTTD <info@openttd.org> Mon, 08 Apr 2019 20:00:00 +0100
|
||||
|
||||
openttd (1.9.0-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.0
|
||||
|
||||
-- OpenTTD <info@openttd.org> Mon, 01 Apr 2019 00:00:00 +0200
|
||||
|
||||
openttd (1.9.0~RC2-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.0-RC2
|
||||
|
||||
-- OpenTTD <info@openttd.org> Sun, 24 Mar 2019 23:00:00 +0000
|
||||
|
||||
openttd (1.9.0~RC1-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.0-RC1
|
||||
|
||||
-- OpenTTD <info@openttd.org> Sun, 3 Mar 2019 23:00:00 +0000
|
||||
|
||||
openttd (1.9.0~beta3-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.0-beta3
|
||||
|
||||
-- OpenTTD <info@openttd.org> Sun, 24 Feb 2019 23:00:00 +0000
|
||||
|
||||
openttd (1.9.0~beta2-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.9.0-beta2
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
|
||||
set OPENTTD_VERSION=1.9.0
|
||||
set OPENTTD_VERSION=1.9.3
|
||||
set OPENSFX_VERSION=0.8.0
|
||||
set NOSOUND_VERSION=0.8.0
|
||||
set OPENGFX_VERSION=1.2.0
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
#
|
||||
|
||||
Name: openttd
|
||||
Version: 1.9.beta2
|
||||
Version: 1.9.3
|
||||
Release: 0
|
||||
%define srcver 1.9.0-beta2
|
||||
%define srcver 1.9.3
|
||||
Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe
|
||||
License: GPL-2.0
|
||||
Group: Amusements/Games/Strategy/Other
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Version numbers to update
|
||||
!define APPV_MAJOR 1
|
||||
!define APPV_MINOR 9
|
||||
!define APPV_MAINT 0
|
||||
!define APPV_BUILD 1
|
||||
!define APPV_EXTRA "-beta2"
|
||||
!define APPV_MAINT 3
|
||||
!define APPV_BUILD 0
|
||||
!define APPV_EXTRA ""
|
||||
|
||||
!define APPNAME "OpenTTD" ; Define application name
|
||||
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version
|
||||
@@ -24,6 +24,7 @@
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "top.bmp"
|
||||
|
||||
ManifestDPIAware true
|
||||
BrandingText "OpenTTD Installer"
|
||||
SetCompressor LZMA
|
||||
|
||||
|
||||
@@ -21,34 +21,44 @@ Sub FindReplaceInFile(filename, to_find, replacement)
|
||||
file.Close
|
||||
End Sub
|
||||
|
||||
Sub UpdateFile(modified, isodate, version, cur_date, githash, filename)
|
||||
Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, filename)
|
||||
FSO.CopyFile filename & ".in", filename
|
||||
FindReplaceInFile filename, "!!MODIFIED!!", modified
|
||||
FindReplaceInFile filename, "!!ISODATE!!", isodate
|
||||
FindReplaceInFile filename, "!!VERSION!!", version
|
||||
FindReplaceInFile filename, "!!DATE!!", cur_date
|
||||
FindReplaceInFile filename, "!!GITHASH!!", githash
|
||||
FindReplaceInFile filename, "!!ISTAG!!", istag
|
||||
FindReplaceInFile filename, "!!ISSTABLETAG!!", isstabletag
|
||||
End Sub
|
||||
|
||||
Sub UpdateFiles(version)
|
||||
Dim modified, isodate, cur_date, githash
|
||||
Dim modified, isodate, cur_date, githash, istag, isstabletag
|
||||
cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
|
||||
|
||||
If InStr(version, Chr(9)) Then
|
||||
' Split string into field with tails
|
||||
isodate = Mid(version, InStr(version, Chr(9)) + 1)
|
||||
modified = Mid(isodate, InStr(isodate, Chr(9)) + 1)
|
||||
githash = Mid(modified, InStr(modified, Chr(9)) + 1)
|
||||
istag = Mid(githash, InStr(githash, Chr(9)) + 1)
|
||||
isstabletag = Mid(istag, InStr(istag, Chr(9)) + 1)
|
||||
' Remove tails from fields
|
||||
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
|
||||
isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1)
|
||||
modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1)
|
||||
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
|
||||
githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1)
|
||||
istag = Mid(istag, 1, InStr(istag, Chr(9)) - 1)
|
||||
Else
|
||||
isodate = 0
|
||||
modified = 1
|
||||
githash = ""
|
||||
istag = 0
|
||||
isstabletag = 0
|
||||
End If
|
||||
|
||||
UpdateFile modified, isodate, version, cur_date, githash, "../src/rev.cpp"
|
||||
UpdateFile modified, isodate, version, cur_date, githash, "../src/os/windows/ottdres.rc"
|
||||
UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/rev.cpp"
|
||||
UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/os/windows/ottdres.rc"
|
||||
End Sub
|
||||
|
||||
Function DetermineVersion()
|
||||
@@ -137,7 +147,7 @@ Function DetermineVersion()
|
||||
DetermineVersion = "norev000"
|
||||
modified = 1
|
||||
Else
|
||||
Dim version, hashprefix
|
||||
Dim version, hashprefix, istag, isstabletag
|
||||
If modified = 0 Then
|
||||
hashprefix = "-g"
|
||||
ElseIf modified = 2 Then
|
||||
@@ -148,11 +158,22 @@ Function DetermineVersion()
|
||||
|
||||
If tag <> "" Then
|
||||
version = tag
|
||||
istag = 1
|
||||
|
||||
Set stable_regexp = New RegExp
|
||||
stable_regexp.Pattern = "^[0-9.]*$"
|
||||
If stable_regexp.Test(tag) Then
|
||||
isstabletag = 1
|
||||
Else
|
||||
isstabletag = 0
|
||||
End If
|
||||
Else
|
||||
version = isodate & "-" & branch & hashprefix & shorthash
|
||||
istag = 0
|
||||
isstabletag = 0
|
||||
End If
|
||||
|
||||
DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash
|
||||
DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
@@ -10,6 +10,19 @@
|
||||
# This file generates all project files based on sources.list, so everyone who
|
||||
# can start a bash process, can update the project files.
|
||||
|
||||
# Set neutral locale so sort behaves the same everywhere
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
|
||||
# We really need gawk for this!
|
||||
AWK=gawk
|
||||
|
||||
${AWK} --version > /dev/null 2> /dev/null
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "This script needs gawk to run properly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ROOT_DIR="`pwd`/.."
|
||||
if ! [ -e "$ROOT_DIR/source.list" ]
|
||||
then
|
||||
@@ -66,7 +79,7 @@ with_cocoa="0"
|
||||
enable_directmusic="1"
|
||||
enable_fluidsynth="0"
|
||||
with_threads="1"
|
||||
file_prefix="..\\\\src\\\\"
|
||||
file_prefix="..\\\\\\\\src\\\\\\\\"
|
||||
|
||||
safety_check() {
|
||||
li=""
|
||||
@@ -97,7 +110,8 @@ rm tmp.headers.*
|
||||
|
||||
load_main_data() {
|
||||
# Read the source.list and process it
|
||||
RES="`cat $1 | tr '\r' '\n' | awk '
|
||||
RES="`cat $1 | ${AWK} -v BINMODE=1 '
|
||||
{ gsub("\\r", "", $0); }
|
||||
/^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; }
|
||||
/^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; }
|
||||
/^( *)#if/ {
|
||||
@@ -149,7 +163,7 @@ load_main_data() {
|
||||
{
|
||||
if (deep == skip) {
|
||||
gsub(" ", "", $0);
|
||||
gsub("/", "\\\\", $0);
|
||||
gsub("/", "\\\\\\\\", $0);
|
||||
split($0, file, ".");
|
||||
cltype = "ClInclude"
|
||||
if (file[2] == "cpp") cltype = "ClCompile";
|
||||
@@ -177,13 +191,13 @@ load_lang_data() {
|
||||
continue
|
||||
fi
|
||||
RES="$RES
|
||||
#2 <CustomBuild Include=\"..\\src\\lang\\"$i".txt\">
|
||||
#2 <CustomBuild Include=\"..\\\\src\\\\lang\\\\"$i".txt\">
|
||||
#2 <Message Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">Generating "$i" language file</Message>
|
||||
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang \"%(FullPath)\"</Command>
|
||||
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\src\\lang\\english.txt;..\\objs\\strgen\\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\bin\\lang\\"$i".lng;%(Outputs)</Outputs>
|
||||
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\objs\\\\strgen\\\\strgen.exe -s ..\\\\src\\\\lang -d ..\\\\bin\\\\lang \"%(FullPath)\"</Command>
|
||||
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\src\\\\lang\\\\english.txt;..\\\\objs\\\\strgen\\\\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\bin\\\\lang\\\\"$i".lng;%(Outputs)</Outputs>
|
||||
#2 </CustomBuild>
|
||||
#3 <CustomBuild Include=\"..\\src\\lang\\"$i".txt\">
|
||||
#3 <CustomBuild Include=\"..\\\\src\\\\lang\\\\"$i".txt\">
|
||||
#3 <Filter>Translations</Filter>
|
||||
#3 </CustomBuild>"
|
||||
done
|
||||
@@ -194,16 +208,16 @@ load_lang_data() {
|
||||
load_settings_data() {
|
||||
RES=""
|
||||
RES2="
|
||||
#3..\\objs\\settings\\settings_gen.exe -o ..\\objs\\settings\\table\\settings.h -b ..\\src\\table\\settings.h.preamble -a ..\\src\\table\\settings.h.postamble"
|
||||
#3..\\\\objs\\\\settings\\\\settings_gen.exe -o ..\\\\objs\\\\settings\\\\table\\\\settings.h -b ..\\\\src\\\\table\\\\settings.h.preamble -a ..\\\\src\\\\table\\\\settings.h.postamble"
|
||||
for i in `ls $1`
|
||||
do
|
||||
i=`basename $i`
|
||||
RES="$RES
|
||||
#2 <None Include=\"..\\src\\table\\"$i"\" />
|
||||
#4 <None Include=\"..\\src\\table\\"$i"\">
|
||||
#2 <None Include=\"..\\\\src\\\\table\\\\"$i"\" />
|
||||
#4 <None Include=\"..\\\\src\\\\table\\\\"$i"\">
|
||||
#4 <Filter>INI</Filter>
|
||||
#4 </None>"
|
||||
RES2="$RES2 ..\\src\\table\\"$i
|
||||
RES2="$RES2 ..\\\\src\\\\table\\\\"$i
|
||||
done
|
||||
|
||||
eval "$2=\"\$RES\$RES2\""
|
||||
@@ -224,7 +238,7 @@ load_baseset_data() {
|
||||
FIRST=1
|
||||
fi
|
||||
i=`basename $i`
|
||||
RES2="$RES2..\\src\\lang\\$i.txt"
|
||||
RES2="$RES2..\\\\src\\\\lang\\\\$i.txt"
|
||||
done
|
||||
RES2="$RES2</Langs>"
|
||||
# Windows Folder sort and Linux Folder sort are slightly different.
|
||||
@@ -233,13 +247,13 @@ load_baseset_data() {
|
||||
do
|
||||
i=`basename $i`
|
||||
RES="$RES
|
||||
#2 <CustomBuild Include=\"..\\media\\baseset\\"$i"\">
|
||||
#2 <CustomBuild Include=\"..\\\\media\\\\baseset\\\\"$i"\">
|
||||
#2 <Message Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">Generating "$i" baseset metadata file</Message>
|
||||
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">cscript //nologo ..\\media\\baseset\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\src\\lang ..\\bin\\baseset\\orig_extra.grf</Command>
|
||||
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">\$(Langs);..\\bin\\baseset\\orig_extra.grf;%(AdditionalInputs)</AdditionalInputs>
|
||||
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\bin\\baseset\\"$i";%(Outputs)</Outputs>
|
||||
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">cscript //nologo ..\\\\media\\\\baseset\\\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\\\src\\\\lang ..\\\\bin\\\\baseset\\\\orig_extra.grf</Command>
|
||||
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">\$(Langs);..\\\\bin\\\\baseset\\\\orig_extra.grf;%(AdditionalInputs)</AdditionalInputs>
|
||||
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\bin\\\\baseset\\\\"$i";%(Outputs)</Outputs>
|
||||
#2 </CustomBuild>
|
||||
#3 <CustomBuild Include=\"..\\media\\baseset\\"$i"\">
|
||||
#3 <CustomBuild Include=\"..\\\\media\\\\baseset\\\\"$i"\">
|
||||
#3 <Filter>Baseset Metadata</Filter>
|
||||
#3 </CustomBuild>"
|
||||
done
|
||||
@@ -249,52 +263,28 @@ load_baseset_data() {
|
||||
|
||||
generate() {
|
||||
echo "Generating $2..."
|
||||
if [ $# -eq 3 ]; then
|
||||
# Everything above the !!FILTERS!! marker
|
||||
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
|
||||
/^$/ { next }
|
||||
/!!FILTERS!!/ { stop = 1; }
|
||||
{
|
||||
if (stop == 0) { print $0 }
|
||||
}
|
||||
' > "$ROOT_DIR/projects/$2"
|
||||
|
||||
echo "$3" >> "$ROOT_DIR/projects/$2"
|
||||
|
||||
# Everything below the !!FILTERS!! marker and above the !!FILES!! marker
|
||||
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
|
||||
BEGIN { stop = 1; }
|
||||
/^$/ { next }
|
||||
/!!FILTERS!!/ { stop = 2; }
|
||||
/!!FILES!!/ { stop = 1; }
|
||||
{
|
||||
if (stop == 0) { print $0 }
|
||||
if (stop == 2) { stop = 0 }
|
||||
}
|
||||
' >> "$ROOT_DIR/projects/$2"
|
||||
else
|
||||
# Everything above the !!FILES!! marker
|
||||
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
|
||||
/^$/ { next }
|
||||
/!!FILES!!/ { stop = 1; }
|
||||
{
|
||||
if (stop == 0) { print $0 }
|
||||
}
|
||||
' > "$ROOT_DIR/projects/$2"
|
||||
fi
|
||||
|
||||
echo "$1" >> "$ROOT_DIR/projects/$2"
|
||||
|
||||
# Everything below the !!FILES!! marker
|
||||
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
|
||||
BEGIN { stop = 1; }
|
||||
# Everything above the !!FILTERS!! marker
|
||||
cat "$ROOT_DIR/projects/$2".in | ${AWK} -v BINMODE=1 -v FILTERS="$3" -v FILES="$1" '
|
||||
{ CR = (match($0, "\\r$") > 0 ? "\r" : "") }
|
||||
/^$/ { next }
|
||||
/!!FILES!!/ { stop = 2; }
|
||||
{
|
||||
if (stop == 0) { print $0 }
|
||||
if (stop == 2) { stop = 0 }
|
||||
/!!FILTERS!!/ {
|
||||
split(FILTERS, filters, "\n");
|
||||
for (i = 1; filters[i] != ""; i++) {
|
||||
print filters[i] CR;
|
||||
}
|
||||
next;
|
||||
}
|
||||
' >> "$ROOT_DIR/projects/$2"
|
||||
/!!FILES!!/ {
|
||||
split(FILES, files, "\n");
|
||||
for (i = 1; files[i] != ""; i++) {
|
||||
print files[i] CR;
|
||||
}
|
||||
next;
|
||||
}
|
||||
{
|
||||
print $0;
|
||||
}
|
||||
' > "$ROOT_DIR/projects/$2"
|
||||
}
|
||||
|
||||
safety_check "$ROOT_DIR/source.list"
|
||||
|
||||
@@ -405,5 +405,5 @@ generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetl
|
||||
generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null
|
||||
generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs
|
||||
generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null
|
||||
generate settingsvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", settingscommand
|
||||
generate settingsfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null
|
||||
generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", basesetlangs
|
||||
generate basesetfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -230,7 +230,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -410,7 +410,6 @@
|
||||
<ClCompile Include="..\src\road.cpp" />
|
||||
<ClCompile Include="..\src\roadstop.cpp" />
|
||||
<ClCompile Include="..\src\screenshot.cpp" />
|
||||
<ClCompile Include="..\src\sdl.cpp" />
|
||||
<ClCompile Include="..\src\settings.cpp" />
|
||||
<ClCompile Include="..\src\signal.cpp" />
|
||||
<ClCompile Include="..\src\signs.cpp" />
|
||||
@@ -623,7 +622,6 @@
|
||||
<ClInclude Include="..\src\roadveh.h" />
|
||||
<ClInclude Include="..\src\safeguards.h" />
|
||||
<ClInclude Include="..\src\screenshot.h" />
|
||||
<ClInclude Include="..\src\sdl.h" />
|
||||
<ClInclude Include="..\src\sound\sdl_s.h" />
|
||||
<ClInclude Include="..\src\video\sdl_v.h" />
|
||||
<ClInclude Include="..\src\settings_func.h" />
|
||||
|
||||
@@ -318,9 +318,6 @@
|
||||
<ClCompile Include="..\src\screenshot.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\sdl.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\settings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -957,9 +954,6 @@
|
||||
<ClInclude Include="..\src\screenshot.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdl.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sound\sdl_s.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -230,7 +230,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -230,7 +230,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -410,7 +410,6 @@
|
||||
<ClCompile Include="..\src\road.cpp" />
|
||||
<ClCompile Include="..\src\roadstop.cpp" />
|
||||
<ClCompile Include="..\src\screenshot.cpp" />
|
||||
<ClCompile Include="..\src\sdl.cpp" />
|
||||
<ClCompile Include="..\src\settings.cpp" />
|
||||
<ClCompile Include="..\src\signal.cpp" />
|
||||
<ClCompile Include="..\src\signs.cpp" />
|
||||
@@ -623,7 +622,6 @@
|
||||
<ClInclude Include="..\src\roadveh.h" />
|
||||
<ClInclude Include="..\src\safeguards.h" />
|
||||
<ClInclude Include="..\src\screenshot.h" />
|
||||
<ClInclude Include="..\src\sdl.h" />
|
||||
<ClInclude Include="..\src\sound\sdl_s.h" />
|
||||
<ClInclude Include="..\src\video\sdl_v.h" />
|
||||
<ClInclude Include="..\src\settings_func.h" />
|
||||
|
||||
@@ -318,9 +318,6 @@
|
||||
<ClCompile Include="..\src\screenshot.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\sdl.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\settings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -957,9 +954,6 @@
|
||||
<ClInclude Include="..\src\screenshot.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdl.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sound\sdl_s.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -230,7 +230,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -230,7 +230,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -410,7 +410,6 @@
|
||||
<ClCompile Include="..\src\road.cpp" />
|
||||
<ClCompile Include="..\src\roadstop.cpp" />
|
||||
<ClCompile Include="..\src\screenshot.cpp" />
|
||||
<ClCompile Include="..\src\sdl.cpp" />
|
||||
<ClCompile Include="..\src\settings.cpp" />
|
||||
<ClCompile Include="..\src\signal.cpp" />
|
||||
<ClCompile Include="..\src\signs.cpp" />
|
||||
@@ -623,7 +622,6 @@
|
||||
<ClInclude Include="..\src\roadveh.h" />
|
||||
<ClInclude Include="..\src\safeguards.h" />
|
||||
<ClInclude Include="..\src\screenshot.h" />
|
||||
<ClInclude Include="..\src\sdl.h" />
|
||||
<ClInclude Include="..\src\sound\sdl_s.h" />
|
||||
<ClInclude Include="..\src\video\sdl_v.h" />
|
||||
<ClInclude Include="..\src\settings_func.h" />
|
||||
|
||||
@@ -318,9 +318,6 @@
|
||||
<ClCompile Include="..\src\screenshot.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\sdl.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\settings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -957,9 +954,6 @@
|
||||
<ClInclude Include="..\src\screenshot.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sdl.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\sound\sdl_s.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -230,7 +230,7 @@
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
|
||||
@@ -71,9 +71,6 @@ rev.cpp
|
||||
road.cpp
|
||||
roadstop.cpp
|
||||
screenshot.cpp
|
||||
#if SDL
|
||||
sdl.cpp
|
||||
#end
|
||||
settings.cpp
|
||||
signal.cpp
|
||||
signs.cpp
|
||||
@@ -312,7 +309,6 @@ roadstop_base.h
|
||||
roadveh.h
|
||||
safeguards.h
|
||||
screenshot.h
|
||||
sdl.h
|
||||
sound/sdl_s.h
|
||||
video/sdl_v.h
|
||||
settings_func.h
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
START_NEXT_EASY = DAYS_IN_YEAR * 2,
|
||||
START_NEXT_MEDIUM = DAYS_IN_YEAR,
|
||||
START_NEXT_HARD = DAYS_IN_YEAR / 2,
|
||||
START_NEXT_MIN = 0,
|
||||
START_NEXT_MIN = 1,
|
||||
START_NEXT_MAX = 3600,
|
||||
START_NEXT_DEVIATION = 60,
|
||||
};
|
||||
|
||||
@@ -35,6 +35,15 @@ ScriptConfigItem _start_date_config = {
|
||||
false
|
||||
};
|
||||
|
||||
AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config)
|
||||
{
|
||||
/* Override start_date as per AIConfig::AddRandomDeviation().
|
||||
* This is necessary because the ScriptConfig constructor will instead call
|
||||
* ScriptConfig::AddRandomDeviation(). */
|
||||
int start_date = config->GetSetting("start_date");
|
||||
this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0);
|
||||
}
|
||||
|
||||
/* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source)
|
||||
{
|
||||
AIConfig **config;
|
||||
@@ -118,14 +127,3 @@ void AIConfig::SetSetting(const char *name, int value)
|
||||
|
||||
ScriptConfig::SetSetting(name, value);
|
||||
}
|
||||
|
||||
void AIConfig::AddRandomDeviation()
|
||||
{
|
||||
int start_date = this->GetSetting("start_date");
|
||||
|
||||
ScriptConfig::AddRandomDeviation();
|
||||
|
||||
/* start_date = 0 is a special case, where random deviation does not occur.
|
||||
* If start_date was not already 0, then a minimum value of 1 must apply. */
|
||||
this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0);
|
||||
}
|
||||
|
||||
@@ -26,15 +26,12 @@ public:
|
||||
ScriptConfig()
|
||||
{}
|
||||
|
||||
AIConfig(const AIConfig *config) :
|
||||
ScriptConfig(config)
|
||||
{}
|
||||
AIConfig(const AIConfig *config);
|
||||
|
||||
class AIInfo *GetInfo() const;
|
||||
|
||||
/* virtual */ int GetSetting(const char *name) const;
|
||||
/* virtual */ void SetSetting(const char *name, int value);
|
||||
/* virtual */ void AddRandomDeviation();
|
||||
|
||||
/**
|
||||
* When ever the AI Scanner is reloaded, all infos become invalid. This
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "../company_func.h"
|
||||
#include "../network/network.h"
|
||||
#include "../window_func.h"
|
||||
#include "../framerate_type.h"
|
||||
#include "ai_scanner.hpp"
|
||||
#include "ai_instance.hpp"
|
||||
#include "ai_config.hpp"
|
||||
@@ -79,8 +80,11 @@
|
||||
const Company *c;
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
if (c->is_ai) {
|
||||
PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index));
|
||||
cur_company.Change(c->index);
|
||||
c->ai_instance->GameLoop();
|
||||
} else {
|
||||
PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + c->index));
|
||||
}
|
||||
}
|
||||
cur_company.Restore();
|
||||
@@ -101,6 +105,7 @@
|
||||
/* static */ void AI::Stop(CompanyID company)
|
||||
{
|
||||
if (_networking && !_network_server) return;
|
||||
PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + company));
|
||||
|
||||
Backup<CompanyByte> cur_company(_current_company, company, FILE_LINE);
|
||||
Company *c = Company::Get(company);
|
||||
|
||||
@@ -585,6 +585,8 @@ struct AISettingsWindow : public Window {
|
||||
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
|
||||
{
|
||||
this->RebuildVisibleSettings();
|
||||
HideDropDownMenu(this);
|
||||
DeleteChildWindows(WC_QUERY_STRING);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -1282,7 +1284,7 @@ struct AIDebugWindow : public Window {
|
||||
case WID_AID_RELOAD_TOGGLE:
|
||||
if (ai_debug_company == OWNER_DEITY) break;
|
||||
/* First kill the company of the AI, then start a new one. This should start the current AI again */
|
||||
DoCommandP(0, CCA_DELETE | ai_debug_company << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_DELETE | ai_debug_company << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_NEW_AI | ai_debug_company << 16, 0, CMD_COMPANY_CTRL);
|
||||
break;
|
||||
|
||||
|
||||
@@ -248,8 +248,9 @@ ScriptInfo *AIInstance::FindLibrary(const char *library, int version)
|
||||
* @param tile The tile on which the command was executed.
|
||||
* @param p1 p1 as given to DoCommandPInternal.
|
||||
* @param p2 p2 as given to DoCommandPInternal.
|
||||
* @param cmd cmd as given to DoCommandPInternal.
|
||||
*/
|
||||
void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
/*
|
||||
* The company might not exist anymore. Check for this.
|
||||
@@ -260,8 +261,9 @@ void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
const Company *c = Company::GetIfValid(_current_company);
|
||||
if (c == NULL || c->ai_instance == NULL) return;
|
||||
|
||||
c->ai_instance->DoCommandCallback(result, tile, p1, p2);
|
||||
c->ai_instance->Continue();
|
||||
if (c->ai_instance->DoCommandCallback(result, tile, p1, p2, cmd)) {
|
||||
c->ai_instance->Continue();
|
||||
}
|
||||
}
|
||||
|
||||
CommandCallback *AIInstance::GetDoCommandCallback()
|
||||
|
||||
@@ -783,6 +783,7 @@ int GetAircraftFlightLevel(T *v, bool takeoff)
|
||||
}
|
||||
|
||||
template int GetAircraftFlightLevel(DisasterVehicle *v, bool takeoff);
|
||||
template int GetAircraftFlightLevel(Aircraft *v, bool takeoff);
|
||||
|
||||
/**
|
||||
* Find the entry point to an airport depending on direction which
|
||||
@@ -2103,7 +2104,19 @@ void UpdateAirplanesOnNewStation(const Station *st)
|
||||
FOR_ALL_AIRCRAFT(v) {
|
||||
if (!v->IsNormalAircraft() || v->targetairport != st->index) continue;
|
||||
assert(v->state == FLYING);
|
||||
|
||||
Order *o = &v->current_order;
|
||||
/* The aircraft is heading to a hangar, but the new station doesn't have one,
|
||||
* or the aircraft can't land on the new station. Cancel current order. */
|
||||
if (o->IsType(OT_GOTO_DEPOT) && !(o->GetDepotOrderType() & ODTFB_PART_OF_ORDERS) && o->GetDestination() == st->index &&
|
||||
(!st->airport.HasHangar() || !CanVehicleUseStation(v, st))) {
|
||||
o->MakeDummy();
|
||||
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP);
|
||||
}
|
||||
v->pos = v->previous_pos = AircraftGetEntryPoint(v, ap, rotation);
|
||||
UpdateAircraftCache(v);
|
||||
}
|
||||
|
||||
/* Heliports don't have a hangar. Invalidate all go to hangar orders from all aircraft. */
|
||||
if (!st->airport.HasHangar()) RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, st->index, true);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ static void ShowBuildAirportPicker(Window *parent);
|
||||
|
||||
SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout);
|
||||
|
||||
void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Failed()) return;
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
/** Factory for the SSE4 32 bpp blitter (with palette animation). */
|
||||
class FBlitter_32bppSSE4_Anim: public BlitterFactory {
|
||||
public:
|
||||
FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {}
|
||||
FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "32bpp SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {}
|
||||
/* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSE4_Anim(); }
|
||||
};
|
||||
|
||||
|
||||
@@ -57,8 +57,9 @@ typedef GUIList<BuildBridgeData> GUIBridgeList; ///< List of bridges, used in #B
|
||||
* - p2 = (bit 0- 7) - bridge type (hi bh)
|
||||
* - p2 = (bit 8-13) - rail type or road types.
|
||||
* - p2 = (bit 15-16) - transport type.
|
||||
* @param cmd unused
|
||||
*/
|
||||
void CcBuildBridge(const CommandCost &result, TileIndex end_tile, uint32 p1, uint32 p2)
|
||||
void CcBuildBridge(const CommandCost &result, TileIndex end_tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Failed()) return;
|
||||
if (_settings_client.sound.confirm) SndPlayTileFx(SND_27_BLACKSMITH_ANVIL, end_tile);
|
||||
|
||||
@@ -1438,7 +1438,7 @@ struct BuildVehicleWindow : Window {
|
||||
this->GenerateBuildList();
|
||||
this->vscroll->SetCount(this->eng_list.Length());
|
||||
|
||||
this->SetWidgetDisabledState(WID_BV_SHOW_HIDE, this->sel_engine == INVALID_ENGINE);
|
||||
this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WID_BV_RENAME, WIDGET_LIST_END);
|
||||
|
||||
this->DrawWidgets();
|
||||
|
||||
|
||||
@@ -117,8 +117,9 @@ int32 GetPickupAmount(CargoMonitorID monitor, bool keep_monitoring)
|
||||
* @param src_type type of \a src.
|
||||
* @param src index of source.
|
||||
* @param st station where the cargo is delivered to.
|
||||
* @param dest industry index where the cargo is delivered to.
|
||||
*/
|
||||
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st)
|
||||
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st, IndustryID dest)
|
||||
{
|
||||
if (amount == 0) return;
|
||||
|
||||
@@ -151,6 +152,7 @@ void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, Sour
|
||||
|
||||
/* Industry delivery. */
|
||||
for (const Industry * const *ip = st->industries_near.Begin(); ip != st->industries_near.End(); ip++) {
|
||||
if ((*ip)->index != dest) continue;
|
||||
CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, (*ip)->index);
|
||||
CargoMonitorMap::iterator iter = _cargo_deliveries.find(num);
|
||||
if (iter != _cargo_deliveries.end()) iter->second += amount;
|
||||
|
||||
@@ -149,6 +149,6 @@ void ClearCargoPickupMonitoring(CompanyID company = INVALID_OWNER);
|
||||
void ClearCargoDeliveryMonitoring(CompanyID company = INVALID_OWNER);
|
||||
int32 GetDeliveryAmount(CargoMonitorID monitor, bool keep_monitoring);
|
||||
int32 GetPickupAmount(CargoMonitorID monitor, bool keep_monitoring);
|
||||
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st);
|
||||
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st, IndustryID dest = INVALID_INDUSTRY);
|
||||
|
||||
#endif /* CARGOMONITOR_H */
|
||||
|
||||
@@ -370,7 +370,7 @@ struct CheatWindow : Window {
|
||||
|
||||
default:
|
||||
/* Take whatever the function returns */
|
||||
value = ce->proc(value + ((x >= 20 + SETTING_BUTTON_WIDTH / 2) ? 1 : -1), (x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1);
|
||||
value = ce->proc(value + ((x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1), (x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1);
|
||||
|
||||
/* The first cheat (money), doesn't return a different value. */
|
||||
if (value != oldvalue || btn == CHT_MONEY) this->clicked = btn * 2 + 1 + ((x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) != rtl ? 1 : 0);
|
||||
|
||||
@@ -283,7 +283,7 @@ static const Command _command_proc_table[] = {
|
||||
|
||||
DEF_CMD(CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_TURN_ROADVEH
|
||||
|
||||
DEF_CMD(CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_PAUSE
|
||||
DEF_CMD(CmdPause, CMD_SERVER, CMDT_SERVER_SETTING ), // CMD_PAUSE
|
||||
|
||||
DEF_CMD(CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_SHARE_IN_COMPANY
|
||||
DEF_CMD(CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_SELL_SHARE_IN_COMPANY
|
||||
@@ -307,7 +307,7 @@ static const Command _command_proc_table[] = {
|
||||
DEF_CMD(CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT ), // CMD_CHANGE_BANK_BALANCE
|
||||
DEF_CMD(CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_CANAL
|
||||
DEF_CMD(CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_SUBSIDY
|
||||
DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL
|
||||
DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL
|
||||
DEF_CMD(CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CUSTOM_NEWS_ITEM
|
||||
DEF_CMD(CmdCreateGoal, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_GOAL
|
||||
DEF_CMD(CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_GOAL
|
||||
@@ -558,7 +558,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
|
||||
bool estimate_only = _shift_pressed && IsLocalCompany() &&
|
||||
!_generating_world &&
|
||||
!(cmd & CMD_NETWORK_COMMAND) &&
|
||||
!(GetCommandFlags(cmd) & CMD_NO_EST);
|
||||
(cmd & CMD_ID_MASK) != CMD_PAUSE;
|
||||
|
||||
/* We're only sending the command, so don't do
|
||||
* fancy things for 'success'. */
|
||||
@@ -597,7 +597,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
|
||||
}
|
||||
|
||||
if (!estimate_only && !only_sending && callback != NULL) {
|
||||
callback(res, tile, p1, p2);
|
||||
callback(res, tile, p1, p2, cmd);
|
||||
}
|
||||
|
||||
return res.Succeeded();
|
||||
|
||||
@@ -395,7 +395,6 @@ enum CommandFlags {
|
||||
CMD_CLIENT_ID = 0x080, ///< set p2 with the ClientID of the sending client.
|
||||
CMD_DEITY = 0x100, ///< the command may be executed by COMPANY_DEITY
|
||||
CMD_STR_CTRL = 0x200, ///< the command's string may contain control strings
|
||||
CMD_NO_EST = 0x400, ///< the command is never estimated.
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(CommandFlags)
|
||||
|
||||
@@ -468,7 +467,7 @@ struct Command {
|
||||
* @param p1 Additional data of the command
|
||||
* @see CommandProc
|
||||
*/
|
||||
typedef void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
|
||||
typedef void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd);
|
||||
|
||||
/**
|
||||
* Structure for buffering the build command when selecting a station to join.
|
||||
|
||||
@@ -104,9 +104,12 @@ void SetLocalCompany(CompanyID new_company)
|
||||
/* company could also be COMPANY_SPECTATOR or OWNER_NONE */
|
||||
assert(Company::IsValidID(new_company) || new_company == COMPANY_SPECTATOR || new_company == OWNER_NONE);
|
||||
|
||||
/* If actually changing to another company, several windows need closing */
|
||||
bool switching_company = _local_company != new_company;
|
||||
|
||||
#ifdef ENABLE_NETWORK
|
||||
/* Delete the chat window, if you were team chatting. */
|
||||
InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_TEAM, _local_company);
|
||||
if (switching_company) InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_TEAM, _local_company);
|
||||
#endif
|
||||
|
||||
assert(IsLocalCompany());
|
||||
@@ -114,7 +117,7 @@ void SetLocalCompany(CompanyID new_company)
|
||||
_current_company = _local_company = new_company;
|
||||
|
||||
/* Delete any construction windows... */
|
||||
DeleteConstructionWindows();
|
||||
if (switching_company) DeleteConstructionWindows();
|
||||
|
||||
/* ... and redraw the whole screen. */
|
||||
MarkWholeScreenDirty();
|
||||
@@ -595,10 +598,10 @@ void StartupCompanies()
|
||||
}
|
||||
|
||||
/** Start a new competitor company if possible. */
|
||||
static bool MaybeStartNewCompany()
|
||||
static void MaybeStartNewCompany()
|
||||
{
|
||||
#ifdef ENABLE_NETWORK
|
||||
if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false;
|
||||
if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return;
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
Company *c;
|
||||
@@ -612,10 +615,8 @@ static bool MaybeStartNewCompany()
|
||||
if (n < (uint)_settings_game.difficulty.max_no_competitors) {
|
||||
/* Send a command to all clients to start up a new AI.
|
||||
* Works fine for Multiplayer and Singleplayer */
|
||||
return DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Initialize the pool of companies. */
|
||||
@@ -716,19 +717,11 @@ void OnTick_Companies()
|
||||
}
|
||||
|
||||
if (_next_competitor_start == 0) {
|
||||
/* AI::GetStartNextTime() can return 0. */
|
||||
_next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS);
|
||||
_next_competitor_start = AI::GetStartNextTime() * DAY_TICKS;
|
||||
}
|
||||
|
||||
if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) {
|
||||
/* Allow multiple AIs to possibly start in the same tick. */
|
||||
do {
|
||||
if (!MaybeStartNewCompany()) break;
|
||||
|
||||
/* In networking mode, we can only send a command to start but it
|
||||
* didn't execute yet, so we cannot loop. */
|
||||
if (_networking) break;
|
||||
} while (AI::GetStartNextTime() == 0);
|
||||
if (AI::CanStartNew() && _game_mode != GM_MENU && --_next_competitor_start == 0) {
|
||||
MaybeStartNewCompany();
|
||||
}
|
||||
|
||||
_cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES;
|
||||
@@ -815,7 +808,8 @@ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason)
|
||||
* @param flags operation to perform
|
||||
* @param p1 various functionality
|
||||
* - bits 0..15: CompanyCtrlAction
|
||||
* - bits 16..24: CompanyID
|
||||
* - bits 16..23: CompanyID
|
||||
* - bits 24..31: CompanyRemoveReason (with CCA_DELETE)
|
||||
* @param p2 ClientID
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
@@ -824,9 +818,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
{
|
||||
InvalidateWindowData(WC_COMPANY_LEAGUE, 0, 0);
|
||||
CompanyID company_id = (CompanyID)GB(p1, 16, 8);
|
||||
#ifdef ENABLE_NETWORK
|
||||
ClientID client_id = (ClientID)p2;
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
switch ((CompanyCtrlAction)GB(p1, 0, 16)) {
|
||||
case CCA_NEW: { // Create a new company
|
||||
@@ -836,6 +827,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
#ifdef ENABLE_NETWORK
|
||||
/* Has the network client a correct ClientIndex? */
|
||||
if (!(flags & DC_EXEC)) return CommandCost();
|
||||
|
||||
ClientID client_id = (ClientID)p2;
|
||||
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
||||
#ifndef DEBUG_DUMP_COMMANDS
|
||||
/* When replaying the client ID is not a valid client; there
|
||||
@@ -891,7 +884,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
}
|
||||
|
||||
case CCA_DELETE: { // Delete a company
|
||||
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p2, 0, 2);
|
||||
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 24, 8);
|
||||
if (reason >= CRR_END) return CMD_ERROR;
|
||||
|
||||
Company *c = Company::GetIfValid(company_id);
|
||||
|
||||
@@ -707,7 +707,7 @@ public:
|
||||
this->BuildGroupList(company);
|
||||
this->SetRows();
|
||||
} else {
|
||||
this->SetSelectedGroup(group);
|
||||
this->SetSelectedGroup(company, group);
|
||||
}
|
||||
|
||||
this->FinishInitNested(company);
|
||||
@@ -715,7 +715,7 @@ public:
|
||||
this->InvalidateData(1);
|
||||
}
|
||||
|
||||
void SetSelectedGroup(GroupID group)
|
||||
void SetSelectedGroup(CompanyID company, GroupID group)
|
||||
{
|
||||
this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
|
||||
const Group *g = Group::Get(group);
|
||||
@@ -730,7 +730,7 @@ public:
|
||||
this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
|
||||
|
||||
this->groups.ForceRebuild();
|
||||
this->BuildGroupList((CompanyID)this->window_number);
|
||||
this->BuildGroupList(company);
|
||||
this->SetRows();
|
||||
|
||||
/* Position scrollbar to selected group */
|
||||
@@ -1025,9 +1025,15 @@ public:
|
||||
if (data != -1) {
|
||||
/* data contains a VehicleType, rebuild list if it displayed */
|
||||
if (this->livery_class == data + LC_GROUP_RAIL) {
|
||||
if (!Group::IsValidID(this->sel)) this->sel = INVALID_GROUP;
|
||||
this->groups.ForceRebuild();
|
||||
this->BuildGroupList((CompanyID)this->window_number);
|
||||
this->SetRows();
|
||||
|
||||
if (!Group::IsValidID(this->sel)) {
|
||||
this->sel = INVALID_GROUP;
|
||||
if (this->groups.Length() > 0) this->sel = this->groups[0]->index;
|
||||
}
|
||||
|
||||
this->SetDirty();
|
||||
}
|
||||
return;
|
||||
@@ -1099,7 +1105,7 @@ void ShowCompanyLiveryWindow(CompanyID company, GroupID group)
|
||||
if (w == NULL) {
|
||||
new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group);
|
||||
} else if (group != INVALID_GROUP) {
|
||||
w->SetSelectedGroup(group);
|
||||
w->SetSelectedGroup(company, group);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -836,7 +836,7 @@ DEF_CONSOLE_CMD(ConResetCompany)
|
||||
}
|
||||
|
||||
/* It is safe to remove this company */
|
||||
DoCommandP(0, CCA_DELETE | index << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_DELETE | index << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
|
||||
IConsolePrint(CC_DEFAULT, "Company deleted.");
|
||||
|
||||
return true;
|
||||
@@ -1213,7 +1213,7 @@ DEF_CONSOLE_CMD(ConReloadAI)
|
||||
}
|
||||
|
||||
/* First kill the company of the AI, then start a new one. This should start the current AI again */
|
||||
DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0,CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_NEW_AI | company_id << 16, 0, CMD_COMPANY_CTRL);
|
||||
IConsolePrint(CC_DEFAULT, "AI reloaded.");
|
||||
|
||||
@@ -1250,7 +1250,7 @@ DEF_CONSOLE_CMD(ConStopAI)
|
||||
}
|
||||
|
||||
/* Now kill the company of the AI. */
|
||||
DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
|
||||
DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
|
||||
IConsolePrint(CC_DEFAULT, "AI stopped, company deleted.");
|
||||
|
||||
return true;
|
||||
|
||||
@@ -12,18 +12,20 @@
|
||||
#ifndef ENUM_TYPE_HPP
|
||||
#define ENUM_TYPE_HPP
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
/** Some enums need to have allowed incrementing (i.e. StationClassID) */
|
||||
#define DECLARE_POSTFIX_INCREMENT(type) \
|
||||
inline type operator ++(type& e, int) \
|
||||
#define DECLARE_POSTFIX_INCREMENT(enum_type) \
|
||||
inline enum_type operator ++(enum_type& e, int) \
|
||||
{ \
|
||||
type e_org = e; \
|
||||
e = (type)((int)e + 1); \
|
||||
enum_type e_org = e; \
|
||||
e = (enum_type)((std::underlying_type<enum_type>::type)e + 1); \
|
||||
return e_org; \
|
||||
} \
|
||||
inline type operator --(type& e, int) \
|
||||
inline enum_type operator --(enum_type& e, int) \
|
||||
{ \
|
||||
type e_org = e; \
|
||||
e = (type)((int)e - 1); \
|
||||
enum_type e_org = e; \
|
||||
e = (enum_type)((std::underlying_type<enum_type>::type)e - 1); \
|
||||
return e_org; \
|
||||
}
|
||||
|
||||
@@ -31,13 +33,13 @@
|
||||
|
||||
/** Operators to allow to work with enum as with type safe bit set in C++ */
|
||||
# define DECLARE_ENUM_AS_BIT_SET(mask_t) \
|
||||
inline mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((int)m1 | m2);} \
|
||||
inline mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((int)m1 & m2);} \
|
||||
inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((int)m1 ^ m2);} \
|
||||
inline mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 | m2);} \
|
||||
inline mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 & m2);} \
|
||||
inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 ^ m2);} \
|
||||
inline mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \
|
||||
inline mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \
|
||||
inline mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \
|
||||
inline mask_t operator ~(mask_t m) {return (mask_t)(~(int)m);}
|
||||
inline mask_t operator ~(mask_t m) {return (mask_t)(~(std::underlying_type<mask_t>::type)m);}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -152,18 +152,20 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size)
|
||||
* @param size size of item
|
||||
* @param index index of item
|
||||
* @return pointer to allocated item
|
||||
* @note usererror() on failure! (index out of range or already used)
|
||||
* @note SlErrorCorruptFmt() on failure! (index out of range or already used)
|
||||
*/
|
||||
DEFINE_POOL_METHOD(void *)::GetNew(size_t size, size_t index)
|
||||
{
|
||||
extern void NORETURN SlErrorCorruptFmt(const char *format, ...);
|
||||
|
||||
if (index >= Tmax_size) {
|
||||
usererror("failed loading savegame: %s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size);
|
||||
SlErrorCorruptFmt("%s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size);
|
||||
}
|
||||
|
||||
if (index >= this->size) this->ResizeFor(index);
|
||||
|
||||
if (this->data[index] != NULL) {
|
||||
usererror("failed loading savegame: %s index " PRINTF_SIZE " already in use", this->name, index);
|
||||
SlErrorCorruptFmt("%s index " PRINTF_SIZE " already in use", this->name, index);
|
||||
}
|
||||
|
||||
return this->AllocateItem(size, index);
|
||||
|
||||
@@ -62,7 +62,6 @@
|
||||
#include <lzo/lzo1x.h>
|
||||
#endif
|
||||
#ifdef WITH_SDL
|
||||
# include "sdl.h"
|
||||
# include <SDL.h>
|
||||
#endif /* WITH_SDL */
|
||||
#ifdef WITH_ZLIB
|
||||
@@ -195,7 +194,7 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
|
||||
FontCache::Get(FS_MONO)->GetFontName()
|
||||
);
|
||||
|
||||
buffer += seprintf(buffer, last, "AI Configuration (local: %i):\n", (int)_local_company);
|
||||
buffer += seprintf(buffer, last, "AI Configuration (local: %i) (current: %i):\n", (int)_local_company, (int)_current_company);
|
||||
const Company *c;
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
if (c->ai_info == NULL) {
|
||||
@@ -268,14 +267,8 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const
|
||||
#endif /* WITH_PNG */
|
||||
|
||||
#ifdef WITH_SDL
|
||||
#ifdef DYNAMICALLY_LOADED_SDL
|
||||
if (SDL_CALL SDL_Linked_Version != NULL) {
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
const SDL_version *v = SDL_CALL SDL_Linked_Version();
|
||||
buffer += seprintf(buffer, last, " SDL: %d.%d.%d\n", v->major, v->minor, v->patch);
|
||||
}
|
||||
const SDL_version *v = SDL_Linked_Version();
|
||||
buffer += seprintf(buffer, last, " SDL: %d.%d.%d\n", v->major, v->minor, v->patch);
|
||||
#endif /* WITH_SDL */
|
||||
|
||||
#ifdef WITH_ZLIB
|
||||
@@ -310,7 +303,7 @@ char *CrashLog::LogGamelog(char *buffer, const char *last) const
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes any recent news messages to the buffer.
|
||||
* Writes up to 32 recent news messages to the buffer, with the most recent first.
|
||||
* @param buffer The begin where to write at.
|
||||
* @param last The last position in the buffer to write to.
|
||||
* @return the position of the \c '\0' character after the buffer.
|
||||
@@ -319,7 +312,8 @@ char *CrashLog::LogRecentNews(char *buffer, const char *last) const
|
||||
{
|
||||
buffer += seprintf(buffer, last, "Recent news messages:\n");
|
||||
|
||||
for (NewsItem *news = _oldest_news; news != NULL; news = news->next) {
|
||||
int i = 0;
|
||||
for (NewsItem *news = _latest_news; i < 32 && news != NULL; news = news->prev, i++) {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(news->date, &ymd);
|
||||
buffer += seprintf(buffer, last, "(%i-%02i-%02i) StringID: %u, Type: %u, Ref1: %u, %u, Ref2: %u, %u\n",
|
||||
|
||||
@@ -117,8 +117,9 @@ extern void DepotSortList(VehicleList *list);
|
||||
* @param tile unused
|
||||
* @param p1 unused
|
||||
* @param p2 unused
|
||||
* @param cmd unused
|
||||
*/
|
||||
void CcCloneVehicle(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcCloneVehicle(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Failed()) return;
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ static void ShowBuildDocksDepotPicker(Window *parent);
|
||||
|
||||
static Axis _ship_depot_direction;
|
||||
|
||||
void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Failed()) return;
|
||||
|
||||
@@ -48,7 +48,7 @@ void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p
|
||||
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
|
||||
}
|
||||
|
||||
void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_02_SPLAT_WATER, tile);
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
|
||||
/* Skip the total */
|
||||
if (i == SCORE_TOTAL) continue;
|
||||
/* Check the score */
|
||||
s = Clamp(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed;
|
||||
s = Clamp<int64>(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed;
|
||||
score += s;
|
||||
total_score += _score_info[i].score;
|
||||
}
|
||||
@@ -572,8 +572,10 @@ static void CompanyCheckBankrupt(Company *c)
|
||||
{
|
||||
/* If the company has money again, it does not go bankrupt */
|
||||
if (c->money - c->current_loan >= -_economy.max_loan) {
|
||||
int previous_months_of_bankruptcy = CeilDiv(c->months_of_bankruptcy, 3);
|
||||
c->months_of_bankruptcy = 0;
|
||||
c->bankrupt_asked = 0;
|
||||
if (previous_months_of_bankruptcy != 0) CompanyAdminUpdate(c);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -642,10 +644,15 @@ static void CompanyCheckBankrupt(Company *c)
|
||||
* that changing the current company is okay. In case of single
|
||||
* player we are sure (the above check) that we are not the local
|
||||
* company and thus we won't be moved. */
|
||||
if (!_networking || _network_server) DoCommandP(0, CCA_DELETE | (c->index << 16), CRR_BANKRUPT, CMD_COMPANY_CTRL);
|
||||
if (!_networking || _network_server) {
|
||||
DoCommandP(0, CCA_DELETE | (c->index << 16) | (CRR_BANKRUPT << 24), 0, CMD_COMPANY_CTRL);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (CeilDiv(c->months_of_bankruptcy, 3) != CeilDiv(c->months_of_bankruptcy - 1, 3)) CompanyAdminUpdate(c);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1030,9 +1037,10 @@ static SmallIndustryList _cargo_delivery_destinations;
|
||||
* @param cargo_type Type of cargo delivered
|
||||
* @param num_pieces Amount of cargo delivered
|
||||
* @param source The source of the cargo
|
||||
* @param company The company delivering the cargo
|
||||
* @return actually accepted pieces of cargo
|
||||
*/
|
||||
static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source)
|
||||
static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source, CompanyID company)
|
||||
{
|
||||
/* Find the nearest industrytile to the station sign inside the catchment area, whose industry accepts the cargo.
|
||||
* This fails in three cases:
|
||||
@@ -1065,6 +1073,9 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
|
||||
ind->last_cargo_accepted_at[cargo_index] = _date;
|
||||
num_pieces -= amount;
|
||||
accepted += amount;
|
||||
|
||||
/* Update the cargo monitor. */
|
||||
AddCargoDelivery(cargo_type, company, amount, ST_INDUSTRY, source, st, ind->index);
|
||||
}
|
||||
|
||||
return accepted;
|
||||
@@ -1090,30 +1101,30 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
|
||||
Station *st = Station::Get(dest);
|
||||
|
||||
/* Give the goods to the industry. */
|
||||
uint accepted = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY);
|
||||
uint accepted_ind = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY, company->index);
|
||||
|
||||
/* If this cargo type is always accepted, accept all */
|
||||
if (HasBit(st->always_accepted, cargo_type)) accepted = num_pieces;
|
||||
uint accepted_total = HasBit(st->always_accepted, cargo_type) ? num_pieces : accepted_ind;
|
||||
|
||||
/* Update station statistics */
|
||||
if (accepted > 0) {
|
||||
if (accepted_total > 0) {
|
||||
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_EVER_ACCEPTED);
|
||||
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_CURRENT_MONTH);
|
||||
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_ACCEPTED_BIGTICK);
|
||||
}
|
||||
|
||||
/* Update company statistics */
|
||||
company->cur_economy.delivered_cargo[cargo_type] += accepted;
|
||||
company->cur_economy.delivered_cargo[cargo_type] += accepted_total;
|
||||
|
||||
/* Increase town's counter for town effects */
|
||||
const CargoSpec *cs = CargoSpec::Get(cargo_type);
|
||||
st->town->received[cs->town_effect].new_act += accepted;
|
||||
st->town->received[cs->town_effect].new_act += accepted_total;
|
||||
|
||||
/* Determine profit */
|
||||
Money profit = GetTransportedGoodsIncome(accepted, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
|
||||
Money profit = GetTransportedGoodsIncome(accepted_total, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
|
||||
|
||||
/* Update the cargo monitor. */
|
||||
AddCargoDelivery(cargo_type, company->index, accepted, src_type, src, st);
|
||||
AddCargoDelivery(cargo_type, company->index, accepted_total - accepted_ind, src_type, src, st);
|
||||
|
||||
/* Modify profit if a subsidy is in effect */
|
||||
if (CheckSubsidised(cargo_type, company->index, src_type, src, st)) {
|
||||
@@ -1518,6 +1529,17 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
|
||||
cur_company.Restore();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test whether a vehicle can load cargo at a station even if exclusive transport rights are present.
|
||||
* @param st Station with cargo waiting to be loaded.
|
||||
* @param v Vehicle loading the cargo.
|
||||
* @return true when a vehicle can load the cargo.
|
||||
*/
|
||||
static bool MayLoadUnderExclusiveRights(const Station *st, const Vehicle *v)
|
||||
{
|
||||
return st->owner != OWNER_NONE || st->town->exclusive_counter == 0 || st->town->exclusivity == v->owner;
|
||||
}
|
||||
|
||||
struct ReserveCargoAction {
|
||||
Station *st;
|
||||
StationIDStack *next_station;
|
||||
@@ -1527,7 +1549,7 @@ struct ReserveCargoAction {
|
||||
|
||||
bool operator()(Vehicle *v)
|
||||
{
|
||||
if (v->cargo_cap > v->cargo.RemainingCount()) {
|
||||
if (v->cargo_cap > v->cargo.RemainingCount() && MayLoadUnderExclusiveRights(st, v)) {
|
||||
st->goods[v->cargo_type].cargo.Reserve(v->cargo_cap - v->cargo.RemainingCount(),
|
||||
&v->cargo, st->xy, *next_station);
|
||||
}
|
||||
@@ -1751,7 +1773,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
/* If there's goods waiting at the station, and the vehicle
|
||||
* has capacity for it, load it on the vehicle. */
|
||||
uint cap_left = v->cargo_cap - v->cargo.StoredCount();
|
||||
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0)) {
|
||||
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) {
|
||||
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
|
||||
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v));
|
||||
|
||||
|
||||
@@ -652,7 +652,14 @@ void StartupOneEngine(Engine *e, Date aging_date)
|
||||
/* Don't randomise the start-date in the first two years after gamestart to ensure availability
|
||||
* of engines in early starting games.
|
||||
* Note: TTDP uses fixed 1922 */
|
||||
SavedRandomSeeds saved_seeds;
|
||||
SaveRandomSeeds(&saved_seeds);
|
||||
SetRandomSeed(_settings_game.game_creation.generation_seed ^
|
||||
ei->base_intro ^
|
||||
e->type ^
|
||||
e->GetGRFID());
|
||||
uint32 r = Random();
|
||||
|
||||
e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (Date)GB(r, 0, 9) + ei->base_intro;
|
||||
if (e->intro_date <= _date) {
|
||||
e->age = (aging_date - e->intro_date) >> 5;
|
||||
@@ -672,6 +679,7 @@ void StartupOneEngine(Engine *e, Date aging_date)
|
||||
|
||||
e->reliability_spd_dec = ei->decay_speed << 2;
|
||||
|
||||
RestoreRandomSeeds(saved_seeds);
|
||||
CalcEngineReliability(e);
|
||||
|
||||
/* prevent certain engines from ever appearing. */
|
||||
|
||||
24
src/fios.cpp
24
src/fios.cpp
@@ -56,7 +56,7 @@ int CDECL CompareFiosItems(const FiosItem *da, const FiosItem *db)
|
||||
if ((_savegame_sort_order & SORT_BY_NAME) == 0 && da->mtime != db->mtime) {
|
||||
r = da->mtime < db->mtime ? -1 : 1;
|
||||
} else {
|
||||
r = strcasecmp(da->title, db->title);
|
||||
r = strnatcmp(da->title, db->title);
|
||||
}
|
||||
|
||||
if (_savegame_sort_order & SORT_DESCENDING) r = -r;
|
||||
@@ -319,13 +319,29 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons
|
||||
|
||||
FiosItem *fios = file_list.Append();
|
||||
#ifdef _WIN32
|
||||
struct _stat sb;
|
||||
if (_tstat(OTTD2FS(filename), &sb) == 0) {
|
||||
// Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP
|
||||
HANDLE fh = CreateFile(OTTD2FS(filename), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
|
||||
|
||||
if (fh != INVALID_HANDLE_VALUE) {
|
||||
FILETIME ft;
|
||||
ULARGE_INTEGER ft_int64;
|
||||
|
||||
if (GetFileTime(fh, nullptr, nullptr, &ft) != 0) {
|
||||
ft_int64.HighPart = ft.dwHighDateTime;
|
||||
ft_int64.LowPart = ft.dwLowDateTime;
|
||||
|
||||
// Convert from hectonanoseconds since 01/01/1601 to seconds since 01/01/1970
|
||||
fios->mtime = ft_int64.QuadPart / 10000000ULL - 11644473600ULL;
|
||||
} else {
|
||||
fios->mtime = 0;
|
||||
}
|
||||
|
||||
CloseHandle(fh);
|
||||
#else
|
||||
struct stat sb;
|
||||
if (stat(filename, &sb) == 0) {
|
||||
#endif
|
||||
fios->mtime = sb.st_mtime;
|
||||
#endif
|
||||
} else {
|
||||
fios->mtime = 0;
|
||||
}
|
||||
|
||||
@@ -437,12 +437,15 @@ public:
|
||||
GfxFillRect(r.left + 1, r.top + 1, r.right, r.bottom, PC_BLACK);
|
||||
|
||||
uint y = r.top + WD_FRAMERECT_TOP;
|
||||
for (uint pos = this->vscroll->GetPosition(); pos < this->fios_items.Length(); pos++) {
|
||||
if (!this->fios_items_shown[pos]) {
|
||||
uint scroll_pos = this->vscroll->GetPosition();
|
||||
for (uint row = 0; row < this->fios_items.Length(); row++) {
|
||||
if (!this->fios_items_shown[row]) {
|
||||
/* The current item is filtered out : we do not show it */
|
||||
scroll_pos++;
|
||||
continue;
|
||||
}
|
||||
const FiosItem *item = this->fios_items.Get(pos);
|
||||
if (row < scroll_pos) continue;
|
||||
const FiosItem *item = this->fios_items.Get(row);
|
||||
|
||||
if (item == this->selected) {
|
||||
GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE);
|
||||
@@ -577,6 +580,7 @@ public:
|
||||
if (_savegame_sort_dirty) {
|
||||
_savegame_sort_dirty = false;
|
||||
SortSaveGameList(this->fios_items);
|
||||
this->OnInvalidateData(SLIWD_FILTER_CHANGES);
|
||||
}
|
||||
|
||||
this->DrawWidgets();
|
||||
|
||||
@@ -184,12 +184,12 @@ uint SpriteFontCache::GetGlyphWidth(GlyphID key)
|
||||
{
|
||||
SpriteID sprite = this->GetUnicodeGlyph(key);
|
||||
if (sprite == 0) sprite = this->GetUnicodeGlyph('?');
|
||||
return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleGUITrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
|
||||
return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
|
||||
}
|
||||
|
||||
int SpriteFontCache::GetHeight() const
|
||||
{
|
||||
return ScaleGUITrad(this->height);
|
||||
return ScaleFontTrad(this->height);
|
||||
}
|
||||
|
||||
bool SpriteFontCache::GetDrawGlyphShadow()
|
||||
@@ -282,16 +282,18 @@ 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(_default_font_height[this->fs]);
|
||||
int scaled_height = ScaleFontTrad(_default_font_height[this->fs]);
|
||||
pixels = scaled_height;
|
||||
|
||||
TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
|
||||
if (head != NULL) {
|
||||
/* 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(_default_font_height[FS_SMALL]);
|
||||
int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
|
||||
pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE);
|
||||
}
|
||||
} else {
|
||||
pixels = ScaleFontTrad(pixels);
|
||||
}
|
||||
this->used_size = pixels;
|
||||
|
||||
@@ -419,6 +421,9 @@ FreeTypeFontCache::~FreeTypeFontCache()
|
||||
*/
|
||||
void FreeTypeFontCache::ClearFontCache()
|
||||
{
|
||||
/* Font scaling might have changed, determine font size anew if it was automatically selected. */
|
||||
if (this->face != NULL) this->SetFontSize(this->fs, this->face, this->req_size);
|
||||
|
||||
if (this->glyph_to_sprite == NULL) return;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
@@ -436,9 +441,6 @@ void FreeTypeFontCache::ClearFontCache()
|
||||
this->glyph_to_sprite = NULL;
|
||||
|
||||
Layouter::ResetFontCache(this->fs);
|
||||
|
||||
/* GUI scaling might have changed, determine font size anew if it was automatically selected. */
|
||||
if (this->face != NULL && this->req_size == 0) this->SetFontSize(this->fs, this->face, this->req_size);
|
||||
}
|
||||
|
||||
FreeTypeFontCache::GlyphEntry *FreeTypeFontCache::GetGlyphPtr(GlyphID key)
|
||||
|
||||
@@ -13,13 +13,18 @@
|
||||
#include <chrono>
|
||||
#include "gfx_func.h"
|
||||
#include "window_gui.h"
|
||||
#include "window_func.h"
|
||||
#include "table/sprites.h"
|
||||
#include "string_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "console_func.h"
|
||||
#include "console_type.h"
|
||||
#include "guitimer_func.h"
|
||||
#include "company_base.h"
|
||||
#include "ai/ai_info.hpp"
|
||||
|
||||
#include "widgets/framerate_widget.h"
|
||||
#include "safeguards.h"
|
||||
|
||||
|
||||
/**
|
||||
@@ -183,6 +188,23 @@ namespace {
|
||||
PerformanceData(1), // PFE_ACC_DRAWWORLD
|
||||
PerformanceData(60.0), // PFE_VIDEO
|
||||
PerformanceData(1000.0 * 8192 / 44100), // PFE_SOUND
|
||||
PerformanceData(1), // PFE_ALLSCRIPTS
|
||||
PerformanceData(1), // PFE_GAMESCRIPT
|
||||
PerformanceData(1), // PFE_AI0 ...
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1), // PFE_AI14
|
||||
};
|
||||
|
||||
}
|
||||
@@ -215,6 +237,15 @@ PerformanceMeasurer::PerformanceMeasurer(PerformanceElement elem)
|
||||
/** Finish a cycle of a measured element and store the measurement taken. */
|
||||
PerformanceMeasurer::~PerformanceMeasurer()
|
||||
{
|
||||
if (this->elem == PFE_ALLSCRIPTS) {
|
||||
/* Hack to not record scripts total when no scripts are active */
|
||||
bool any_active = _pf_data[PFE_GAMESCRIPT].num_valid > 0;
|
||||
for (uint e = PFE_AI0; e < PFE_MAX; e++) any_active |= _pf_data[e].num_valid > 0;
|
||||
if (!any_active) {
|
||||
PerformanceMeasurer::SetInactive(PFE_ALLSCRIPTS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
_pf_data[this->elem].Add(this->start_time, GetPerformanceTimer());
|
||||
}
|
||||
|
||||
@@ -224,11 +255,19 @@ void PerformanceMeasurer::SetExpectedRate(double rate)
|
||||
_pf_data[this->elem].expected_rate = rate;
|
||||
}
|
||||
|
||||
/** Mark a performance element as not currently in use. */
|
||||
/* static */ void PerformanceMeasurer::SetInactive(PerformanceElement elem)
|
||||
{
|
||||
_pf_data[elem].num_valid = 0;
|
||||
_pf_data[elem].next_index = 0;
|
||||
_pf_data[elem].prev_index = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that a cycle of "pause" where no processing occurs.
|
||||
* @param elem The element not currently being processed
|
||||
*/
|
||||
void PerformanceMeasurer::Paused(PerformanceElement elem)
|
||||
/* static */ void PerformanceMeasurer::Paused(PerformanceElement elem)
|
||||
{
|
||||
_pf_data[elem].AddPause(GetPerformanceTimer());
|
||||
}
|
||||
@@ -266,6 +305,44 @@ void PerformanceAccumulator::Reset(PerformanceElement elem)
|
||||
void ShowFrametimeGraphWindow(PerformanceElement elem);
|
||||
|
||||
|
||||
static const PerformanceElement DISPLAY_ORDER_PFE[PFE_MAX] = {
|
||||
PFE_GAMELOOP,
|
||||
PFE_GL_ECONOMY,
|
||||
PFE_GL_TRAINS,
|
||||
PFE_GL_ROADVEHS,
|
||||
PFE_GL_SHIPS,
|
||||
PFE_GL_AIRCRAFT,
|
||||
PFE_GL_LANDSCAPE,
|
||||
PFE_ALLSCRIPTS,
|
||||
PFE_GAMESCRIPT,
|
||||
PFE_AI0,
|
||||
PFE_AI1,
|
||||
PFE_AI2,
|
||||
PFE_AI3,
|
||||
PFE_AI4,
|
||||
PFE_AI5,
|
||||
PFE_AI6,
|
||||
PFE_AI7,
|
||||
PFE_AI8,
|
||||
PFE_AI9,
|
||||
PFE_AI10,
|
||||
PFE_AI11,
|
||||
PFE_AI12,
|
||||
PFE_AI13,
|
||||
PFE_AI14,
|
||||
PFE_GL_LINKGRAPH,
|
||||
PFE_DRAWING,
|
||||
PFE_DRAWWORLD,
|
||||
PFE_VIDEO,
|
||||
PFE_SOUND,
|
||||
};
|
||||
|
||||
static const char * GetAIName(int ai_index)
|
||||
{
|
||||
if (!Company::IsValidAiID(ai_index)) return "";
|
||||
return Company::Get(ai_index)->ai_info->GetName();
|
||||
}
|
||||
|
||||
/** @hideinitializer */
|
||||
static const NWidgetPart _framerate_window_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
@@ -281,14 +358,20 @@ static const NWidgetPart _framerate_window_widgets[] = {
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_RATE_FACTOR), SetDataTip(STR_FRAMERATE_SPEED_FACTOR, STR_FRAMERATE_SPEED_FACTOR_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(NWID_VERTICAL), SetPadding(6), SetPIP(0, 3, 0),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 6, 0),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_NAMES),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_CURRENT),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_AVERAGE),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(NWID_VERTICAL), SetPadding(6), SetPIP(0, 3, 0),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 6, 0),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_NAMES), SetScrollbar(WID_FRW_SCROLLBAR),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_CURRENT), SetScrollbar(WID_FRW_SCROLLBAR),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_AVERAGE), SetScrollbar(WID_FRW_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0),
|
||||
EndContainer(),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_FRW_SCROLLBAR),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
};
|
||||
@@ -296,6 +379,8 @@ static const NWidgetPart _framerate_window_widgets[] = {
|
||||
struct FramerateWindow : Window {
|
||||
bool small;
|
||||
GUITimer next_update;
|
||||
int num_active;
|
||||
int num_displayed;
|
||||
|
||||
struct CachedDecimal {
|
||||
StringID strid;
|
||||
@@ -332,14 +417,19 @@ struct FramerateWindow : Window {
|
||||
CachedDecimal times_shortterm[PFE_MAX]; ///< cached short term average times
|
||||
CachedDecimal times_longterm[PFE_MAX]; ///< cached long term average times
|
||||
|
||||
static const int VSPACING = 3; ///< space between column heading and values
|
||||
static const int VSPACING = 3; ///< space between column heading and values
|
||||
static const int MIN_ELEMENTS = 5; ///< smallest number of elements to display
|
||||
|
||||
FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
|
||||
{
|
||||
this->InitNested(number);
|
||||
this->small = this->IsShaded();
|
||||
this->UpdateData();
|
||||
this->num_displayed = this->num_active;
|
||||
this->next_update.SetInterval(100);
|
||||
|
||||
/* Window is always initialised to MIN_ELEMENTS height, resize to contain num_displayed */
|
||||
ResizeWindow(this, 0, (max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL);
|
||||
}
|
||||
|
||||
virtual void OnRealtimeTick(uint delta_ms)
|
||||
@@ -369,9 +459,19 @@ struct FramerateWindow : Window {
|
||||
|
||||
this->rate_drawing.SetRate(_pf_data[PFE_DRAWING].GetRate(), _pf_data[PFE_DRAWING].expected_rate);
|
||||
|
||||
int new_active = 0;
|
||||
for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) {
|
||||
this->times_shortterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(8), MILLISECONDS_PER_TICK);
|
||||
this->times_longterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(NUM_FRAMERATE_POINTS), MILLISECONDS_PER_TICK);
|
||||
if (_pf_data[e].num_valid > 0) new_active++;
|
||||
}
|
||||
|
||||
if (new_active != this->num_active) {
|
||||
this->num_active = new_active;
|
||||
Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
|
||||
sb->SetCount(this->num_active);
|
||||
sb->SetCapacity(min(this->num_displayed, this->num_active));
|
||||
this->ReInit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -425,11 +525,20 @@ struct FramerateWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_FRW_TIMES_NAMES: {
|
||||
int linecount = PFE_MAX - PFE_FIRST;
|
||||
size->width = 0;
|
||||
size->height = FONT_HEIGHT_NORMAL * (linecount + 1) + VSPACING;
|
||||
for (int line = 0; line < linecount; line++) {
|
||||
Dimension line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + line);
|
||||
size->height = FONT_HEIGHT_NORMAL + VSPACING + MIN_ELEMENTS * FONT_HEIGHT_NORMAL;
|
||||
resize->width = 0;
|
||||
resize->height = FONT_HEIGHT_NORMAL;
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid == 0) continue;
|
||||
Dimension line_size;
|
||||
if (e < PFE_AI0) {
|
||||
line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + e);
|
||||
} else {
|
||||
SetDParam(0, e - PFE_AI0 + 1);
|
||||
SetDParamStr(1, GetAIName(e - PFE_AI0));
|
||||
line_size = GetStringBoundingBox(STR_FRAMERATE_AI);
|
||||
}
|
||||
size->width = max(size->width, line_size.width);
|
||||
}
|
||||
break;
|
||||
@@ -437,13 +546,14 @@ struct FramerateWindow : Window {
|
||||
|
||||
case WID_FRW_TIMES_CURRENT:
|
||||
case WID_FRW_TIMES_AVERAGE: {
|
||||
int linecount = PFE_MAX - PFE_FIRST;
|
||||
*size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT));
|
||||
SetDParam(0, 999999);
|
||||
SetDParam(1, 2);
|
||||
Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD);
|
||||
size->width = max(size->width, item_size.width);
|
||||
size->height += FONT_HEIGHT_NORMAL * linecount + VSPACING;
|
||||
size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING;
|
||||
resize->width = 0;
|
||||
resize->height = FONT_HEIGHT_NORMAL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -452,14 +562,23 @@ struct FramerateWindow : Window {
|
||||
/** Render a column of formatted average durations */
|
||||
void DrawElementTimesColumn(const Rect &r, StringID heading_str, const CachedDecimal *values) const
|
||||
{
|
||||
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
|
||||
uint16 skip = sb->GetPosition();
|
||||
int drawable = this->num_displayed;
|
||||
int y = r.top;
|
||||
DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true);
|
||||
y += FONT_HEIGHT_NORMAL + VSPACING;
|
||||
|
||||
for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) {
|
||||
values[e].InsertDParams(0);
|
||||
DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid == 0) continue;
|
||||
if (skip > 0) {
|
||||
skip--;
|
||||
} else {
|
||||
values[e].InsertDParams(0);
|
||||
DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
drawable--;
|
||||
if (drawable == 0) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -468,11 +587,26 @@ struct FramerateWindow : Window {
|
||||
switch (widget) {
|
||||
case WID_FRW_TIMES_NAMES: {
|
||||
/* Render a column of titles for performance element names */
|
||||
int linecount = PFE_MAX - PFE_FIRST;
|
||||
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
|
||||
uint16 skip = sb->GetPosition();
|
||||
int drawable = this->num_displayed;
|
||||
int y = r.top + FONT_HEIGHT_NORMAL + VSPACING; // first line contains headings in the value columns
|
||||
for (int i = 0; i < linecount; i++) {
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + i, TC_FROMSTRING, SA_LEFT);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid == 0) continue;
|
||||
if (skip > 0) {
|
||||
skip--;
|
||||
} else {
|
||||
if (e < PFE_AI0) {
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TC_FROMSTRING, SA_LEFT);
|
||||
} else {
|
||||
SetDParam(0, e - PFE_AI0 + 1);
|
||||
SetDParamStr(1, GetAIName(e - PFE_AI0));
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT);
|
||||
}
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
drawable--;
|
||||
if (drawable == 0) break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -494,19 +628,34 @@ struct FramerateWindow : Window {
|
||||
case WID_FRW_TIMES_CURRENT:
|
||||
case WID_FRW_TIMES_AVERAGE: {
|
||||
/* Open time graph windows when clicking detail measurement lines */
|
||||
int line = this->GetRowFromWidget(pt.y, widget, VSPACING, FONT_HEIGHT_NORMAL);
|
||||
if (line > 0) {
|
||||
line -= 1;
|
||||
ShowFrametimeGraphWindow((PerformanceElement)line);
|
||||
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
|
||||
int line = sb->GetScrolledRowFromWidget(pt.y - FONT_HEIGHT_NORMAL - VSPACING, this, widget, VSPACING, FONT_HEIGHT_NORMAL);
|
||||
if (line != INT_MAX) {
|
||||
line++;
|
||||
/* Find the visible line that was clicked */
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid > 0) line--;
|
||||
if (line == 0) {
|
||||
ShowFrametimeGraphWindow(e);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnResize()
|
||||
{
|
||||
auto *wid = this->GetWidget<NWidgetResizeBase>(WID_FRW_TIMES_NAMES);
|
||||
this->num_displayed = (wid->current_y - wid->min_y - VSPACING) / FONT_HEIGHT_NORMAL - 1; // subtract 1 for headings
|
||||
this->GetScrollbar(WID_FRW_SCROLLBAR)->SetCapacity(this->num_displayed);
|
||||
}
|
||||
};
|
||||
|
||||
static WindowDesc _framerate_display_desc(
|
||||
WDP_AUTO, "framerate_display", 60, 40,
|
||||
WDP_AUTO, "framerate_display", 0, 0,
|
||||
WC_FRAMERATE_DISPLAY, WC_NONE,
|
||||
0,
|
||||
_framerate_window_widgets, lengthof(_framerate_window_widgets)
|
||||
@@ -549,7 +698,13 @@ struct FrametimeGraphWindow : Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_FGW_CAPTION:
|
||||
SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element);
|
||||
if (this->element < PFE_AI0) {
|
||||
SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element);
|
||||
} else {
|
||||
SetDParam(0, STR_FRAMETIME_CAPTION_AI);
|
||||
SetDParam(1, this->element - PFE_AI0 + 1);
|
||||
SetDParamStr(2, GetAIName(this->element - PFE_AI0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -829,7 +984,10 @@ void ConPrintFramerate()
|
||||
" Viewport drawing",
|
||||
"Video output",
|
||||
"Sound mixing",
|
||||
"AI/GS scripts total",
|
||||
"Game script",
|
||||
};
|
||||
char ai_name_buf[128];
|
||||
|
||||
static const PerformanceElement rate_elements[] = { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO };
|
||||
|
||||
@@ -848,8 +1006,15 @@ void ConPrintFramerate()
|
||||
for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) {
|
||||
auto &pf = _pf_data[e];
|
||||
if (pf.num_valid == 0) continue;
|
||||
const char *name;
|
||||
if (e < PFE_AI0) {
|
||||
name = MEASUREMENT_NAMES[e];
|
||||
} else {
|
||||
seprintf(ai_name_buf, lastof(ai_name_buf), "AI %d %s", e - PFE_AI0 + 1, GetAIName(e - PFE_AI0)),
|
||||
name = ai_name_buf;
|
||||
}
|
||||
IConsolePrintF(TC_LIGHT_BLUE, "%s times: %.2fms %.2fms %.2fms",
|
||||
MEASUREMENT_NAMES[e],
|
||||
name,
|
||||
pf.GetAverageDurationMilliseconds(count1),
|
||||
pf.GetAverageDurationMilliseconds(count2),
|
||||
pf.GetAverageDurationMilliseconds(count3));
|
||||
|
||||
@@ -60,6 +60,23 @@ enum PerformanceElement {
|
||||
PFE_DRAWWORLD, ///< Time spent drawing world viewports in GUI
|
||||
PFE_VIDEO, ///< Speed of painting drawn video buffer.
|
||||
PFE_SOUND, ///< Speed of mixing audio samples
|
||||
PFE_ALLSCRIPTS, ///< Sum of all GS/AI scripts
|
||||
PFE_GAMESCRIPT, ///< Game script execution
|
||||
PFE_AI0, ///< AI execution for player slot 1
|
||||
PFE_AI1, ///< AI execution for player slot 2
|
||||
PFE_AI2, ///< AI execution for player slot 3
|
||||
PFE_AI3, ///< AI execution for player slot 4
|
||||
PFE_AI4, ///< AI execution for player slot 5
|
||||
PFE_AI5, ///< AI execution for player slot 6
|
||||
PFE_AI6, ///< AI execution for player slot 7
|
||||
PFE_AI7, ///< AI execution for player slot 8
|
||||
PFE_AI8, ///< AI execution for player slot 9
|
||||
PFE_AI9, ///< AI execution for player slot 10
|
||||
PFE_AI10, ///< AI execution for player slot 11
|
||||
PFE_AI11, ///< AI execution for player slot 12
|
||||
PFE_AI12, ///< AI execution for player slot 13
|
||||
PFE_AI13, ///< AI execution for player slot 14
|
||||
PFE_AI14, ///< AI execution for player slot 15
|
||||
PFE_MAX, ///< End of enum, must be last.
|
||||
};
|
||||
DECLARE_POSTFIX_INCREMENT(PerformanceElement)
|
||||
@@ -81,6 +98,7 @@ public:
|
||||
PerformanceMeasurer(PerformanceElement elem);
|
||||
~PerformanceMeasurer();
|
||||
void SetExpectedRate(double rate);
|
||||
static void SetInactive(PerformanceElement elem);
|
||||
static void Paused(PerformanceElement elem);
|
||||
};
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "../company_func.h"
|
||||
#include "../network/network.h"
|
||||
#include "../window_func.h"
|
||||
#include "../framerate_type.h"
|
||||
#include "game.hpp"
|
||||
#include "game_scanner.hpp"
|
||||
#include "game_config.hpp"
|
||||
@@ -31,8 +32,16 @@
|
||||
|
||||
/* static */ void Game::GameLoop()
|
||||
{
|
||||
if (_networking && !_network_server) return;
|
||||
if (Game::instance == NULL) return;
|
||||
if (_networking && !_network_server) {
|
||||
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
|
||||
return;
|
||||
}
|
||||
if (Game::instance == NULL) {
|
||||
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
|
||||
return;
|
||||
}
|
||||
|
||||
PerformanceMeasurer framerate(PFE_GAMESCRIPT);
|
||||
|
||||
Game::frame_counter++;
|
||||
|
||||
|
||||
@@ -255,11 +255,13 @@ void GameInstance::Died()
|
||||
* @param tile The tile on which the command was executed.
|
||||
* @param p1 p1 as given to DoCommandPInternal.
|
||||
* @param p2 p2 as given to DoCommandPInternal.
|
||||
* @param cmd cmd as given to DoCommandPInternal.
|
||||
*/
|
||||
void CcGame(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcGame(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
Game::GetGameInstance()->DoCommandCallback(result, tile, p1, p2);
|
||||
Game::GetGameInstance()->Continue();
|
||||
if (Game::GetGameInstance()->DoCommandCallback(result, tile, p1, p2, cmd)) {
|
||||
Game::GetGameInstance()->Continue();
|
||||
}
|
||||
}
|
||||
|
||||
CommandCallback *GameInstance::GetDoCommandCallback()
|
||||
|
||||
@@ -308,7 +308,7 @@ GameStrings *LoadTranslations()
|
||||
/** Compile the language. */
|
||||
void GameStrings::Compile()
|
||||
{
|
||||
StringData data(1);
|
||||
StringData data(32);
|
||||
StringListReader master_reader(data, this->raw_strings[0], true, false);
|
||||
master_reader.ParseFile();
|
||||
if (_errors != 0) throw std::exception();
|
||||
|
||||
@@ -58,6 +58,7 @@ static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode,
|
||||
static ReusableBuffer<uint8> _cursor_backup;
|
||||
|
||||
ZoomLevelByte _gui_zoom; ///< GUI Zoom level
|
||||
ZoomLevelByte _font_zoom; ///< Font Zoom level
|
||||
|
||||
/**
|
||||
* The rect for repaint.
|
||||
@@ -1130,13 +1131,14 @@ TextColour GetContrastColour(uint8 background, uint8 threshold)
|
||||
*/
|
||||
void LoadStringWidthTable(bool monospace)
|
||||
{
|
||||
ClearFontCache();
|
||||
|
||||
for (FontSize fs = monospace ? FS_MONO : FS_BEGIN; fs < (monospace ? FS_END : FS_MONO); fs++) {
|
||||
for (uint i = 0; i != 224; i++) {
|
||||
_stringwidth_table[fs][i] = GetGlyphWidth(fs, i + 32);
|
||||
}
|
||||
}
|
||||
|
||||
ClearFontCache();
|
||||
ReInitAllWindows();
|
||||
}
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ public:
|
||||
LEErrorCode status = LE_NO_ERROR;
|
||||
/* ParagraphLayout does not copy "buff", so it must stay valid.
|
||||
* "runs" is copied according to the ICU source, but the documentation does not specify anything, so this might break somewhen. */
|
||||
icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR, false, status);
|
||||
icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? 1 : 0, false, status);
|
||||
if (status != LE_NO_ERROR) {
|
||||
delete p;
|
||||
return NULL;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <stack>
|
||||
#include <vector>
|
||||
|
||||
#ifdef WITH_ICU_LAYOUT
|
||||
#include "layout/ParagraphLayout.h"
|
||||
@@ -35,7 +36,7 @@ struct FontState {
|
||||
FontSize fontsize; ///< Current font size.
|
||||
TextColour cur_colour; ///< Current text colour.
|
||||
|
||||
std::stack<TextColour> colour_stack; ///< Stack of colours to assist with colour switching.
|
||||
std::stack<TextColour, std::vector<TextColour>> colour_stack; ///< Stack of colours to assist with colour switching.
|
||||
|
||||
FontState() : fontsize(FS_END), cur_colour(TC_INVALID) {}
|
||||
FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour) {}
|
||||
|
||||
27
src/goal.cpp
27
src/goal.cpp
@@ -236,10 +236,11 @@ CommandCost CmdSetGoalCompleted(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
* @param flags type of operation
|
||||
* @param p1 various bitstuffed elements
|
||||
* - p1 = (bit 0 - 15) - Unique ID to use for this question.
|
||||
* - p1 = (bit 16 - 23) - Company or client for which this question is.
|
||||
* - p1 = (bit 24 - 25) - Question type.
|
||||
* - p1 = (bit 31) - Question target: 0 - company, 1 - client.
|
||||
* @param p2 Buttons of the question.
|
||||
* - p1 = (bit 16 - 31) - Company or client for which this question is.
|
||||
* @param p2 various bitstuffed elements
|
||||
* - p2 = (bit 0 - 17) - Buttons of the question.
|
||||
* - p2 = (bit 29 - 30) - Question type.
|
||||
* - p2 = (bit 31) - Question target: 0 - company, 1 - client.
|
||||
* @param text Text of the question.
|
||||
* @return the cost of this operation or an error
|
||||
*/
|
||||
@@ -248,36 +249,38 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||
uint16 uniqueid = (GoalType)GB(p1, 0, 16);
|
||||
CompanyID company = (CompanyID)GB(p1, 16, 8);
|
||||
#ifdef ENABLE_NETWORK
|
||||
ClientIndex client = (ClientIndex)GB(p1, 16, 8);
|
||||
ClientID client = (ClientID)GB(p1, 16, 16);
|
||||
#endif
|
||||
byte type = GB(p1, 24, 2);
|
||||
bool is_client = HasBit(p1, 31);
|
||||
|
||||
assert_compile(GOAL_QUESTION_BUTTON_COUNT < 29);
|
||||
uint32 button_mask = GB(p2, 0, GOAL_QUESTION_BUTTON_COUNT);
|
||||
byte type = GB(p2, 29, 2);
|
||||
bool is_client = HasBit(p2, 31);
|
||||
|
||||
if (_current_company != OWNER_DEITY) return CMD_ERROR;
|
||||
if (StrEmpty(text)) return CMD_ERROR;
|
||||
if (is_client) {
|
||||
#ifdef ENABLE_NETWORK
|
||||
if (!NetworkClientInfo::IsValidID(client)) return CMD_ERROR;
|
||||
if (NetworkClientInfo::GetByClientID(client) == nullptr) return CMD_ERROR;
|
||||
#else
|
||||
return CMD_ERROR;
|
||||
#endif
|
||||
} else {
|
||||
if (company != INVALID_COMPANY && !Company::IsValidID(company)) return CMD_ERROR;
|
||||
}
|
||||
if (CountBits(p2) < 1 || CountBits(p2) > 3) return CMD_ERROR;
|
||||
if (p2 >= (1 << GOAL_QUESTION_BUTTON_COUNT)) return CMD_ERROR;
|
||||
if (CountBits(button_mask) < 1 || CountBits(button_mask) > 3) return CMD_ERROR;
|
||||
if (type >= GOAL_QUESTION_TYPE_COUNT) return CMD_ERROR;
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
if (is_client) {
|
||||
#ifdef ENABLE_NETWORK
|
||||
if (NetworkClientInfo::Get(client)->client_id != _network_own_client_id) return CommandCost();
|
||||
if (client != _network_own_client_id) return CommandCost();
|
||||
#endif
|
||||
} else {
|
||||
if (company == INVALID_COMPANY && !Company::IsValidID(_local_company)) return CommandCost();
|
||||
if (company != INVALID_COMPANY && company != _local_company) return CommandCost();
|
||||
}
|
||||
ShowGoalQuestion(uniqueid, type, p2, text);
|
||||
ShowGoalQuestion(uniqueid, type, button_mask, text);
|
||||
}
|
||||
|
||||
return CommandCost();
|
||||
|
||||
@@ -869,35 +869,26 @@ void ShowCompanyValueGraph()
|
||||
/*****************/
|
||||
|
||||
struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
bool first_init; ///< This value is true until the first initialization of the window has finished.
|
||||
uint line_height; ///< Pixel height of each cargo type row.
|
||||
Scrollbar *vscroll; ///< Cargo list scrollbar.
|
||||
|
||||
PaymentRatesGraphWindow(WindowDesc *desc, WindowNumber window_number) :
|
||||
BaseGraphWindow(desc, WID_CPR_GRAPH, STR_JUST_CURRENCY_SHORT)
|
||||
{
|
||||
this->first_init = true;
|
||||
this->num_on_x_axis = 20;
|
||||
this->num_vert_lines = 20;
|
||||
this->month = 0xFF;
|
||||
this->x_values_start = 10;
|
||||
this->x_values_increment = 10;
|
||||
|
||||
this->CreateNestedTree();
|
||||
this->vscroll = this->GetScrollbar(WID_CPR_MATRIX_SCROLLBAR);
|
||||
this->vscroll->SetCount(_sorted_standard_cargo_specs_size);
|
||||
|
||||
/* Initialise the dataset */
|
||||
this->OnHundredthTick();
|
||||
|
||||
this->InitNested(window_number);
|
||||
|
||||
this->UpdateLoweredWidgets();
|
||||
}
|
||||
|
||||
virtual void OnInit()
|
||||
{
|
||||
/* UpdateLoweredWidgets needs to be called after a language or NewGRF change, but it can't be called before
|
||||
* InitNested is done. On the first init these functions are called in the correct order by the constructor. */
|
||||
if (!this->first_init) {
|
||||
/* Initialise the dataset */
|
||||
this->OnHundredthTick();
|
||||
this->UpdateLoweredWidgets();
|
||||
}
|
||||
this->first_init = false;
|
||||
this->FinishInitNested(window_number);
|
||||
}
|
||||
|
||||
void UpdateExcludedData()
|
||||
@@ -912,53 +903,64 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateLoweredWidgets()
|
||||
{
|
||||
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
this->SetWidgetLoweredState(WID_CPR_CARGO_FIRST + i, !HasBit(this->excluded_data, i));
|
||||
}
|
||||
}
|
||||
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
if (widget < WID_CPR_CARGO_FIRST) {
|
||||
if (widget != WID_CPR_MATRIX) {
|
||||
BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize);
|
||||
return;
|
||||
}
|
||||
|
||||
const CargoSpec *cs = _sorted_cargo_specs[widget - WID_CPR_CARGO_FIRST];
|
||||
SetDParam(0, cs->name);
|
||||
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
d.width += 14; // colour field
|
||||
d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
*size = maxdim(d, *size);
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
SetDParam(0, cs->name);
|
||||
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
d.width += 14; // colour field
|
||||
d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
*size = maxdim(d, *size);
|
||||
}
|
||||
|
||||
this->line_height = size->height;
|
||||
size->height = this->line_height * 11; /* Default number of cargo types in most climates. */
|
||||
resize->width = 0;
|
||||
resize->height = this->line_height;
|
||||
}
|
||||
|
||||
virtual void DrawWidget(const Rect &r, int widget) const
|
||||
{
|
||||
if (widget < WID_CPR_CARGO_FIRST) {
|
||||
if (widget != WID_CPR_MATRIX) {
|
||||
BaseGraphWindow::DrawWidget(r, widget);
|
||||
return;
|
||||
}
|
||||
|
||||
const CargoSpec *cs = _sorted_cargo_specs[widget - WID_CPR_CARGO_FIRST];
|
||||
bool rtl = _current_text_dir == TD_RTL;
|
||||
|
||||
/* Since the buttons have no text, no images,
|
||||
* both the text and the coloured box have to be manually painted.
|
||||
* clk_dif will move one pixel down and one pixel to the right
|
||||
* when the button is clicked */
|
||||
byte clk_dif = this->IsWidgetLowered(widget) ? 1 : 0;
|
||||
int x = r.left + WD_FRAMERECT_LEFT;
|
||||
int y = r.top;
|
||||
|
||||
int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT);
|
||||
int pos = this->vscroll->GetPosition();
|
||||
int max = pos + this->vscroll->GetCapacity();
|
||||
|
||||
GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK);
|
||||
GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour);
|
||||
SetDParam(0, cs->name);
|
||||
DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
if (pos-- > 0) continue;
|
||||
if (--max < 0) break;
|
||||
|
||||
bool lowered = !HasBit(_legend_excluded_cargo, cs->Index());
|
||||
|
||||
/* Redraw box if lowered */
|
||||
if (lowered) DrawFrameRect(r.left, y, r.right, y + this->line_height - 1, COLOUR_ORANGE, lowered ? FR_LOWERED : FR_NONE);
|
||||
|
||||
byte clk_dif = lowered ? 1 : 0;
|
||||
int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT);
|
||||
|
||||
GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK);
|
||||
GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour);
|
||||
SetDParam(0, cs->name);
|
||||
DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
|
||||
y += this->line_height;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnClick(Point pt, int widget, int click_count)
|
||||
@@ -968,7 +970,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
/* Remove all cargoes from the excluded lists. */
|
||||
_legend_excluded_cargo = 0;
|
||||
this->excluded_data = 0;
|
||||
this->UpdateLoweredWidgets();
|
||||
this->SetDirty();
|
||||
break;
|
||||
|
||||
@@ -981,23 +982,33 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
SetBit(this->excluded_data, i);
|
||||
i++;
|
||||
}
|
||||
this->UpdateLoweredWidgets();
|
||||
this->SetDirty();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
if (widget >= WID_CPR_CARGO_FIRST) {
|
||||
int i = widget - WID_CPR_CARGO_FIRST;
|
||||
ToggleBit(_legend_excluded_cargo, _sorted_cargo_specs[i]->Index());
|
||||
this->ToggleWidgetLoweredState(widget);
|
||||
case WID_CPR_MATRIX: {
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX, 0, this->line_height);
|
||||
if (row >= this->vscroll->GetCount()) return;
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
if (row-- > 0) continue;
|
||||
|
||||
ToggleBit(_legend_excluded_cargo, cs->Index());
|
||||
this->UpdateExcludedData();
|
||||
this->SetDirty();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnResize()
|
||||
{
|
||||
this->vscroll->SetCapacityFromWidget(this, WID_CPR_MATRIX);
|
||||
}
|
||||
|
||||
virtual void OnGameTick()
|
||||
{
|
||||
/* Override default OnGameTick */
|
||||
@@ -1031,23 +1042,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
}
|
||||
};
|
||||
|
||||
/** Construct the row containing the digit keys. */
|
||||
static NWidgetBase *MakeCargoButtons(int *biggest_index)
|
||||
{
|
||||
NWidgetVertical *ver = new NWidgetVertical;
|
||||
|
||||
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
NWidgetBackground *leaf = new NWidgetBackground(WWT_PANEL, COLOUR_ORANGE, WID_CPR_CARGO_FIRST + i, NULL);
|
||||
leaf->tool_tip = STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO;
|
||||
leaf->SetFill(1, 0);
|
||||
leaf->SetLowered(true);
|
||||
ver->Add(leaf);
|
||||
}
|
||||
*biggest_index = WID_CPR_CARGO_FIRST + _sorted_standard_cargo_specs_size - 1;
|
||||
return ver;
|
||||
}
|
||||
|
||||
|
||||
static const NWidgetPart _nested_cargo_payment_rates_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
|
||||
@@ -1065,12 +1059,15 @@ static const NWidgetPart _nested_cargo_payment_rates_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CPR_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 0), SetResize(0, 1),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidgetFunction(MakeCargoButtons),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1), SetResize(0, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_ORANGE, WID_CPR_MATRIX), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_ORANGE, WID_CPR_MATRIX_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1),
|
||||
EndContainer(),
|
||||
|
||||
@@ -311,7 +311,7 @@ Group::~Group()
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 vehicle type
|
||||
* @param p2 unused
|
||||
* @param p2 parent groupid
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
*/
|
||||
@@ -322,15 +322,27 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
|
||||
if (!Group::CanAllocateItem()) return CMD_ERROR;
|
||||
|
||||
const Group *pg = Group::GetIfValid(GB(p2, 0, 16));
|
||||
if (pg != NULL) {
|
||||
if (pg->owner != _current_company) return CMD_ERROR;
|
||||
if (pg->vehicle_type != vt) return CMD_ERROR;
|
||||
}
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
Group *g = new Group(_current_company);
|
||||
g->replace_protection = false;
|
||||
g->vehicle_type = vt;
|
||||
g->parent = INVALID_GROUP;
|
||||
|
||||
const Company *c = Company::Get(_current_company);
|
||||
g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
|
||||
g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
|
||||
if (pg == NULL) {
|
||||
const Company *c = Company::Get(_current_company);
|
||||
g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
|
||||
g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
|
||||
} else {
|
||||
g->parent = pg->index;
|
||||
g->livery.colour1 = pg->livery.colour1;
|
||||
g->livery.colour2 = pg->livery.colour2;
|
||||
}
|
||||
|
||||
_new_group_id = g->index;
|
||||
|
||||
@@ -396,17 +408,6 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
return CommandCost();
|
||||
}
|
||||
|
||||
static bool IsUniqueGroupNameForVehicleType(const char *name, VehicleType type)
|
||||
{
|
||||
const Group *g;
|
||||
|
||||
FOR_ALL_GROUPS(g) {
|
||||
if (g->name != NULL && g->vehicle_type == type && strcmp(g->name, name) == 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alter a group
|
||||
* @param tile unused
|
||||
@@ -430,7 +431,6 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
|
||||
if (!reset) {
|
||||
if (Utf8StringLength(text) >= MAX_LENGTH_GROUP_NAME_CHARS) return CMD_ERROR;
|
||||
if (!IsUniqueGroupNameForVehicleType(text, g->vehicle_type)) return_cmd_error(STR_ERROR_NAME_MUST_BE_UNIQUE);
|
||||
}
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
@@ -536,7 +536,7 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||
|
||||
if (new_g == NEW_GROUP) {
|
||||
/* Create new group. */
|
||||
CommandCost ret = CmdCreateGroup(0, flags, v->type, 0, NULL);
|
||||
CommandCost ret = CmdCreateGroup(0, flags, v->type, INVALID_GROUP, NULL);
|
||||
if (ret.Failed()) return ret;
|
||||
|
||||
new_g = _new_group_id;
|
||||
|
||||
@@ -687,7 +687,7 @@ public:
|
||||
}
|
||||
|
||||
case WID_GL_CREATE_GROUP: { // Create a new group
|
||||
DoCommandP(0, this->vli.vtype, 0, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup);
|
||||
DoCommandP(0, this->vli.vtype, this->vli.index, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -989,9 +989,10 @@ static inline VehicleGroupWindow *FindVehicleGroupWindow(VehicleType vt, Owner o
|
||||
* @param tile Unused.
|
||||
* @param p1 Vehicle type.
|
||||
* @param p2 Unused.
|
||||
* @param cmd Unused.
|
||||
* @see CmdCreateGroup
|
||||
*/
|
||||
void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Failed()) return;
|
||||
assert(p1 <= VEH_AIRCRAFT);
|
||||
@@ -1006,13 +1007,14 @@ void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32
|
||||
* @param tile Unused.
|
||||
* @param p1 Unused.
|
||||
* @param p2 Bit 0-19: Vehicle ID.
|
||||
* @param cmd Unused.
|
||||
*/
|
||||
void CcAddVehicleNewGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcAddVehicleNewGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Failed()) return;
|
||||
assert(Vehicle::IsValidID(GB(p2, 0, 20)));
|
||||
|
||||
CcCreateGroup(result, 0, Vehicle::Get(GB(p2, 0, 20))->type, 0);
|
||||
CcCreateGroup(result, 0, Vehicle::Get(GB(p2, 0, 20))->type, 0, cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "company_base.h"
|
||||
#include "strings_func.h"
|
||||
#include "hotkeys.h"
|
||||
#include "zoom_func.h"
|
||||
|
||||
#include "widgets/highscore_widget.h"
|
||||
|
||||
@@ -132,7 +133,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
|
||||
virtual void OnPaint()
|
||||
{
|
||||
this->SetupHighScoreEndWindow();
|
||||
Point pt = this->GetTopLeft(640, 480);
|
||||
Point pt = this->GetTopLeft(ScaleGUITrad(640), ScaleGUITrad(480));
|
||||
|
||||
const Company *c = Company::GetIfValid(_local_company);
|
||||
if (c == NULL) return;
|
||||
@@ -143,11 +144,11 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
|
||||
SetDParam(0, c->index);
|
||||
SetDParam(1, c->index);
|
||||
SetDParam(2, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history));
|
||||
DrawStringMultiLine(pt.x + 15, pt.x + 640 - 25, pt.y + 90, pt.y + 160, STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
|
||||
DrawStringMultiLine(pt.x + ScaleGUITrad(15), pt.x + ScaleGUITrad(640) - ScaleGUITrad(25), pt.y + ScaleGUITrad(90), pt.y + ScaleGUITrad(160), STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
|
||||
} else {
|
||||
SetDParam(0, c->index);
|
||||
SetDParam(1, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history));
|
||||
DrawStringMultiLine(pt.x + 36, pt.x + 640, pt.y + 140, pt.y + 206, STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
|
||||
DrawStringMultiLine(pt.x + ScaleGUITrad(36), pt.x + ScaleGUITrad(640), pt.y + ScaleGUITrad(140), pt.y + ScaleGUITrad(206), STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -182,24 +183,24 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow {
|
||||
const HighScore *hs = _highscore_table[this->window_number];
|
||||
|
||||
this->SetupHighScoreEndWindow();
|
||||
Point pt = this->GetTopLeft(640, 480);
|
||||
Point pt = this->GetTopLeft(ScaleGUITrad(640), ScaleGUITrad(480));
|
||||
|
||||
SetDParam(0, ORIGINAL_END_YEAR);
|
||||
DrawStringMultiLine(pt.x + 70, pt.x + 570, pt.y, pt.y + 140, !_networking ? STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED : STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME, TC_FROMSTRING, SA_CENTER);
|
||||
DrawStringMultiLine(pt.x + ScaleGUITrad(70), pt.x + ScaleGUITrad(570), pt.y, pt.y + ScaleGUITrad(140), !_networking ? STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED : STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME, TC_FROMSTRING, SA_CENTER);
|
||||
|
||||
/* Draw Highscore peepz */
|
||||
for (uint8 i = 0; i < lengthof(_highscore_table[0]); i++) {
|
||||
SetDParam(0, i + 1);
|
||||
DrawString(pt.x + 40, pt.x + 600, pt.y + 140 + (i * 55), STR_HIGHSCORE_POSITION);
|
||||
DrawString(pt.x + ScaleGUITrad(40), pt.x + ScaleGUITrad(600), pt.y + ScaleGUITrad(140 + i * 55), STR_HIGHSCORE_POSITION);
|
||||
|
||||
if (hs[i].company[0] != '\0') {
|
||||
TextColour colour = (this->rank == i) ? TC_RED : TC_BLACK; // draw new highscore in red
|
||||
|
||||
SetDParamStr(0, hs[i].company);
|
||||
DrawString(pt.x + 71, pt.x + 569, pt.y + 140 + (i * 55), STR_JUST_BIG_RAW_STRING, colour);
|
||||
DrawString(pt.x + ScaleGUITrad(71), pt.x + ScaleGUITrad(569), pt.y + ScaleGUITrad(140 + i * 55), STR_JUST_BIG_RAW_STRING, colour);
|
||||
SetDParam(0, hs[i].title);
|
||||
SetDParam(1, hs[i].score);
|
||||
DrawString(pt.x + 71, pt.x + 569, pt.y + 140 + FONT_HEIGHT_LARGE + (i * 55), STR_HIGHSCORE_STATS, colour);
|
||||
DrawString(pt.x + ScaleGUITrad(71), pt.x + ScaleGUITrad(569), pt.y + ScaleGUITrad(140) + FONT_HEIGHT_LARGE + ScaleGUITrad(i * 55), STR_HIGHSCORE_STATS, colour);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1719,8 +1719,16 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
|
||||
}
|
||||
|
||||
if (_generating_world) {
|
||||
if (HasBit(indspec->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) {
|
||||
IndustryProductionCallback(i, 1);
|
||||
for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) {
|
||||
i->last_month_production[ci] = i->produced_cargo_waiting[ci] * 8;
|
||||
i->produced_cargo_waiting[ci] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) {
|
||||
i->last_month_production[ci] = i->production_rate[ci] * 8;
|
||||
i->last_month_production[ci] += i->production_rate[ci] * 8;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -222,8 +222,9 @@ void SortIndustryTypes()
|
||||
* @param tile Tile where the industry is placed.
|
||||
* @param p1 Additional data of the #CMD_BUILD_INDUSTRY command.
|
||||
* @param p2 Additional data of the #CMD_BUILD_INDUSTRY command.
|
||||
* @param cmd Unused.
|
||||
*/
|
||||
void CcBuildIndustry(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
void CcBuildIndustry(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
|
||||
{
|
||||
if (result.Succeeded()) return;
|
||||
|
||||
@@ -2753,12 +2754,12 @@ struct IndustryCargoesWindow : public Window {
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnHover(Point pt, int widget)
|
||||
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond)
|
||||
{
|
||||
if (widget != WID_IC_PANEL) return;
|
||||
if (widget != WID_IC_PANEL) return false;
|
||||
|
||||
Point fieldxy, xy;
|
||||
if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return;
|
||||
if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return false;
|
||||
|
||||
const CargoesField *fld = this->fields[fieldxy.y].columns + fieldxy.x;
|
||||
CargoID cid = INVALID_CARGO;
|
||||
@@ -2777,9 +2778,9 @@ struct IndustryCargoesWindow : public Window {
|
||||
|
||||
case CFT_INDUSTRY:
|
||||
if (fld->u.industry.ind_type < NUM_INDUSTRYTYPES && (this->ind_cargo >= NUM_INDUSTRYTYPES || fieldxy.x != 2)) {
|
||||
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, TCC_HOVER);
|
||||
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, close_cond);
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -2788,8 +2789,11 @@ struct IndustryCargoesWindow : public Window {
|
||||
const CargoSpec *csp = CargoSpec::Get(cid);
|
||||
uint64 params[5];
|
||||
params[0] = csp->name;
|
||||
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, TCC_HOVER);
|
||||
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, close_cond);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void OnResize()
|
||||
|
||||
@@ -1063,6 +1063,9 @@ static bool MakeLake(TileIndex tile, void *user_data)
|
||||
TileIndex t2 = tile + TileOffsByDiagDir(d);
|
||||
if (IsWaterTile(t2)) {
|
||||
MakeRiver(tile, Random());
|
||||
/* Remove desert directly around the river tile. */
|
||||
TileIndex t = tile;
|
||||
CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1134,7 +1137,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
|
||||
if (!IsWaterTile(tile)) {
|
||||
MakeRiver(tile, Random());
|
||||
/* Remove desert directly around the river tile. */
|
||||
CircularTileSearch(&tile, 5, RiverModifyDesertZone, NULL);
|
||||
CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1245,6 +1248,9 @@ static bool FlowRiver(TileIndex spring, TileIndex begin)
|
||||
DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) {
|
||||
end = lakeCenter;
|
||||
MakeRiver(lakeCenter, Random());
|
||||
/* Remove desert directly around the river tile. */
|
||||
CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL);
|
||||
lakeCenter = end;
|
||||
uint range = RandomRange(8) + 3;
|
||||
CircularTileSearch(&lakeCenter, range, MakeLake, &height);
|
||||
/* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */
|
||||
|
||||
@@ -985,6 +985,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbel groote
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad grootte
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafikastel
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kies die basis-grafikastel stel om te gebruik
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} verlore / korrupte ler{P "" s}
|
||||
@@ -2062,9 +2064,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaff
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klient Lys
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Toeskou
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nuwe maatskapy
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Toeskou
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuwe maatskapy
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Skop
|
||||
@@ -2079,7 +2081,6 @@ STR_NETWORK_CLIENT :Klient
|
||||
STR_NETWORK_SPECTATORS :Aanskouers
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sleutel die bedrag geld in wat u wil gee
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Toeskouer
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Moenie die ingesleutelde wagwoord bewaar nie
|
||||
|
||||
@@ -282,7 +282,7 @@ STR_SORT_BY_TIMETABLE_DELAY :تاخير جد
|
||||
STR_SORT_BY_FACILITY :نوع المحطة
|
||||
STR_SORT_BY_RATING_MAX :اعلى نسبة شحن
|
||||
STR_SORT_BY_RATING_MIN :اقل نسبة شحن
|
||||
STR_SORT_BY_ENGINE_ID :نوع المحرك (قياسي(
|
||||
STR_SORT_BY_ENGINE_ID :نوع المحرك (قياسي)
|
||||
STR_SORT_BY_COST :التكلفة
|
||||
STR_SORT_BY_POWER :الطاقة
|
||||
STR_SORT_BY_TRACTIVE_EFFORT :قوة الجذب
|
||||
@@ -946,6 +946,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :تقريب عا
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :تقريب ×2
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :تقريب ×4
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK} الواجهة الرسومية الاساسية
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK} اختر مجموعة الواجهة الرسومية
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ملف مفقود او غير صالح
|
||||
@@ -1145,7 +1147,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :الكثافة
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :إختر مقدار الصناعات التي يجب تكوينها وعلى اي مستوى يجب ان تكون خلال اللعبة
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :ارتفاع خط الثلج: {STRING}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :تحكم على اي ارتفاع يبدأ نزول الثلج في المناطق القطبية,تؤثر الثلوج على مستوى تطور القطاع الصناعي ونمو المدن
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :خشونة التضاريس (صفر التكوين فقط ) :({STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :خشونة التضاريس: {STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only)إختر تكرار الهضبات: الاراض المستويه تحتوي على البضع منها,هضبات موزعه عرضيا اكثر,الاراض الوعرة تحتوي الكثير من الهضاب,التي من الممكن ان تكون متكررة
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :ناعم جدا
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :ناعم
|
||||
@@ -1726,9 +1728,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}الخا
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشركه محميه. من فضلك ادخل كلمه المرور
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}قائمة العملاء
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}شاهد
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}شركة جديدة
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :قائمة العملاء
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :شركة جديدة
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :اطرد
|
||||
@@ -1944,7 +1946,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :بناء الس
|
||||
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}بناء سكة حديد
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}بناء سكة القطار باستخدام البناء التلقائي
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}بناء ورشة قطارات (لصيانة و شراء القطارات).
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}بناء ورشة قطارات (لصيانة و شراء القطارات)
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}غير السكة الى نقطة عبور
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}بناء محطة قطار. مفتاح كنترول يسمح بضم المحطات
|
||||
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}بناء إشارات السكك الحديدية.
|
||||
@@ -2026,7 +2028,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}بناء
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}بناء الطرق باستخدام النظام الآلي
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}بناء سكة القطار باستخدام النظام الآلي
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}بناء ورشة صيانة لعربات الطرق (لشراء و صيانة العربات).
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}بناء ورشة لصيانة عربات الترام (لشراء و صيانة عربات الترام).
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}بناء ورشة لصيانة عربات الترام (لشراء و صيانة عربات الترام)
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}بناء محطة باصات
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}بناء محطة ركاب ترام.
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}بناء محطة تحميل عربات. مفتاح كنترول يسمح بمجاورة المحطات.
|
||||
@@ -2588,7 +2590,8 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}ادخل
|
||||
# Town directory window
|
||||
STR_TOWN_DIRECTORY_CAPTION :{WHITE}مدن/ بلدات
|
||||
STR_TOWN_DIRECTORY_NONE :{ORANGE}-بدون-
|
||||
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ) {COMMA})
|
||||
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{RLE}{TOWN}{BLACK} {RLM}({COMMA})
|
||||
STR_TOWN_DIRECTORY_CITY :{ORANGE}{RLE}{TOWN}{YELLOW} (مدينة){BLACK} {RLM}({COMMA})
|
||||
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}اسم المدينة - اضغط على الاسم لتوسيط الشاشة عليها. اضغط + كنترول لفتح شاشة عرض جديدة للضاحية.
|
||||
STR_TOWN_POPULATION :{BLACK}سكان العالم: {COMMA}
|
||||
|
||||
@@ -2676,7 +2679,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO
|
||||
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
|
||||
STR_STATION_LIST_NONE :{YELLOW}- بدون -
|
||||
STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}اختر جميع المرافق
|
||||
STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}اختر كل انواع الشحن (حتى غير المنتظرة(
|
||||
STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}اختر كل انواع الشحن (حتى غير المنتظرة)
|
||||
STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}لا يوجد اي شحنة منتظرة
|
||||
|
||||
# Station view window
|
||||
@@ -2895,7 +2898,7 @@ STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}السر
|
||||
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}السرعة في القناة/النهر: {GOLD}{VELOCITY}
|
||||
STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}تكلفة التشغيل: {GOLD}{CURRENCY_LONG}/ سنة
|
||||
STR_PURCHASE_INFO_CAPACITY :{BLACK}السعة: {GOLD}{CARGO_LONG} {STRING}
|
||||
STR_PURCHASE_INFO_REFITTABLE :)قابل لتغيير(
|
||||
STR_PURCHASE_INFO_REFITTABLE :(قابل لتغيي)
|
||||
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}تصميم: {GOLD}{NUM}{BLACK} العمر الافتراضي: {GOLD}{COMMA} سنة
|
||||
STR_PURCHASE_INFO_RELIABILITY :{BLACK}الاعتمادية القصوى: {GOLD}{COMMA}%
|
||||
STR_PURCHASE_INFO_COST :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}
|
||||
@@ -3191,7 +3194,7 @@ STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK} عرض
|
||||
STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}السعة: {LTBLUE}
|
||||
|
||||
# Vehicle refit
|
||||
STR_REFIT_CAPTION :{WHITE}{VEHICLE} )تغيير(
|
||||
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (تغيير)
|
||||
STR_REFIT_TITLE :{GOLD}اختر نوع الحمولة ...
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}{}{BLACK}تكلفة التغيير: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}تكلفة اعادة التهيئة: {RED}{CURRENCY_LONG}
|
||||
@@ -3413,7 +3416,7 @@ STR_TIMETABLE_RESET_LATENESS :{BLACK}اعد
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}عدل وقت التاخير للعداد حتى تصل المركبة في الوقت المحدد
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}تهيئة تلقائية
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}املأ الجدولة تلقائيا بقيم الرحلة التالية (مفتاح كنترول لمحاولة ابقائ وقت الانتظار).
|
||||
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}مفتاح كنترول لمحاولة ابقائ وقت الانتظار (املأ الجدولة تلقائيا بقيم الرحلة التالية)
|
||||
|
||||
STR_TIMETABLE_EXPECTED :{BLACK}متوقع
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}مجدول
|
||||
|
||||
@@ -972,6 +972,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Tamaina doblea
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaina laukoitza
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafiko basea markatu
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Aukeratu erabili beharreko grafiko paketea
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} galdutako/hautsitako artxiboa{P "" k}
|
||||
@@ -1970,9 +1972,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Zerbitza
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Konpainia babestua dago. Pasahitza sartu
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Bezero zerrenda
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Ikusle
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Konpainia berria
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Ikusle
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Konpainia berria
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Kanporatu
|
||||
@@ -1987,7 +1989,6 @@ STR_NETWORK_CLIENT :Bezeroa
|
||||
STR_NETWORK_SPECTATORS :Ikusleak
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Eman nahi duzun diru kantitatea ezarri
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Ikusle
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ez gorde sartutako pasahitza
|
||||
|
||||
@@ -1301,6 +1301,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Звычайн
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Падвоены
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Пачацвяроны
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Набор базавай ґрафікі
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Выбар базавага набору ґрафічных аб'ектаў
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} адсутнічаюч{P ы ых ых}/пашкоджан{P ы ых ых} файл{P "" ы аў}
|
||||
@@ -2387,9 +2389,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрв
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Сьпіс кліентаў
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Назіраць
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Новая кампанія
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кліентаў
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Назіраць
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая кампанія
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Выкінуць гульца
|
||||
@@ -2404,7 +2406,6 @@ STR_NETWORK_CLIENT :Кліент
|
||||
STR_NETWORK_SPECTATORS :Назіральнікі
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Увядзіце суму грошай, якую вы хочаце перадаць
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Назіральнік
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не захоўваць уведзены пароль
|
||||
@@ -4585,7 +4586,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... гэ
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... няправільны кірунак дарогі
|
||||
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... на прахадных прыпынках нельга рабіць павароты
|
||||
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... на прахадных прыпынках нельга рабіць скрыжаваньнi
|
||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... дарога аднабаковая ці заблакавана
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Немагчыма выдаліць частку станцыi...
|
||||
|
||||
@@ -992,6 +992,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arquivo{P "" s} faltando/corrompido{P "" s}
|
||||
@@ -2078,9 +2080,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Assistir
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova Companhia
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova Companhia
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Banir
|
||||
@@ -2095,7 +2097,6 @@ STR_NETWORK_CLIENT :Cliente
|
||||
STR_NETWORK_SPECTATORS :Espectadores
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entre a quantia a ser dada
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada
|
||||
@@ -4275,7 +4276,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... é u
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... rua na direção errada
|
||||
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... paradas "drive-thru" não podem ter esquinas
|
||||
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... paradas "drive-thru" não podem ter junções
|
||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... rua é mão única ou está bloqueada
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Impossível remover parte da estação...
|
||||
|
||||
@@ -191,6 +191,7 @@ STR_COLOUR_ORANGE :Оранжев
|
||||
STR_COLOUR_BROWN :Кафяво
|
||||
STR_COLOUR_GREY :Сиво
|
||||
STR_COLOUR_WHITE :Бяло
|
||||
STR_COLOUR_DEFAULT :По подразбиране
|
||||
|
||||
# Units used in OpenTTD
|
||||
STR_UNITS_VELOCITY_IMPERIAL :{COMMA} мил{P я и}/ч
|
||||
@@ -462,6 +463,7 @@ STR_TOOLBAR_SOUND_MUSIC :Звук/муз
|
||||
############ range for message menu starts
|
||||
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Последно съобщение/новини
|
||||
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :История на съобщенията
|
||||
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Изтрий всички съобщения
|
||||
############ range ends here
|
||||
|
||||
############ range for about menu starts
|
||||
@@ -473,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot
|
||||
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Напълно увеличен в кадъра.
|
||||
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Увеличение по подразбиране
|
||||
STR_ABOUT_MENU_GIANT_SCREENSHOT :Огромен Screenshot
|
||||
STR_ABOUT_MENU_SHOW_FRAMERATE :Показване на честотата на кадрите
|
||||
STR_ABOUT_MENU_ABOUT_OPENTTD :Относно 'OpenTTD'
|
||||
STR_ABOUT_MENU_SPRITE_ALIGNER :Подравнител на спрайтове
|
||||
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Активиране слепване на прозорците
|
||||
@@ -704,11 +707,13 @@ STR_SMALLMAP_TYPE_OWNERS :Собстве
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Покажи земните контури на картата
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Покажи превозните средства
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Покажи индустриите на картата
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Покажи на картата потока на товарите
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Покажи транспортните маршрути на картата
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Покажи растителността на картата
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Покажи собствениците на земя на картата
|
||||
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Натисни върху вид индустрия за превключване на показването.Click on an industry type to toggle displaying it. Ctrl деактивира всички освен избраната. Ctrl отново за активиране на всички
|
||||
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Натисни върху компания за показване/скриване на нейната собственост. Ctrl деактивира всички компании освен избраната. Ctrl отново за активиране на всички компании
|
||||
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Кликнете върху товара, за да превключите показването на неговите данни. Ctrl+Click изключва всички товари без текущо избрания. Направете отново Ctrl+Click въху него, за да включите отново всички товари
|
||||
|
||||
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Пътища
|
||||
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}ЖП
|
||||
@@ -976,6 +981,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Нормалн
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Двукратно
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Четирикратно
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базов графичен набор
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете базов графичен набор
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} липсващи/повредени файлове
|
||||
@@ -1105,6 +1112,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Игрови н
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Игрови настройки (съхраняват се в записаната игра; важат само за текущата игра)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Настройки за компанията (съхраняват се в записаната игра; важат само за нови игри)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Настройки за компанията (съхраняват се в записаната игра; важат само за текущата компания)
|
||||
STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Покажете всички резултати от търсенето като зададете{}{SILVER}Категория {BLACK}на {WHITE}{STRING} {BLACK}и {SILVER}Тип {BLACK}на {WHITE}Всички видове настройки
|
||||
STR_CONFIG_SETTINGS_NONE :{WHITE}- Нищо -
|
||||
|
||||
STR_CONFIG_SETTING_OFF :изключено
|
||||
@@ -1281,10 +1289,12 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Показва
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелина на линиите в графиките: {STRING}
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Дебелина на линиите в графиките. Тънките линии са по-лесни за разчитане, но по-дебелите се забелязват и разграничават по-лесно.
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Пейзаж: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Терен: {STRING}
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR :Генератор на земя: {STRING}
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :оригинален
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :тера-генезис
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(само за TerraGenesis) Хълмистост на терена
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Задайте колко индустрии да се генерират и какво ниво да се поддържа по време на играта
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Максимално разстояние от ръба за нефтените рафинерии: {STRING}
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Нефтените рафинерии се изграждат само близо до края на картата
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Снежната ивица: {STRING}
|
||||
@@ -1294,6 +1304,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :полегат
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :стръмен
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :много стръмен
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT :Количество на реките: {STRING}
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Изберете колко реки да се генерират
|
||||
STR_CONFIG_SETTING_TREE_PLACER :Алгоритъм за поставяне на дървета: {STRING}
|
||||
STR_CONFIG_SETTING_TREE_PLACER_NONE :без дървета
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :оригинален
|
||||
@@ -1581,6 +1592,11 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множител за големината на града: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на мегаполисите в сравнение с градовете в началото на играта
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME :Вземи {STRING}{NBSP}дни{P 0:2 "" s} за преизчисляване на графа за резпределение
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :ръчно
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :симетричен
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "ръчно" означава, че няма да има автоматично разпределение за пътниците.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Режим на разпределение на други класове товари: {STRING}
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE :Количество на връщания товар при симетричнен режим: {STRING}
|
||||
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Единици за скорост: {STRING}
|
||||
@@ -1626,6 +1642,7 @@ STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Осн
|
||||
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Строене
|
||||
STR_CONFIG_SETTING_VEHICLES :{ORANGE}Автомобили
|
||||
STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Маршрутизация
|
||||
STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Ограничения
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Права
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Градове
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Индустрии
|
||||
@@ -1906,6 +1923,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Пост
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна
|
||||
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Не
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Да
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. брой играчи:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят
|
||||
@@ -2009,9 +2027,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сърв
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанията е защитена. Въведете парола
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Списък с играчите
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Наблюдавай
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Нова фирма
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдавай
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова фирма
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Изгони
|
||||
@@ -2026,7 +2044,6 @@ STR_NETWORK_CLIENT :Клиент
|
||||
STR_NETWORK_SPECTATORS :Наблюдатели
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Въведете количеството пари, което искате да дадете
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Зрител
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Незапазвай паролата
|
||||
@@ -2629,9 +2646,21 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD
|
||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team
|
||||
|
||||
# Framerate display window
|
||||
STR_FRAMERATE_CAPTION :{WHITE}Скорост на кадрите
|
||||
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скороср на симулация: {STRING}
|
||||
STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущ коефициент за скорост на играта: {DECIMAL}x
|
||||
STR_FRAMERATE_CURRENT :{WHITE}Текущ
|
||||
STR_FRAMERATE_AVERAGE :{WHITE}Средно
|
||||
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадри/сек
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMERATE_GL_ECONOMY :Обработка на товари:
|
||||
STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Тактове на света:
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GAMELOOP :Цикъл на играта
|
||||
STR_FRAMETIME_CAPTION_DRAWING :Графична обработка
|
||||
STR_FRAMETIME_CAPTION_VIDEO :Видео изход
|
||||
STR_FRAMETIME_CAPTION_ALLSCRIPTS :Общо GS/AI скриптове
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
@@ -2781,6 +2810,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Изклю
|
||||
STR_NEWGRF_SETTINGS_INCOMPATIBLE :{G=n}{RED}Несъвместимо с тази версия на OpenTTD
|
||||
|
||||
# NewGRF save preset window
|
||||
STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Списък на наличните предварително зададени настройки. Изберете една, за да я откопирате в името за запис по-долу
|
||||
STR_SAVE_PRESET_TITLE :{BLACK}Въведи име за шаблона
|
||||
STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Текущо избраното име за именуване на шаблона
|
||||
STR_SAVE_PRESET_CANCEL :{BLACK}Отказ
|
||||
@@ -2878,6 +2908,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF '
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Информация за товар/преобразувания на '{1:ENGINE}' се различава от листа с покупките. Това може да доведе до грешка при подновяване/преустройване
|
||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' предизвика вечен цикъл в callback на производството
|
||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Подизпълнение {1:HEX} върна неизвестен/невалиден резултат {2:HEX}
|
||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' Върнат е невалиден тип товар в продуктивен callback на {2:HEX}
|
||||
|
||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||
STR_NEWGRF_INVALID_CARGO :<невалиден товар>
|
||||
@@ -2911,6 +2942,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Въве
|
||||
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Градове
|
||||
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Отсъства -
|
||||
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
|
||||
STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Град){BLACK} ({COMMA})
|
||||
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Имена на градовете - натисни на името за да фокусираш този град. Ctrl отваря нов изглед към града.
|
||||
STR_TOWN_POPULATION :{BLACK}Обща популация на картата: {COMMA}
|
||||
|
||||
@@ -3310,6 +3342,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Капа
|
||||
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Вагони с мощност: {GOLD}+{POWER}{BLACK} Тегло: {GOLD}+{WEIGHT_SHORT}
|
||||
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Преобразуваем на: {GOLD}{STRING}
|
||||
STR_PURCHASE_INFO_ALL_TYPES :Всички видове товар
|
||||
STR_PURCHASE_INFO_NONE :Нищо
|
||||
STR_PURCHASE_INFO_ALL_BUT :Всичко освен {CARGO_LIST}
|
||||
STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. теглеща сила: {GOLD}{FORCE}
|
||||
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Обхват: {GOLD}{COMMA} полета
|
||||
@@ -3625,7 +3658,7 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Капа
|
||||
# Vehicle refit
|
||||
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Преустройване)
|
||||
STR_REFIT_TITLE :{GOLD}Изберете вид товар за превозване:
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Цена за преустройство: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Цена за преустройсване: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Нов капцитет: {GOLD}{CARGO_LONG}{}{BLACK}Приход от преустройване: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Нова вместимост: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Цена за преоборудване: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Проход от преустройване: {GREEN}{CURRENCY_LONG}
|
||||
@@ -3811,9 +3844,12 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Разп
|
||||
STR_TIMETABLE_NO_TRAVEL :Без преминаване
|
||||
STR_TIMETABLE_NOT_TIMETABLEABLE :Пътувай (автоматично; включено в разписанието, чрез следващата ваша заповед)
|
||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Пътувай (без разписание)
|
||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Пътувай с не повече от {2:VELOCITY} (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_STAY_FOR_ESTIMATED :(престой за {STRING}, без разписание)
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(Пътувай към {STRING}, без разписание)
|
||||
STR_TIMETABLE_STAY_FOR :и остани за {STRING}
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR :и отпътувай към {STRING}
|
||||
STR_TIMETABLE_DAYS :{COMMA}{NBSP}ден{P "" а}
|
||||
@@ -3829,6 +3865,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Това
|
||||
STR_TIMETABLE_STATUS_START_AT :{BLACK}Това разписание ще започне на {STRING}
|
||||
|
||||
STR_TIMETABLE_STARTING_DATE :{BLACK}Дата на започване
|
||||
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK} Изберете начална дата на това разписание. Ctrl + Click задава началната дата и равномерно разпределя всички превозни средства, които споделят тази поръчка, на базата на тяхната относителна поръчка, ако поръчката е изцяло по разписание
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Промени времето
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Промени времетраенето на маркираната заповед
|
||||
@@ -4381,6 +4418,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Оригина
|
||||
STR_BASESOUNDS_WIN_DESCRIPTION :Оригинални звуци на Transport Tycoon Deluxe за Windows.
|
||||
STR_BASESOUNDS_NONE_DESCRIPTION :Празен звуков пакет.
|
||||
STR_BASEMUSIC_WIN_DESCRIPTION :Оригинална музика на Transport Tycoon Deluxe за Windows.
|
||||
STR_BASEMUSIC_TTO_DESCRIPTION :Оригинална Transport Tycoon (Original/World Editor) музика за DOS.
|
||||
STR_BASEMUSIC_NONE_DESCRIPTION :Празен музикален пакет.
|
||||
|
||||
##id 0x2000
|
||||
|
||||
@@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :{G=Masculin}Tar
|
||||
STR_COLOUR_BROWN :{G=Masculin}Marró
|
||||
STR_COLOUR_GREY :{G=Masculin}Gris
|
||||
STR_COLOUR_WHITE :{G=Masculin}Blanc
|
||||
STR_COLOUR_RANDOM :Aleatori
|
||||
STR_COLOUR_DEFAULT :Per defecte
|
||||
|
||||
# Units used in OpenTTD
|
||||
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
|
||||
@@ -465,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :So/música
|
||||
############ range for message menu starts
|
||||
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Darrer missatge/notícia
|
||||
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de missatges
|
||||
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Esborra tots els missatges
|
||||
############ range ends here
|
||||
|
||||
############ range for about menu starts
|
||||
@@ -816,6 +819,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
|
||||
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President)
|
||||
|
||||
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} ha patrocinat la construcció d'una nova població, anomenada {TOWN}
|
||||
STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}S'ha fundat una nova població que es diu {TOWN}!
|
||||
|
||||
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}No{G u va} {STRING} en construcció prop de {TOWN}
|
||||
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}S'està plantant {G un una} {G nou nova} {STRING} prop de {TOWN}
|
||||
@@ -928,6 +932,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sud-afric
|
||||
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalitzada
|
||||
STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgià (GEL)
|
||||
STR_GAME_OPTIONS_CURRENCY_IRR :Rial iranià (IRR)
|
||||
STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rus modern (RUB)
|
||||
STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicà (MXN)
|
||||
############ end of currency region
|
||||
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera
|
||||
@@ -990,6 +996,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Mida de la lletra
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleccioneu la mida de les fonts de la interfície.
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doble
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunt de gràfics base
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arxiu{P "" s} absent{P "" s} o corromput{P "" s}.
|
||||
@@ -1257,6 +1270,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No es po
|
||||
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manteniment de la infraestructura: {STRING}
|
||||
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quan està activat, la infraestructura provoca costos de manteniment. El cost creix proporcionalment al tamany de la xarxa de transport, afectant en conseqüència més a les companyies grosses que a les petites
|
||||
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Color inicial de la companyia: {STRING}
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolliu el color inicial de la vostra companyia.
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Els aeroports mai caduquen: {STRING}
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activant aquesta opció fa que cada tipus d'aeroport estigui disponible per sempre després de la seva introducció
|
||||
@@ -1815,6 +1830,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Canvia l
|
||||
STR_CHEAT_SETUP_PROD :{LTBLUE}Activa la modificació dels valors de producció: {ORANGE}{STRING}
|
||||
|
||||
# Livery window
|
||||
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de colors nou
|
||||
|
||||
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra esquemes de colors generals
|
||||
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra els esquemes de colors dels trens
|
||||
@@ -2074,11 +2090,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconne
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit: escriviu-ne la contrasenya
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Llista de clients
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Llista de clients
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Espectador
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova companyia
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Llista de clients
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Espectador
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova companyia
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Breu
|
||||
@@ -2093,7 +2110,6 @@ STR_NETWORK_CLIENT :Client
|
||||
STR_NETWORK_SPECTATORS :Espectadors
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introdueix la quantitat de diners que vols donar
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}No desis la nova contrasenya.
|
||||
@@ -2375,7 +2391,7 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Senyal p
|
||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Senyal de ruta (elèctric){}Un senyal de ruta permet entrar més d'un tren dins de la mateixa secció de vies. Cal, però, que sigui capaç de reservar una ruta fins un punt de parada segur sense creuar-se amb cap altre tren. Es pot travessar en el sentit contrari al senyal.
|
||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Senyal de ruta d'un sentit (elèctric){}Un senyal de ruta permet entrar més d'un tren dins de la mateixa secció de vies. Cal, però, que sigui capaç de reservar una ruta fins un punt de parada segur sense creuar-se amb cap altre tren. No es pot travessar en el sentit contrari al senyal.
|
||||
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversió de senyals{}Quan aquest botó està premut, si es clica un senyal existent el converteix al tipus de senyal seleccionat. Ctrl+Clic commuta la variant existent. Maj+Clic mostra el cost estimat de conversió.
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Espaiat entre senyals
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distància entre senyals
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Disminueix l'espai entre senyals consecutives situades automàticament quan s'arrossega el ratolí o es manté premuda la tecla Ctrl.
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenta l'espai entre senyals consecutives situades automàticament quan s'arrossega el ratolí o es manté premuda la tecla Ctrl.
|
||||
|
||||
@@ -2702,36 +2718,39 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD
|
||||
# Framerate display window
|
||||
STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon
|
||||
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} (x{DECIMAL})
|
||||
STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Velocitat de simulació: {STRING}
|
||||
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Velocitat de simulació: {STRING}
|
||||
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de tics del joc per segon.
|
||||
STR_FRAMERATE_RATE_BLITTER :{WHITE}Fotogrames per segon: {STRING}
|
||||
STR_FRAMERATE_RATE_BLITTER :{BLACK}Fotogrames per segon: {STRING}
|
||||
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre de fotogrames renderitzats per segon.
|
||||
STR_FRAMERATE_SPEED_FACTOR :{WHITE}Factor de velocitat actual: x{DECIMAL}
|
||||
STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocitat actual: x{DECIMAL}
|
||||
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quant ràpid va la partida actual, comparant-ho amb l'estimació de la velocitat normal.
|
||||
STR_FRAMERATE_CURRENT :{WHITE}Actual
|
||||
STR_FRAMERATE_AVERAGE :{WHITE}Mitjana
|
||||
STR_FRAMERATE_DATA_POINTS :{WHITE}Dades basades en {COMMA} mesures.
|
||||
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE}{NBSP}ms
|
||||
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE}{NBSP}ms
|
||||
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE}{NBSP}ms
|
||||
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE}{NBSP}fps
|
||||
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE}{NBSP}fps
|
||||
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE}{NBSP}fps
|
||||
STR_FRAMERATE_DATA_POINTS :{BLACK}Dades basades en {COMMA} mesures.
|
||||
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{NBSP}ms
|
||||
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{NBSP}ms
|
||||
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{NBSP}ms
|
||||
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{NBSP}fps
|
||||
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{NBSP}fps
|
||||
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{NBSP}fps
|
||||
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA}{NBSP}ms
|
||||
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}{NBSP}s
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMERATE_GAMELOOP :{WHITE}Total del bucle:
|
||||
STR_FRAMERATE_GL_ECONOMY :{WHITE} Tractament de la càrrega:
|
||||
STR_FRAMERATE_GL_TRAINS :{WHITE} Tics de tren:
|
||||
STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tics de vehicles de carretera:
|
||||
STR_FRAMERATE_GL_SHIPS :{WHITE} Tics de vaixell:
|
||||
STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Tics d'aeronau:
|
||||
STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Tics del mapa:
|
||||
STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Retard del graf de distribució:
|
||||
STR_FRAMERATE_DRAWING :{WHITE}Renderitzat de gràfics:
|
||||
STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Vistes del mapa:
|
||||
STR_FRAMERATE_VIDEO :{WHITE}Sortida de vídeo:
|
||||
STR_FRAMERATE_SOUND :{WHITE}Mescla de so:
|
||||
STR_FRAMERATE_GAMELOOP :{BLACK}Total del bucle:
|
||||
STR_FRAMERATE_GL_ECONOMY :{BLACK} Tractament de càrrega:
|
||||
STR_FRAMERATE_GL_TRAINS :{BLACK} Tics de trens:
|
||||
STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tics de vehicles de carretera:
|
||||
STR_FRAMERATE_GL_SHIPS :{BLACK} Tics de vaixells:
|
||||
STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tics d'aeronaus:
|
||||
STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tics del mapa:
|
||||
STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Retard del graf de distribució:
|
||||
STR_FRAMERATE_DRAWING :{BLACK}Renderitzat de gràfics:
|
||||
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vistes del mapa:
|
||||
STR_FRAMERATE_VIDEO :{BLACK}Sortida de vídeo:
|
||||
STR_FRAMERATE_SOUND :{BLACK}Mescla de so:
|
||||
STR_FRAMERATE_ALLSCRIPTS :{BLACK} Total GS/IA:
|
||||
STR_FRAMERATE_GAMESCRIPT :{BLACK} Script de partida:
|
||||
STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING}
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GAMELOOP :Bucle
|
||||
@@ -2746,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Renderitzat de
|
||||
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderitzat de la vista del mapa
|
||||
STR_FRAMETIME_CAPTION_VIDEO :Sortida de vídeo
|
||||
STR_FRAMETIME_CAPTION_SOUND :Mescla de so
|
||||
STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total de scripts d'IA/GS
|
||||
STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de partida
|
||||
STR_FRAMETIME_CAPTION_AI :AI {NUM}: {STRING}
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
@@ -2771,6 +2793,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalls
|
||||
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hi ha informació disponible
|
||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
|
||||
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
|
||||
STR_SAVELOAD_FILTER_TITLE :{BLACK}Cadena de filtre:
|
||||
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobreescriu fitxer
|
||||
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Esteu segur que voleu sobreescriure el fitxer?
|
||||
|
||||
STR_SAVELOAD_OSKTITLE :{BLACK}Posa el nom amb què desar la partida actual
|
||||
|
||||
@@ -2888,7 +2913,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versió:
|
||||
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versió compatible: {SILVER}{NUM}
|
||||
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
|
||||
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
|
||||
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Per defecte (D)
|
||||
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Per defecte (D) / 32 bpp
|
||||
STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Antic (W)
|
||||
STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Antic (W) / 32 bpp
|
||||
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paràmetres: {SILVER}{STRING}
|
||||
STR_NEWGRF_SETTINGS_PARAMETER_NONE :Cap
|
||||
|
||||
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hi ha informació disponible
|
||||
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}No s'ha trobat cap arxiu coincident
|
||||
@@ -2969,6 +2999,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :S'ha llegit des
|
||||
STR_NEWGRF_ERROR_GRM_FAILED :Els recursos GRF demanats no estan disponibles (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ha estat desactivat per {STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de disposició de sprite no vàlid o desconegut (sprite {3:NUM}).
|
||||
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Hi ha massa elements a la llista de valors de propietats (sprite {3:NUM}, propietat {4:HEX})
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :«Callback» de producció d'indústria no vàlid (sprite {3:NUM}, «{2:STRING}»).
|
||||
|
||||
# NewGRF related 'general' warnings
|
||||
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta!
|
||||
@@ -3094,6 +3126,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius
|
||||
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objectius globals
|
||||
STR_GOALS_SPECTATOR :Objectius globals
|
||||
STR_GOALS_GLOBAL_TITLE :{BLACK}Objectius globals:
|
||||
STR_GOALS_TEXT :{ORANGE}{STRING}
|
||||
STR_GOALS_NONE :{ORANGE}- Cap -
|
||||
@@ -3142,6 +3175,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clica al
|
||||
# Story book window
|
||||
STR_STORY_BOOK_CAPTION :{WHITE}Llibre de Partida de {COMPANY}
|
||||
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Llibre Global de Partida
|
||||
STR_STORY_BOOK_SPECTATOR :Llibre de partida global
|
||||
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
|
||||
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pàgina {NUM}
|
||||
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Salteu a una pàgina seleccionant-la en aquesta llista desplegable.
|
||||
@@ -3346,6 +3380,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requereix: {YELLOW}{STRING}{STRING}
|
||||
STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING}
|
||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
|
||||
@@ -3403,6 +3440,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups -
|
||||
STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup
|
||||
STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina el grup seleccionat
|
||||
STR_GROUP_RENAME_TOOLTIP :{BLACK}Canvia el nom del grup seleccionat
|
||||
STR_GROUP_LIVERY_TOOLTIP :{BLACK}Canvia l'aspecte dels vehicles del grup seleccionat.
|
||||
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica per protegir aquest grup de l'autosubstitueix global
|
||||
|
||||
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Esborrar grup
|
||||
@@ -3446,6 +3484,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacita
|
||||
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagons Automotrius: {GOLD}+{POWER}{BLACK} Pes: {GOLD}+{WEIGHT_SHORT}
|
||||
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Remodelable a: {GOLD}{STRING}
|
||||
STR_PURCHASE_INFO_ALL_TYPES :Totes les càrregues
|
||||
STR_PURCHASE_INFO_NONE :Cap
|
||||
STR_PURCHASE_INFO_ALL_BUT :Qualsevol excepte {CARGO_LIST}
|
||||
STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforç de tracció màxim: {GOLD}{FORCE}
|
||||
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {GOLD}{COMMA} cel·les
|
||||
@@ -3845,6 +3884,7 @@ STR_ORDER_CONDITIONAL_AGE :Antiguitat (any
|
||||
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita revisió
|
||||
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre
|
||||
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Temps de vida restant (anys)
|
||||
STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilitat màxima
|
||||
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Com comparar les dades del vehicle al valor donat
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :és igual a
|
||||
@@ -4277,7 +4317,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... aque
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... sentit de la carretera en la direcció incorrecta
|
||||
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... les estacions d'autobús de pas no poden tenir cantonades
|
||||
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... les estacions d'autobús de pas no poden tenir interseccions
|
||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... la carretera és d'un sol sentit o està blocada.
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}No es pot treure part de la estació...
|
||||
|
||||
@@ -562,6 +562,7 @@ STR_TOOLBAR_SOUND_MUSIC :Zvuk/glazba
|
||||
############ range for message menu starts
|
||||
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslijednja poruka/vijest
|
||||
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Povijest poruka
|
||||
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Obriši sve poruke
|
||||
############ range ends here
|
||||
|
||||
############ range for about menu starts
|
||||
@@ -1090,6 +1091,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalno
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Veličina fonta
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Odaberite veličinu fonta za sučelje
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normalno
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Osnovni set grafike
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Odaberi osnovni grafički set za igru
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} datotek{P a e a} nedostaj{P e u e}/korumpiran{P a e o}
|
||||
@@ -2177,11 +2185,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odspoji
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Popis klijenata
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Popis klijenata
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Promatraj
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova tvrtka
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Promatraj
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova tvrtka
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Izbaci
|
||||
@@ -2196,7 +2205,6 @@ STR_NETWORK_CLIENT :Klijent
|
||||
STR_NETWORK_SPECTATORS :Promatrači
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesite iznos novca koji želite dati
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Gledatelj
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nemoj spremiti upisanu zaporku
|
||||
@@ -2835,6 +2843,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Prikaz g
|
||||
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Prikazi svijeta:
|
||||
STR_FRAMERATE_VIDEO :{BLACK}Video izlaz:
|
||||
STR_FRAMERATE_SOUND :{BLACK}Miksanje zvukova:
|
||||
STR_FRAMERATE_ALLSCRIPTS :{BLACK} Ukupni broj GS/AI:
|
||||
STR_FRAMERATE_GAMESCRIPT :{BLACK} Skripta Igre:
|
||||
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GAMELOOP :Petlja igre
|
||||
@@ -2849,6 +2860,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Prikaz grafike
|
||||
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Prikazi svijeta
|
||||
STR_FRAMETIME_CAPTION_VIDEO :Video izlaz
|
||||
STR_FRAMETIME_CAPTION_SOUND :Miksanje zvukova
|
||||
STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI broj skripti
|
||||
STR_FRAMETIME_CAPTION_GAMESCRIPT :Skripta Igre
|
||||
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
@@ -3081,7 +3095,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Zatraženi GRF
|
||||
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je isključen od strane {STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Pogrešan/nepoznat format raspored sprite-a (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Previše elemenata na listi postavki varijabli (sprite {3:NUM}, postavka {4:HEX})
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{1:STRING}")
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{2:STRING}")
|
||||
|
||||
# NewGRF related 'general' warnings
|
||||
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Oprez!
|
||||
@@ -3106,13 +3120,14 @@ STR_NEWGRF_LIST_MISSING :{RED}Nedostaju
|
||||
STR_NEWGRF_BROKEN :{WHITE}Ponašanje NewGRF '{0:STRING}' će vjerojatno uzrokovati deharmonizaciju i/ili rušenje igre
|
||||
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Promijenjen status motoriziranog vagona za '{1:ENGINE}' kad vozilo nije u spremištu.
|
||||
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ovo mijenja dužinu vozila za '{1:ENGINE}' kada vozilo nije unutar spremišta
|
||||
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Promijenilo je kapacitet vozila za '{1:ENGINE}' kada nije u spremšta ili se remontira
|
||||
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Promijenilo je kapacitet vozila za '{1:ENGINE}' kada nije u spremištu ili se prenamjenjuje
|
||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Vlak'{VEHICLE}' koji pripada tvrtci '{COMPANY}' neispravne je dužine. Uzrok problema je vjerojatno u NewGRF datotekama. Igra će se možda deharmonizirati ili srušiti
|
||||
|
||||
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' daje netočne informacije
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacija o teretu/remontu za '{1:ENGINE}' je različita od kupovne liste nakon izgradnje. Zbog toga bi automatsko obnavljanje/zamjena mogla biti neuspješna
|
||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{G=male}{WHITE}'{1:STRING}' je uzrokovao beskonačnu petlju u pozivu za povrat produkcije
|
||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Povratnica {1:HEX} je vratio nepoznat/nemoguć rezultat {2:HEX}
|
||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' callback funkcija za proizvodnju je vratila nevažeći teret na {2:HEX}
|
||||
|
||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||
STR_NEWGRF_INVALID_CARGO :<pogrešan teret>
|
||||
@@ -3207,6 +3222,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podmiti
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Ciljevi
|
||||
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globalni ciljevi
|
||||
STR_GOALS_SPECTATOR :Globalni ciljevi
|
||||
STR_GOALS_GLOBAL_TITLE :{BLACK}Globalni ciljevi:
|
||||
STR_GOALS_TEXT :{ORANGE}{STRING}
|
||||
STR_GOALS_NONE :{ORANGE}- Nijedan -
|
||||
@@ -3255,6 +3271,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni n
|
||||
# Story book window
|
||||
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Priča
|
||||
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globalna priča
|
||||
STR_STORY_BOOK_SPECTATOR :Globalna knjiga priča
|
||||
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
|
||||
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Stranica {NUM}
|
||||
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Preskoči na specifičnu stranicu odabravši je iz liste.
|
||||
@@ -3625,7 +3642,7 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vozil{P o a a}{STRING}
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
||||
|
||||
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanjed iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu
|
||||
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanje iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu
|
||||
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vozila - desni klik na vozilo za informacije
|
||||
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Brodovi - desni klik na brod za informacije
|
||||
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zrakoplov - desni klik na zrakoplov za informacije
|
||||
@@ -3886,9 +3903,9 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Nosivost
|
||||
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Prenamijeni)
|
||||
STR_REFIT_TITLE :{GOLD}Odaberi vrstu tereta za prijevoz:
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova nosivost: {GOLD}{CARGO_LONG}{}{BLACK}Cijena prenamjene: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}{}{BLACK}Prihod od remonta: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Trošak remonta: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Prihod od remonta: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}{}{BLACK}Prihod od prenamjene: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Cijena prenamjene: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Prihod od prenamjene: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Odaberi vozila za remont. Povlačenje mišem dopušta odabir više vozila. Klik na prazninu će označiti cijelo vozilo. Ctrl+Klik će označiti vozilo i niz koji slijedi.
|
||||
|
||||
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Odaberi vrstu tereta koju će vlak prevoziti
|
||||
@@ -4396,7 +4413,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... ovo
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... cesta je orijentirana u krivom smjeru
|
||||
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... prolazne postaje ne mogu imati zavoje
|
||||
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... prolazne postaje ne mogu imati raskrižja
|
||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... cesta je jednosmjerna ili je blokirana
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nije moguće ukloniti dio postaje...
|
||||
|
||||
@@ -264,6 +264,7 @@ STR_COLOUR_ORANGE :Oranžová
|
||||
STR_COLOUR_BROWN :Hnědá
|
||||
STR_COLOUR_GREY :Šedá
|
||||
STR_COLOUR_WHITE :Bílá
|
||||
STR_COLOUR_RANDOM :Náhodná
|
||||
|
||||
# Units used in OpenTTD
|
||||
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}m{P íle íle il}/h
|
||||
@@ -539,6 +540,7 @@ STR_TOOLBAR_SOUND_MUSIC :Zvuk/Hudba
|
||||
############ range for message menu starts
|
||||
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslední zpráva nebo článek
|
||||
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historie zpráv
|
||||
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Smazat všechny zprávy
|
||||
############ range ends here
|
||||
|
||||
############ range for about menu starts
|
||||
@@ -1076,6 +1078,9 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normální
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná velikost
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Čtyřnásobná velikost
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Běžné
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Základní sada grafiky
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zvol základní sadu grafiky
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} chybějící{P "" "" ch}/poškozen{P ý é ých} soubor{P "" y ů}
|
||||
@@ -1427,6 +1432,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Barva terénu n
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :zelená
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :tmavě zelená
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :fialová
|
||||
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pohyb v mapě pomocí pravého tlačítka myši, poloha myši uzamčena
|
||||
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plynulé posouvání po mapě: {STRING}
|
||||
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ovládá jak se hlavní pohled posouvá na specifické místo na mapě, kliknutím na minimapu nebo spuštěním příkazu na posun na specifický objekt na mapě. Pokud zapnuto, pohled se posouvá plynule, pokud vypnuto, skáče pohled přímo na cílové místo
|
||||
STR_CONFIG_SETTING_MEASURE_TOOLTIP :Ukázat rozměry při použití stavebních nástrojů: {STRING}
|
||||
@@ -2156,9 +2162,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server j
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Společnost je chráněná. Napiš heslo
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Seznam hráčů
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Pozorovat
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nová společnost
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam hráčů
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovat
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová společnost
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Vyhodit
|
||||
@@ -2173,7 +2179,6 @@ STR_NETWORK_CLIENT :Klient
|
||||
STR_NETWORK_SPECTATORS :Pozorovatelé
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napiš částku, kterou chceš poskytnout
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Pozorovatel
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukládat zadané heslo
|
||||
@@ -2790,7 +2795,10 @@ STR_FRAMERATE_CAPTION :{WHITE}Počet s
|
||||
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Počet snímků videa vykreslovaných za sekundu.
|
||||
STR_FRAMERATE_SPEED_FACTOR :{WHITE}Aktuální činitel rychlosti hry: {DECIMAL}x
|
||||
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Rychlost, kterou hra právě běží, v porovnání s očekávanou rychlostí při běžné rychlosti simulace.
|
||||
STR_FRAMERATE_CURRENT :{WHITE}Aktuální
|
||||
STR_FRAMERATE_AVERAGE :{WHITE}Průměr
|
||||
STR_FRAMERATE_DATA_POINTS :{BLACK}Podle {COMMA} měření
|
||||
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
|
||||
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms
|
||||
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} sním{P "ek" "ky" "ků"}/s
|
||||
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} sním{P "ek" "ky" "ků"}/s
|
||||
@@ -2798,12 +2806,20 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM
|
||||
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMERATE_GL_ECONOMY :{WHITE} Manipulace s nákladem:
|
||||
STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Zpoždění grafu spojení:
|
||||
STR_FRAMERATE_DRAWING :{WHITE}Vykreslování grafiky:
|
||||
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Pohledy:
|
||||
STR_FRAMERATE_VIDEO :{BLACK}Video:
|
||||
STR_FRAMERATE_SOUND :{BLACK}Míchání zvuků:
|
||||
STR_FRAMERATE_GAMESCRIPT :{BLACK} Herní skript:
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GAMELOOP :Herní smyčka
|
||||
STR_FRAMETIME_CAPTION_GL_ECONOMY :Manipulace s nákladem
|
||||
STR_FRAMETIME_CAPTION_DRAWING :Vykreslování grafiky
|
||||
STR_FRAMETIME_CAPTION_SOUND :Míchání zvuků
|
||||
STR_FRAMETIME_CAPTION_GAMESCRIPT :Herní skript
|
||||
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
@@ -2829,6 +2845,8 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Vlastnos
|
||||
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Není dostupná žádná informace
|
||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
|
||||
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Grafiky: {WHITE}{STRING}
|
||||
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtr:
|
||||
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Přepsat soubor
|
||||
|
||||
STR_SAVELOAD_OSKTITLE :{BLACK}Zadej jméno pro uloženou hru
|
||||
|
||||
@@ -2947,6 +2965,7 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Minimál
|
||||
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
|
||||
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
|
||||
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametry: {SILVER}{STRING}
|
||||
STR_NEWGRF_SETTINGS_PARAMETER_NONE :Žádný
|
||||
|
||||
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informace nejsou k dispozici
|
||||
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Nenalezen odpovídající soubor
|
||||
@@ -3200,6 +3219,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliknut
|
||||
# Story book window
|
||||
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Kniha příběhů
|
||||
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globální kniha příběhů
|
||||
STR_STORY_BOOK_SPECTATOR :Globální kniha příběhů
|
||||
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
|
||||
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strana {NUM}
|
||||
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skoč na určitou stranu vybranou v tomto seznamu
|
||||
@@ -3404,6 +3424,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystřed
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING}{STRING}
|
||||
|
||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje:
|
||||
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
|
||||
@@ -4338,7 +4359,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... tato
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... silnice je otočena jiným směrem
|
||||
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... průjezdné zastávky nemohou být v zatáčce
|
||||
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... průjezdné zastávky nemohou být na křižovatce
|
||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... silnice je jednosměrná nebo uzavřená.
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nelze odstranit část stanice...
|
||||
|
||||
@@ -373,7 +373,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Afslut
|
||||
############ range for SE file menu starts
|
||||
|
||||
############ range for settings menu starts
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Spilvalg
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Opsætning
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Indstillinger
|
||||
STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/spilscript-indstillinger
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF indstillinger
|
||||
@@ -391,7 +391,7 @@ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gennemsigtige s
|
||||
|
||||
############ range for file menu starts
|
||||
STR_FILE_MENU_SAVE_GAME :Gem spil
|
||||
STR_FILE_MENU_LOAD_GAME :Hent spil
|
||||
STR_FILE_MENU_LOAD_GAME :Fortsæt spil
|
||||
STR_FILE_MENU_QUIT_GAME :Forlad spillet
|
||||
STR_FILE_MENU_SEPARATOR :
|
||||
STR_FILE_MENU_EXIT :Afslut
|
||||
@@ -466,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Lyd/Musik
|
||||
############ range for message menu starts
|
||||
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Seneste besked/nyhedsrapport
|
||||
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidligere beskeder
|
||||
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slet alle beskeder
|
||||
############ range ends here
|
||||
|
||||
############ range for about menu starts
|
||||
@@ -839,7 +840,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLAC
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insekter foresager kaos ved {INDUSTRY}!{}Produktionen er faldet med 50%
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}produktionen på {INDUSTRY} sænkes med {COMMA}%!
|
||||
|
||||
STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} venter i remisen
|
||||
STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} afventer i remisen
|
||||
STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} venter på værkstedet
|
||||
STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} venter i skibsdokken
|
||||
STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} venter i hangaren
|
||||
@@ -891,7 +892,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hov
|
||||
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bevæg hovedvisningen til samme sted som dette vindue
|
||||
|
||||
# Game options window
|
||||
STR_GAME_OPTIONS_CAPTION :{WHITE}Spilvalg
|
||||
STR_GAME_OPTIONS_CAPTION :{WHITE}Opsætning
|
||||
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhed
|
||||
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af valutaenhed
|
||||
|
||||
@@ -994,6 +995,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Skriftstørrelse
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vælg skriftstørrelsen du ønsker i grænsefladen
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafiksæt
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vælg det basis-grafiksæt der skal bruges
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} forsvund{P en ne}/ødelagt{P "" e} fil{P "" er}
|
||||
@@ -1414,8 +1422,8 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vis forventede ankomst-og afgangstider i tidsplaner
|
||||
STR_CONFIG_SETTING_QUICKGOTO :Hurtig oprettelse af køretøjsordrer: {STRING}
|
||||
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Forvælg 'gå-til' når du åbner ordrer vinduet
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard skinnetype (efter nyt spil/hentet spil): {STRING}
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Hvilken sportype der skal vælges efter start eller hentning af et spil. 'første tilgængelige' vælger den ældste type spor, 'sidste tilgængelige' vælger den nyeste form for spor, og 'mest anvendte' vælger den type, der i øjeblikket er mest i brug
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard sportype (efter nyt spil/indlæst spil): {STRING}
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Hvilken sportype der skal vælges efter start eller indlæsning af et spil. 'Første tilgængelige' vælger den ældste type spor, 'sidste tilgængelige' vælger den nyeste form for spor, og 'mest anvendte' vælger den type, der i øjeblikket er mest i brug
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Første tilgængelige
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Sidste tilgængelige
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mest anvendte
|
||||
@@ -1741,13 +1749,13 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allokeri
|
||||
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
|
||||
|
||||
STR_INTRO_NEW_GAME :{BLACK}Nyt spil
|
||||
STR_INTRO_LOAD_GAME :{BLACK}Hent spil
|
||||
STR_INTRO_LOAD_GAME :{BLACK}Fortsæt spil
|
||||
STR_INTRO_PLAY_SCENARIO :{BLACK}Spil et scenarie
|
||||
STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Spil højdekort
|
||||
STR_INTRO_SCENARIO_EDITOR :{BLACK}Scenarieeditor
|
||||
STR_INTRO_MULTIPLAYER :{BLACK}Netværksspil
|
||||
|
||||
STR_INTRO_GAME_OPTIONS :{BLACK}Spilvalg
|
||||
STR_INTRO_GAME_OPTIONS :{BLACK}Opsætning
|
||||
STR_INTRO_HIGHSCORE :{BLACK} Topresultater
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Indstillinger
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF indstillinger
|
||||
@@ -1756,7 +1764,7 @@ STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Spils
|
||||
STR_INTRO_QUIT :{BLACK}Afslut
|
||||
|
||||
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start et nyt spil. Ctrl+Klik springer kortindstillingerne over.
|
||||
STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Hent et gemt spil
|
||||
STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Fortsæt et gemt spil
|
||||
STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start et nyt spil med et højdekort som landskab
|
||||
STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start et nyt spil med et brugerdefineret scenarie
|
||||
STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Lav en brugerdefineret verden/scenarie
|
||||
@@ -1767,7 +1775,7 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vælg 's
|
||||
STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vælg 'subtropisk' landskab
|
||||
STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vælg 'legetøjsland' landskab
|
||||
|
||||
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Vis spilvalg
|
||||
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Sæt spillet op
|
||||
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Hvis topscoreliste
|
||||
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Skærm indstillinger
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Vis NewGRF-indstillinger
|
||||
@@ -1874,7 +1882,7 @@ STR_FACE_SIMPLE :{BLACK}Simpel
|
||||
STR_FACE_SIMPLE_TOOLTIP :{BLACK}Simpelt valg af ansigt.
|
||||
STR_FACE_LOAD :{BLACK}Hent
|
||||
STR_FACE_LOAD_TOOLTIP :{BLACK}Hent favoritansigt
|
||||
STR_FACE_LOAD_DONE :{WHITE}Dit favoritansigt er hentet fra OpenTTD-konfigurationsfilen.
|
||||
STR_FACE_LOAD_DONE :{WHITE}Dit favoritansigt er indlæst fra OpenTTD konfigurationsfilen.
|
||||
STR_FACE_FACECODE :{BLACK}Spiller ansigtsnr.
|
||||
STR_FACE_FACECODE_TOOLTIP :{BLACK}Vis og/eller indstil spillers ansigtsnummer
|
||||
STR_FACE_FACECODE_CAPTION :{WHITE}Vis og/eller indstil spillers ansigtsnummer
|
||||
@@ -2054,8 +2062,8 @@ STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spiller
|
||||
|
||||
STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nyt selskab
|
||||
STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Opret et nyt selskab
|
||||
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer spil
|
||||
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Se et spil som tilskuer
|
||||
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer
|
||||
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Tilslut spillet som tilskuer
|
||||
STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Tilslut dig selskab
|
||||
STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjælp med at bestyrre dette selskab
|
||||
|
||||
@@ -2081,11 +2089,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Afbryd f
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klient liste
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Tilslut som tilskuer
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nyt firma
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Tilslut som tilskuer
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nyt firma
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Smid ud
|
||||
@@ -2100,7 +2109,6 @@ STR_NETWORK_CLIENT :Klient
|
||||
STR_NETWORK_SPECTATORS :Tilskuere
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv beløbet du vil give
|
||||
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Tilskuer
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Gem ikke den indtastede adgangskode
|
||||
@@ -2144,7 +2152,7 @@ STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Der opst
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revisionen af denne klient passer ikke sammen med serverens revision
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Forkert kodeord
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveren er fuld
|
||||
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du har forbud mod at bruge denne server
|
||||
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bandlyst fra denne server
|
||||
STR_NETWORK_ERROR_KICKED :{WHITE}Du blev smidt ud af spillet
|
||||
STR_NETWORK_ERROR_CHEATER :{WHITE}Snyderi er ikke tilladt på denne server
|
||||
STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren
|
||||
@@ -2340,7 +2348,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Ombyg/op
|
||||
STR_RAIL_NAME_RAILROAD :Jernbane
|
||||
STR_RAIL_NAME_ELRAIL :Elektrisk jernbane
|
||||
STR_RAIL_NAME_MONORAIL :Monorail
|
||||
STR_RAIL_NAME_MAGLEV :Magnetskinne
|
||||
STR_RAIL_NAME_MAGLEV :Magnetsvævebane
|
||||
|
||||
# Rail depot construction window
|
||||
STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Retning af remise
|
||||
@@ -2739,6 +2747,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik-t
|
||||
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Landskabsvisninger:
|
||||
STR_FRAMERATE_VIDEO :{BLACK}Grafik-output:
|
||||
STR_FRAMERATE_SOUND :{BLACK}Lydmiksning:
|
||||
STR_FRAMERATE_ALLSCRIPTS :{BLACK} Spilscript/AI total:
|
||||
STR_FRAMERATE_GAMESCRIPT :{BLACK} Spilscript:
|
||||
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GAMELOOP :Spillogik
|
||||
@@ -2753,17 +2764,20 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafik-tegning
|
||||
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning af landskabsvisninger
|
||||
STR_FRAMETIME_CAPTION_VIDEO :Grafik-output
|
||||
STR_FRAMETIME_CAPTION_SOUND :Lydmiksning
|
||||
STR_FRAMETIME_CAPTION_ALLSCRIPTS :Spil/AI script total
|
||||
STR_FRAMETIME_CAPTION_GAMESCRIPT :Spilscript
|
||||
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
# Save/load game/scenario
|
||||
STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gem spil
|
||||
STR_SAVELOAD_LOAD_CAPTION :{WHITE}Hent spil
|
||||
STR_SAVELOAD_LOAD_CAPTION :{WHITE}Fortsæt spil
|
||||
STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Gem scenarie
|
||||
STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Hent scenarie
|
||||
STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Hent højdekort
|
||||
STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Gem højdekort
|
||||
STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik her for at gå til det nuværende standard gemme/hente bibliotek
|
||||
STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik her for at gå til den nuværende standard gem/indlæs mappe
|
||||
STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} fri
|
||||
STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Liste over drev, biblioteker og gemte spilfiler
|
||||
STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nuværende gemte spils navn
|
||||
@@ -2779,6 +2793,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen in
|
||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
|
||||
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
|
||||
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-udtryk:
|
||||
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overskriv fil
|
||||
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Er du sikker på du vil overskrive den eksisterende fil?
|
||||
|
||||
STR_SAVELOAD_OSKTITLE :{BLACK}Skriv et navn til det gemte spil
|
||||
|
||||
@@ -2983,7 +2999,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF
|
||||
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blev deaktiveret af {2:STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt/ukendt sprite layoutformat (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i værdiliste for egenskab (sprite {3:NUM}, egenskab {4:HEX})
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{1:STRING}")
|
||||
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{2:STRING}")
|
||||
|
||||
# NewGRF related 'general' warnings
|
||||
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel!
|
||||
@@ -3015,6 +3031,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF '
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fragt-/ombygningsinformation for '{1:ENGINE}' afviger fra indkøbslisten efter konstruktion. Dette kan medføre, at autofornyelse ikke fungerer korrekt.
|
||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' forårsagede en uendelig løkke i produktions-callback'en.
|
||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} returnerede ukendt/ugyldigt resultat {2:HEX}
|
||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returnerede ugyldig godstype i produktion-callback ved {2:HEX}
|
||||
|
||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||
STR_NEWGRF_INVALID_CARGO :<ikke gyldigt gods>
|
||||
@@ -3109,6 +3126,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bestik
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} Mål
|
||||
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale Mål
|
||||
STR_GOALS_SPECTATOR :Globale Mål
|
||||
STR_GOALS_GLOBAL_TITLE :{BLACK}Globale mål:
|
||||
STR_GOALS_TEXT :{ORANGE}{STRING}
|
||||
STR_GOALS_NONE :{ORANGE}- Ingen -
|
||||
@@ -3157,6 +3175,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik på
|
||||
# Story book window
|
||||
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Historiebog
|
||||
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global Historiebog
|
||||
STR_STORY_BOOK_SPECTATOR :Global Historiebog
|
||||
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
|
||||
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Side {NUM}
|
||||
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved at vælge den i denne rulleliste.
|
||||
@@ -3240,7 +3259,7 @@ STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle
|
||||
STR_STATION_VIEW_RENAME_STATION_CAPTION :Omdøb stationen/fragtcentralen
|
||||
|
||||
STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Luk lufthavn
|
||||
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Undgå at fly lander i denne lufthavn
|
||||
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindre at fly lander i denne lufthavn
|
||||
|
||||
# Waypoint/buoy view window
|
||||
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
|
||||
@@ -3439,7 +3458,7 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}%
|
||||
|
||||
# Build vehicle window
|
||||
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nye jernbanekøretøjer
|
||||
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nyt elektrisk lokomotiv
|
||||
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nye elektriske jernbanekøretøjer
|
||||
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nye monorailkøretøjer
|
||||
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nye magnetskinnekøretøjer
|
||||
|
||||
@@ -3567,7 +3586,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klon fly
|
||||
STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dette vil købe en kopi af toget inklusiv alle vogne. Klik på denne knap og så på et tog indeni eller udenfor remisen. Ctrl-klik vil kopiere ordrer. Shift-klik vil vise prisoverslag.
|
||||
STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dette vil købe en kopi af køretøjet. Klik på denne knap og så på et køretøj indeni eller udenfor værkstedet. Ctrl-klik vil dele ordrer. Shift-klik viser anslået pris uden køb
|
||||
STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Dette vil købe en kopi af skibet. Klik på denne knap og så på et skib indeni eller udenfor dokken. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag.
|
||||
STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag.
|
||||
STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik viser estimerede omkostninger uden at indkøbe
|
||||
|
||||
STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over remisens lokalitet. Ctrl+Klik åbner et nyt vindue ved remisens lokalitet.
|
||||
STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over værkstedets lokalitet. Ctrl+Klik åbner et nyt vindue ved køretøjsværkstedets lokalitet.
|
||||
@@ -3577,7 +3596,7 @@ STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrér
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Vis en liste over alle tog med denne remise i ordrelisten
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Vis liste over alle køretøjer med dette værksted i ordrelisten
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Vis liste over alle skibe med denne skibsdok i ordrelisten
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Vis liste over alle fly med en hangar ved denne lufthavn i ordrelisten
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Hent en liste over alle fly der har hvilken som helst hangar ved denne lufthavn i deres ordrer
|
||||
|
||||
STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik for at stoppe alle toge i remisen
|
||||
STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klik for at stoppe alle køretøjer i værkstedet
|
||||
@@ -3599,7 +3618,7 @@ STR_ENGINE_PREVIEW_ROAD_VEHICLE :vejkøretøj
|
||||
STR_ENGINE_PREVIEW_AIRCRAFT :fly
|
||||
STR_ENGINE_PREVIEW_SHIP :skib
|
||||
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monoraillokomotiv
|
||||
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnetskinnelokomotiv
|
||||
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnettog
|
||||
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Styrke: {POWER}{}Driftsomkostninger: {CURRENCY_LONG}/år{}Kapacitet: {CARGO_LONG}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Hestekræfter: {POWER} Maks. Trækkraft: {6:FORCE}{}Driftsomkostning: {4:CURRENCY_LONG}/år{}Kapacitet: {5:CARGO_LONG}
|
||||
@@ -4034,7 +4053,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Vælg å
|
||||
|
||||
|
||||
# AI debug window
|
||||
STR_AI_DEBUG :{WHITE}Computerspiller/Spilscript-debug
|
||||
STR_AI_DEBUG :{WHITE}KI/Spilscript-debug
|
||||
STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM})
|
||||
STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Navn på scriptet
|
||||
STR_AI_DEBUG_SETTINGS :{BLACK}Indstillinger
|
||||
@@ -4071,7 +4090,7 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Flyt ned
|
||||
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Flyt valgte computerspiller ned i listen
|
||||
|
||||
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spilscript
|
||||
STR_AI_CONFIG_AI :{SILVER}AIer
|
||||
STR_AI_CONFIG_AI :{SILVER}KI'er
|
||||
|
||||
STR_AI_CONFIG_CHANGE :{BLACK}Vælg {STRING}
|
||||
STR_AI_CONFIG_CHANGE_NONE :Ingen ændringer
|
||||
@@ -4147,7 +4166,7 @@ STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fejl und
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under hentning af spil{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version
|
||||
@@ -4161,12 +4180,12 @@ STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spillet
|
||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kortgenerering afbrudt...{}... ingen brugbare lokaliteter til byer
|
||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... der er ingen byer i dette scenarie
|
||||
|
||||
STR_ERROR_PNGMAP :{WHITE}Kan ikke hente landskab fra PNG...
|
||||
STR_ERROR_PNGMAP :{WHITE}Kan ikke indlæse landskab fra PNG...
|
||||
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... filen blev ikke fundet.
|
||||
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... kan ikke konvertere billedtype. Der skal bruges 8 eller 24-bit PNG.
|
||||
STR_ERROR_PNGMAP_MISC :{WHITE}... noget gik galt. Undskyld (Måske en ødelagt fil)
|
||||
|
||||
STR_ERROR_BMPMAP :{WHITE}Kan ikke hente landskab fra BMP...
|
||||
STR_ERROR_BMPMAP :{WHITE}Kan ikke indlæse landskab fra BMP...
|
||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... kunne ikke konvertere billedtypen.
|
||||
|
||||
STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... billede er for stort
|
||||
@@ -4298,7 +4317,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... denn
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... vejen peger i den forkerte retning
|
||||
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... drive-through stops kan ikke have hjørner
|
||||
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... drive-through stops kan ikke have kryds
|
||||
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}vejen er ensrettet eller blokeret
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne en del af en station...
|
||||
|
||||
1752
src/lang/dutch.txt
1752
src/lang/dutch.txt
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user