mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-28 08:59:09 +00:00
Compare commits
94 Commits
12.0-beta1
...
12.0-RC1
Author | SHA1 | Date | |
---|---|---|---|
|
79dc634d41 | ||
|
39662aabef | ||
|
66c7d9b8ed | ||
|
4aa63ce8f3 | ||
|
753b1d7e15 | ||
|
16aac9c341 | ||
|
909a83758c | ||
|
7c6b39e189 | ||
|
b5e8b36b5b | ||
|
45edd9f326 | ||
|
31cf9e888b | ||
|
d9f8ed7bdf | ||
7e70ead396 | |||
|
b8f9e24189 | ||
|
0babadfbe4 | ||
|
28d9181d5d | ||
|
cd03bac3dd | ||
|
7acdaaaf2f | ||
|
18247bb3b8 | ||
|
b335b0501c | ||
|
6ce74b2a1b | ||
|
20717ededf | ||
|
6a6dbbaad2 | ||
|
ff6c934916 | ||
|
a53c4f0fb7 | ||
|
19a6513607 | ||
|
a57c2b073a | ||
|
37de878129 | ||
|
c6035158ca | ||
|
c8ab5e58f9 | ||
|
928e6a04e2 | ||
|
d757aa7591 | ||
|
6bd3106681 | ||
|
710b758b81 | ||
|
d4588df9f9 | ||
|
16dca0d7bc | ||
|
ceaff9c9f2 | ||
|
ee57afc285 | ||
|
a8641ea44a | ||
|
9e85f40733 | ||
|
7107e63f8c | ||
|
66620b497b | ||
|
6e3d023e69 | ||
|
7469f00c5b | ||
|
f656b0ae96 | ||
|
9c74dc2468 | ||
|
92559e6f3a | ||
|
63116bd59f | ||
|
2c05412d72 | ||
|
69e9acd702 | ||
|
f87fe395a7 | ||
|
219598a90b | ||
|
80231975e5 | ||
|
d8e870c50c | ||
|
13b53e1290 | ||
|
20ff6fd3f1 | ||
|
8ab267496b | ||
|
8d2162ba2d | ||
|
aa83488fde | ||
|
56d4749ac9 | ||
|
e9f3ddb6ba | ||
|
ef3c4a8737 | ||
|
52d57b17b0 | ||
|
dc5b7b996c | ||
|
e31b5d3870 | ||
|
b2f0491a90 | ||
|
47ce306085 | ||
|
0d26359b5b | ||
|
93fd42b0c3 | ||
|
f939f48cd2 | ||
|
4066a07d8f | ||
|
b83820e723 | ||
|
dd3acccb1b | ||
|
778e196b55 | ||
|
07f98f9234 | ||
|
fff09a4af2 | ||
|
a7fe82c646 | ||
|
cc38a42b07 | ||
|
b38712a302 | ||
|
335a2392e7 | ||
|
c4b700f1b0 | ||
|
996ae28989 | ||
|
5da60cef46 | ||
|
de28817d9f | ||
|
325d031082 | ||
|
5c776f21e7 | ||
|
04e9df47d9 | ||
|
977604ef08 | ||
|
6acf204d14 | ||
|
b531a0c1cf | ||
|
ac4a7d02c7 | ||
|
2e6a77a78a | ||
|
d212505dcf | ||
|
b2eafcc720 |
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -39,6 +39,7 @@ Describe here
|
||||
|
||||
Some things are not automated, and forgotten often. This list is a reminder for the reviewers.
|
||||
* The bug fix is important enough to be backported? (label: 'backport requested')
|
||||
* This PR touches english.txt or translations? Check the [guidelines](https://github.com/OpenTTD/OpenTTD/blob/master/docs/eints.md)
|
||||
* This PR affects the save game format? (label 'savegame upgrade')
|
||||
* This PR affects the GS/AI API? (label 'needs review: Script API')
|
||||
* ai_changelog.hpp, gs_changelog.hpp need updating.
|
||||
|
4
.github/changelog.sh
vendored
4
.github/changelog.sh
vendored
@@ -4,9 +4,9 @@ tag=$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\
|
||||
|
||||
# If we are a tag, show the part of the changelog till (but excluding) the last stable
|
||||
if [ -n "$tag" ]; then
|
||||
grep='^[0-9]\+\.[0-9]\+\.[0-9]\+[^-]'
|
||||
grep='^[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 }'
|
||||
cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9]+.[0-9]+/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
221
.github/unused-strings.py
vendored
Normal file
221
.github/unused-strings.py
vendored
Normal file
@@ -0,0 +1,221 @@
|
||||
"""
|
||||
Script to scan the OpenTTD source-tree for STR_ entries that are defined but
|
||||
no longer used.
|
||||
|
||||
This is not completely trivial, as OpenTTD references a lot of strings in
|
||||
relation to another string. The most obvious example of this is a list. OpenTTD
|
||||
only references the first entry in the list, and does "+ <var>" to get to the
|
||||
correct string.
|
||||
|
||||
There are other ways OpenTTD does use relative values. This script tries to
|
||||
account for all of them, to give the best approximation we have for "this
|
||||
string is unused".
|
||||
"""
|
||||
|
||||
import glob
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from enum import Enum
|
||||
|
||||
LENGTH_NAME_LOOKUP = {
|
||||
"VEHICLE_TYPES": 4,
|
||||
}
|
||||
|
||||
|
||||
class SkipType(Enum):
|
||||
NONE = 1
|
||||
LENGTH = 2
|
||||
EXTERNAL = 3
|
||||
ZERO_IS_SPECIAL = 4
|
||||
EXPECT_NEWLINE = 5
|
||||
|
||||
|
||||
def read_language_file(filename, strings_found, errors):
|
||||
strings_defined = []
|
||||
|
||||
skip = SkipType.NONE
|
||||
length = 0
|
||||
common_prefix = ""
|
||||
last_tiny_string = ""
|
||||
|
||||
with open(filename) as fp:
|
||||
for line in fp.readlines():
|
||||
if not line.strip():
|
||||
if skip == SkipType.EXPECT_NEWLINE:
|
||||
skip = SkipType.NONE
|
||||
continue
|
||||
|
||||
line = line.strip()
|
||||
|
||||
if skip == SkipType.EXPECT_NEWLINE:
|
||||
# The only thing allowed after a list, is this next marker, or a newline.
|
||||
if line == "###next-name-looks-similar":
|
||||
# "###next-name-looks-similar"
|
||||
# Indicates the common prefix of the last list has a very
|
||||
# similar name to the next entry, but isn't part of the
|
||||
# list. So do not emit a warning about them looking very
|
||||
# similar.
|
||||
|
||||
if length != 0:
|
||||
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
|
||||
|
||||
common_prefix = ""
|
||||
else:
|
||||
errors.append(f"ERROR: expected a newline after a list, but didn't find any around {name}. Did you add an entry to the list without increasing the length?")
|
||||
|
||||
skip = SkipType.NONE
|
||||
|
||||
if line[0] == "#":
|
||||
if line.startswith("###length "):
|
||||
# "###length <count>"
|
||||
# Indicates the next few entries are part of a list. Only
|
||||
# the first entry is possibly referenced, and the rest are
|
||||
# indirectly.
|
||||
|
||||
if length != 0:
|
||||
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
|
||||
|
||||
length = line.split(" ")[1].strip()
|
||||
|
||||
if length.isnumeric():
|
||||
length = int(length)
|
||||
else:
|
||||
length = LENGTH_NAME_LOOKUP[length]
|
||||
|
||||
skip = SkipType.LENGTH
|
||||
elif line.startswith("###external "):
|
||||
# "###external <count>"
|
||||
# Indicates the next few entries are used outside the
|
||||
# source and will not be referenced.
|
||||
|
||||
if length != 0:
|
||||
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
|
||||
|
||||
length = line.split(" ")[1].strip()
|
||||
length = int(length)
|
||||
|
||||
skip = SkipType.EXTERNAL
|
||||
elif line.startswith("###setting-zero-is-special"):
|
||||
# "###setting-zero-is-special"
|
||||
# Indicates the next entry is part of the "zero is special"
|
||||
# flag of settings. These entries are not referenced
|
||||
# directly in the code.
|
||||
|
||||
if length != 0:
|
||||
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
|
||||
|
||||
skip = SkipType.ZERO_IS_SPECIAL
|
||||
|
||||
continue
|
||||
|
||||
name = line.split(":")[0].strip()
|
||||
strings_defined.append(name)
|
||||
|
||||
# If a string ends on _TINY or _SMALL, it can be the {TINY} variant.
|
||||
# Check for this by some fuzzy matching.
|
||||
if name.endswith(("_SMALL", "_TINY")):
|
||||
last_tiny_string = name
|
||||
elif last_tiny_string:
|
||||
matching_name = "_".join(last_tiny_string.split("_")[:-1])
|
||||
if name == matching_name:
|
||||
strings_found.add(last_tiny_string)
|
||||
else:
|
||||
last_tiny_string = ""
|
||||
|
||||
if skip == SkipType.EXTERNAL:
|
||||
strings_found.add(name)
|
||||
skip = SkipType.LENGTH
|
||||
|
||||
if skip == SkipType.LENGTH:
|
||||
skip = SkipType.NONE
|
||||
length -= 1
|
||||
common_prefix = name
|
||||
elif skip == SkipType.ZERO_IS_SPECIAL:
|
||||
strings_found.add(name)
|
||||
elif length > 0:
|
||||
strings_found.add(name)
|
||||
length -= 1
|
||||
|
||||
# Find the common prefix of these strings
|
||||
for i in range(len(common_prefix)):
|
||||
if common_prefix[0 : i + 1] != name[0 : i + 1]:
|
||||
common_prefix = common_prefix[0:i]
|
||||
break
|
||||
|
||||
if length == 0:
|
||||
skip = SkipType.EXPECT_NEWLINE
|
||||
|
||||
if len(common_prefix) < 6:
|
||||
errors.append(f"ERROR: common prefix of block including {name} was reduced to {common_prefix}. This means the names in the list are not consistent.")
|
||||
elif common_prefix:
|
||||
if name.startswith(common_prefix):
|
||||
errors.append(f"ERROR: {name} looks a lot like block above with prefix {common_prefix}. This mostly means that the list length was too short. Use '###next-name-looks-similar' if it is not.")
|
||||
common_prefix = ""
|
||||
|
||||
return strings_defined
|
||||
|
||||
|
||||
def scan_source_files(path, strings_found):
|
||||
for new_path in glob.glob(f"{path}/*"):
|
||||
if os.path.isdir(new_path):
|
||||
scan_source_files(new_path, strings_found)
|
||||
continue
|
||||
|
||||
if not new_path.endswith((".c", ".h", ".cpp", ".hpp", ".ini")):
|
||||
continue
|
||||
|
||||
# Most files we can just open, but some use magic, that requires the
|
||||
# G++ preprocessor before we can make sense out of it.
|
||||
if new_path == "src/table/cargo_const.h":
|
||||
p = subprocess.run(["g++", "-E", new_path], stdout=subprocess.PIPE)
|
||||
output = p.stdout.decode()
|
||||
else:
|
||||
with open(new_path) as fp:
|
||||
output = fp.read()
|
||||
|
||||
# Find all the string references.
|
||||
matches = re.findall(r"[^A-Z_](STR_[A-Z0-9_]*)", output)
|
||||
strings_found.update(matches)
|
||||
|
||||
|
||||
def main():
|
||||
strings_found = set()
|
||||
errors = []
|
||||
|
||||
scan_source_files("src", strings_found)
|
||||
strings_defined = read_language_file("src/lang/english.txt", strings_found, errors)
|
||||
|
||||
# STR_LAST_STRINGID is special, and not really a string.
|
||||
strings_found.remove("STR_LAST_STRINGID")
|
||||
# These are mentioned in comments, not really a string.
|
||||
strings_found.remove("STR_XXX")
|
||||
strings_found.remove("STR_NEWS")
|
||||
strings_found.remove("STR_CONTENT_TYPE_")
|
||||
|
||||
# This string is added for completion, but never used.
|
||||
strings_defined.remove("STR_JUST_DATE_SHORT")
|
||||
|
||||
strings_defined = sorted(strings_defined)
|
||||
strings_found = sorted(list(strings_found))
|
||||
|
||||
for string in strings_found:
|
||||
if string not in strings_defined:
|
||||
errors.append(f"ERROR: {string} found but never defined.")
|
||||
|
||||
for string in strings_defined:
|
||||
if string not in strings_found:
|
||||
errors.append(f"ERROR: {string} is (possibly) no longer needed.")
|
||||
|
||||
if errors:
|
||||
for error in errors:
|
||||
print(error)
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("OK")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
18
.github/workflows/unused-strings.yml
vendored
Normal file
18
.github/workflows/unused-strings.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
name: Unused strings
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
unused-strings:
|
||||
name: Unused strings
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Check for unused strings
|
||||
run: |
|
||||
set -ex
|
||||
python3 .github/unused-strings.py
|
@@ -1,3 +1,49 @@
|
||||
12.0-RC1 (2021-09-25)
|
||||
------------------------------------------------------------------------
|
||||
Feature: Display icon/text whether vehicle is lost in vehicle (list) window (#9543)
|
||||
Feature: [MacOS] Add selected toolbar buttons to MacBook Pro Touch Bar (#9511)
|
||||
Feature: Button to open order window from vehicle shared orders window (#9325)
|
||||
Feature: Ctrl-Clicking shared order vehicle list opens order window (#9325)
|
||||
Feature: Multiple rotating views on title screen (#8980)
|
||||
Feature: Hide block signals in GUI by default (#8688)
|
||||
Add: [Script] Allow GameScripts to build neutral objects (#9568)
|
||||
Add: [Network] Allow sending chat messages via admin port (#9563)
|
||||
Add: [AI/GS] Missing water related functions and objects (#8390)
|
||||
Fix: Industry funding window did not update when changing funding method (#9572)
|
||||
Fix #9562: [NewGRF] Handle case of invalid Action2 with zero results (#9564)
|
||||
Fix: Incorrect error messages when placing water in scenario editor (#9560)
|
||||
Fix #9484: Update locale currencies settings config map (#9559)
|
||||
Fix: Prevent train reversing when entirely inside a train depot (#9557)
|
||||
Fix: [Network] Add back 'Spectate' option to company toolbar menu (#9556)
|
||||
Fix #9463: [Win32] Work around XAudio2 crashes (#9549)
|
||||
Fix #8603: Don't give focus to text filter when opening Object GUI (#9547)
|
||||
Fix #9241: Grove and forest tree brushes did not also create rainforest terrain (#9542)
|
||||
Fix: [Network] Several crashes in our network code (#9534, #9456)
|
||||
Fix #9527: Crash when trying to place multi-tile objects at map edge (#9529)
|
||||
Fix: [Network] SendCmdNames only sent one name per packet (#9528)
|
||||
Fix #9407: Desync when founding a town nearby a station (#9526)
|
||||
Fix #9521: Don't load at just removed docks that were part of a multi-dock station (#9524)
|
||||
Fix: Ships always tried to avoid docking tiles when pathfinding (even if nothing was on them) (#9522)
|
||||
Fix: [Network] Convert server_advertise to server_game_type in config file (#9515)
|
||||
Fix #9490: [Network] A full server couldn't be queried (#9508)
|
||||
Fix: [Network] Don't show GameScript " (v0)" for old servers (#9507)
|
||||
Fix: [Network] Show query errors in the server listing instead of error popup (#9506)
|
||||
Fix: [Network] Crash when last-joined server was no longer available (#9503)
|
||||
Fix #9501: [Network] Crash when more than one game-info query was pending (#9502)
|
||||
Fix: Wrong error message when building canals over ship depots / locks (#9410)
|
||||
Fix: Reduce cost of building canals over objects on sea (#9410)
|
||||
Change: [Linkgraph] Delete links only served by vehicles stopped in depot (#9499)
|
||||
|
||||
|
||||
12.0-beta2 (2021-08-19)
|
||||
------------------------------------------------------------------------
|
||||
Feature: [Linkgraph] Prioritize faster routes for passengers, mail and express cargo (#9457)
|
||||
Fix: Wrong town window refreshed when building an airport with noise levels enabled (#9497)
|
||||
Fix: Improve wording of network-related messages (#9494, #9495, #9500)
|
||||
Fix: [Network] Report reuse of invite-code (#9487)
|
||||
Fix: [Network] Connecting with the same client name thrice hangs the server (#9485)
|
||||
|
||||
|
||||
12.0-beta1 (2021-08-15)
|
||||
------------------------------------------------------------------------
|
||||
Feature: [Network] Remove lobby window; pressing "Join Game" now immediately joins a server (#9467)
|
||||
|
117
docs/eints.md
Normal file
117
docs/eints.md
Normal file
@@ -0,0 +1,117 @@
|
||||
# Translations for OpenTTD
|
||||
|
||||
Eints is [OpenTTD's WebTranslator](https://translator.openttd.org/).
|
||||
|
||||
- Registered translators translate from English to their language.
|
||||
- Eints validates the translations syntactically and that parameter usage matches the English base language.
|
||||
- Eints synchronises translations to OpenTTD's repository every day, shortly before the nightly build.
|
||||
|
||||
When adding or altering strings in english.txt, you should stick to some rules, so translations are handled smoothly by Eints and translators.
|
||||
This document gives some guidelines.
|
||||
|
||||
|
||||
## I want to change a translation.
|
||||
|
||||
### I want to become a regular translator.
|
||||
|
||||
Just [sign up](https://github.com/OpenTTD/team/issues/new/choose) as a translator.
|
||||
|
||||
### I only want to point out some issues / typos in the current translation, or suggest a change.
|
||||
|
||||
[Open an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose), so it can be assigned to the translation team of the language.
|
||||
The translators will decide whether, where and how to apply your suggestion.
|
||||
|
||||
### I want to submit translations via PR.
|
||||
|
||||
Sorry, we don't offer this option.
|
||||
|
||||
### I want to change the language definition (plural form, genders, cases) of a translation.
|
||||
|
||||
Please [create an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose) for this.
|
||||
|
||||
### I want to add an entirely new translation language.
|
||||
|
||||
OpenTTD has more than 4000 strings, translating all of them is a lot of work.
|
||||
Despite the initial enthusiasm, only few people have the endurance to get to even 20% translation progress.
|
||||
|
||||
As such, starting a new translation requires the prospect that there is also translation interest in the future.
|
||||
And, frankly, OpenTTD probably already covers all languages to which this applies, and a few more.
|
||||
|
||||
If you still want to make the case, that your language is spoken by several 100 million people, please [create an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose) for adding a new language.
|
||||
|
||||
|
||||
## I want to change the English base language (english.txt).
|
||||
|
||||
### I want to change the wording / fix a typo in an English string, without changing the meaning (drastically).
|
||||
|
||||
Just change it in your PR.
|
||||
|
||||
Translators will be notified that their translation became "outdated", so they can double-check whether the translation needs updating.
|
||||
|
||||
### I want to add/change/remove parameters from an English string.
|
||||
|
||||
Just change the parameters in english.txt in your PR.
|
||||
Don't touch the translations, please ignore compile warnings about them.
|
||||
|
||||
Translators will be notified that their translation became "invalid", so they can adjust the translation.
|
||||
Eints will remember the old translations for translators to view, but remove them from the git repository, while they are "invalid"; so there won't be any compile warnings after the nightly sync.
|
||||
|
||||
### I want to change the meaning of an English string, so that no existing translation makes any sense anymore.
|
||||
|
||||
In this case, please change the STR_xxx string identifier of the string; basically: remove the old string, add a new one.
|
||||
Don't touch the translations, please ignore compile warnings about them.
|
||||
|
||||
Eints will discard all memory of the old strings in the nightly sync, and translators can start fresh with a new string.
|
||||
|
||||
### I want to add a new string.
|
||||
|
||||
Add the new string somewhere in english.txt, where it fits with the neighbouring strings.
|
||||
Don't touch the translations, even if you can speak some of the languages.
|
||||
|
||||
### I want to remove an unused string.
|
||||
|
||||
Remove the string from english.txt.
|
||||
Don't touch the translations, please ignore compile warnings about them.
|
||||
|
||||
Eints will remove the translations from the git repository in the nightly sync.
|
||||
|
||||
### I want to reorder strings in english.txt without changing them.
|
||||
|
||||
Reorder english.txt as you like. Don't touch the translations.
|
||||
|
||||
Eints will reorder all translations to match english.txt in the nightly sync.
|
||||
|
||||
### I want to add/change '#' comments.
|
||||
|
||||
Change comments in english.txt as you like. Don't touch the translations.
|
||||
|
||||
Eints will replicate comments into all translations in the nightly sync. Comments are not translated.
|
||||
|
||||
### I want to change the STR_xxx string identifier for code style reasons, without changing the English text.
|
||||
|
||||
This is the only case, where your PR should also edit translations.
|
||||
The STR_xxx string identifier is used by Eints as key value to track strings and translations. If you change it, that's the same as deleting a string and adding an unrelated new one.
|
||||
So, to keep translations, you have to replace the STR_xxx for all translations in the PR as well.
|
||||
|
||||
However, you will only be able to keep the translations which are part of the git repository.
|
||||
Translation history and information about translations being "outdated" will be lost.
|
||||
So, keep your code style OCD to a minimum :)
|
||||
|
||||
|
||||
## I want to fight a bot and lose.
|
||||
|
||||
Here are some things, people sometimes want to do, but which won't work.
|
||||
|
||||
### I want to enforce re-translation by clearing current translations.
|
||||
|
||||
You have to change the STR_xxx string identifier, that's the only option.
|
||||
|
||||
You cannot "clear" translations by removing them via PR; eints will reinstall the previous "syntactically perfect valid" translation.
|
||||
|
||||
### I want to revert a broken change, some translator just did via eints.
|
||||
|
||||
You have to revert the translations via the WebTranslator interface.
|
||||
If there are many changes, ask someone with Admin access to eints, so they can manually upload a fixed translation file to eints.
|
||||
|
||||
You cannot revert translations changes via PR. Eints merges translations from git and from web by keeping a translation history, and committing the newest translation to git.
|
||||
If you revert to an old translation in git, eints will simply think git did not yet get the newer translation, and commit it again.
|
@@ -79,7 +79,7 @@ the array so you can quickly see what is used and what is not.
|
||||
<tr>
|
||||
<td rowspan="2">0</td>
|
||||
<td class="caption">ground</td>
|
||||
<td class="bits" rowspan=27><span class="used" title="Tile type">XXXX</span> <span class="used" title="Presence and direction of bridge above">XX</span> <span class="used" title="Tropic Zone: only meaningfull in tropic climate. It contains the definition of the available zones">XX</span></td>
|
||||
<td class="bits" rowspan=27><span class="used" title="Tile type">XXXX</span> <span class="used" title="Presence and direction of bridge above">XX</span> <span class="used" title="Tropic Zone: only meaningful in tropic climate. It contains the definition of the available zones">XX</span></td>
|
||||
<td class="bits" rowspan=27><span class="used" title="Tile height">XXXX XXXX</span></td>
|
||||
<td class="bits" rowspan=2><span class="free">OOO</span><span class="usable" title="Owner (always OWNER_NONE)">1 OOOO</span></td>
|
||||
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
||||
|
@@ -1,225 +1,207 @@
|
||||
# Multiplayer manual for OpenTTD
|
||||
|
||||
Last updated: 2011-02-16
|
||||
|
||||
|
||||
## Table of contents
|
||||
|
||||
- 1.0) [Starting a server](#10-starting-a-server)
|
||||
- 2.0) [Connecting to a server](#20-connecting-to-a-server)
|
||||
- 2.1) [Connecting to a server over the console](#21-connecting-to-a-server-over-the-console)
|
||||
- 2.1) [Connecting to a server over the console](#21-connecting-to-a-server-over-the-console)
|
||||
- 3.0) [Playing internet games](#30-playing-internet-games)
|
||||
- 4.0) [Tips for servers](#40-tips-for-servers)
|
||||
- 4.1)[Imposing landscaping limits](#41-imposing-landscaping-limits)
|
||||
- 4.1)[Imposing landscaping limits](#41-imposing-landscaping-limits)
|
||||
- 5.0) [Some useful things](#50-some-useful-things)
|
||||
- 6.0) [Troubleshooting](#60-troubleshooting)
|
||||
|
||||
|
||||
## 1.0) Starting a server
|
||||
|
||||
- Make sure that you have your firewall of the computer as well as possible
|
||||
routers or modems of the server configured such that:
|
||||
- port 3979 is free for both UDP and TCP connections in- and outgoing
|
||||
- port 3978 is free outbound for UDP in order to advertise with the master
|
||||
server (if desired). Otherwise you'll have to tell players your IP.
|
||||
- port 3977 if use of the admin interface is desired (see admin_network.txt)
|
||||
- Click "multiplayer" on the startup screen
|
||||
- Click "start server"
|
||||
- Type in a game name
|
||||
- Select the type of game ('LAN/Internet' or 'Internet (advertise)'. With the
|
||||
last one other people are able to see you online. Else they need your IP and
|
||||
port to join)
|
||||
- Click "start game", "load game" or "load scenario"
|
||||
- Start playing
|
||||
|
||||
- Click on "Multiplayer" in the Start Menu.
|
||||
- Click on "Start Server".
|
||||
- Give your server a name.
|
||||
- Select the visibility of your server:
|
||||
- "Public": your server will be publicly listed.
|
||||
- "Invite Only": only players who have the invite code for your server can
|
||||
join.
|
||||
- "Local": only players on your local network can join.
|
||||
- (optional) Set a password for your server.
|
||||
- Click "New Game", "Load Game", or "Play Scenario".
|
||||
- Start playing.
|
||||
|
||||
## 2.0) Connecting to a server
|
||||
|
||||
- Click "multiplayer" on the startup screen
|
||||
- If you want to connect to any network game in your LAN click on 'LAN', then
|
||||
on 'Find Server'
|
||||
- If you want to see which servers all online on the Internet, click on
|
||||
'Internet' and 'Find Server'
|
||||
- If there were more than one server
|
||||
- select one in the list below the buttons
|
||||
- click on 'join game'
|
||||
- If you want to play and you have the ip or hostname of the game server you
|
||||
want connect to.
|
||||
- click add server
|
||||
- type in the ip address or hostname
|
||||
- if you want to add a port use :<port>
|
||||
- If you want to play and you have the invite code of the game server you
|
||||
want connect to.
|
||||
- click add server
|
||||
- type in the invite code
|
||||
- Now you can select a company and press: "Join company", to help that company
|
||||
- Or you can press "Spectate game", to spectate the game
|
||||
- Or you can press "New company", and start your own company (if there are
|
||||
slots free)
|
||||
- You see a progressbar how far you are with joining the server.
|
||||
- Happy playing
|
||||
- Click on "Multiplayer" in the Start Menu.
|
||||
- There are three ways to join a server:
|
||||
- If you want to connect to a local server, click "Search LAN".
|
||||
- If you want to connect to a public game, click "Search internet".
|
||||
- If the server-owner shared an invite code with you:
|
||||
- Click "Add Server".
|
||||
- Fill in the invite code, which always starts with a `+`.
|
||||
- Click "OK".
|
||||
- Click on the server you want to join.
|
||||
- Click "Join Game".
|
||||
- If the server has a password, it will ask you for this.
|
||||
- You see a progressbar how far you are with joining the server.
|
||||
- Happy playing.
|
||||
|
||||
## 2.1) Connecting to a server over the console
|
||||
|
||||
- Open the console and type in the following command:
|
||||
connect `<ip/host>:<port>#<company-no>`
|
||||
|
||||
- Open the console and type `connect` for help how to connect via the console.
|
||||
|
||||
## 3.0) Playing internet games
|
||||
|
||||
- Servers with a red dot behind it have a different version then you have. You
|
||||
will not be able to join those servers.
|
||||
- Servers with a red dot behind it have a different version then you have. You
|
||||
will not be able to join those servers.
|
||||
|
||||
- Servers with a yellow dot behind it have NewGRFs that you do not have. You
|
||||
will not be able to join those servers. However, via "NewGRF Settings" and
|
||||
"Find missing content online" you might be able to download the needed
|
||||
NewGRFs after which you can join the server.
|
||||
- Servers with a yellow dot behind it have NewGRFs that you do not have. You
|
||||
will not be able to join those servers. However, via "NewGRF Settings" and
|
||||
"Find missing content online" you might be able to download the needed
|
||||
NewGRFs after which you can join the server.
|
||||
|
||||
- It can happen that a connection is that slow, or you have that many clients
|
||||
connected to your server, that your clients start to loose their connection.
|
||||
Some things you can do about it:
|
||||
- [network] frame_freq:
|
||||
change it in console with: 'set network.frame_freq <number>'
|
||||
the number should be between the 0 and 10, not much higher. It indicates
|
||||
the delay between clicking and showing up. The higher, the more you notice
|
||||
it, but the less bandwidth you use.
|
||||
A good value for Internet-games is 2 or 3.
|
||||
- It can happen that a connection is that slow, or you have that many clients
|
||||
connected to your server, that your clients start to loose their connection.
|
||||
Some things you can do about it:
|
||||
- `[network] frame_freq`:
|
||||
change it in console with: `set network.frame_freq <number>`
|
||||
the number should be between the 0 and 10, not much higher. It indicates
|
||||
the delay between clicking and showing up. The higher, the more you notice
|
||||
it, but the less bandwidth you use.
|
||||
A good value for Internet-games is 2 or 3.
|
||||
|
||||
- [network] sync_freq:
|
||||
change it in console with: 'set network.sync_freq <number>'
|
||||
the number should be between the 50 and 1000, not much lower, not much
|
||||
higher. It indicates the time between sync-frames. A sync-frame is a frame
|
||||
which checks if all clients are still in sync. When the value it too high,
|
||||
clients can desync in 1960, but the server detects it in 1970. Not really
|
||||
handy. The lower the value, the more bandwidth it uses.
|
||||
|
||||
NB: changing frame_freq has more effect on the bandwidth then sync_freq.
|
||||
- `[network] sync_freq`:
|
||||
change it in console with: `set network.sync_freq <number>`
|
||||
the number should be between the 50 and 1000, not much lower, not much
|
||||
higher. It indicates the time between sync-frames. A sync-frame is a frame
|
||||
which checks if all clients are still in sync. When the value it too high,
|
||||
clients can desync in 1960, but the server detects it in 1970. Not really
|
||||
handy. The lower the value, the more bandwidth it uses.
|
||||
|
||||
NB: changing `frame_freq` has more effect on the bandwidth then `sync_freq`.
|
||||
|
||||
## 4.0) Tips for servers
|
||||
|
||||
- You can launch a dedicated server by adding -D as parameter.
|
||||
- In UNIX like systems, you can fork your dedicated server by adding -f as
|
||||
parameter.
|
||||
- You can launch a dedicated server by adding `-D` as parameter.
|
||||
- In UNIX like systems, you can fork your dedicated server by adding `-f` as
|
||||
parameter.
|
||||
|
||||
- You can automatically clean companies that do not have a client connected to
|
||||
them, for, let's say, 3 years. You can do this via: 'set autoclean_companies'
|
||||
and 'set autoclean_protected' and 'set autoclean_unprotected'. Unprotected
|
||||
removes a password from a company when it is not used for more then the
|
||||
defined amount of months. 'set autoclean_novehicles' can be used to remove
|
||||
companies without any vehicles quickly.
|
||||
- You can automatically clean companies that do not have a client connected to
|
||||
them, for, let's say, 3 years. You can do this via: `set autoclean_companies`
|
||||
and `set autoclean_protected` and `set autoclean_unprotected`. Unprotected
|
||||
removes a password from a company when it is not used for more then the
|
||||
defined amount of months. `set autoclean_novehicles` can be used to remove
|
||||
companies without any vehicles quickly.
|
||||
|
||||
- You can also do this manually via the console: 'reset_company'.
|
||||
- You can also do this manually via the console: `reset_company`.
|
||||
|
||||
- You can let your server automatically restart a map when, let's say, year 2030
|
||||
is reached. See 'set restart_game_date' for detail.
|
||||
- You can let your server automatically restart a map when, let's say,
|
||||
year 2030 is reached. See `set restart_game_date` for detail.
|
||||
|
||||
- If you want to be on the server-list, make your server public. You can do
|
||||
this either from the Start Server GUI, via the in-game Online Players GUI,
|
||||
or by typing in the console:
|
||||
'set server_game_type public'.
|
||||
- If you want to be on the server-list, make your server public. You can do
|
||||
this either from the Start Server window, via the in-game Online Players
|
||||
window, or by typing in the console: `set server_game_type public`.
|
||||
|
||||
- You can protect your server with a password via the console: 'set server_pw',
|
||||
or via the Start Server menu.
|
||||
- You can protect your server with a password via the console: `set server_pw`,
|
||||
or via the Start Server menu.
|
||||
|
||||
- When you have many clients connected to your server via Internet, watch your
|
||||
bandwidth (if you have any limit on it, set by your ISP). One client uses
|
||||
about 1.5 kilobytes per second up and down. To decrease this amount, setting
|
||||
'frame_freq' to 1 will reduce it to roughly 1 kilobyte per second per client.
|
||||
- When you have many clients connected to your server via Internet, watch your
|
||||
bandwidth (if you have any limit on it, set by your ISP). One client uses
|
||||
about 1.5 kilobytes per second up and down. To decrease this amount, setting
|
||||
`frame_freq` to 1 will reduce it to roughly 1 kilobyte per second per client.
|
||||
|
||||
- OpenTTD's default settings for maximum number of clients, and amount of data
|
||||
from clients to process are chosen to not influence the normal playing of
|
||||
people, but to prevent or at least make it less likely that someone can
|
||||
perform a (distributed) denial-of-service attack on your server by causing
|
||||
an out-of-memory event by flooding the server with data to send to all
|
||||
clients. The major factor in this is the maximum number of clients; with
|
||||
32 clients "only" sending one chat message causes 1024 messages to be
|
||||
distributed in total, with 64 clients that already quadruples to 4096. Given
|
||||
that upstream bandwidth is usually the limiting factor, a queue of packets
|
||||
that need to be sent will be created.
|
||||
To prevent clients from exploiting this "explosion" of packets to send we
|
||||
limit the number of incoming data, resulting in effectively limiting the
|
||||
amount of data that OpenTTD will send to the clients. Even with the default
|
||||
limits it is possible to generate about 70.000 packets per second, or about
|
||||
7 megabit per second of traffic.
|
||||
Given that OpenTTD kicks clients after they have not reacted within about 9
|
||||
seconds from sending a frame update packet it would be possible that OpenTTD
|
||||
keeps about 600.000 packets in memory, using about 50 megabytes of memory.
|
||||
Given that OpenTTD allows short bursts of packets, you can have slightly
|
||||
more packets in memory in case of a distributed denial of service attack.
|
||||
When increasing the amount of incoming data, or the maximum number of
|
||||
clients the amount of memory OpenTTD needs in case of a distributed denial
|
||||
of service attack is linearly related to the amount of incoming data and
|
||||
quadratic to the amount of clients. In short, a rule of thumb for, the
|
||||
maximum memory usage for packets is:
|
||||
#max_clients * #max_clients * bytes_per_frame * 10 KiB.
|
||||
- OpenTTD's default settings for maximum number of clients, and amount of data
|
||||
from clients to process are chosen to not influence the normal playing of
|
||||
people, but to prevent or at least make it less likely that someone can
|
||||
perform a (distributed) denial-of-service attack on your server by causing
|
||||
an out-of-memory event by flooding the server with data to send to all
|
||||
clients. The major factor in this is the maximum number of clients; with
|
||||
32 clients "only" sending one chat message causes 1024 messages to be
|
||||
distributed in total, with 64 clients that already quadruples to 4096. Given
|
||||
that upstream bandwidth is usually the limiting factor, a queue of packets
|
||||
that need to be sent will be created.
|
||||
To prevent clients from exploiting this "explosion" of packets to send we
|
||||
limit the number of incoming data, resulting in effectively limiting the
|
||||
amount of data that OpenTTD will send to the clients. Even with the default
|
||||
limits it is possible to generate about 70.000 packets per second, or about
|
||||
7 megabit per second of traffic.
|
||||
Given that OpenTTD kicks clients after they have not reacted within about 9
|
||||
seconds from sending a frame update packet it would be possible that OpenTTD
|
||||
keeps about 600.000 packets in memory, using about 50 megabytes of memory.
|
||||
Given that OpenTTD allows short bursts of packets, you can have slightly
|
||||
more packets in memory in case of a distributed denial of service attack.
|
||||
When increasing the amount of incoming data, or the maximum number of
|
||||
clients the amount of memory OpenTTD needs in case of a distributed denial
|
||||
of service attack is linearly related to the amount of incoming data and
|
||||
quadratic to the amount of clients. In short, a rule of thumb for, the
|
||||
maximum memory usage for packets is:
|
||||
`#max_clients * #max_clients * bytes_per_frame * 10 KiB`.
|
||||
|
||||
### 4.1) Imposing landscaping limits
|
||||
|
||||
- You can impose limits on companies by the following 4 settings:
|
||||
- terraform_per_64k_frames
|
||||
- terraform_frame_burst
|
||||
- clear_per_64k_frames
|
||||
- clear_frame_burst
|
||||
- You can impose limits on companies by the following 4 settings:
|
||||
- `terraform_per_64k_frames`
|
||||
- `terraform_frame_burst`
|
||||
- `clear_per_64k_frames`
|
||||
- `clear_frame_burst`
|
||||
|
||||
- Explaining 'per_64K_frames' and 'burst'
|
||||
- 'burst' defines 3 things, the maximum limit, the limit of a single action,
|
||||
and the initial value for the limit assigned to a new company.
|
||||
This setting is fairly simple and requires no math.
|
||||
- Explaining `NNN_burst` and `NNN_per_64K_frames`
|
||||
- `NNN_burst` defines 3 things, the maximum limit, the limit of a single
|
||||
action, and the initial value for the limit assigned to a new company.
|
||||
This setting is fairly simple and requires no math.
|
||||
|
||||
A value of 1 means a single tile can be affected by a single action.
|
||||
This results in having to click 400 times when wanting to cover an area
|
||||
of 20 x 20 tiles.
|
||||
A value of 1 means a single tile can be affected by a single action.
|
||||
This results in having to click 400 times when wanting to cover an area
|
||||
of 20 x 20 tiles.
|
||||
|
||||
The default value 4096 covers an area of 64 x 64 tiles.
|
||||
The default value 4096 covers an area of 64 x 64 tiles.
|
||||
|
||||
- 'per_64k_frames' defines the number of tiles added to each companies limit
|
||||
per frame (however not past the possible maximum value,the 'burst').
|
||||
64k rather resembles the exact number of 65536 frames. So setting this
|
||||
variable to 65536 means: 65536 / 65536 = 1 tile per frame.
|
||||
As a day consists of 74 frames, a company's limit is increased by 74
|
||||
tiles during the course of a single day (2.22 seconds).
|
||||
- `NNN_per_64K_frames` defines the number of tiles added to each companies
|
||||
limit per frame (however not past the possible maximum value,the
|
||||
`NNN_burst`). 64k rather resembles the exact number of 65536 frames. So
|
||||
setting this variable to 65536 means: `65536 / 65536 = 1 tile per frame`.
|
||||
|
||||
To achieve a 1 tile per day increase the following calculation is needed:
|
||||
1 / 74 (frames per day) * 65536 (per_64k_frames) = 885.62...
|
||||
after rounding: a value of 886 means adding a bit over 1 tile per day.
|
||||
As a day consists of 74 frames, a company's limit is increased by 74
|
||||
tiles during the course of a single day (2.22 seconds).
|
||||
To achieve a 1 tile per day increase the following calculation is needed:
|
||||
`1 / 74 (frames per day) * 65536 (per_64k_frames) = 885.62...`.
|
||||
After rounding: a value of 886 means adding a bit over 1 tile per day.
|
||||
|
||||
There is still enough space to scale this value downwards:
|
||||
decreasing this value to 127 results in a bit over 1 tile added to the
|
||||
allowance per week (7 days).
|
||||
There is still enough space to scale this value downwards:
|
||||
decreasing this value to 127 results in a bit over 1 tile added to the
|
||||
allowance per week (7 days).
|
||||
|
||||
To create a setup in which a company gets an initial allowance only,
|
||||
set the value to 0 - no increase of the allowance per frame.
|
||||
|
||||
- Even though construction actions include a clear tile action, they are not
|
||||
affected by the above settings.
|
||||
To create a setup in which a company gets an initial allowance only,
|
||||
set the value to 0 - no increase of the allowance per frame.
|
||||
|
||||
- Even though construction actions include a clear tile action, they are not
|
||||
affected by the above settings.
|
||||
|
||||
## 5.0) Some useful things
|
||||
|
||||
- You can protect your company so nobody else can join uninvited. To do this,
|
||||
set a password in your Company Screen
|
||||
- You can protect your company so nobody else can join uninvited. To do this,
|
||||
set a password in your Company window.
|
||||
|
||||
- You can give other players some money via the ClientList (under the 'head'
|
||||
in the mainbar).
|
||||
|
||||
- You can chat with other players via ENTER or via SHIFT+T or via the ClientList
|
||||
|
||||
- Servers can now kick players, so don't make them use it!
|
||||
- You can chat with other players via ENTER or via SHIFT+T or via the Online
|
||||
Players window
|
||||
|
||||
- Servers can kick players, so don't make them use it!
|
||||
|
||||
## 6.0) Troubleshooting
|
||||
|
||||
- My advertising server does not show up in list at servers.openttd.org
|
||||
Run openttd with the '-d net=2' parameter. That will show which incoming
|
||||
communication is received, whether the replies from the master server or
|
||||
communication from an admin tool reach the programme. See section 1
|
||||
'Starting a server' further up for the ports and protocols used by OpenTTD.
|
||||
The ports can be configured in the config file.
|
||||
### My server does not show up in the serverlist
|
||||
|
||||
- My advertising server warns a lot about getaddrinfo taking N seconds
|
||||
This could be a transient issue with your (local) DNS server, but if the
|
||||
problem persists there is likely a configuration issue in DNS resolving
|
||||
on your computer. This seems to be a common configuration issue for
|
||||
Docker instances, where the DNS resolving waits for a time out of usually
|
||||
5 seconds.
|
||||
Check if the visibility of your server is set to `public`.
|
||||
|
||||
If it is, and your server still isn't showing up, start OpenTTD with
|
||||
`-d net=4` as extra argument. This will show debug message related to the
|
||||
network, including communication to/from the Game Coordinator.
|
||||
|
||||
### My server warns a lot about getaddrinfo taking N seconds
|
||||
|
||||
This could be a transient issue with your (local) DNS server, but if the
|
||||
problem persists there is likely a configuration issue in DNS resolving on
|
||||
your computer.
|
||||
|
||||
#### Running OpenTTD in a Docker container?
|
||||
|
||||
This is an issue with dual-stack Docker containers. If there is no default
|
||||
IPv6 resolver and IPv6 traffic is preferred, DNS requests will time out after
|
||||
5 seconds. To resolve this, use an IPv4 DNS server for your Docker container,
|
||||
for example by adding `--dns 1.1.1.1` to your `docker run` command.
|
||||
|
BIN
media/openttd.1024.png
Normal file
BIN
media/openttd.1024.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
BIN
media/openttd.2048.png
Normal file
BIN
media/openttd.2048.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 148 KiB |
BIN
media/openttd.512.png
Normal file
BIN
media/openttd.512.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
@@ -547,6 +547,8 @@ function Regression::Prices()
|
||||
print(" BT_DOCK: " + AIMarine.GetBuildCost(AIMarine.BT_DOCK));
|
||||
print(" BT_DEPOT: " + AIMarine.GetBuildCost(AIMarine.BT_DEPOT));
|
||||
print(" BT_BUOY: " + AIMarine.GetBuildCost(AIMarine.BT_BUOY));
|
||||
print(" BT_LOCK: " + AIMarine.GetBuildCost(AIMarine.BT_LOCK));
|
||||
print(" BT_CANAL: " + AIMarine.GetBuildCost(AIMarine.BT_CANAL));
|
||||
print(" -Tile-");
|
||||
print(" BT_FOUNDATION: " + AITile.GetBuildCost(AITile.BT_FOUNDATION));
|
||||
print(" BT_TERRAFORM: " + AITile.GetBuildCost(AITile.BT_TERRAFORM));
|
||||
@@ -556,6 +558,7 @@ function Regression::Prices()
|
||||
print(" BT_CLEAR_ROCKY: " + AITile.GetBuildCost(AITile.BT_CLEAR_ROCKY));
|
||||
print(" BT_CLEAR_FIELDS: " + AITile.GetBuildCost(AITile.BT_CLEAR_FIELDS));
|
||||
print(" BT_CLEAR_HOUSE: " + AITile.GetBuildCost(AITile.BT_CLEAR_HOUSE));
|
||||
print(" BT_CLEAR_WATER: " + AITile.GetBuildCost(AITile.BT_CLEAR_WATER));
|
||||
}
|
||||
|
||||
function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; }
|
||||
@@ -919,6 +922,9 @@ function Regression::Marine()
|
||||
|
||||
print(" BuildWaterDepot(): " + AIMarine.BuildWaterDepot(28479, 28480));
|
||||
print(" BuildDock(): " + AIMarine.BuildDock(29253, AIStation.STATION_JOIN_ADJACENT));
|
||||
print(" BuildBuoy(): " + AIMarine.BuildBuoy(28481));
|
||||
print(" BuildLock(): " + AIMarine.BuildLock(28487));
|
||||
print(" BuildCanal(): " + AIMarine.BuildCanal(28744));
|
||||
}
|
||||
|
||||
function Regression::Order()
|
||||
@@ -1470,9 +1476,41 @@ function Regression::TileList()
|
||||
print(" " + i + " => " + list.GetValue(i));
|
||||
}
|
||||
|
||||
list.AddRectangle(54421 - 256 * 2, 256 * 2 + 54421 + 8);
|
||||
list.AddRectangle(0x6F3F, 0x7248);
|
||||
list.Valuate(AITile.IsWaterTile);
|
||||
print(" Water(): done");
|
||||
print(" IsWaterTile(): done");
|
||||
print(" Count(): " + list.Count());
|
||||
print(" ListDump:");
|
||||
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
|
||||
print(" " + i + " => " + list.GetValue(i));
|
||||
}
|
||||
|
||||
list.Valuate(AITile.IsSeaTile);
|
||||
print(" IsSeaTile(): done");
|
||||
print(" Count(): " + list.Count());
|
||||
print(" ListDump:");
|
||||
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
|
||||
print(" " + i + " => " + list.GetValue(i));
|
||||
}
|
||||
|
||||
list.Valuate(AITile.IsRiverTile);
|
||||
print(" IsRiverTile() done");
|
||||
print(" Count(): " + list.Count());
|
||||
print(" ListDump:");
|
||||
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
|
||||
print(" " + i + " => " + list.GetValue(i));
|
||||
}
|
||||
|
||||
list.Valuate(AIMarine.IsCanalTile);
|
||||
print(" IsCanalTile() done");
|
||||
print(" Count(): " + list.Count());
|
||||
print(" ListDump:");
|
||||
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
|
||||
print(" " + i + " => " + list.GetValue(i));
|
||||
}
|
||||
|
||||
list.Valuate(AITile.IsCoastTile);
|
||||
print(" IsCoastTile() done");
|
||||
print(" Count(): " + list.Count());
|
||||
print(" ListDump:");
|
||||
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
|
||||
|
@@ -7365,6 +7365,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetBankBalance(): 1999959285
|
||||
BuildWaterDepot(): true
|
||||
BuildDock(): true
|
||||
BuildBuoy(): true
|
||||
BuildLock(): true
|
||||
BuildCanal(): true
|
||||
|
||||
--Prices--
|
||||
-Rail-
|
||||
@@ -7391,6 +7394,8 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
BT_DOCK: 262
|
||||
BT_DEPOT: 525
|
||||
BT_BUOY: 262
|
||||
BT_LOCK: 5625
|
||||
BT_CANAL: 3750
|
||||
-Tile-
|
||||
BT_FOUNDATION: 187
|
||||
BT_TERRAFORM: 187
|
||||
@@ -7400,6 +7405,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
BT_CLEAR_ROCKY: 150
|
||||
BT_CLEAR_FIELDS: 375
|
||||
BT_CLEAR_HOUSE: 1200
|
||||
BT_CLEAR_WATER: 7500
|
||||
|
||||
--Rail--
|
||||
IsRailTile(): false
|
||||
@@ -8450,54 +8456,221 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
KeepValue(1): done
|
||||
Count(): 0
|
||||
ListDump:
|
||||
Water(): done
|
||||
Count(): 45
|
||||
IsWaterTile(): done
|
||||
Count(): 40
|
||||
ListDump:
|
||||
54941 => 1
|
||||
54940 => 1
|
||||
54939 => 1
|
||||
54938 => 1
|
||||
54937 => 1
|
||||
54936 => 1
|
||||
54935 => 1
|
||||
54934 => 1
|
||||
54933 => 1
|
||||
54685 => 1
|
||||
54684 => 1
|
||||
54683 => 1
|
||||
54682 => 1
|
||||
54681 => 1
|
||||
54680 => 1
|
||||
54679 => 1
|
||||
54678 => 1
|
||||
54677 => 1
|
||||
54429 => 1
|
||||
54428 => 1
|
||||
54427 => 1
|
||||
54426 => 1
|
||||
54425 => 1
|
||||
54424 => 1
|
||||
54423 => 1
|
||||
54422 => 1
|
||||
54421 => 1
|
||||
54173 => 1
|
||||
54172 => 1
|
||||
54171 => 1
|
||||
54170 => 1
|
||||
54169 => 1
|
||||
54168 => 0
|
||||
54167 => 0
|
||||
54166 => 0
|
||||
54165 => 0
|
||||
53917 => 0
|
||||
53916 => 0
|
||||
53915 => 0
|
||||
53914 => 0
|
||||
53913 => 0
|
||||
53912 => 0
|
||||
53911 => 0
|
||||
53910 => 0
|
||||
53909 => 0
|
||||
29251 => 1
|
||||
29250 => 1
|
||||
29249 => 1
|
||||
29248 => 1
|
||||
29247 => 1
|
||||
28996 => 1
|
||||
28995 => 1
|
||||
28994 => 1
|
||||
28993 => 1
|
||||
28992 => 1
|
||||
28991 => 1
|
||||
28744 => 1
|
||||
28741 => 1
|
||||
28740 => 1
|
||||
28739 => 1
|
||||
28738 => 1
|
||||
28737 => 1
|
||||
28736 => 1
|
||||
28735 => 1
|
||||
28488 => 1
|
||||
28487 => 1
|
||||
28486 => 1
|
||||
28485 => 1
|
||||
28484 => 1
|
||||
28483 => 1
|
||||
28482 => 1
|
||||
28480 => 1
|
||||
28479 => 1
|
||||
29256 => 0
|
||||
29255 => 0
|
||||
29254 => 0
|
||||
29253 => 0
|
||||
29252 => 0
|
||||
29000 => 0
|
||||
28999 => 0
|
||||
28998 => 0
|
||||
28997 => 0
|
||||
28743 => 0
|
||||
28742 => 0
|
||||
28481 => 0
|
||||
IsSeaTile(): done
|
||||
Count(): 40
|
||||
ListDump:
|
||||
29251 => 1
|
||||
29250 => 1
|
||||
29249 => 1
|
||||
29248 => 1
|
||||
29247 => 1
|
||||
28996 => 1
|
||||
28995 => 1
|
||||
28994 => 1
|
||||
28993 => 1
|
||||
28992 => 1
|
||||
28991 => 1
|
||||
28741 => 1
|
||||
28740 => 1
|
||||
28739 => 1
|
||||
28738 => 1
|
||||
28737 => 1
|
||||
28736 => 1
|
||||
28735 => 1
|
||||
28485 => 1
|
||||
28484 => 1
|
||||
28483 => 1
|
||||
28482 => 1
|
||||
29256 => 0
|
||||
29255 => 0
|
||||
29254 => 0
|
||||
29253 => 0
|
||||
29252 => 0
|
||||
29000 => 0
|
||||
28999 => 0
|
||||
28998 => 0
|
||||
28997 => 0
|
||||
28744 => 0
|
||||
28743 => 0
|
||||
28742 => 0
|
||||
28488 => 0
|
||||
28487 => 0
|
||||
28486 => 0
|
||||
28481 => 0
|
||||
28480 => 0
|
||||
28479 => 0
|
||||
IsRiverTile() done
|
||||
Count(): 40
|
||||
ListDump:
|
||||
29256 => 0
|
||||
29255 => 0
|
||||
29254 => 0
|
||||
29253 => 0
|
||||
29252 => 0
|
||||
29251 => 0
|
||||
29250 => 0
|
||||
29249 => 0
|
||||
29248 => 0
|
||||
29247 => 0
|
||||
29000 => 0
|
||||
28999 => 0
|
||||
28998 => 0
|
||||
28997 => 0
|
||||
28996 => 0
|
||||
28995 => 0
|
||||
28994 => 0
|
||||
28993 => 0
|
||||
28992 => 0
|
||||
28991 => 0
|
||||
28744 => 0
|
||||
28743 => 0
|
||||
28742 => 0
|
||||
28741 => 0
|
||||
28740 => 0
|
||||
28739 => 0
|
||||
28738 => 0
|
||||
28737 => 0
|
||||
28736 => 0
|
||||
28735 => 0
|
||||
28488 => 0
|
||||
28487 => 0
|
||||
28486 => 0
|
||||
28485 => 0
|
||||
28484 => 0
|
||||
28483 => 0
|
||||
28482 => 0
|
||||
28481 => 0
|
||||
28480 => 0
|
||||
28479 => 0
|
||||
IsCanalTile() done
|
||||
Count(): 40
|
||||
ListDump:
|
||||
28744 => 1
|
||||
29256 => 0
|
||||
29255 => 0
|
||||
29254 => 0
|
||||
29253 => 0
|
||||
29252 => 0
|
||||
29251 => 0
|
||||
29250 => 0
|
||||
29249 => 0
|
||||
29248 => 0
|
||||
29247 => 0
|
||||
29000 => 0
|
||||
28999 => 0
|
||||
28998 => 0
|
||||
28997 => 0
|
||||
28996 => 0
|
||||
28995 => 0
|
||||
28994 => 0
|
||||
28993 => 0
|
||||
28992 => 0
|
||||
28991 => 0
|
||||
28743 => 0
|
||||
28742 => 0
|
||||
28741 => 0
|
||||
28740 => 0
|
||||
28739 => 0
|
||||
28738 => 0
|
||||
28737 => 0
|
||||
28736 => 0
|
||||
28735 => 0
|
||||
28488 => 0
|
||||
28487 => 0
|
||||
28486 => 0
|
||||
28485 => 0
|
||||
28484 => 0
|
||||
28483 => 0
|
||||
28482 => 0
|
||||
28481 => 0
|
||||
28480 => 0
|
||||
28479 => 0
|
||||
IsCoastTile() done
|
||||
Count(): 40
|
||||
ListDump:
|
||||
28998 => 1
|
||||
28997 => 1
|
||||
28743 => 1
|
||||
28742 => 1
|
||||
29256 => 0
|
||||
29255 => 0
|
||||
29254 => 0
|
||||
29253 => 0
|
||||
29252 => 0
|
||||
29251 => 0
|
||||
29250 => 0
|
||||
29249 => 0
|
||||
29248 => 0
|
||||
29247 => 0
|
||||
29000 => 0
|
||||
28999 => 0
|
||||
28996 => 0
|
||||
28995 => 0
|
||||
28994 => 0
|
||||
28993 => 0
|
||||
28992 => 0
|
||||
28991 => 0
|
||||
28744 => 0
|
||||
28741 => 0
|
||||
28740 => 0
|
||||
28739 => 0
|
||||
28738 => 0
|
||||
28737 => 0
|
||||
28736 => 0
|
||||
28735 => 0
|
||||
28488 => 0
|
||||
28487 => 0
|
||||
28486 => 0
|
||||
28485 => 0
|
||||
28484 => 0
|
||||
28483 => 0
|
||||
28482 => 0
|
||||
28481 => 0
|
||||
28480 => 0
|
||||
28479 => 0
|
||||
|
||||
--TileList_IndustryAccepting--
|
||||
Count(): 47
|
||||
@@ -9099,12 +9272,12 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetLocation(): 33417
|
||||
GetEngineType(): 153
|
||||
GetUnitNumber(): 1
|
||||
GetAge(): 0
|
||||
GetAge(): 1
|
||||
GetMaxAge(): 5490
|
||||
GetAgeLeft(): 5490
|
||||
GetAgeLeft(): 5489
|
||||
GetCurrentSpeed(): 7
|
||||
GetRunningCost(): 421
|
||||
GetProfitThisYear(): 0
|
||||
GetProfitThisYear(): -1
|
||||
GetProfitLastYear(): 0
|
||||
GetCurrentValue(): 5947
|
||||
GetVehicleType(): 1
|
||||
@@ -9114,7 +9287,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
IsInDepot(): false
|
||||
GetNumWagons(): 1
|
||||
GetWagonEngineType(): 153
|
||||
GetWagonAge(): 0
|
||||
GetWagonAge(): 1
|
||||
GetLength(): 8
|
||||
GetOwner(): 1
|
||||
BuildVehicle(): 14
|
||||
@@ -9139,9 +9312,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetNumWagons(): 3
|
||||
GetLength(): 24
|
||||
GetWagonEngineType(): 9
|
||||
GetWagonAge(): 1
|
||||
GetWagonAge(): 0
|
||||
GetWagonEngineType(): 27
|
||||
GetWagonAge(): 1
|
||||
GetWagonAge(): 0
|
||||
GetWagonEngineType(): 27
|
||||
GetWagonAge(): 0
|
||||
GetWagonEngineType(): 65535
|
||||
@@ -9187,11 +9360,11 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
14 => 1
|
||||
12 => 1
|
||||
Age ListDump:
|
||||
17 => 1
|
||||
16 => 1
|
||||
14 => 1
|
||||
13 => 1
|
||||
12 => 1
|
||||
17 => 0
|
||||
16 => 0
|
||||
14 => 0
|
||||
MaxAge ListDump:
|
||||
16 => 10980
|
||||
14 => 10980
|
||||
@@ -9199,9 +9372,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
13 => 5490
|
||||
12 => 5490
|
||||
AgeLeft ListDump:
|
||||
16 => 10979
|
||||
14 => 10979
|
||||
17 => 7319
|
||||
16 => 10980
|
||||
14 => 10980
|
||||
17 => 7320
|
||||
13 => 5489
|
||||
12 => 5489
|
||||
CurrentSpeed ListDump:
|
||||
|
@@ -225,7 +225,7 @@ static const Command _command_proc_table[] = {
|
||||
DEF_CMD(CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNALS
|
||||
DEF_CMD(CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNALS
|
||||
DEF_CMD(CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_TERRAFORM_LAND
|
||||
DEF_CMD(CmdBuildObject, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_OBJECT
|
||||
DEF_CMD(CmdBuildObject, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_OBJECT
|
||||
DEF_CMD(CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TUNNEL
|
||||
DEF_CMD(CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_STATION
|
||||
DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAILD
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include "string_func.h"
|
||||
#include "fileio_func.h"
|
||||
#include "settings_type.h"
|
||||
#include <mutex>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include "os/windows/win32.h"
|
||||
@@ -26,6 +27,16 @@ SOCKET _debug_socket = INVALID_SOCKET;
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
/** Element in the queue of debug messages that have to be passed to either NetworkAdminConsole or IConsolePrint.*/
|
||||
struct QueuedDebugItem {
|
||||
std::string level; ///< The used debug level.
|
||||
std::string message; ///< The actual formatted message.
|
||||
};
|
||||
std::atomic<bool> _debug_remote_console; ///< Whether we need to send data to either NetworkAdminConsole or IConsolePrint.
|
||||
std::mutex _debug_remote_console_mutex; ///< Mutex to guard the queue of debug messages for either NetworkAdminConsole or IConsolePrint.
|
||||
std::vector<QueuedDebugItem> _debug_remote_console_queue; ///< Queue for debug messages to be passed to NetworkAdminConsole or IConsolePrint.
|
||||
std::vector<QueuedDebugItem> _debug_remote_console_queue_spare; ///< Spare queue to swap with _debug_remote_console_queue.
|
||||
|
||||
int _debug_driver_level;
|
||||
int _debug_grf_level;
|
||||
int _debug_map_level;
|
||||
@@ -107,6 +118,11 @@ void DebugPrint(const char *level, const std::string &message)
|
||||
{
|
||||
if (_debug_socket != INVALID_SOCKET) {
|
||||
std::string msg = fmt::format("{}dbg: [{}] {}\n", GetLogPrefix(), level, message);
|
||||
|
||||
/* Prevent sending a message concurrently, as that might cause interleaved messages. */
|
||||
static std::mutex _debug_socket_mutex;
|
||||
std::lock_guard<std::mutex> lock(_debug_socket_mutex);
|
||||
|
||||
/* Sending out an error when this fails would be nice, however... the error
|
||||
* would have to be send over this failing socket which won't work. */
|
||||
send(_debug_socket, msg.c_str(), (int)msg.size(), 0);
|
||||
@@ -130,8 +146,11 @@ void DebugPrint(const char *level, const std::string &message)
|
||||
std::string msg = fmt::format("{}dbg: [{}] {}\n", GetLogPrefix(), level, message);
|
||||
fputs(msg.c_str(), stderr);
|
||||
|
||||
NetworkAdminConsole(level, message);
|
||||
if (_settings_client.gui.developer >= 2) IConsolePrint(CC_DEBUG, "dbg: [{}] {}", level, message);
|
||||
if (_debug_remote_console.load()) {
|
||||
/* Only add to the queue when there is at least one consumer of the data. */
|
||||
std::lock_guard<std::mutex> lock(_debug_remote_console_mutex);
|
||||
_debug_remote_console_queue.push_back({ level, message });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,3 +248,47 @@ const char *GetLogPrefix()
|
||||
return _log_prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the queued Debug messages to either NetworkAdminConsole or IConsolePrint from the
|
||||
* GameLoop thread to prevent concurrent accesses to both the NetworkAdmin's packet queue
|
||||
* as well as IConsolePrint's buffers.
|
||||
*
|
||||
* This is to be called from the GameLoop thread.
|
||||
*/
|
||||
void DebugSendRemoteMessages()
|
||||
{
|
||||
if (!_debug_remote_console.load()) return;
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(_debug_remote_console_mutex);
|
||||
std::swap(_debug_remote_console_queue, _debug_remote_console_queue_spare);
|
||||
}
|
||||
|
||||
for (auto &item : _debug_remote_console_queue_spare) {
|
||||
NetworkAdminConsole(item.level, item.message);
|
||||
if (_settings_client.gui.developer >= 2) IConsolePrint(CC_DEBUG, "dbg: [{}] {}", item.level, item.message);
|
||||
}
|
||||
|
||||
_debug_remote_console_queue_spare.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reconsider whether we need to send debug messages to either NetworkAdminConsole
|
||||
* or IConsolePrint. The former is when they have enabled console handling whereas
|
||||
* the latter depends on the gui.developer setting's value.
|
||||
*
|
||||
* This is to be called from the GameLoop thread.
|
||||
*/
|
||||
void DebugReconsiderSendRemoteMessages()
|
||||
{
|
||||
bool enable = _settings_client.gui.developer >= 2;
|
||||
|
||||
for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) {
|
||||
if (as->update_frequency[ADMIN_UPDATE_CONSOLE] & ADMIN_FREQUENCY_AUTOMATIC) {
|
||||
enable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
_debug_remote_console.store(enable);
|
||||
}
|
||||
|
@@ -122,4 +122,7 @@ void CDECL ShowInfoF(const char *str, ...) WARN_FORMAT(1, 2);
|
||||
|
||||
const char *GetLogPrefix();
|
||||
|
||||
void DebugSendRemoteMessages();
|
||||
void DebugReconsiderSendRemoteMessages();
|
||||
|
||||
#endif /* DEBUG_H */
|
||||
|
56
src/gfx.cpp
56
src/gfx.cpp
@@ -1059,18 +1059,19 @@ void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub,
|
||||
/**
|
||||
* The code for setting up the blitter mode and sprite information before finally drawing the sprite.
|
||||
* @param sprite The sprite to draw.
|
||||
* @param x The X location to draw.
|
||||
* @param y The Y location to draw.
|
||||
* @param mode The settings for the blitter to pass.
|
||||
* @param sub Whether to only draw a sub set of the sprite.
|
||||
* @param zoom The zoom level at which to draw the sprites.
|
||||
* @param x The X location to draw.
|
||||
* @param y The Y location to draw.
|
||||
* @param mode The settings for the blitter to pass.
|
||||
* @param sub Whether to only draw a sub set of the sprite.
|
||||
* @param zoom The zoom level at which to draw the sprites.
|
||||
* @param dst Optional parameter for a different blitting destination.
|
||||
* @tparam ZOOM_BASE The factor required to get the sub sprite information into the right size.
|
||||
* @tparam SCALED_XY Whether the X and Y are scaled or unscaled.
|
||||
*/
|
||||
template <int ZOOM_BASE, bool SCALED_XY>
|
||||
static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mode, const SubSprite * const sub, SpriteID sprite_id, ZoomLevel zoom)
|
||||
static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mode, const SubSprite * const sub, SpriteID sprite_id, ZoomLevel zoom, const DrawPixelInfo *dst = nullptr)
|
||||
{
|
||||
const DrawPixelInfo *dpi = _cur_dpi;
|
||||
const DrawPixelInfo *dpi = (dst != nullptr) ? dst : _cur_dpi;
|
||||
Blitter::BlitterParams bp;
|
||||
|
||||
if (SCALED_XY) {
|
||||
@@ -1185,6 +1186,47 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo
|
||||
BlitterFactory::GetCurrentBlitter()->Draw(&bp, mode, zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a sprite to a new RGBA buffer (see Colour union) instead of drawing to the screen.
|
||||
*
|
||||
* @param spriteId The sprite to draw.
|
||||
* @return Pixel buffer, or nullptr if an 8bpp blitter is being used.
|
||||
*/
|
||||
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId)
|
||||
{
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
if (!blitter->Is32BppSupported()) return nullptr;
|
||||
|
||||
/* Gather information about the sprite to write, reserve memory */
|
||||
const SpriteID real_sprite = GB(spriteId, 0, SPRITE_WIDTH);
|
||||
const Sprite *sprite = GetSprite(real_sprite, ST_NORMAL);
|
||||
std::unique_ptr<uint32[]> result(new uint32[sprite->width * sprite->height]);
|
||||
|
||||
/* Prepare new DrawPixelInfo - Normally this would be the screen but we want to draw to another buffer here.
|
||||
* Normally, pitch would be scaled screen width, but in our case our "screen" is only the sprite width wide. */
|
||||
DrawPixelInfo dpi;
|
||||
dpi.dst_ptr = result.get();
|
||||
dpi.pitch = sprite->width;
|
||||
dpi.left = 0;
|
||||
dpi.top = 0;
|
||||
dpi.width = sprite->width;
|
||||
dpi.height = sprite->height;
|
||||
dpi.zoom = ZOOM_LVL_NORMAL;
|
||||
|
||||
/* Zero out the allocated memory, there may be garbage present. */
|
||||
uint32 *writeHead = (uint32*)result.get();
|
||||
for (int i = 0; i < sprite->width * sprite->height; i++) {
|
||||
writeHead[i] = 0;
|
||||
}
|
||||
|
||||
/* Temporarily disable screen animations while blitting - This prevents 40bpp_anim from writing to the animation buffer. */
|
||||
_screen_disable_anim = true;
|
||||
GfxBlitter<1, false>(sprite, 0, 0, BM_NORMAL, nullptr, real_sprite, ZOOM_LVL_NORMAL, &dpi);
|
||||
_screen_disable_anim = false;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id)
|
||||
{
|
||||
GfxBlitter<ZOOM_LVL_BASE, false>(sprite, x, y, mode, sub, sprite_id, _cur_dpi->zoom);
|
||||
|
@@ -68,6 +68,7 @@ extern std::vector<Dimension> _resolutions;
|
||||
extern Dimension _cur_resolution;
|
||||
extern Palette _cur_palette; ///< Current palette
|
||||
|
||||
void HandleToolbarHotkey(int hotkey);
|
||||
void HandleKeypress(uint keycode, WChar key);
|
||||
void HandleTextInput(const char *str, bool marked = false, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr);
|
||||
void HandleCtrlChanged();
|
||||
@@ -90,6 +91,7 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo);
|
||||
Dimension GetSpriteSize(SpriteID sprid, Point *offset = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr);
|
||||
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId);
|
||||
|
||||
int DrawString(int left, int right, int top, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL);
|
||||
int DrawString(int left, int right, int top, const std::string &str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL);
|
||||
|
@@ -888,6 +888,12 @@ Layouter::LineCacheItem &Layouter::GetCachedParagraphLayout(const char *str, siz
|
||||
linecache = new LineCache();
|
||||
}
|
||||
|
||||
if (auto match = linecache->find(LineCacheQuery{state, std::string_view{str, len}});
|
||||
match != linecache->end()) {
|
||||
return match->second;
|
||||
}
|
||||
|
||||
/* Create missing entry */
|
||||
LineCacheKey key;
|
||||
key.state_before = state;
|
||||
key.str.assign(str, len);
|
||||
|
@@ -17,6 +17,8 @@
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <stack>
|
||||
#include <string_view>
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
|
||||
#ifdef WITH_ICU_LX
|
||||
@@ -155,14 +157,25 @@ class Layouter : public std::vector<std::unique_ptr<const ParagraphLayouter::Lin
|
||||
struct LineCacheKey {
|
||||
FontState state_before; ///< Font state at the beginning of the line.
|
||||
std::string str; ///< Source string of the line (including colour and font size codes).
|
||||
};
|
||||
|
||||
/** Comparison operator for std::map */
|
||||
bool operator<(const LineCacheKey &other) const
|
||||
struct LineCacheQuery {
|
||||
FontState state_before; ///< Font state at the beginning of the line.
|
||||
std::string_view str; ///< Source string of the line (including colour and font size codes).
|
||||
};
|
||||
|
||||
/** Comparator for std::map */
|
||||
struct LineCacheCompare {
|
||||
using is_transparent = void; ///< Enable map queries with various key types
|
||||
|
||||
/** Comparison operator for LineCacheKey and LineCacheQuery */
|
||||
template<typename Key1, typename Key2>
|
||||
bool operator()(const Key1 &lhs, const Key2 &rhs) const
|
||||
{
|
||||
if (this->state_before.fontsize != other.state_before.fontsize) return this->state_before.fontsize < other.state_before.fontsize;
|
||||
if (this->state_before.cur_colour != other.state_before.cur_colour) return this->state_before.cur_colour < other.state_before.cur_colour;
|
||||
if (this->state_before.colour_stack != other.state_before.colour_stack) return this->state_before.colour_stack < other.state_before.colour_stack;
|
||||
return this->str < other.str;
|
||||
if (lhs.state_before.fontsize != rhs.state_before.fontsize) return lhs.state_before.fontsize < rhs.state_before.fontsize;
|
||||
if (lhs.state_before.cur_colour != rhs.state_before.cur_colour) return lhs.state_before.cur_colour < rhs.state_before.cur_colour;
|
||||
if (lhs.state_before.colour_stack != rhs.state_before.colour_stack) return lhs.state_before.colour_stack < rhs.state_before.colour_stack;
|
||||
return lhs.str < rhs.str;
|
||||
}
|
||||
};
|
||||
public:
|
||||
@@ -179,7 +192,7 @@ public:
|
||||
~LineCacheItem() { delete layout; free(buffer); }
|
||||
};
|
||||
private:
|
||||
typedef std::map<LineCacheKey, LineCacheItem> LineCache;
|
||||
typedef std::map<LineCacheKey, LineCacheItem, LineCacheCompare> LineCache;
|
||||
static LineCache *linecache;
|
||||
|
||||
static LineCacheItem &GetCachedParagraphLayout(const char *str, size_t len, const FontState &state);
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "company_base.h"
|
||||
#include "company_gui.h"
|
||||
#include "gui.h"
|
||||
|
||||
#include "widgets/group_widget.h"
|
||||
|
||||
@@ -745,17 +746,19 @@ public:
|
||||
NOT_REACHED();
|
||||
}
|
||||
if (v) {
|
||||
this->vehicle_sel = v->index;
|
||||
|
||||
if (_ctrl_pressed) {
|
||||
this->SelectGroup(v->group_id);
|
||||
if (this->grouping == GB_NONE) {
|
||||
this->SelectGroup(v->group_id);
|
||||
} else {
|
||||
ShowOrdersWindow(v);
|
||||
}
|
||||
} else {
|
||||
this->vehicle_sel = v->index;
|
||||
SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this);
|
||||
SetMouseCursorVehicle(v, EIT_IN_LIST);
|
||||
_cursor.vehchain = true;
|
||||
this->SetDirty();
|
||||
}
|
||||
|
||||
SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this);
|
||||
SetMouseCursorVehicle(v, EIT_IN_LIST);
|
||||
_cursor.vehchain = true;
|
||||
|
||||
this->SetDirty();
|
||||
}
|
||||
|
||||
break;
|
||||
|
@@ -769,6 +769,7 @@ public:
|
||||
const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? nullptr : GetIndustrySpec(this->selected_type);
|
||||
if (indsp == nullptr) this->enabled[this->selected_index] = _settings_game.difficulty.industry_density != ID_FUND_ONLY;
|
||||
this->SetButtons();
|
||||
this->SetDirty();
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -11,12 +11,14 @@
|
||||
#include "error.h"
|
||||
#include "gui.h"
|
||||
#include "window_gui.h"
|
||||
#include "window_func.h"
|
||||
#include "textbuf_gui.h"
|
||||
#include "network/network.h"
|
||||
#include "genworld.h"
|
||||
#include "network/network_gui.h"
|
||||
#include "network/network_content.h"
|
||||
#include "landscape_type.h"
|
||||
#include "landscape.h"
|
||||
#include "strings_func.h"
|
||||
#include "fios.h"
|
||||
#include "ai/ai_gui.hpp"
|
||||
@@ -25,6 +27,10 @@
|
||||
#include "language.h"
|
||||
#include "rev.h"
|
||||
#include "highscore.h"
|
||||
#include "signs_base.h"
|
||||
#include "viewport_func.h"
|
||||
#include "vehicle_base.h"
|
||||
#include <regex>
|
||||
|
||||
#include "widgets/intro_widget.h"
|
||||
|
||||
@@ -33,13 +39,203 @@
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
|
||||
/**
|
||||
* A viewport command for the main menu background (intro game).
|
||||
*/
|
||||
struct IntroGameViewportCommand {
|
||||
/** Horizontal alignment value. */
|
||||
enum AlignmentH : byte {
|
||||
LEFT,
|
||||
CENTRE,
|
||||
RIGHT,
|
||||
};
|
||||
/** Vertical alignment value. */
|
||||
enum AlignmentV : byte {
|
||||
TOP,
|
||||
MIDDLE,
|
||||
BOTTOM,
|
||||
};
|
||||
|
||||
int command_index = 0; ///< Sequence number of the command (order they are performed in).
|
||||
Point position{ 0, 0 }; ///< Calculated world coordinate to position viewport top-left at.
|
||||
VehicleID vehicle = INVALID_VEHICLE; ///< Vehicle to follow, or INVALID_VEHICLE if not following a vehicle.
|
||||
uint delay = 0; ///< Delay until next command.
|
||||
int zoom_adjust = 0; ///< Adjustment to zoom level from base zoom level.
|
||||
bool pan_to_next = false; ///< If true, do a smooth pan from this position to the next.
|
||||
AlignmentH align_h = CENTRE; ///< Horizontal alignment.
|
||||
AlignmentV align_v = MIDDLE; ///< Vertical alignment.
|
||||
|
||||
/**
|
||||
* Calculate effective position.
|
||||
* This will update the position field if a vehicle is followed.
|
||||
* @param vp Viewport to calculate position for.
|
||||
* @return Calculated position in the viewport.
|
||||
*/
|
||||
Point PositionForViewport(const Viewport *vp)
|
||||
{
|
||||
if (this->vehicle != INVALID_VEHICLE) {
|
||||
const Vehicle *v = Vehicle::Get(this->vehicle);
|
||||
this->position = RemapCoords(v->x_pos, v->y_pos, v->z_pos);
|
||||
}
|
||||
|
||||
Point p;
|
||||
switch (this->align_h) {
|
||||
case LEFT: p.x = this->position.x; break;
|
||||
case CENTRE: p.x = this->position.x - vp->virtual_width / 2; break;
|
||||
case RIGHT: p.x = this->position.x - vp->virtual_width; break;
|
||||
}
|
||||
switch (this->align_v) {
|
||||
case TOP: p.y = this->position.y; break;
|
||||
case MIDDLE: p.y = this->position.y - vp->virtual_height / 2; break;
|
||||
case BOTTOM: p.y = this->position.y - vp->virtual_height; break;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct SelectGameWindow : public Window {
|
||||
/** Vector of viewport commands parsed. */
|
||||
std::vector<IntroGameViewportCommand> intro_viewport_commands;
|
||||
/** Index of currently active viewport command. */
|
||||
size_t cur_viewport_command_index;
|
||||
/** Time spent (milliseconds) on current viewport command. */
|
||||
uint cur_viewport_command_time;
|
||||
|
||||
/**
|
||||
* Find and parse all viewport command signs.
|
||||
* Fills the intro_viewport_commands vector and deletes parsed signs from the world.
|
||||
*/
|
||||
void ReadIntroGameViewportCommands()
|
||||
{
|
||||
intro_viewport_commands.clear();
|
||||
|
||||
/* Regular expression matching the commands: T, spaces, integer, spaces, flags, spaces, integer */
|
||||
const char *sign_langauge = "^T\\s*([0-9]+)\\s*([-+A-Z0-9]+)\\s*([0-9]+)";
|
||||
std::regex re(sign_langauge, std::regex_constants::icase);
|
||||
|
||||
/* List of signs successfully parsed to delete afterwards. */
|
||||
std::vector<SignID> signs_to_delete;
|
||||
|
||||
for (const Sign *sign : Sign::Iterate()) {
|
||||
std::smatch match;
|
||||
if (std::regex_search(sign->name, match, re)) {
|
||||
IntroGameViewportCommand vc;
|
||||
/* Sequence index from the first matching group. */
|
||||
vc.command_index = std::stoi(match[1].str());
|
||||
/* Sign coordinates for positioning. */
|
||||
vc.position = RemapCoords(sign->x, sign->y, sign->z);
|
||||
/* Delay from the third matching group. */
|
||||
vc.delay = std::stoi(match[3].str()) * 1000; // milliseconds
|
||||
|
||||
/* Parse flags from second matching group. */
|
||||
enum IdType {
|
||||
ID_NONE, ID_VEHICLE
|
||||
} id_type = ID_NONE;
|
||||
for (char c : match[2].str()) {
|
||||
if (isdigit(c)) {
|
||||
if (id_type == ID_VEHICLE) {
|
||||
vc.vehicle = vc.vehicle * 10 + (c - '0');
|
||||
}
|
||||
} else {
|
||||
id_type = ID_NONE;
|
||||
switch (toupper(c)) {
|
||||
case '-': vc.zoom_adjust = +1; break;
|
||||
case '+': vc.zoom_adjust = -1; break;
|
||||
case 'T': vc.align_v = IntroGameViewportCommand::TOP; break;
|
||||
case 'M': vc.align_v = IntroGameViewportCommand::MIDDLE; break;
|
||||
case 'B': vc.align_v = IntroGameViewportCommand::BOTTOM; break;
|
||||
case 'L': vc.align_h = IntroGameViewportCommand::LEFT; break;
|
||||
case 'C': vc.align_h = IntroGameViewportCommand::CENTRE; break;
|
||||
case 'R': vc.align_h = IntroGameViewportCommand::RIGHT; break;
|
||||
case 'P': vc.pan_to_next = true; break;
|
||||
case 'V': id_type = ID_VEHICLE; vc.vehicle = 0; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Successfully parsed, store. */
|
||||
intro_viewport_commands.push_back(vc);
|
||||
signs_to_delete.push_back(sign->index);
|
||||
}
|
||||
}
|
||||
|
||||
/* Sort the commands by sequence index. */
|
||||
std::sort(intro_viewport_commands.begin(), intro_viewport_commands.end(), [](const IntroGameViewportCommand &a, const IntroGameViewportCommand &b) { return a.command_index < b.command_index; });
|
||||
|
||||
/* Delete all the consumed signs, from last ID to first ID. */
|
||||
std::sort(signs_to_delete.begin(), signs_to_delete.end(), [](SignID a, SignID b) { return a > b; });
|
||||
for (SignID sign_id : signs_to_delete) {
|
||||
delete Sign::Get(sign_id);
|
||||
}
|
||||
}
|
||||
|
||||
SelectGameWindow(WindowDesc *desc) : Window(desc)
|
||||
{
|
||||
this->CreateNestedTree();
|
||||
this->FinishInitNested(0);
|
||||
this->OnInvalidateData();
|
||||
|
||||
this->ReadIntroGameViewportCommands();
|
||||
|
||||
this->cur_viewport_command_index = (size_t)-1;
|
||||
this->cur_viewport_command_time = 0;
|
||||
}
|
||||
|
||||
void OnRealtimeTick(uint delta_ms) override
|
||||
{
|
||||
/* Move the main game viewport according to intro viewport commands. */
|
||||
|
||||
if (intro_viewport_commands.empty()) return;
|
||||
|
||||
/* Determine whether to move to the next command or stay at current. */
|
||||
bool changed_command = false;
|
||||
if (this->cur_viewport_command_index >= intro_viewport_commands.size()) {
|
||||
/* Reached last, rotate back to start of the list. */
|
||||
this->cur_viewport_command_index = 0;
|
||||
changed_command = true;
|
||||
} else {
|
||||
/* Check if current command has elapsed and switch to next. */
|
||||
this->cur_viewport_command_time += delta_ms;
|
||||
if (this->cur_viewport_command_time >= intro_viewport_commands[this->cur_viewport_command_index].delay) {
|
||||
this->cur_viewport_command_index = (this->cur_viewport_command_index + 1) % intro_viewport_commands.size();
|
||||
this->cur_viewport_command_time = 0;
|
||||
changed_command = true;
|
||||
}
|
||||
}
|
||||
|
||||
IntroGameViewportCommand &vc = intro_viewport_commands[this->cur_viewport_command_index];
|
||||
Window *mw = FindWindowByClass(WC_MAIN_WINDOW);
|
||||
Viewport *vp = mw->viewport;
|
||||
|
||||
/* Early exit if the current command hasn't elapsed and isn't animated. */
|
||||
if (!changed_command && !vc.pan_to_next && vc.vehicle == INVALID_VEHICLE) return;
|
||||
|
||||
/* Reset the zoom level. */
|
||||
if (changed_command) FixTitleGameZoom(vc.zoom_adjust);
|
||||
|
||||
/* Calculate current command position (updates followed vehicle coordinates). */
|
||||
Point pos = vc.PositionForViewport(vp);
|
||||
|
||||
/* Calculate panning (linear interpolation between current and next command position). */
|
||||
if (vc.pan_to_next) {
|
||||
size_t next_command_index = (this->cur_viewport_command_index + 1) % intro_viewport_commands.size();
|
||||
IntroGameViewportCommand &nvc = intro_viewport_commands[next_command_index];
|
||||
Point pos2 = nvc.PositionForViewport(vp);
|
||||
const double t = this->cur_viewport_command_time / (double)vc.delay;
|
||||
pos.x = pos.x + (int)(t * (pos2.x - pos.x));
|
||||
pos.y = pos.y + (int)(t * (pos2.y - pos.y));
|
||||
}
|
||||
|
||||
/* Update the viewport position. */
|
||||
mw->viewport->dest_scrollpos_x = mw->viewport->scrollpos_x = pos.x;
|
||||
mw->viewport->dest_scrollpos_y = mw->viewport->scrollpos_y = pos.y;
|
||||
UpdateViewportPosition(mw);
|
||||
mw->SetDirty(); // Required during panning, otherwise logo graphics disappears
|
||||
|
||||
/* If there is only one command, we just executed it and don't need to do any more */
|
||||
if (intro_viewport_commands.size() == 1 && vc.vehicle == INVALID_VEHICLE) intro_viewport_commands.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -134,7 +134,7 @@ STR_ABBREV_ALL :{TINY_FONT}ПӖ
|
||||
# 'Mode' of transport for cargoes
|
||||
STR_PASSENGERS :{COMMA} пассажир{P "" сем}
|
||||
|
||||
# Colours, do not shuffle
|
||||
###length 17
|
||||
STR_COLOUR_DARK_BLUE :Тӗттӗм кӑвак
|
||||
STR_COLOUR_PALE_GREEN :Шупка симӗс
|
||||
STR_COLOUR_PINK :Кӗрен
|
||||
@@ -169,7 +169,9 @@ STR_UNITS_POWER_SI :{COMMA}кВт
|
||||
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Чӳречене хуп
|
||||
|
||||
# Show engines button
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Query window
|
||||
STR_BUTTON_DEFAULT :{BLACK}Пӳрнӗ пек
|
||||
@@ -204,7 +206,10 @@ STR_SORT_BY_POPULATION :Ҫынисем
|
||||
|
||||
# Group by options for vehicle list
|
||||
|
||||
# Order button in shared orders vehicle list
|
||||
|
||||
# Tooltips for the main toolbar
|
||||
###length 31
|
||||
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Вӑййи тӑхтав
|
||||
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Вӑййи хӑвӑртлат
|
||||
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Майлаштару
|
||||
@@ -214,69 +219,71 @@ STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Аэро
|
||||
STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Объект вырӑнӗ
|
||||
|
||||
############ range for SE file menu starts
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
STR_SCENEDIT_FILE_MENU_SEPARATOR :
|
||||
STR_SCENEDIT_FILE_MENU_QUIT :Вӗҫле
|
||||
############ range for SE file menu starts
|
||||
|
||||
############ range for settings menu starts
|
||||
# Settings menu
|
||||
###length 14
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Вӑййи майлаштару
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF майлаштару
|
||||
############ range ends here
|
||||
|
||||
############ range for file menu starts
|
||||
# File menu
|
||||
###length 5
|
||||
STR_FILE_MENU_SEPARATOR :
|
||||
STR_FILE_MENU_EXIT :Тух
|
||||
############ range ends here
|
||||
|
||||
# map menu
|
||||
# Map menu
|
||||
###length 4
|
||||
|
||||
############ range for town menu starts
|
||||
############ range ends here
|
||||
# Town menu
|
||||
###length 2
|
||||
|
||||
############ range for subsidies menu starts
|
||||
# Subsidies menu
|
||||
###length 1
|
||||
STR_SUBSIDIES_MENU_SUBSIDIES :Грантсем
|
||||
############ range ends here
|
||||
|
||||
############ range for graph menu starts
|
||||
############ range ends here
|
||||
# Graph menu
|
||||
###length 6
|
||||
|
||||
############ range for company league menu starts
|
||||
############ range ends here
|
||||
# Company league menu
|
||||
###length 3
|
||||
|
||||
############ range for industry menu starts
|
||||
############ range ends here
|
||||
# Industry menu
|
||||
###length 3
|
||||
|
||||
############ range for railway construction menu starts
|
||||
############ range ends here
|
||||
# URailway construction menu
|
||||
###length 4
|
||||
|
||||
############ range for road construction menu starts
|
||||
############ range ends here
|
||||
# Road construction menu
|
||||
###length 2
|
||||
|
||||
############ range for waterways construction menu starts
|
||||
############ range ends here
|
||||
# Waterways construction menu
|
||||
###length 1
|
||||
|
||||
############ range for airport construction menu starts
|
||||
# Aairport construction menu
|
||||
###length 1
|
||||
STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Аэропорт ҫурт
|
||||
############ range ends here
|
||||
|
||||
############ range for landscaping menu starts
|
||||
############ range ends here
|
||||
# Landscaping menu
|
||||
###length 3
|
||||
|
||||
############ range for music menu starts
|
||||
# Music menu
|
||||
###length 1
|
||||
STR_TOOLBAR_SOUND_MUSIC :Сасӑ/Юрӑ-кӗвӗ
|
||||
############ range ends here
|
||||
|
||||
############ range for message menu starts
|
||||
############ range ends here
|
||||
# Message menu
|
||||
###length 3
|
||||
|
||||
############ range for about menu starts
|
||||
# About menu
|
||||
###length 10
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
STR_ABOUT_MENU_SCREENSHOT :Экран сӑнӗ
|
||||
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' çинчен
|
||||
############ range ends here
|
||||
|
||||
############ range for ordinal numbers used for the place in the highscore window
|
||||
# Place in highscore window
|
||||
###length 15
|
||||
STR_ORDINAL_NUMBER_1ST :1мӗш
|
||||
STR_ORDINAL_NUMBER_2ND :2мӗш
|
||||
STR_ORDINAL_NUMBER_3RD :3-мӗш
|
||||
@@ -292,9 +299,8 @@ STR_ORDINAL_NUMBER_12TH :12-мӗш
|
||||
STR_ORDINAL_NUMBER_13TH :13-мӗш
|
||||
STR_ORDINAL_NUMBER_14TH :14-мӗш
|
||||
STR_ORDINAL_NUMBER_15TH :15-мӗш
|
||||
############ range for ordinal numbers ends
|
||||
|
||||
############ range for days starts
|
||||
###length 31
|
||||
STR_DAY_NUMBER_1ST :1мӗш
|
||||
STR_DAY_NUMBER_2ND :2мӗш
|
||||
STR_DAY_NUMBER_3RD :3-мӗш
|
||||
@@ -326,9 +332,8 @@ STR_DAY_NUMBER_28TH :28-мӗш
|
||||
STR_DAY_NUMBER_29TH :29-мӗш
|
||||
STR_DAY_NUMBER_30TH :30-мӗш
|
||||
STR_DAY_NUMBER_31ST :31-мӗш
|
||||
############ range for days ends
|
||||
|
||||
############ range for months starts
|
||||
###length 12
|
||||
STR_MONTH_ABBREV_JAN :Кӑр
|
||||
STR_MONTH_ABBREV_FEB :Нар
|
||||
STR_MONTH_ABBREV_MAR :Пуш
|
||||
@@ -342,6 +347,7 @@ STR_MONTH_ABBREV_OCT :Юпа
|
||||
STR_MONTH_ABBREV_NOV :Чӳк
|
||||
STR_MONTH_ABBREV_DEC :Раш
|
||||
|
||||
###length 12
|
||||
STR_MONTH_JAN :Кӑрлач
|
||||
STR_MONTH_FEB :Нарӑс
|
||||
STR_MONTH_MAR :Пуш
|
||||
@@ -354,7 +360,6 @@ STR_MONTH_SEP :Авӑн
|
||||
STR_MONTH_OCT :Юпа
|
||||
STR_MONTH_NOV :Чӳк
|
||||
STR_MONTH_DEC :Раштав
|
||||
############ range for months ends
|
||||
|
||||
# Graph window
|
||||
STR_GRAPH_KEY_BUTTON :{BLACK}Уҫӑ
|
||||
@@ -381,14 +386,16 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Вакк
|
||||
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
|
||||
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
|
||||
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
|
||||
############ Those following lines need to be in this order!!
|
||||
|
||||
###length 10
|
||||
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Ҫул-йӗр:
|
||||
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Станцисем:
|
||||
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Тиев:
|
||||
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Укҫӑ:
|
||||
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Кивҫен:
|
||||
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Пурӗ:
|
||||
############ End of order list
|
||||
|
||||
###length 10
|
||||
|
||||
# Music window
|
||||
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
|
||||
@@ -410,10 +417,12 @@ STR_HIGHSCORE_STATS :{BIG_FONT}'{STR
|
||||
# Smallmap window
|
||||
STR_SMALLMAP_CAPTION :{WHITE}Карттӑ - {STRING}
|
||||
|
||||
###length 7
|
||||
STR_SMALLMAP_TYPE_VEHICLES :Ҫул-йӗр
|
||||
STR_SMALLMAP_TYPE_VEGETATION :Йывăç-курӑк
|
||||
STR_SMALLMAP_TYPE_OWNERS :Хуҫасем
|
||||
|
||||
|
||||
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Ҫулсем
|
||||
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Чукун ҫулсем
|
||||
STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Станцисем/Аэропортсем/Портсем
|
||||
@@ -455,6 +464,8 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
###next-name-looks-similar
|
||||
|
||||
# Order review system / warnings
|
||||
|
||||
@@ -463,19 +474,20 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
# Extra view window
|
||||
|
||||
# Game options window
|
||||
|
||||
############ start of currency region
|
||||
###length 42
|
||||
STR_GAME_OPTIONS_CURRENCY_RUR :Вырӑсла тенкӗ (RUR)
|
||||
############ end of currency region
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
############ start of townname region
|
||||
###length 21
|
||||
STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Акӑлчан
|
||||
STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Францири
|
||||
STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Нимӗҫ
|
||||
@@ -495,13 +507,12 @@ STR_GAME_OPTIONS_TOWN_NAME_DANISH :Датчан
|
||||
STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Турккӑла
|
||||
STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Итали
|
||||
STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Катталун
|
||||
############ end of townname region
|
||||
|
||||
STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Хӑй управ
|
||||
|
||||
############ start of autosave dropdown
|
||||
# Autosave dropdown
|
||||
###length 5
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Сӳнтер
|
||||
############ end of autosave dropdown
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Чӗлхи
|
||||
|
||||
@@ -539,66 +550,232 @@ STR_NUM_CUSTOM_NUMBER :Харпӑр х
|
||||
|
||||
STR_VARIETY_NONE :Ҫук
|
||||
|
||||
###length 5
|
||||
|
||||
###length 6
|
||||
STR_SEA_LEVEL_CUSTOM :Харпӑр хӑй
|
||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Харпӑр хӑй ({NUM}%)
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
STR_DISASTER_NONE :Ҫук
|
||||
|
||||
###length 4
|
||||
STR_SUBSIDY_X1_5 :x1.5
|
||||
STR_SUBSIDY_X2 :x2
|
||||
STR_SUBSIDY_X3 :x3
|
||||
STR_SUBSIDY_X4 :x4
|
||||
|
||||
###length 7
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
# Settings tree window
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_OFF :Сӳнтер
|
||||
STR_CONFIG_SETTING_ON :Ҫут
|
||||
STR_CONFIG_SETTING_DISABLED :хастар мар
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_COMPANIES_OFF :Сӳнтер
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_NONE :Ҫук
|
||||
STR_CONFIG_SETTING_ORIGINAL :Чӑн
|
||||
STR_CONFIG_SETTING_REALISTIC :Реалисмлӑ
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахайра
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :ҫук
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :ҫук
|
||||
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорт кивел мар: {STRING}
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Чӑн
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_TREE_PLACER_NONE :Ҫук
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Чӑн
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Симĕс
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_LIVERIES_NONE :Ҫук
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Сӳнтер
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Сӳнтер
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :вӑрӑм (2008 раш 31меш)
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :кӗске (2008-12-31)
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31)
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -607,28 +784,71 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31
|
||||
|
||||
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Грантсем: {STRING}
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Сӳнтер
|
||||
STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Кӗске
|
||||
STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Тулли
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 5
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :чӑн
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 2
|
||||
|
||||
###length 4
|
||||
|
||||
###setting-zero-is-special
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 6
|
||||
|
||||
###length 3
|
||||
|
||||
###length 5
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ҫук
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Вӑрах
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Виҫеллӗ
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Хӑвӑрт
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Питӗ хӑвӑрт
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Интерфейс
|
||||
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Лартӑм
|
||||
@@ -636,10 +856,10 @@ STR_CONFIG_SETTING_VEHICLES :{ORANGE}Ҫул-
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Хуласем
|
||||
STR_CONFIG_SETTING_AI :{ORANGE}Ӑмӑртуҫӑсем
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_PATHFINDER_NPF :NPF
|
||||
|
||||
|
||||
|
||||
# Config errors
|
||||
|
||||
# Video initalization errors
|
||||
@@ -666,15 +886,18 @@ STR_QUIT_NO :{BLACK}Ҫук
|
||||
STR_ABANDON_GAME_CAPTION :{WHITE}Вӑййи ан килӗш
|
||||
|
||||
# Cheat window
|
||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}Тӳрлет кун: {ORANGE}{DATE_SHORT}
|
||||
|
||||
###length 4
|
||||
STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Виҫеллӗ климат
|
||||
STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Сивӗ климат
|
||||
STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Тропик климат
|
||||
STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Вӑйӑ пахчи
|
||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}Тӳрлет кун: {ORANGE}{DATE_SHORT}
|
||||
|
||||
# Livery window
|
||||
|
||||
|
||||
###length 23
|
||||
STR_LIVERY_DEFAULT :Яланхи тӗс
|
||||
STR_LIVERY_STEAM :Пӑравус
|
||||
STR_LIVERY_DIESEL :Ӑшӑвус(Diesel Engine)
|
||||
@@ -728,8 +951,8 @@ STR_FACE_COLLAR :Ҫуха:
|
||||
STR_FACE_TIE :Галстук:
|
||||
STR_FACE_EARRING :Алка:
|
||||
|
||||
############ Next lines match ServerGameType
|
||||
############ End of leave-in-this-order
|
||||
# Matches ServerGameType
|
||||
###length 3
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Вӑйӑҫӑ ят:
|
||||
@@ -748,7 +971,6 @@ STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Чӗлх
|
||||
|
||||
STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}ВӐЙЙИ ИНФОРМАЦИ
|
||||
STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Вӑйӑҫӑсем: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
|
||||
STR_NETWORK_SERVER_LIST_LANGUAGE :{SILVER}Чӗлхи: {WHITE}{STRING}
|
||||
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Ҫӗр пичӗ: {WHITE}{STRING}
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Виҫе картти: {WHITE}{COMMA}x{COMMA}
|
||||
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Сервер версиӗ: {WHITE}{STRING}
|
||||
@@ -776,9 +998,8 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
|
||||
|
||||
# Network connecting window
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
############ End of leave-in-this-order
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -786,8 +1007,8 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
|
||||
|
||||
# Network client list
|
||||
|
||||
############ Begin of ConnectionType
|
||||
############ End of ConnectionType
|
||||
# Matches ConnectionType
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
@@ -802,17 +1023,20 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
|
||||
|
||||
# Network messages
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 21
|
||||
|
||||
# Network related errors
|
||||
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 12
|
||||
|
||||
|
||||
|
||||
# Content downloading window
|
||||
|
||||
###length 5
|
||||
|
||||
STR_CONTENT_DETAIL_VERSION :{SILVER}Верси: {WHITE}{STRING}
|
||||
|
||||
# Order of these is important!
|
||||
@@ -966,10 +1190,10 @@ STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Маяк
|
||||
STR_ABOUT_VERSION :{BLACK}OpenTTD верси {REV}
|
||||
|
||||
# Framerate display window
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 15
|
||||
|
||||
###length 15
|
||||
|
||||
|
||||
# Save/load game/scenario
|
||||
@@ -1022,6 +1246,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
|
||||
|
||||
# NewGRF status
|
||||
STR_NEWGRF_LIST_NONE :Ҫук
|
||||
###length 3
|
||||
|
||||
# NewGRF 'it's broken' warnings
|
||||
|
||||
@@ -1049,15 +1274,17 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
|
||||
# Town local authority window
|
||||
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
|
||||
|
||||
###length 8
|
||||
|
||||
###length 8
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_TEXT :{ORANGE}{STRING}
|
||||
|
||||
# Goal question window
|
||||
|
||||
############ Start of Goal Question button list
|
||||
############ End of Goal Question button list
|
||||
# Goal Question button list
|
||||
###length 18
|
||||
|
||||
# Subsidies window
|
||||
STR_SUBSIDIES_NONE :{ORANGE}- Ҫук -
|
||||
@@ -1078,8 +1305,7 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L
|
||||
|
||||
|
||||
|
||||
############ range for rating starts
|
||||
############ range for rating ends
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -1091,6 +1317,9 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
|
||||
|
||||
# Finances window
|
||||
STR_FINANCES_YEAR :{WHITE}{NUM}
|
||||
|
||||
###length 13
|
||||
|
||||
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
|
||||
|
||||
@@ -1114,16 +1343,20 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу
|
||||
|
||||
|
||||
# Vehicle lists
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Group window
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -1132,22 +1365,34 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу
|
||||
|
||||
|
||||
# Build vehicle window
|
||||
###length 4
|
||||
|
||||
|
||||
############ range for vehicle availability starts
|
||||
############ range for vehicle availability ends
|
||||
# Vehicle availability
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Depot window
|
||||
STR_DEPOT_CAPTION :{WHITE}{DEPOT}
|
||||
@@ -1157,18 +1402,29 @@ STR_DEPOT_NO_ENGINE :{BLACK}-
|
||||
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
# Engine preview window
|
||||
@@ -1180,34 +1436,48 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
|
||||
# Autoreplace window
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
|
||||
# Vehicle view
|
||||
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Messages in the start stop button in the vehicle view
|
||||
|
||||
|
||||
|
||||
# Vehicle stopped/started animations
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
# Vehicle details
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# The next two need to stay in this order
|
||||
|
||||
|
||||
|
||||
@@ -1216,6 +1486,7 @@ STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Савӑ
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Extra buttons for train details windows
|
||||
|
||||
@@ -1225,8 +1496,11 @@ STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Савӑ
|
||||
|
||||
# Vehicle refit
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Order view
|
||||
|
||||
@@ -1242,6 +1516,8 @@ STR_ORDER_TEXT :{STRING} {STRIN
|
||||
|
||||
|
||||
# Conditional order variables, must follow order of OrderConditionVariable enum
|
||||
###length 8
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
@@ -1252,6 +1528,9 @@ STR_ORDER_TEXT :{STRING} {STRIN
|
||||
# String parts to build the order string
|
||||
|
||||
|
||||
###length 3
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
|
||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||
|
||||
@@ -1262,6 +1541,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
@@ -1305,6 +1585,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
|
||||
|
||||
|
||||
# Textfile window
|
||||
###length 3
|
||||
|
||||
|
||||
# Vehicle loading indicators
|
||||
@@ -1386,13 +1667,23 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Ҫул
|
||||
|
||||
# Generic vehicle errors
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -1409,8 +1700,10 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Ҫул
|
||||
# Sign related errors
|
||||
|
||||
# Translatable comment for OpenTTD's desktop shortcut
|
||||
###external 1
|
||||
|
||||
# Translatable descriptions in media/baseset/*.ob* files
|
||||
###external 10
|
||||
|
||||
##id 0x2000
|
||||
# Town building names
|
||||
@@ -1423,19 +1716,29 @@ STR_TOWN_BUILDING_NAME_STATUE_1 :Палӑк
|
||||
|
||||
############ WARNING, using range 0x6000 for strings that are stored in the savegame
|
||||
############ These strings may never get a new id, or savegames will break!
|
||||
|
||||
##id 0x6000
|
||||
STR_SV_EMPTY :
|
||||
|
||||
###length 27
|
||||
STR_SV_STNAME :{STRING}
|
||||
STR_SV_STNAME_AIRPORT :{STRING} Аэропорт
|
||||
STR_SV_STNAME_BUOY :{STRING}
|
||||
STR_SV_STNAME_WAYPOINT :{STRING}
|
||||
##id 0x6020
|
||||
|
||||
############ end of savegame specific region!
|
||||
|
||||
##id 0x8000
|
||||
###length 116
|
||||
# Vehicle names
|
||||
|
||||
###length 88
|
||||
|
||||
###length 11
|
||||
|
||||
###length 41
|
||||
|
||||
##id 0x8800
|
||||
# Formatting of some strings
|
||||
STR_FORMAT_DATE_TINY :{STRING}.{STRING}.{NUM}
|
||||
@@ -1444,6 +1747,14 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN
|
||||
STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING}
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 6
|
||||
###next-name-looks-similar
|
||||
|
||||
# _SERIAL version of AIRACRAFT doesn't exist
|
||||
|
||||
|
||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -57,7 +57,7 @@ STR_ABBREV_COAL :{TINY_FONT}क
|
||||
|
||||
# 'Mode' of transport for cargoes
|
||||
|
||||
# Colours, do not shuffle
|
||||
###length 17
|
||||
STR_COLOUR_PINK :गुलाबी
|
||||
STR_COLOUR_RED :लाल
|
||||
|
||||
@@ -77,7 +77,9 @@ STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp
|
||||
STR_TOOLTIP_RESIZE :{BLACK}खिड़की का आकार बदलने के लिये क्लिक करके खींचें
|
||||
|
||||
# Show engines button
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Query window
|
||||
|
||||
@@ -97,86 +99,89 @@ STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :पिछले
|
||||
|
||||
# Group by options for vehicle list
|
||||
|
||||
# Order button in shared orders vehicle list
|
||||
|
||||
# Tooltips for the main toolbar
|
||||
###length 31
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}ध्वनि/संगीत विकल्प
|
||||
|
||||
# Extra tooltips for the scenario editor toolbar
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}मानचित्र, नगर निर्देशिका दिखायें
|
||||
|
||||
############ range for SE file menu starts
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
STR_SCENEDIT_FILE_MENU_SEPARATOR :
|
||||
STR_SCENEDIT_FILE_MENU_QUIT :निकास
|
||||
############ range for SE file menu starts
|
||||
|
||||
############ range for settings menu starts
|
||||
# Settings menu
|
||||
###length 14
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :समायोजन
|
||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :पथ-संकेतों के नाम दिखायें
|
||||
############ range ends here
|
||||
|
||||
############ range for file menu starts
|
||||
# File menu
|
||||
###length 5
|
||||
STR_FILE_MENU_SEPARATOR :
|
||||
############ range ends here
|
||||
|
||||
# map menu
|
||||
# Map menu
|
||||
###length 4
|
||||
|
||||
############ range for town menu starts
|
||||
############ range ends here
|
||||
# Town menu
|
||||
###length 2
|
||||
|
||||
############ range for subsidies menu starts
|
||||
############ range ends here
|
||||
# Subsidies menu
|
||||
###length 1
|
||||
|
||||
############ range for graph menu starts
|
||||
############ range ends here
|
||||
# Graph menu
|
||||
###length 6
|
||||
|
||||
############ range for company league menu starts
|
||||
############ range ends here
|
||||
# Company league menu
|
||||
###length 3
|
||||
|
||||
############ range for industry menu starts
|
||||
# Industry menu
|
||||
###length 3
|
||||
STR_INDUSTRY_MENU_INDUSTRY_CHAIN :औद्योगिक शृंखला
|
||||
############ range ends here
|
||||
|
||||
############ range for railway construction menu starts
|
||||
# URailway construction menu
|
||||
###length 4
|
||||
STR_RAIL_MENU_ELRAIL_CONSTRUCTION :विद्युतिकृत रेलवे निर्माण
|
||||
############ range ends here
|
||||
|
||||
############ range for road construction menu starts
|
||||
############ range ends here
|
||||
# Road construction menu
|
||||
###length 2
|
||||
|
||||
############ range for waterways construction menu starts
|
||||
############ range ends here
|
||||
# Waterways construction menu
|
||||
###length 1
|
||||
|
||||
############ range for airport construction menu starts
|
||||
############ range ends here
|
||||
# Aairport construction menu
|
||||
###length 1
|
||||
|
||||
############ range for landscaping menu starts
|
||||
############ range ends here
|
||||
# Landscaping menu
|
||||
###length 3
|
||||
|
||||
############ range for music menu starts
|
||||
############ range ends here
|
||||
# Music menu
|
||||
###length 1
|
||||
|
||||
############ range for message menu starts
|
||||
############ range ends here
|
||||
# Message menu
|
||||
###length 3
|
||||
|
||||
############ range for about menu starts
|
||||
# About menu
|
||||
###length 10
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
############ range ends here
|
||||
|
||||
############ range for ordinal numbers used for the place in the highscore window
|
||||
# Place in highscore window
|
||||
###length 15
|
||||
STR_ORDINAL_NUMBER_2ND :द्वितीय
|
||||
############ range for ordinal numbers ends
|
||||
|
||||
############ range for days starts
|
||||
###length 31
|
||||
STR_DAY_NUMBER_14TH :१४
|
||||
STR_DAY_NUMBER_15TH :१५
|
||||
STR_DAY_NUMBER_23RD :२३
|
||||
############ range for days ends
|
||||
|
||||
############ range for months starts
|
||||
###length 12
|
||||
STR_MONTH_ABBREV_JAN :जन
|
||||
STR_MONTH_ABBREV_NOV :नव
|
||||
|
||||
###length 12
|
||||
STR_MONTH_AUG :अगस्त
|
||||
############ range for months ends
|
||||
|
||||
# Graph window
|
||||
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}
|
||||
@@ -193,10 +198,12 @@ STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLA
|
||||
STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}'
|
||||
|
||||
# Performance detail window
|
||||
############ Those following lines need to be in this order!!
|
||||
|
||||
###length 10
|
||||
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}वाहन:
|
||||
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}माल :
|
||||
############ End of order list
|
||||
|
||||
###length 10
|
||||
|
||||
# Music window
|
||||
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
|
||||
@@ -208,6 +215,8 @@ STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHIT
|
||||
|
||||
# Smallmap window
|
||||
|
||||
###length 7
|
||||
|
||||
|
||||
STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}ट्रक लदान वीथी
|
||||
STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}रिक्त भूमि
|
||||
@@ -237,6 +246,8 @@ STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLAC
|
||||
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}{INDUSTRY} के उत्पादन में {COMMA}% कमी आयी!
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
###next-name-looks-similar
|
||||
|
||||
# Order review system / warnings
|
||||
|
||||
@@ -246,32 +257,32 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
# Extra view window
|
||||
|
||||
# Game options window
|
||||
|
||||
############ start of currency region
|
||||
###length 42
|
||||
STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM)
|
||||
STR_GAME_OPTIONS_CURRENCY_ISK :आइसलैंडिक क्रोना (ISK)
|
||||
STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी)
|
||||
############ end of currency region
|
||||
|
||||
###length 2
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :दाईं ओर वाहन चलाएँ
|
||||
|
||||
|
||||
############ start of townname region
|
||||
###length 21
|
||||
STR_GAME_OPTIONS_TOWN_NAME_FRENCH :फ़्रेंच
|
||||
STR_GAME_OPTIONS_TOWN_NAME_POLISH :पोलिश
|
||||
STR_GAME_OPTIONS_TOWN_NAME_TURKISH :तुर्की
|
||||
STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :इटैलियन
|
||||
############ end of townname region
|
||||
|
||||
|
||||
############ start of autosave dropdown
|
||||
# Autosave dropdown
|
||||
###length 5
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :प्रत्येक माह
|
||||
############ end of autosave dropdown
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% पूर्ण)
|
||||
|
||||
@@ -302,51 +313,185 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}एक
|
||||
|
||||
STR_VARIETY_MEDIUM :मध्यम
|
||||
|
||||
###length 5
|
||||
STR_AI_SPEED_SLOW :धीमा
|
||||
|
||||
###length 6
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
###length 7
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
# Settings tree window
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_COMPANIES_OFF :बन्द
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :मानचित्र के भूभाग की अधिकतम ऊंचाई निर्धारित करें। "(स्वतः)" चुनने पर भूभाग जनन के बाद एक उपयुक्त संख्या चुन ली जायेगी।
|
||||
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM}
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :ट्रेन के लिये ढलान की तेजी की स्थापना। ऊँची संख्या से चढ़ान पर चढ़ना अधिक कठिन हो जाता है।
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :निर्दिष्ट करें कि ट्रेनों को स्टेशन पर कहाँ रुकना चाहिये। स्टेशन में प्रवेश के पास 'समीप का छोर', स्टेशन के बीच में 'मध्य', और प्रवेश की उलटी ओर 'दूर का छोर' है। ध्यान दें कि यह विन्यास केवल नये निर्देशों के लिये मानक स्थापित करता है। प्रत्येक निर्देश को अलग से किसी अन्य व्यवहार के लिये स्थापित किया जा सकता है।
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :समीप का छोर
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :मध्य
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :दूर का छोर
|
||||
|
||||
###length 4
|
||||
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :कंपनियों को स्थानीय नगर प्रशासन को रिश्वत देने की अनुमति दें। यदि रिश्वत पर किसी निरीक्षक की दृष्टि पड़ती है तो कंपनी छः महीने के लिये नगर में काम नहीं कर पायेगी।
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :सक्षम होने पर वाहनों के निर्देशों की आवधिक जाँच की जाती है, और कुछ सुस्पष्ट मामलों का पता चलते ही एक संदेश द्वारा बताया जाता है।
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_ORDER_REVIEW_OFF :नहीं
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :एक स्टेशन के हिस्सों के विस्तार हेतु अधिकतम क्षेत्र निर्धारित करें। ऊंची संख्या खेल को धीमा कर सकती है।
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :बैंगनी
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :अक्षम
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :सीमाहीन (आपके कंप्यूटर द्वारा सीमित)
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_SOUND_NEWS :समाचार पत्र: {STRING}
|
||||
|
||||
|
||||
@@ -354,29 +499,104 @@ STR_CONFIG_SETTING_SOUND_NEWS :समाचा
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :दुर्घटनायें / आपदायें : {STRING}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :नगर में माल उत्पादन: {STRING}
|
||||
###length 2
|
||||
|
||||
###length 4
|
||||
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 6
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :२x
|
||||
|
||||
###length 5
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :अंतर्राष्ट्रीय मानक (m/s)
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}सामान्य
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :नौकाओं द्वारा उपयोग किया जाने वाला पथान्वेषी
|
||||
###length 2
|
||||
|
||||
|
||||
# Config errors
|
||||
@@ -405,17 +625,20 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}क्
|
||||
|
||||
# Cheat window
|
||||
|
||||
###length 4
|
||||
|
||||
# Livery window
|
||||
|
||||
|
||||
###length 23
|
||||
|
||||
# Face selection window
|
||||
|
||||
STR_FACE_LOAD_DONE :{WHITE}ओपनटीटीडी प्रारूप पत्र से आपका प्रिय चेहरा भर लिया गया है
|
||||
STR_FACE_COLLAR_TOOLTIP :{BLACK}कॉलर बदलें
|
||||
|
||||
############ Next lines match ServerGameType
|
||||
############ End of leave-in-this-order
|
||||
# Matches ServerGameType
|
||||
###length 3
|
||||
|
||||
# Network server list
|
||||
|
||||
@@ -434,9 +657,8 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर
|
||||
|
||||
# Network connecting window
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
############ End of leave-in-this-order
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -444,8 +666,8 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर
|
||||
|
||||
# Network client list
|
||||
|
||||
############ Begin of ConnectionType
|
||||
############ End of ConnectionType
|
||||
# Matches ConnectionType
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
@@ -460,23 +682,26 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर
|
||||
|
||||
# Network messages
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}संपर्क विच्छेद संभावित
|
||||
|
||||
###length 21
|
||||
|
||||
# Network related errors
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
###length 12
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :खेल अभी भी ठहरा हुआ है ({STRING}, {STRING}, {STRING})
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :छोड़ रहा है
|
||||
|
||||
|
||||
# Content downloading window
|
||||
STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}खोजी गयी सामग्री OpenTTD की सामग्री सेवा में उपलब्ध नहीं है, आप OpenTTD से असंबद्ध वेबसाइटों पर खोज सकते हैं
|
||||
|
||||
###length 5
|
||||
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}यह आपके पास पहले से मौजूद है
|
||||
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}यह सामग्री अज्ञात है और इसे ओपनटीटीडी में प्राप्त नहीं किया जा सकता है
|
||||
|
||||
|
||||
# Order of these is important!
|
||||
|
||||
# Content downloading progress window
|
||||
@@ -596,13 +821,11 @@ STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :इस्पा
|
||||
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
|
||||
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
|
||||
STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES}
|
||||
STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES}
|
||||
STR_FRAMERATE_BYTES_BAD :{RED}{BYTES}
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
###length 15
|
||||
|
||||
###length 15
|
||||
STR_FRAMETIME_CAPTION_GL_ECONOMY :माल प्रबंधन
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
# Save/load game/scenario
|
||||
@@ -649,6 +872,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
|
||||
|
||||
|
||||
# NewGRF status
|
||||
###length 3
|
||||
|
||||
# NewGRF 'it's broken' warnings
|
||||
|
||||
@@ -678,8 +902,10 @@ STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}फै
|
||||
|
||||
# Town local authority window
|
||||
|
||||
###length 8
|
||||
STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :लघु विज्ञापन अभियान
|
||||
|
||||
###length 8
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}नगरों के सड़क तंत्र के पुनर्निर्माण में निवेश करें।{}इससे अधिकतम ६ महीने तक यातायात में बहुत विघ्न पड़ता है।{}मूल्य : {CURRENCY_LONG}
|
||||
|
||||
# Goal window
|
||||
@@ -689,8 +915,8 @@ STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING}
|
||||
|
||||
# Goal question window
|
||||
|
||||
############ Start of Goal Question button list
|
||||
############ End of Goal Question button list
|
||||
# Goal Question button list
|
||||
###length 18
|
||||
|
||||
# Subsidies window
|
||||
STR_SUBSIDIES_OFFERED_TITLE :{BLACK}इन सेवाओं के लिये अनुदान प्रस्तावित :
|
||||
@@ -714,8 +940,7 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L
|
||||
STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} {STATION} द्वारा
|
||||
|
||||
|
||||
############ range for rating starts
|
||||
############ range for rating ends
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -727,7 +952,10 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
|
||||
|
||||
# Finances window
|
||||
STR_FINANCES_YEAR :{WHITE}{NUM}
|
||||
|
||||
###length 13
|
||||
STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}संपत्ति का रखरखाव
|
||||
|
||||
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
|
||||
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
|
||||
STR_FINANCES_BORROW_BUTTON :{BLACK}{CURRENCY_LONG} उधार
|
||||
@@ -759,16 +987,20 @@ STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING
|
||||
|
||||
|
||||
# Vehicle lists
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Group window
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -777,27 +1009,39 @@ STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING
|
||||
|
||||
|
||||
# Build vehicle window
|
||||
###length 4
|
||||
|
||||
|
||||
############ range for vehicle availability starts
|
||||
# Vehicle availability
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :नई ट्रेनें
|
||||
############ range for vehicle availability ends
|
||||
|
||||
STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}मूल्य : {GOLD}{CURRENCY_LONG}{BLACK} भार : {GOLD}{WEIGHT_SHORT}
|
||||
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}भार : {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT})
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}छिपायें
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}नौका प्रकार को छिपायें/दिखायें
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Depot window
|
||||
STR_DEPOT_CAPTION :{WHITE}{DEPOT}
|
||||
@@ -805,18 +1049,29 @@ STR_DEPOT_CAPTION :{WHITE}{DEPOT}
|
||||
|
||||
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
# Engine preview window
|
||||
@@ -829,36 +1084,49 @@ STR_ENGINE_PREVIEW_SHIP :जहाज
|
||||
# Autoreplace window
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
STR_REPLACE_VEHICLES_STOP :वाहन प्रतिस्थापित करना बन्द करें
|
||||
|
||||
|
||||
###length 2
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
|
||||
# Vehicle view
|
||||
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}वर्तमान ट्रेन व्यवहार - ट्रेन रोकने/चलाने के लिये क्लिक करें
|
||||
|
||||
|
||||
# Messages in the start stop button in the vehicle view
|
||||
|
||||
|
||||
|
||||
# Vehicle stopped/started animations
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
# Vehicle details
|
||||
|
||||
|
||||
# The next two need to stay in this order
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -867,6 +1135,8 @@ STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}वर
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Extra buttons for train details windows
|
||||
STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} निर्माण: {LTBLUE}{NUM}{BLACK} मूल्य: {LTBLUE}{CURRENCY_LONG}
|
||||
|
||||
@@ -876,8 +1146,11 @@ STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE
|
||||
|
||||
# Vehicle refit
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Order view
|
||||
|
||||
@@ -894,6 +1167,8 @@ STR_ORDER_REFIT_TOOLTIP :{BLACK}इस
|
||||
|
||||
|
||||
# Conditional order variables, must follow order of OrderConditionVariable enum
|
||||
###length 8
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :के बराबर है
|
||||
|
||||
@@ -906,6 +1181,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :के बर
|
||||
|
||||
|
||||
STR_ORDER_NEAREST_DEPOT :निकटतम
|
||||
###length 3
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
|
||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||
|
||||
@@ -916,6 +1194,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
@@ -960,6 +1239,7 @@ STR_AI_CONFIG_CHANGE_NONE :
|
||||
|
||||
|
||||
# Textfile window
|
||||
###length 3
|
||||
|
||||
|
||||
# Vehicle loading indicators
|
||||
@@ -1030,7 +1310,6 @@ STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}पट
|
||||
|
||||
|
||||
# Road construction errors
|
||||
STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... असंगत ट्रामवे
|
||||
|
||||
# Waterway construction errors
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... पानी पर बनाया जाना चाहिये।
|
||||
@@ -1047,19 +1326,29 @@ STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... प
|
||||
|
||||
# Generic vehicle errors
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}जहाज का नामकरण नहीं कर सकते...
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}रेल वाहन नहीं बेच सकते...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Specific vehicle errors
|
||||
|
||||
|
||||
@@ -1073,8 +1362,10 @@ STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... व
|
||||
# Sign related errors
|
||||
|
||||
# Translatable comment for OpenTTD's desktop shortcut
|
||||
###external 1
|
||||
|
||||
# Translatable descriptions in media/baseset/*.ob* files
|
||||
###external 10
|
||||
STR_BASESOUNDS_WIN_DESCRIPTION :ट्रांस्पोर्ट टायिकून डीलक्स के विंडोज संस्करण की मूल ध्वनियां।
|
||||
|
||||
##id 0x2000
|
||||
@@ -1088,9 +1379,11 @@ STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :बैंक
|
||||
|
||||
############ WARNING, using range 0x6000 for strings that are stored in the savegame
|
||||
############ These strings may never get a new id, or savegames will break!
|
||||
|
||||
##id 0x6000
|
||||
STR_SV_EMPTY :
|
||||
|
||||
###length 27
|
||||
STR_SV_STNAME :{STRING}
|
||||
STR_SV_STNAME_NORTH :{STRING} उत्तर
|
||||
STR_SV_STNAME_CENTRAL :{STRING} केंद्रीय
|
||||
@@ -1098,9 +1391,11 @@ STR_SV_STNAME_AIRPORT :{STRING} हव
|
||||
STR_SV_STNAME_BUOY :{STRING}
|
||||
STR_SV_STNAME_WAYPOINT :{STRING}
|
||||
##id 0x6020
|
||||
|
||||
############ end of savegame specific region!
|
||||
|
||||
##id 0x8000
|
||||
###length 116
|
||||
# Vehicle names
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :कोयला वाहन
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :फल वाहन
|
||||
@@ -1108,10 +1403,16 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (वि
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :खिलौनों का डब्बा
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :पानी का टैंकर
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :बबल वैन
|
||||
|
||||
###length 88
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :प्लॉडीपीहट एमके३ बस
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :मोरलैंड काष्ठ ट्रक
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :फोस्टर कवचयुक्त ट्रक
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :पावरनोट मिष्ठान्न ट्रक
|
||||
|
||||
###length 11
|
||||
|
||||
###length 41
|
||||
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_COTSWALD_LB_3 :बेकवेल कॉट्सवॉल्ड एलबी-३
|
||||
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB_9 :बेकवेल लकेट एलबी-९
|
||||
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB80 :बेकवेल लकेट एलबी८०
|
||||
@@ -1126,6 +1427,14 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN
|
||||
|
||||
STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 6
|
||||
###next-name-looks-similar
|
||||
|
||||
# _SERIAL version of AIRACRAFT doesn't exist
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
470
src/lang/ido.txt
470
src/lang/ido.txt
@@ -169,7 +169,7 @@ STR_LITERS :{COMMA} litri
|
||||
STR_ITEMS :{COMMA} artikli
|
||||
STR_CRATES :{COMMA} kesti
|
||||
|
||||
# Colours, do not shuffle
|
||||
###length 17
|
||||
STR_COLOUR_DARK_BLUE :Obskur-blua
|
||||
STR_COLOUR_PALE_GREEN :Pal-verda
|
||||
STR_COLOUR_PINK :Rozea
|
||||
@@ -221,7 +221,9 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Klozas f
|
||||
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Baskulas granda/mikra fenestro grandeso
|
||||
|
||||
# Show engines button
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Query window
|
||||
STR_BUTTON_CANCEL :{BLACK}Anular
|
||||
@@ -255,7 +257,10 @@ STR_SORT_BY_POPULATION :Populo
|
||||
|
||||
# Group by options for vehicle list
|
||||
|
||||
# Order button in shared orders vehicle list
|
||||
|
||||
# Tooltips for the main toolbar
|
||||
###length 31
|
||||
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzas ludo
|
||||
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Selekti
|
||||
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvas ludo, abandonas ludo, ekiras
|
||||
@@ -276,77 +281,77 @@ STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantaca
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situas signalo
|
||||
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Pozez objekto
|
||||
|
||||
############ range for SE file menu starts
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
STR_SCENEDIT_FILE_MENU_SEPARATOR :
|
||||
############ range for SE file menu starts
|
||||
|
||||
############ range for settings menu starts
|
||||
# Settings menu
|
||||
###length 14
|
||||
STR_SETTINGS_MENU_FULL_DETAIL :Plene detaloza
|
||||
STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Diafana konstrukturi
|
||||
############ range ends here
|
||||
|
||||
############ range for file menu starts
|
||||
# File menu
|
||||
###length 5
|
||||
STR_FILE_MENU_SAVE_GAME :Salvas ludo
|
||||
STR_FILE_MENU_LOAD_GAME :Kargas ludo
|
||||
STR_FILE_MENU_QUIT_GAME :Abandonas ludo
|
||||
STR_FILE_MENU_SEPARATOR :
|
||||
STR_FILE_MENU_EXIT :Ekiras
|
||||
############ range ends here
|
||||
|
||||
# map menu
|
||||
# Map menu
|
||||
###length 4
|
||||
STR_MAP_MENU_MAP_OF_WORLD :Mapo di mondo
|
||||
STR_MAP_MENU_SIGN_LIST :Listo di signi
|
||||
|
||||
############ range for town menu starts
|
||||
############ range ends here
|
||||
# Town menu
|
||||
###length 2
|
||||
|
||||
############ range for subsidies menu starts
|
||||
############ range ends here
|
||||
# Subsidies menu
|
||||
###length 1
|
||||
|
||||
############ range for graph menu starts
|
||||
# Graph menu
|
||||
###length 6
|
||||
STR_GRAPH_MENU_INCOME_GRAPH :Revenuo grafiko
|
||||
STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Livrita kargajo grafiko
|
||||
############ range ends here
|
||||
|
||||
############ range for company league menu starts
|
||||
############ range ends here
|
||||
# Company league menu
|
||||
###length 3
|
||||
|
||||
############ range for industry menu starts
|
||||
############ range ends here
|
||||
# Industry menu
|
||||
###length 3
|
||||
|
||||
############ range for railway construction menu starts
|
||||
############ range ends here
|
||||
# URailway construction menu
|
||||
###length 4
|
||||
|
||||
############ range for road construction menu starts
|
||||
############ range ends here
|
||||
# Road construction menu
|
||||
###length 2
|
||||
|
||||
############ range for waterways construction menu starts
|
||||
############ range ends here
|
||||
# Waterways construction menu
|
||||
###length 1
|
||||
|
||||
############ range for airport construction menu starts
|
||||
############ range ends here
|
||||
# Aairport construction menu
|
||||
###length 1
|
||||
|
||||
############ range for landscaping menu starts
|
||||
############ range ends here
|
||||
# Landscaping menu
|
||||
###length 3
|
||||
|
||||
############ range for music menu starts
|
||||
############ range ends here
|
||||
# Music menu
|
||||
###length 1
|
||||
|
||||
############ range for message menu starts
|
||||
############ range ends here
|
||||
# Message menu
|
||||
###length 3
|
||||
|
||||
############ range for about menu starts
|
||||
############ range ends here
|
||||
# About menu
|
||||
###length 10
|
||||
|
||||
############ range for ordinal numbers used for the place in the highscore window
|
||||
############ range for ordinal numbers ends
|
||||
# Place in highscore window
|
||||
###length 15
|
||||
|
||||
############ range for days starts
|
||||
############ range for days ends
|
||||
###length 31
|
||||
|
||||
############ range for months starts
|
||||
###length 12
|
||||
|
||||
############ range for months ends
|
||||
###length 12
|
||||
|
||||
# Graph window
|
||||
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}
|
||||
@@ -365,8 +370,10 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM
|
||||
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
|
||||
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
|
||||
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
|
||||
############ Those following lines need to be in this order!!
|
||||
############ End of order list
|
||||
|
||||
###length 10
|
||||
|
||||
###length 10
|
||||
|
||||
# Music window
|
||||
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
|
||||
@@ -384,12 +391,14 @@ STR_HIGHSCORE_STATS :{BIG_FONT}'{STR
|
||||
# Smallmap window
|
||||
STR_SMALLMAP_CAPTION :{WHITE}Mapo - {STRING}
|
||||
|
||||
###length 7
|
||||
STR_SMALLMAP_TYPE_CONTOURS :Konturi
|
||||
STR_SMALLMAP_TYPE_VEHICLES :Vehili
|
||||
STR_SMALLMAP_TYPE_INDUSTRIES :Industrii
|
||||
STR_SMALLMAP_TYPE_ROUTES :Voyi
|
||||
STR_SMALLMAP_TYPE_VEGETATION :Vejetado
|
||||
STR_SMALLMAP_TYPE_OWNERS :Proprietanto
|
||||
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Montras transport-voyi sur la mapo
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Montrar vejetado ad la mapo
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Montrar proprietanti ad la mapo
|
||||
@@ -443,6 +452,8 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
###next-name-looks-similar
|
||||
|
||||
# Order review system / warnings
|
||||
|
||||
@@ -451,6 +462,7 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
# Extra view window
|
||||
@@ -458,17 +470,16 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo
|
||||
# Game options window
|
||||
STR_GAME_OPTIONS_CAPTION :{WHITE}Ludo Selekti
|
||||
|
||||
############ start of currency region
|
||||
############ end of currency region
|
||||
###length 42
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
############ start of townname region
|
||||
############ end of townname region
|
||||
###length 21
|
||||
|
||||
|
||||
############ start of autosave dropdown
|
||||
############ end of autosave dropdown
|
||||
# Autosave dropdown
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
@@ -506,32 +517,96 @@ STR_VARIETY_MEDIUM :Mezgrada
|
||||
STR_VARIETY_HIGH :Alta
|
||||
STR_VARIETY_VERY_HIGH :Tre Alta
|
||||
|
||||
###length 5
|
||||
STR_AI_SPEED_SLOW :Lenta
|
||||
STR_AI_SPEED_MEDIUM :Meza
|
||||
STR_AI_SPEED_FAST :Rapida
|
||||
|
||||
###length 6
|
||||
STR_SEA_LEVEL_LOW :Basa
|
||||
STR_SEA_LEVEL_MEDIUM :Meza
|
||||
STR_SEA_LEVEL_HIGH :Alta
|
||||
STR_SEA_LEVEL_CUSTOM :Kustumigita
|
||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Kustumigita ({NUM}%)
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
###length 7
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
# Settings tree window
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_NONE :Nulo
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nulo
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala
|
||||
|
||||
@@ -539,10 +614,107 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verda
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Obskur-verda
|
||||
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
@@ -561,15 +733,63 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 2
|
||||
|
||||
###length 4
|
||||
|
||||
###setting-zero-is-special
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 6
|
||||
|
||||
###length 3
|
||||
|
||||
###length 5
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
# Config errors
|
||||
@@ -597,15 +817,18 @@ STR_QUIT_NO :{BLACK}Ne
|
||||
|
||||
# Cheat window
|
||||
|
||||
###length 4
|
||||
|
||||
# Livery window
|
||||
|
||||
|
||||
###length 23
|
||||
|
||||
# Face selection window
|
||||
|
||||
|
||||
############ Next lines match ServerGameType
|
||||
############ End of leave-in-this-order
|
||||
# Matches ServerGameType
|
||||
###length 3
|
||||
|
||||
# Network server list
|
||||
|
||||
@@ -624,9 +847,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
|
||||
|
||||
# Network connecting window
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
############ End of leave-in-this-order
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -634,8 +856,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
|
||||
|
||||
# Network client list
|
||||
|
||||
############ Begin of ConnectionType
|
||||
############ End of ConnectionType
|
||||
# Matches ConnectionType
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
@@ -651,19 +873,22 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
|
||||
# Network messages
|
||||
STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Tu sendis tro multa imperi ad la servero
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :sendinta tro multa imperi
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 21
|
||||
STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :sendinta tro multa imperi
|
||||
|
||||
# Network related errors
|
||||
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 12
|
||||
|
||||
|
||||
|
||||
# Content downloading window
|
||||
|
||||
###length 5
|
||||
|
||||
|
||||
# Order of these is important!
|
||||
|
||||
# Content downloading progress window
|
||||
@@ -786,10 +1011,10 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD
|
||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} La kruo OpenTTD
|
||||
|
||||
# Framerate display window
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 15
|
||||
|
||||
###length 15
|
||||
|
||||
|
||||
# Save/load game/scenario
|
||||
@@ -845,6 +1070,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
|
||||
|
||||
# NewGRF status
|
||||
STR_NEWGRF_LIST_NONE :Nulo
|
||||
###length 3
|
||||
|
||||
# NewGRF 'it's broken' warnings
|
||||
|
||||
@@ -872,15 +1098,17 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
|
||||
# Town local authority window
|
||||
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
|
||||
|
||||
###length 8
|
||||
|
||||
###length 8
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_TEXT :{ORANGE}{STRING}
|
||||
|
||||
# Goal question window
|
||||
|
||||
############ Start of Goal Question button list
|
||||
############ End of Goal Question button list
|
||||
# Goal Question button list
|
||||
###length 18
|
||||
|
||||
# Subsidies window
|
||||
|
||||
@@ -900,8 +1128,7 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceptas:
|
||||
|
||||
|
||||
|
||||
############ range for rating starts
|
||||
############ range for rating ends
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -913,6 +1140,9 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
|
||||
|
||||
# Finances window
|
||||
STR_FINANCES_YEAR :{WHITE}{NUM}
|
||||
|
||||
###length 13
|
||||
|
||||
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
|
||||
STR_FINANCES_LOAN_TITLE :{WHITE}Prest-ajo
|
||||
@@ -936,23 +1166,25 @@ STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehili:
|
||||
|
||||
|
||||
# Vehicle lists
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tren{P o i}
|
||||
STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Voyo-Vehil{P o i}
|
||||
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Nav{P o i}
|
||||
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronavo
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Treni - klikigas sur treno por informeso
|
||||
STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Voy-vehili - klikigas sur vehilo por informeso
|
||||
STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Navi - klikigas sur navo por informeso
|
||||
STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronavi - klikigas sur aeronavo por informeso
|
||||
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profito to yaro: {CURRENCY_LONG} (lasta yaro: {CURRENCY_LONG})
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_LIST_AVAILABLE_TRAINS :Disponebla Treni
|
||||
STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Disponebla Vehili
|
||||
STR_VEHICLE_LIST_AVAILABLE_SHIPS :Disponebla Navi
|
||||
STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Disponebla Aeronavi
|
||||
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profito to yaro: {CURRENCY_LONG} (lasta yaro: {CURRENCY_LONG})
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sendas ad Depozeyo
|
||||
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sendas ad Depozeyo
|
||||
@@ -962,11 +1194,13 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Sendas ad Hanga
|
||||
|
||||
|
||||
# Group window
|
||||
###length VEHICLE_TYPES
|
||||
STR_GROUP_ALL_TRAINS :Omna treni
|
||||
STR_GROUP_ALL_ROAD_VEHICLES :Omna voy-vehili
|
||||
STR_GROUP_ALL_SHIPS :Omna navi
|
||||
STR_GROUP_ALL_AIRCRAFTS :Omna aeronavi
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_GROUP_DEFAULT_TRAINS :Negrupigita treni
|
||||
STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupigita voy-vehili
|
||||
STR_GROUP_DEFAULT_SHIPS :Negrupigita navi
|
||||
@@ -979,22 +1213,34 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Negrupigita aer
|
||||
|
||||
|
||||
# Build vehicle window
|
||||
###length 4
|
||||
|
||||
|
||||
############ range for vehicle availability starts
|
||||
############ range for vehicle availability ends
|
||||
# Vehicle availability
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Depot window
|
||||
STR_DEPOT_CAPTION :{WHITE}{DEPOT}
|
||||
@@ -1006,18 +1252,29 @@ STR_DEPOT_NO_ENGINE :{BLACK}-
|
||||
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
# Engine preview window
|
||||
@@ -1027,6 +1284,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
|
||||
|
||||
|
||||
# Autoreplace window
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_REPLACE_VEHICLE_TRAIN :Treno
|
||||
STR_REPLACE_VEHICLE_ROAD_VEHICLE :Voy-vehilo
|
||||
STR_REPLACE_VEHICLE_SHIP :Navo
|
||||
@@ -1035,6 +1295,8 @@ STR_REPLACE_VEHICLE_AIRCRAFT :Aeronavo
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
@@ -1042,30 +1304,38 @@ STR_REPLACE_VEHICLE_AIRCRAFT :Aeronavo
|
||||
# Vehicle view
|
||||
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Messages in the start stop button in the vehicle view
|
||||
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Servado ad {DEPOT}, {VELOCITY}
|
||||
|
||||
|
||||
# Vehicle stopped/started animations
|
||||
###length 2
|
||||
STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINY_FONT}{RED}Haltinta
|
||||
STR_VEHICLE_COMMAND_STOPPED :{RED}Haltinta
|
||||
|
||||
###length 2
|
||||
STR_VEHICLE_COMMAND_STARTED_SMALL :{TINY_FONT}{GREEN}Komencinta
|
||||
STR_VEHICLE_COMMAND_STARTED :{GREEN}Komencinta
|
||||
|
||||
# Vehicle details
|
||||
|
||||
|
||||
# The next two need to stay in this order
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -1074,6 +1344,8 @@ STR_VEHICLE_COMMAND_STARTED :{GREEN}Komencin
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Extra buttons for train details windows
|
||||
|
||||
|
||||
@@ -1085,8 +1357,11 @@ STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapacesi
|
||||
|
||||
# Vehicle refit
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Order view
|
||||
|
||||
@@ -1102,6 +1377,8 @@ STR_ORDER_TEXT :{STRING} {STRIN
|
||||
|
||||
|
||||
# Conditional order variables, must follow order of OrderConditionVariable enum
|
||||
###length 8
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
@@ -1112,6 +1389,9 @@ STR_ORDER_TEXT :{STRING} {STRIN
|
||||
# String parts to build the order string
|
||||
|
||||
|
||||
###length 3
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
|
||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||
|
||||
@@ -1122,6 +1402,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
@@ -1165,6 +1446,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
|
||||
|
||||
|
||||
# Textfile window
|
||||
###length 3
|
||||
|
||||
|
||||
# Vehicle loading indicators
|
||||
@@ -1258,13 +1540,23 @@ STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Ne povas
|
||||
|
||||
# Generic vehicle errors
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro multa vehili en la ludo
|
||||
|
||||
@@ -1282,8 +1574,10 @@ STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro mult
|
||||
# Sign related errors
|
||||
|
||||
# Translatable comment for OpenTTD's desktop shortcut
|
||||
###external 1
|
||||
|
||||
# Translatable descriptions in media/baseset/*.ob* files
|
||||
###external 10
|
||||
|
||||
##id 0x2000
|
||||
# Town building names
|
||||
@@ -1293,18 +1587,28 @@ STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro mult
|
||||
|
||||
############ WARNING, using range 0x6000 for strings that are stored in the savegame
|
||||
############ These strings may never get a new id, or savegames will break!
|
||||
|
||||
##id 0x6000
|
||||
STR_SV_EMPTY :
|
||||
|
||||
###length 27
|
||||
STR_SV_STNAME :{STRING}
|
||||
STR_SV_STNAME_BUOY :{STRING}
|
||||
STR_SV_STNAME_WAYPOINT :{STRING}
|
||||
##id 0x6020
|
||||
|
||||
############ end of savegame specific region!
|
||||
|
||||
##id 0x8000
|
||||
###length 116
|
||||
# Vehicle names
|
||||
|
||||
###length 88
|
||||
|
||||
###length 11
|
||||
|
||||
###length 41
|
||||
|
||||
##id 0x8800
|
||||
# Formatting of some strings
|
||||
STR_FORMAT_DATE_TINY :{STRING}-{STRING}-{NUM}
|
||||
@@ -1313,11 +1617,19 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN
|
||||
STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING}
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 6
|
||||
STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Treno-Depozeyo
|
||||
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Treno-Depozeyo #{COMMA}
|
||||
STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Navo-Depozeyo
|
||||
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Navo-Depozeyo #{COMMA}
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangaro
|
||||
# _SERIAL version of AIRACRAFT doesn't exist
|
||||
|
||||
STR_COMPANY_SOMEONE :ulu
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -123,7 +123,7 @@ STR_LITERS :{COMMA} litr{P
|
||||
STR_ITEMS :{COMMA} oġġett{P "" i i i}
|
||||
STR_CRATES :{COMMA} kaxx{P a i i i}
|
||||
|
||||
# Colours, do not shuffle
|
||||
###length 17
|
||||
STR_COLOUR_DARK_BLUE :Blu Skur
|
||||
STR_COLOUR_PALE_GREEN :Aħdar ċar
|
||||
STR_COLOUR_PINK :Roża
|
||||
@@ -188,7 +188,9 @@ STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Faxxa bi
|
||||
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Waqqa bini, etc.., Ctrl tagħzel zona dijagonali. Shift taqleb bejn bini/turija ta' stima ta' l-ispiza
|
||||
|
||||
# Show engines button
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Query window
|
||||
STR_BUTTON_DEFAULT :{BLACK}Default
|
||||
@@ -241,7 +243,10 @@ STR_SORT_BY_POPULATION :Popolazzjoni
|
||||
|
||||
# Group by options for vehicle list
|
||||
|
||||
# Order button in shared orders vehicle list
|
||||
|
||||
# Tooltips for the main toolbar
|
||||
###length 31
|
||||
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Waqfa temporanja mil-logħba
|
||||
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Għaġġel il-loghba
|
||||
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Preferenzi
|
||||
@@ -255,67 +260,67 @@ STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Ibni ind
|
||||
|
||||
# Extra tooltips for the scenario editor toolbar
|
||||
|
||||
############ range for SE file menu starts
|
||||
# Scenario editor file menu
|
||||
###length 7
|
||||
STR_SCENEDIT_FILE_MENU_SEPARATOR :
|
||||
############ range for SE file menu starts
|
||||
|
||||
############ range for settings menu starts
|
||||
############ range ends here
|
||||
# Settings menu
|
||||
###length 14
|
||||
|
||||
############ range for file menu starts
|
||||
# File menu
|
||||
###length 5
|
||||
STR_FILE_MENU_SEPARATOR :
|
||||
############ range ends here
|
||||
|
||||
# map menu
|
||||
# Map menu
|
||||
###length 4
|
||||
|
||||
############ range for town menu starts
|
||||
############ range ends here
|
||||
# Town menu
|
||||
###length 2
|
||||
|
||||
############ range for subsidies menu starts
|
||||
############ range ends here
|
||||
# Subsidies menu
|
||||
###length 1
|
||||
|
||||
############ range for graph menu starts
|
||||
############ range ends here
|
||||
# Graph menu
|
||||
###length 6
|
||||
|
||||
############ range for company league menu starts
|
||||
############ range ends here
|
||||
# Company league menu
|
||||
###length 3
|
||||
|
||||
############ range for industry menu starts
|
||||
############ range ends here
|
||||
# Industry menu
|
||||
###length 3
|
||||
|
||||
############ range for railway construction menu starts
|
||||
############ range ends here
|
||||
# URailway construction menu
|
||||
###length 4
|
||||
|
||||
############ range for road construction menu starts
|
||||
############ range ends here
|
||||
# Road construction menu
|
||||
###length 2
|
||||
|
||||
############ range for waterways construction menu starts
|
||||
############ range ends here
|
||||
# Waterways construction menu
|
||||
###length 1
|
||||
|
||||
############ range for airport construction menu starts
|
||||
############ range ends here
|
||||
# Aairport construction menu
|
||||
###length 1
|
||||
|
||||
############ range for landscaping menu starts
|
||||
############ range ends here
|
||||
# Landscaping menu
|
||||
###length 3
|
||||
|
||||
############ range for music menu starts
|
||||
############ range ends here
|
||||
# Music menu
|
||||
###length 1
|
||||
|
||||
############ range for message menu starts
|
||||
############ range ends here
|
||||
# Message menu
|
||||
###length 3
|
||||
|
||||
############ range for about menu starts
|
||||
############ range ends here
|
||||
# About menu
|
||||
###length 10
|
||||
|
||||
############ range for ordinal numbers used for the place in the highscore window
|
||||
############ range for ordinal numbers ends
|
||||
# Place in highscore window
|
||||
###length 15
|
||||
|
||||
############ range for days starts
|
||||
############ range for days ends
|
||||
###length 31
|
||||
|
||||
############ range for months starts
|
||||
###length 12
|
||||
|
||||
############ range for months ends
|
||||
###length 12
|
||||
|
||||
# Graph window
|
||||
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}
|
||||
@@ -334,8 +339,10 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM
|
||||
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
|
||||
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
|
||||
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
|
||||
############ Those following lines need to be in this order!!
|
||||
############ End of order list
|
||||
|
||||
###length 10
|
||||
|
||||
###length 10
|
||||
|
||||
# Music window
|
||||
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
|
||||
@@ -352,6 +359,8 @@ STR_HIGHSCORE_STATS :{BIG_FONT}'{STR
|
||||
|
||||
# Smallmap window
|
||||
|
||||
###length 7
|
||||
|
||||
|
||||
|
||||
STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY}
|
||||
@@ -376,6 +385,8 @@ STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {C
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
###next-name-looks-similar
|
||||
|
||||
# Order review system / warnings
|
||||
|
||||
@@ -385,23 +396,23 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
# Extra view window
|
||||
|
||||
# Game options window
|
||||
|
||||
############ start of currency region
|
||||
############ end of currency region
|
||||
###length 42
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
############ start of townname region
|
||||
############ end of townname region
|
||||
###length 21
|
||||
|
||||
|
||||
############ start of autosave dropdown
|
||||
############ end of autosave dropdown
|
||||
# Autosave dropdown
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
@@ -429,45 +440,127 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :oħrajn
|
||||
|
||||
|
||||
|
||||
###length 5
|
||||
|
||||
###length 6
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
###length 7
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
# Settings tree window
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Stabbilixxi l-kosti għal manutenzjoni u servizzi fuq vetturi u infrastruttura
|
||||
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Veloċita' tal-kostruzzjoni: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Illimita l-ammont massimu ta' kostruzzjonijiet għall-AI
|
||||
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Ħsarat fil-vetturi: {STRING}
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ikkontrolla kemm-il darba vettura li ma ingħatatx servizz riċentament tieqaf
|
||||
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplikatur tas-sussidju: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Stabbilixxi kemm jiġi mħallas għal konnessjonijiet sussidjati
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Kosti tal-kostruzzjoni: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Stabbilixxi l-livell ta' kostruzzjoni u l-prezz tax-xiri
|
||||
|
||||
STR_CONFIG_SETTING_RECESSIONS :Riċessjonijiet: {STRING}
|
||||
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Jekk mixgħula kull ftit snin tista' sseħħ riċessjoni. Waqt riċessjoni, il-produzzjoni ta' kollox tonqos (tirritorna għal kemm kienet qabel kif tgħaddi r-riċessjoni)
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_REVERSING :Tħallix li ferrovija ddur lura fi stazzjon: {STRING}
|
||||
STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Jekk tinxtegħel, ferroviji ma jdurux lura fi stazzjonijiet li mhumiex fit-tarf, jekk teżisti rotta iqsar għad-destinazzjoni li jmiss
|
||||
|
||||
STR_CONFIG_SETTING_DISASTERS :Diżastri: {STRING}
|
||||
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ixgħel jew itfi diżastri li xi drabi jistgħu jaffetwaw jew ikissru vetturi jew infrastrutturi
|
||||
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL :L-attitudni tal-kunsill lokali lejn bidliet fil-viċinanzi: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Iddeċiedi kemm l-ammont ta storbju u danni lill-ambjent ta' kumpanija jaffetwaw il-klassifikazzjoni tagħhom mar-raħal u proġetti oħra tal-futur
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jintilef il-vehikolu: {STRING}
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
@@ -475,8 +568,47 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jinti
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :L-ebda azzjoni
|
||||
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :L-azzjonijiet kollha
|
||||
|
||||
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Uza l-lista avvanzata tal-vetturi: {STRING}
|
||||
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uzu tal-listi avvanzati tal-vetturi biex tghaqqad il-vetturi fi gruppi
|
||||
|
||||
@@ -484,6 +616,13 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
@@ -501,6 +640,87 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
###length 2
|
||||
|
||||
###length 4
|
||||
|
||||
###setting-zero-is-special
|
||||
###setting-zero-is-special
|
||||
|
||||
###length 6
|
||||
|
||||
###length 3
|
||||
|
||||
###length 5
|
||||
|
||||
###setting-zero-is-special
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
|
||||
###length 4
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
###length 2
|
||||
|
||||
|
||||
# Config errors
|
||||
@@ -523,15 +743,18 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD
|
||||
# Cheat window
|
||||
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ibdel is-sena
|
||||
|
||||
###length 4
|
||||
|
||||
# Livery window
|
||||
|
||||
|
||||
###length 23
|
||||
|
||||
# Face selection window
|
||||
|
||||
|
||||
############ Next lines match ServerGameType
|
||||
############ End of leave-in-this-order
|
||||
# Matches ServerGameType
|
||||
###length 3
|
||||
|
||||
# Network server list
|
||||
|
||||
@@ -550,20 +773,19 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
|
||||
|
||||
# Network connecting window
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
############ End of leave-in-this-order
|
||||
STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} imnizzlin s'issa
|
||||
STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} imnizzlin s'issa
|
||||
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
# Network company list added strings
|
||||
|
||||
# Network client list
|
||||
|
||||
############ Begin of ConnectionType
|
||||
############ End of ConnectionType
|
||||
# Matches ConnectionType
|
||||
###length 5
|
||||
|
||||
|
||||
|
||||
@@ -578,21 +800,24 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES}
|
||||
|
||||
# Network messages
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
|
||||
###length 21
|
||||
STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :reviżjoni ħażina
|
||||
STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isem diġa qed jintuża
|
||||
STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :password ħażin
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
# Network related errors
|
||||
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 12
|
||||
|
||||
|
||||
|
||||
# Content downloading window
|
||||
|
||||
###length 5
|
||||
|
||||
|
||||
# Order of these is important!
|
||||
|
||||
# Content downloading progress window
|
||||
@@ -693,10 +918,10 @@ STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Aghzel i
|
||||
# About OpenTTD window
|
||||
|
||||
# Framerate display window
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
###length 15
|
||||
|
||||
###length 15
|
||||
|
||||
|
||||
# Save/load game/scenario
|
||||
@@ -746,6 +971,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
|
||||
|
||||
|
||||
# NewGRF status
|
||||
###length 3
|
||||
|
||||
# NewGRF 'it's broken' warnings
|
||||
|
||||
@@ -774,15 +1000,17 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
|
||||
# Town local authority window
|
||||
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
|
||||
|
||||
###length 8
|
||||
|
||||
###length 8
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_TEXT :{ORANGE}{STRING}
|
||||
|
||||
# Goal question window
|
||||
|
||||
############ Start of Goal Question button list
|
||||
############ End of Goal Question button list
|
||||
# Goal Question button list
|
||||
###length 18
|
||||
|
||||
# Subsidies window
|
||||
|
||||
@@ -801,8 +1029,7 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L
|
||||
|
||||
|
||||
|
||||
############ range for rating starts
|
||||
############ range for rating ends
|
||||
###length 8
|
||||
|
||||
|
||||
|
||||
@@ -814,6 +1041,9 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
|
||||
|
||||
# Finances window
|
||||
STR_FINANCES_YEAR :{WHITE}{NUM}
|
||||
|
||||
###length 13
|
||||
|
||||
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
|
||||
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
|
||||
|
||||
@@ -835,16 +1065,20 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN
|
||||
|
||||
|
||||
# Vehicle lists
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Group window
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -853,22 +1087,34 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN
|
||||
|
||||
|
||||
# Build vehicle window
|
||||
###length 4
|
||||
|
||||
|
||||
############ range for vehicle availability starts
|
||||
############ range for vehicle availability ends
|
||||
# Vehicle availability
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Depot window
|
||||
STR_DEPOT_CAPTION :{WHITE}{DEPOT}
|
||||
@@ -880,18 +1126,29 @@ STR_DEPOT_NO_ENGINE :{BLACK}-
|
||||
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
# Engine preview window
|
||||
@@ -903,34 +1160,47 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
|
||||
# Autoreplace window
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
###length 2
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
|
||||
# Vehicle view
|
||||
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Messages in the start stop button in the vehicle view
|
||||
|
||||
|
||||
|
||||
# Vehicle stopped/started animations
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
# Vehicle details
|
||||
|
||||
|
||||
# The next two need to stay in this order
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
@@ -939,6 +1209,8 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE
|
||||
|
||||
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Extra buttons for train details windows
|
||||
|
||||
|
||||
@@ -947,8 +1219,11 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE
|
||||
|
||||
# Vehicle refit
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
# Order view
|
||||
|
||||
@@ -964,6 +1239,8 @@ STR_ORDER_TEXT :{STRING} {STRIN
|
||||
|
||||
|
||||
# Conditional order variables, must follow order of OrderConditionVariable enum
|
||||
###length 8
|
||||
###next-name-looks-similar
|
||||
|
||||
|
||||
|
||||
@@ -975,6 +1252,9 @@ STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Hassar l
|
||||
# String parts to build the order string
|
||||
|
||||
|
||||
###length 3
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
|
||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||
|
||||
@@ -986,6 +1266,7 @@ STR_ORDER_IMPLICIT :(Awtomatiku)
|
||||
|
||||
|
||||
|
||||
###length 3
|
||||
|
||||
|
||||
|
||||
@@ -1035,10 +1316,11 @@ STR_AI_CONFIG_CHANGE_NONE :
|
||||
|
||||
|
||||
# Textfile window
|
||||
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} лиценца за {STRING}
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Прикажи ги чита-ми
|
||||
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Промени се најавите
|
||||
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Лиценца
|
||||
###length 3
|
||||
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} лиценца за {STRING}
|
||||
|
||||
|
||||
# Vehicle loading indicators
|
||||
@@ -1116,24 +1398,34 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Il-pont
|
||||
|
||||
# Generic vehicle errors
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip ta' vapur...
|
||||
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip t' ajruplan...
|
||||
|
||||
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Ma tistax tbigħ din il-ferrovija...
|
||||
STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ma tistax tbigħ din il-karozza...
|
||||
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Ma tistax tbigħ dan il-vapur...
|
||||
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Ma tistax tbigħ dan l-ajruplan...
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Din il-vettura mhix disponibbli
|
||||
STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Din il-vettura mhix disponibbli
|
||||
STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Dan il-vapur mhux disponibbli
|
||||
STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Dan l-ajruplan mhux disponibbli
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip ta' vapur...
|
||||
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip t' ajruplan...
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Ma tistax tbigħ din il-ferrovija...
|
||||
STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ma tistax tbigħ din il-karozza...
|
||||
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Ma tistax tbigħ dan il-vapur...
|
||||
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Ma tistax tbigħ dan l-ajruplan...
|
||||
|
||||
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Hemm wisq vetturi fil-logħba
|
||||
|
||||
|
||||
@@ -1159,9 +1451,11 @@ STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Ma tista
|
||||
# Sign related errors
|
||||
|
||||
# Translatable comment for OpenTTD's desktop shortcut
|
||||
###external 1
|
||||
STR_DESKTOP_SHORTCUT_COMMENT :Logħba simulazzjoni bbażata fuq Transport Tycoon Deluxe
|
||||
|
||||
# Translatable descriptions in media/baseset/*.ob* files
|
||||
###external 10
|
||||
|
||||
##id 0x2000
|
||||
# Town building names
|
||||
@@ -1207,6 +1501,7 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Minjiera taz-zo
|
||||
|
||||
############ WARNING, using range 0x6000 for strings that are stored in the savegame
|
||||
############ These strings may never get a new id, or savegames will break!
|
||||
|
||||
##id 0x6000
|
||||
STR_SV_EMPTY :
|
||||
STR_SV_UNNAMED :Bla isem
|
||||
@@ -1215,6 +1510,7 @@ STR_SV_ROAD_VEHICLE_NAME :Vettura tat-tri
|
||||
STR_SV_SHIP_NAME :Vapur {COMMA}
|
||||
STR_SV_AIRCRAFT_NAME :Ajruplan {COMMA}
|
||||
|
||||
###length 27
|
||||
STR_SV_STNAME :{STRING}
|
||||
STR_SV_STNAME_NORTH :{STRING} Tramuntana
|
||||
STR_SV_STNAME_SOUTH :{STRING} Nofsinhar
|
||||
@@ -1241,9 +1537,11 @@ STR_SV_STNAME_LOWER :{STRING} t' isf
|
||||
STR_SV_STNAME_HELIPORT :Ħeliport {STRING}
|
||||
STR_SV_STNAME_FOREST :Foresta {STRING}
|
||||
STR_SV_STNAME_FALLBACK :{STRING}, Stazzjon #{NUM}
|
||||
|
||||
############ end of savegame specific region!
|
||||
|
||||
##id 0x8000
|
||||
###length 116
|
||||
# Vehicle names
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Fwar)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (Diesel)
|
||||
@@ -1297,6 +1595,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Karru għall-pa
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Karru għall-posta
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Karru għall-faħam
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Trakk tax-Xarbiet Karbonati
|
||||
|
||||
###length 88
|
||||
|
||||
###length 11
|
||||
STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Tanker taż-żejt MPS
|
||||
STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :Tanker taż-żejt CS-Inc.
|
||||
STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Vapur tal-passiġġieri MPS
|
||||
@@ -1308,6 +1610,8 @@ STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Vapur tal-merka
|
||||
STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Vapur tal-merkanzija Bakewell
|
||||
STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Vapur tal-merkanzija MightyMover
|
||||
STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Vapur tal-merkanzija Powernaut
|
||||
|
||||
###length 41
|
||||
STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52
|
||||
STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Coleman Count
|
||||
STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Dart
|
||||
@@ -1359,6 +1663,14 @@ STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRI
|
||||
|
||||
STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
|
||||
|
||||
###length 2
|
||||
|
||||
###length 2
|
||||
|
||||
###length 6
|
||||
###next-name-looks-similar
|
||||
|
||||
# _SERIAL version of AIRACRAFT doesn't exist
|
||||
|
||||
STR_UNKNOWN_STATION :stazzjon mhux magħruf
|
||||
STR_DEFAULT_SIGN_NAME :Sinjal
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -39,6 +39,7 @@ inline void LinkGraph::BaseEdge::Init()
|
||||
{
|
||||
this->capacity = 0;
|
||||
this->usage = 0;
|
||||
this->travel_time_sum = 0;
|
||||
this->last_unrestricted_update = INVALID_DATE;
|
||||
this->last_restricted_update = INVALID_DATE;
|
||||
this->next_edge = INVALID_NODE;
|
||||
@@ -74,6 +75,9 @@ void LinkGraph::Compress()
|
||||
edge.capacity = std::max(1U, edge.capacity / 2);
|
||||
edge.usage /= 2;
|
||||
}
|
||||
if (edge.travel_time_sum > 0) {
|
||||
edge.travel_time_sum = std::max(1ULL, edge.travel_time_sum / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,9 +104,11 @@ void LinkGraph::Merge(LinkGraph *other)
|
||||
backward = other->edges[node2][node1];
|
||||
forward.capacity = LinkGraph::Scale(forward.capacity, age, other_age);
|
||||
forward.usage = LinkGraph::Scale(forward.usage, age, other_age);
|
||||
forward.travel_time_sum = LinkGraph::Scale(forward.travel_time_sum, age, other_age);
|
||||
if (forward.next_edge != INVALID_NODE) forward.next_edge += first;
|
||||
backward.capacity = LinkGraph::Scale(backward.capacity, age, other_age);
|
||||
backward.usage = LinkGraph::Scale(backward.usage, age, other_age);
|
||||
backward.travel_time_sum = LinkGraph::Scale(backward.travel_time_sum, age, other_age);
|
||||
if (backward.next_edge != INVALID_NODE) backward.next_edge += first;
|
||||
}
|
||||
BaseEdge &new_start = this->edges[new_node][new_node];
|
||||
@@ -188,13 +194,14 @@ NodeID LinkGraph::AddNode(const Station *st)
|
||||
* @param usage Usage to be added.
|
||||
* @param mode Update mode to be used.
|
||||
*/
|
||||
void LinkGraph::Node::AddEdge(NodeID to, uint capacity, uint usage, EdgeUpdateMode mode)
|
||||
void LinkGraph::Node::AddEdge(NodeID to, uint capacity, uint usage, uint32 travel_time, EdgeUpdateMode mode)
|
||||
{
|
||||
assert(this->index != to);
|
||||
BaseEdge &edge = this->edges[to];
|
||||
BaseEdge &first = this->edges[this->index];
|
||||
edge.capacity = capacity;
|
||||
edge.usage = usage;
|
||||
edge.travel_time_sum = travel_time * capacity;
|
||||
edge.next_edge = first.next_edge;
|
||||
first.next_edge = to;
|
||||
if (mode & EUM_UNRESTRICTED) edge.last_unrestricted_update = _date;
|
||||
@@ -208,14 +215,14 @@ void LinkGraph::Node::AddEdge(NodeID to, uint capacity, uint usage, EdgeUpdateMo
|
||||
* @param usage Usage to be added.
|
||||
* @param mode Update mode to be used.
|
||||
*/
|
||||
void LinkGraph::Node::UpdateEdge(NodeID to, uint capacity, uint usage, EdgeUpdateMode mode)
|
||||
void LinkGraph::Node::UpdateEdge(NodeID to, uint capacity, uint usage, uint32 travel_time, EdgeUpdateMode mode)
|
||||
{
|
||||
assert(capacity > 0);
|
||||
assert(usage <= capacity);
|
||||
if (this->edges[to].capacity == 0) {
|
||||
this->AddEdge(to, capacity, usage, mode);
|
||||
this->AddEdge(to, capacity, usage, travel_time, mode);
|
||||
} else {
|
||||
(*this)[to].Update(capacity, usage, mode);
|
||||
(*this)[to].Update(capacity, usage, travel_time, mode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,6 +238,7 @@ void LinkGraph::Node::RemoveEdge(NodeID to)
|
||||
edge.last_unrestricted_update = INVALID_DATE;
|
||||
edge.last_restricted_update = INVALID_DATE;
|
||||
edge.usage = 0;
|
||||
edge.travel_time_sum = 0;
|
||||
|
||||
NodeID prev = this->index;
|
||||
NodeID next = this->edges[this->index].next_edge;
|
||||
@@ -249,23 +257,37 @@ void LinkGraph::Node::RemoveEdge(NodeID to)
|
||||
|
||||
/**
|
||||
* Update an edge. If mode contains UM_REFRESH refresh the edge to have at
|
||||
* least the given capacity and usage, otherwise add the capacity and usage.
|
||||
* least the given capacity and usage, otherwise add the capacity, usage and travel time.
|
||||
* In any case set the respective update timestamp(s), according to the given
|
||||
* mode.
|
||||
* @param capacity Capacity to be added/updated.
|
||||
* @param usage Usage to be added.
|
||||
* @param travel_time Travel time to be added, in ticks.
|
||||
* @param mode Update mode to be applied.
|
||||
*/
|
||||
void LinkGraph::Edge::Update(uint capacity, uint usage, EdgeUpdateMode mode)
|
||||
void LinkGraph::Edge::Update(uint capacity, uint usage, uint32 travel_time, EdgeUpdateMode mode)
|
||||
{
|
||||
assert(this->edge.capacity > 0);
|
||||
assert(capacity >= usage);
|
||||
|
||||
if (mode & EUM_INCREASE) {
|
||||
if (this->edge.travel_time_sum == 0) {
|
||||
this->edge.travel_time_sum = (this->edge.capacity + capacity) * travel_time;
|
||||
} else if (travel_time == 0) {
|
||||
this->edge.travel_time_sum += this->edge.travel_time_sum / this->edge.capacity * capacity;
|
||||
} else {
|
||||
this->edge.travel_time_sum += travel_time * capacity;
|
||||
}
|
||||
this->edge.capacity += capacity;
|
||||
this->edge.usage += usage;
|
||||
} else if (mode & EUM_REFRESH) {
|
||||
this->edge.capacity = std::max(this->edge.capacity, capacity);
|
||||
if (this->edge.travel_time_sum == 0) {
|
||||
this->edge.capacity = std::max(this->edge.capacity, capacity);
|
||||
this->edge.travel_time_sum = travel_time * this->edge.capacity;
|
||||
} else if (capacity > this->edge.capacity) {
|
||||
this->edge.travel_time_sum = this->edge.travel_time_sum / this->edge.capacity * capacity;
|
||||
this->edge.capacity = capacity;
|
||||
}
|
||||
this->edge.usage = std::max(this->edge.usage, usage);
|
||||
}
|
||||
if (mode & EUM_UNRESTRICTED) this->edge.last_unrestricted_update = _date;
|
||||
|
@@ -62,6 +62,7 @@ public:
|
||||
struct BaseEdge {
|
||||
uint capacity; ///< Capacity of the link.
|
||||
uint usage; ///< Usage of the link.
|
||||
uint64 travel_time_sum; ///< Sum of the travel times of the link, in ticks.
|
||||
Date last_unrestricted_update; ///< When the unrestricted part of the link was last updated.
|
||||
Date last_restricted_update; ///< When the restricted part of the link was last updated.
|
||||
NodeID next_edge; ///< Destination of next valid edge starting at the same source node.
|
||||
@@ -97,6 +98,12 @@ public:
|
||||
*/
|
||||
uint Usage() const { return this->edge.usage; }
|
||||
|
||||
/**
|
||||
* Get edge's average travel time.
|
||||
* @return Travel time, in ticks.
|
||||
*/
|
||||
uint32 TravelTime() const { return this->edge.travel_time_sum / this->edge.capacity; }
|
||||
|
||||
/**
|
||||
* Get the date of the last update to the edge's unrestricted capacity.
|
||||
* @return Last update.
|
||||
@@ -296,7 +303,7 @@ public:
|
||||
* @param edge Edge to be wrapped.
|
||||
*/
|
||||
Edge(BaseEdge &edge) : EdgeWrapper<BaseEdge>(edge) {}
|
||||
void Update(uint capacity, uint usage, EdgeUpdateMode mode);
|
||||
void Update(uint capacity, uint usage, uint32 time, EdgeUpdateMode mode);
|
||||
void Restrict() { this->edge.last_unrestricted_update = INVALID_DATE; }
|
||||
void Release() { this->edge.last_restricted_update = INVALID_DATE; }
|
||||
};
|
||||
@@ -429,8 +436,8 @@ public:
|
||||
this->node.demand = demand;
|
||||
}
|
||||
|
||||
void AddEdge(NodeID to, uint capacity, uint usage, EdgeUpdateMode mode);
|
||||
void UpdateEdge(NodeID to, uint capacity, uint usage, EdgeUpdateMode mode);
|
||||
void AddEdge(NodeID to, uint capacity, uint usage, uint32 time, EdgeUpdateMode mode);
|
||||
void UpdateEdge(NodeID to, uint capacity, uint usage, uint32 time, EdgeUpdateMode mode);
|
||||
void RemoveEdge(NodeID to);
|
||||
};
|
||||
|
||||
@@ -440,6 +447,9 @@ public:
|
||||
/** Minimum effective distance for timeout calculation. */
|
||||
static const uint MIN_TIMEOUT_DISTANCE = 32;
|
||||
|
||||
/** Number of days before deleting links served only by vehicles stopped in depot. */
|
||||
static const uint STALE_LINK_DEPOT_TIMEOUT = 1024;
|
||||
|
||||
/** Minimum number of days between subsequent compressions of a LG. */
|
||||
static const uint COMPRESSION_INTERVAL = 256;
|
||||
|
||||
|
@@ -284,12 +284,21 @@ void MultiCommodityFlow::Dijkstra(NodeID source_node, PathVector &paths)
|
||||
capacity /= 100;
|
||||
if (capacity == 0) capacity = 1;
|
||||
}
|
||||
/* punish in-between stops a little */
|
||||
/* Prioritize the fastest route for passengers, mail and express cargo,
|
||||
* and the shortest route for other classes of cargo.
|
||||
* In-between stops are punished with a 1 tile or 1 day penalty. */
|
||||
bool express = IsCargoInClass(this->job.Cargo(), CC_PASSENGERS) ||
|
||||
IsCargoInClass(this->job.Cargo(), CC_MAIL) ||
|
||||
IsCargoInClass(this->job.Cargo(), CC_EXPRESS);
|
||||
uint distance = DistanceMaxPlusManhattan(this->job[from].XY(), this->job[to].XY()) + 1;
|
||||
/* Compute a default travel time from the distance and an average speed of 1 tile/day. */
|
||||
uint time = (edge.TravelTime() != 0) ? edge.TravelTime() + DAY_TICKS : distance * DAY_TICKS;
|
||||
uint distance_anno = express ? time : distance;
|
||||
|
||||
Tannotation *dest = static_cast<Tannotation *>(paths[to]);
|
||||
if (dest->IsBetter(source, capacity, capacity - edge.Flow(), distance)) {
|
||||
if (dest->IsBetter(source, capacity, capacity - edge.Flow(), distance_anno)) {
|
||||
annos.erase(dest);
|
||||
dest->Fork(source, capacity, capacity - edge.Flow(), distance);
|
||||
dest->Fork(source, capacity, capacity - edge.Flow(), distance_anno);
|
||||
dest->UpdateAnnotation();
|
||||
annos.insert(dest);
|
||||
}
|
||||
|
@@ -218,6 +218,12 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next)
|
||||
/* A link is at least partly restricted if a vehicle can't load at its source. */
|
||||
EdgeUpdateMode restricted_mode = (cur->GetLoadType() & OLFB_NO_LOAD) == 0 ?
|
||||
EUM_UNRESTRICTED : EUM_RESTRICTED;
|
||||
Station *st_to = Station::GetIfValid(next_station);
|
||||
/* This estimates the travel time of the link as the time needed
|
||||
* to travel between the stations at half the max speed of the consist.
|
||||
* The result is in tiles/tick (= 2048 km-ish/h). */
|
||||
uint32 time_estimate = (st_to != nullptr) ?
|
||||
DistanceManhattan(st->xy, st_to->xy) * 4096U / this->vehicle->GetDisplayMaxSpeed() : 0;
|
||||
|
||||
/* If the vehicle is currently full loading, increase the capacities at the station
|
||||
* where it is loading by an estimate of what it would have transported if it wasn't
|
||||
@@ -231,15 +237,15 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next)
|
||||
uint effective_capacity = cargo_quantity * this->vehicle->load_unload_ticks;
|
||||
if (effective_capacity > (uint)this->vehicle->orders.list->GetTotalDuration()) {
|
||||
IncreaseStats(st, c, next_station, effective_capacity /
|
||||
this->vehicle->orders.list->GetTotalDuration(), 0,
|
||||
this->vehicle->orders.list->GetTotalDuration(), 0, 0,
|
||||
EUM_INCREASE | restricted_mode);
|
||||
} else if (RandomRange(this->vehicle->orders.list->GetTotalDuration()) < effective_capacity) {
|
||||
IncreaseStats(st, c, next_station, 1, 0, EUM_INCREASE | restricted_mode);
|
||||
IncreaseStats(st, c, next_station, 1, 0, 0, EUM_INCREASE | restricted_mode);
|
||||
} else {
|
||||
IncreaseStats(st, c, next_station, cargo_quantity, 0, EUM_REFRESH | restricted_mode);
|
||||
IncreaseStats(st, c, next_station, cargo_quantity, 0, time_estimate, EUM_REFRESH | restricted_mode);
|
||||
}
|
||||
} else {
|
||||
IncreaseStats(st, c, next_station, cargo_quantity, 0, EUM_REFRESH | restricted_mode);
|
||||
IncreaseStats(st, c, next_station, cargo_quantity, 0, time_estimate, EUM_REFRESH | restricted_mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -152,12 +152,24 @@ void ZoomInOrOutToCursorWindow(bool in, Window *w)
|
||||
}
|
||||
}
|
||||
|
||||
void FixTitleGameZoom()
|
||||
void FixTitleGameZoom(int zoom_adjust)
|
||||
{
|
||||
if (_game_mode != GM_MENU) return;
|
||||
|
||||
Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport;
|
||||
|
||||
/* Adjust the zoom in/out.
|
||||
* Can't simply add, since operator+ is not defined on the ZoomLevel type. */
|
||||
vp->zoom = _gui_zoom;
|
||||
while (zoom_adjust < 0 && vp->zoom != ZOOM_LVL_MIN) {
|
||||
vp->zoom--;
|
||||
zoom_adjust++;
|
||||
}
|
||||
while (zoom_adjust > 0 && vp->zoom != ZOOM_LVL_MAX) {
|
||||
vp->zoom++;
|
||||
zoom_adjust--;
|
||||
}
|
||||
|
||||
vp->virtual_width = ScaleByZoom(vp->width, vp->zoom);
|
||||
vp->virtual_height = ScaleByZoom(vp->height, vp->zoom);
|
||||
}
|
||||
|
@@ -22,6 +22,8 @@ add_files(
|
||||
network_gui.cpp
|
||||
network_gui.h
|
||||
network_internal.h
|
||||
network_query.cpp
|
||||
network_query.h
|
||||
network_server.cpp
|
||||
network_server.h
|
||||
network_stun.cpp
|
||||
|
@@ -50,7 +50,7 @@ static const uint16 COMPAT_MTU = 1460; ///< Numbe
|
||||
static const byte NETWORK_GAME_ADMIN_VERSION = 1; ///< What version of the admin network do we use?
|
||||
static const byte NETWORK_GAME_INFO_VERSION = 6; ///< What version of game-info do we use?
|
||||
static const byte NETWORK_COMPANY_INFO_VERSION = 6; ///< What version of company info is this?
|
||||
static const byte NETWORK_COORDINATOR_VERSION = 5; ///< What version of game-coordinator-protocol do we use?
|
||||
static const byte NETWORK_COORDINATOR_VERSION = 6; ///< What version of game-coordinator-protocol do we use?
|
||||
|
||||
static const uint NETWORK_NAME_LENGTH = 80; ///< The maximum length of the server name and map name, in bytes including '\0'
|
||||
static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0'
|
||||
|
@@ -53,6 +53,7 @@ NetworkRecvStatus NetworkAdminSocketHandler::HandlePacket(Packet *p)
|
||||
case ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY: return this->Receive_ADMIN_UPDATE_FREQUENCY(p);
|
||||
case ADMIN_PACKET_ADMIN_POLL: return this->Receive_ADMIN_POLL(p);
|
||||
case ADMIN_PACKET_ADMIN_CHAT: return this->Receive_ADMIN_CHAT(p);
|
||||
case ADMIN_PACKET_ADMIN_EXTERNAL_CHAT: return this->Receive_ADMIN_EXTERNAL_CHAT(p);
|
||||
case ADMIN_PACKET_ADMIN_RCON: return this->Receive_ADMIN_RCON(p);
|
||||
case ADMIN_PACKET_ADMIN_GAMESCRIPT: return this->Receive_ADMIN_GAMESCRIPT(p);
|
||||
case ADMIN_PACKET_ADMIN_PING: return this->Receive_ADMIN_PING(p);
|
||||
@@ -132,6 +133,7 @@ NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_QUIT(Packet *p) { ret
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_UPDATE_FREQUENCY(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY); }
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_POLL(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_POLL); }
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_CHAT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_CHAT); }
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_EXTERNAL_CHAT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_EXTERNAL_CHAT); }
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_RCON(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_RCON); }
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_GAMESCRIPT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_GAMESCRIPT); }
|
||||
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_PING(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_PING); }
|
||||
|
@@ -30,6 +30,7 @@ enum PacketAdminType {
|
||||
ADMIN_PACKET_ADMIN_RCON, ///< The admin sends a remote console command.
|
||||
ADMIN_PACKET_ADMIN_GAMESCRIPT, ///< The admin sends a JSON string for the GameScript.
|
||||
ADMIN_PACKET_ADMIN_PING, ///< The admin sends a ping to the server, expecting a ping-reply (PONG) packet.
|
||||
ADMIN_PACKET_ADMIN_EXTERNAL_CHAT, ///< The admin sends a chat message from external source.
|
||||
|
||||
ADMIN_PACKET_SERVER_FULL = 100, ///< The server tells the admin it cannot accept the admin.
|
||||
ADMIN_PACKET_SERVER_BANNED, ///< The server tells the admin it is banned.
|
||||
@@ -163,6 +164,17 @@ protected:
|
||||
*/
|
||||
virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p);
|
||||
|
||||
/**
|
||||
* Send chat from the external source:
|
||||
* string Name of the source this message came from.
|
||||
* uint16 TextColour to use for the message.
|
||||
* string Name of the user who sent the messsage.
|
||||
* string Message.
|
||||
* @param p The packet that was just received.
|
||||
* @return The state the network should have.
|
||||
*/
|
||||
virtual NetworkRecvStatus Receive_ADMIN_EXTERNAL_CHAT(Packet *p);
|
||||
|
||||
/**
|
||||
* Execute a command on the servers console:
|
||||
* string Command to be executed.
|
||||
|
@@ -205,9 +205,13 @@ void TCPConnecter::OnResolved(addrinfo *ai)
|
||||
}
|
||||
|
||||
if (_debug_net_level >= 6) {
|
||||
Debug(net, 6, "{} resolved in:", this->connection_string);
|
||||
for (const auto &address : this->addresses) {
|
||||
Debug(net, 6, "- {}", NetworkAddress(address->ai_addr, (int)address->ai_addrlen).GetAddressAsString());
|
||||
if (this->addresses.size() == 0) {
|
||||
Debug(net, 6, "{} did not resolve", this->connection_string);
|
||||
} else {
|
||||
Debug(net, 6, "{} resolved in:", this->connection_string);
|
||||
for (const auto &address : this->addresses) {
|
||||
Debug(net, 6, "- {}", NetworkAddress(address->ai_addr, (int)address->ai_addrlen).GetAddressAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -26,7 +26,11 @@ protected:
|
||||
/**
|
||||
* Client requesting a list of content info:
|
||||
* byte type
|
||||
* uint32 openttd version
|
||||
* uint32 openttd version (or 0xFFFFFFFF if using a list)
|
||||
* Only if the above value is 0xFFFFFFFF:
|
||||
* uint8 count
|
||||
* string branch-name ("vanilla" for upstream OpenTTD)
|
||||
* string release version (like "12.0")
|
||||
* @param p The packet that was just received.
|
||||
* @return True upon success, otherwise false.
|
||||
*/
|
||||
|
@@ -61,9 +61,10 @@ enum ConnectionType {
|
||||
* The type of error from the Game Coordinator.
|
||||
*/
|
||||
enum NetworkCoordinatorErrorType {
|
||||
NETWORK_COORDINATOR_ERROR_UNKNOWN, ///< There was an unknown error.
|
||||
NETWORK_COORDINATOR_ERROR_REGISTRATION_FAILED, ///< Your request for registration failed.
|
||||
NETWORK_COORDINATOR_ERROR_INVALID_INVITE_CODE, ///< The invite code given is invalid.
|
||||
NETWORK_COORDINATOR_ERROR_UNKNOWN, ///< There was an unknown error.
|
||||
NETWORK_COORDINATOR_ERROR_REGISTRATION_FAILED, ///< Your request for registration failed.
|
||||
NETWORK_COORDINATOR_ERROR_INVALID_INVITE_CODE, ///< The invite code given is invalid.
|
||||
NETWORK_COORDINATOR_ERROR_REUSE_OF_INVITE_CODE, ///< The invite code is used by another (newer) server.
|
||||
};
|
||||
|
||||
/** Base socket handler for all Game Coordinator TCP sockets. */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user