diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..787a1c76c1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{c,cpp,h,hpp}] +indent_style = tab +charset = utf-8 diff --git a/.gitignore b/.gitignore index 4bf58b05c1..e30aabe37c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ bin/scripts/* !bin/scripts/*.example !bin/scripts/readme.txt +*.aps bundle/* bundles/* docs/aidocs/* @@ -29,6 +30,7 @@ docs/source/* media/openttd.desktop media/openttd.desktop.install objs/* +projects/.vs projects/Debug projects/Release projects/*.ncb diff --git a/.hgignore b/.hgignore index 17b2557f80..03d99c6f29 100644 --- a/.hgignore +++ b/.hgignore @@ -1,6 +1,7 @@ syntax: glob .svn +*.aps bin/baseset/openttd.32.bmp bin/lang/* bin/openttd* @@ -22,6 +23,7 @@ Makefile.bundle media/openttd.desktop media/openttd.desktop.install objs/* +projects/.vs projects/*.ncb projects/*.suo projects/*.sdf diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..d77071e669 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,170 @@ + +# Contributing to OpenTTD + +Looking to contribute something to OpenTTD? **Here's how you can help.** + +Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved. + +Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue or assessing patches and features. + + +## Using the issue tracker + +The [issue tracker](https://github.com/OpenTTD/OpenTTD/issues) is the preferred channel for [bug reports](#bug-reports), but please respect the following restrictions: + +* Please **do not** use the issue tracker for help playing or using OpenTTD. Please try [irc](https://wiki.openttd.org/IRC_channel), or the [forums](https://www.tt-forums.net/) + +* Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. + +* Please **do not** post comments consisting solely of "+1" or ":thumbsup:". +Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) instead. We reserve the right to delete comments which violate this rule. + +* Please **do not** open issues or pull requests regarding add-on content in NewGRF, GameScripts, AIs, etc. These are created by third-parties. Please try [irc](https://wiki.openttd.org/IRC_channel) or the [forums](https://www.tt-forums.net/) to discuss these. + +## Bug reports + +A bug is a _demonstrable problem_ that is caused by the code in the repository. +Good bug reports are extremely helpful, so thanks! + +Guidelines for bug reports: + +0. Please don't report issues with games where you changed NewGRFs. + +1. Please don't report issues with modified versions of OpenTTD (patchpacks and similar). + +2. **Use the GitHub issue search** --- check if the issue has already been +reported. + +3. **Check if the issue has been fixed** --- try to reproduce it using the latest `nightly` build of OpenTTD, available from https://www.openttd.org + +4. **Isolate the problem** --- ideally create reproduceable steps with an attached savegame and screenshots. Try to use few or no NewGRFs, AIs etc if possible. + +A good bug report shouldn't leave others needing to chase you up for more information. +Please try to be as detailed as possible in your report. + +* What is your environment? +* What steps will reproduce the issue? +* Which operating system(s) experience the problem? +* What would you expect to be the outcome? + +All these details will help people to fix any potential bugs. + +Example: + +> Short and descriptive example bug report title +> +> A summary of the issue and the OS environment in which it occurs. If +> suitable, include the steps required to reproduce the bug. +> +> 1. This is the first step +> 2. This is the second step +> 3. Further steps, etc. +> +> Attached savegame +> Attached screenshots showing the issue +> Crashlogs if the bug causes a crash +> +> Any other information you want to share that is relevant to the issue being +> reported. This might include the lines of code that you have identified as +> causing the bug, and potential solutions (and your opinions on their +> merits). + +## Feature requests + +Before opening a feature request, please take a moment to find out whether your idea fits with the scope and aims of the project. + +It's up to *you* to make a strong case to convince the project's developers of the merits of this feature. + +Please provide as much detail and context as possible. This means don't request for a solution, but describe the problem you see and how/why you think it should be fixed. + +For feature request we have a strict policy. + +Keeping issues around with "a good idea" or "not really a bug but we should maybe fix it" turns out to have the reversed effect: nobody looks at it anymore. + +Although we really appreciate feedback and ideas, we will close feature requests that we don't expect to fulfill in the next year. + +Many of those ideas etc do have a place on the [forums](https://www.tt-forums.net); and if enough people like it, someone will stand up and make it. + +It's usually best discuss in [irc](https://wiki.openttd.org/IRC_channel) before opening a feature request or working on a large feature in a fork. +Discussion in irc can take time, but it can be productive and avoid disappointment :) + +## Pull requests + +Good pull requests—patches, improvements, new features—are a fantastic help. +They should remain focused in scope and avoid containing unrelated commits. + +**Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project. + +Please adhere to the [coding guidelines](#code-guidelines) used throughout the project (indentation, accurate comments, etc.) and any other requirements (such as test coverage). + +Adhering to the following process is the best way to get your work included in the project: + +1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: + +```bash +git clone https://github.com//OpenTTD.git openttd +git clone https://github.com/OpenTTD/OpenTTD-git-hooks.git openttd_hooks +cd openttd +git remote add upstream https://github.com/OpenTTD/OpenTTD.git +cd .git/hooks +ln -s -t . ../../../openttd_hooks/hooks/* +``` + +2. If you cloned a while ago, get the latest changes from upstream: + +```bash +git fetch upstream +``` + +3. Create a new topic branch (off the main project development branch) to +contain your feature, change, or fix: + +```bash +git checkout upstream/master -b +``` + +4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/Commit_style#Commit_message) or your code is unlikely to be merged into the main project. +Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. + +5. Locally rebase the upstream development branch into your topic branch: + +```bash +git fetch upstream +git rebase upstream/master +``` + +6. Push your topic branch up to your fork the first time: + +```bash +git push --set-upstream origin +``` + +And any time after that: + +```bash +git push +``` + +7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. + +**IMPORTANT**: By submitting a patch, you agree to the [License](#license). + +### Pull request validation + +Continuous integration (CI) tools monitor pull requests, and help us identify build and code quality issues. + +The results of the CI tests will show on your pull request. + +By clicking on Details you can further zoom in; in case of a failure it will show you why it failed. In case of success it will report how awesome you were. + +## Code guidelines + +[Code style](https://wiki.openttd.org/Coding_style) must be adhered to for pull requests to be accepted + +## License + +By contributing your code, you agree to license your contribution under the [GPL v2](https://github.com/OpenTTD/OpenTTD/blob/master/COPYING). + +### Attribution of this Contributing Guide + +This contributing guide is adapted from [Bootstrap](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) under the [Creative Commons Attribution 3.0 Unported License](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE) terms for Bootstrap documentation. diff --git a/COPYING b/COPYING index 829ec64179..b790734971 100644 --- a/COPYING +++ b/COPYING @@ -1,5 +1,5 @@ This is the license which applies to OpenTTD with the exception of some -3rd party modules. See readme.txt for details +3rd party modules. See README.md for details GNU GENERAL PUBLIC LICENSE diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000..af7968e71e --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,75 @@ +#!/usr/bin/env groovy + +// The stages we run one by one +// Please don't add more than 2 items in a single stage; this hurts performance +def ci_stages = [ + "Checkers": [ + "commit-checker": "openttd/compile-farm-ci:commit-checker", + ], + "Compilers": [ + "linux-amd64-gcc-6": "openttd/compile-farm-ci:linux-amd64-gcc-6", + "linux-amd64-clang-3.8": "openttd/compile-farm-ci:linux-amd64-clang-3.8", + ], + "Archs": [ + "linux-i386-gcc-6": "openttd/compile-farm-ci:linux-i386-gcc-6", + ], + "OS": [ + "osx-10.9": "openttd/compile-farm-ci:osx-10.9", + ], +] + +def generateStage(targets) { + return targets.collectEntries{ key, target -> + ["${key}": generateCI(key, target)] + } +} + +def generateCI(display_name, image_name) { + return { + githubNotify context: 'openttd/' + display_name, description: 'This commit is being built', status: 'PENDING' + + try { + dir("${display_name}") { + unstash "source" + + docker.image("${image_name}").pull() + docker.image("${image_name}").withRun("--volumes-from ${hostname} --workdir " + pwd()) { c -> + sh "docker logs --follow ${c.id}; exit `docker wait ${c.id}`" + } + } + + githubNotify context: 'openttd/' + display_name, description: 'The commit looks good', status: 'SUCCESS' + } + catch (error) { + githubNotify context: 'openttd/' + display_name, description: 'The commit cannot be built', status: 'FAILURE' + throw error + } + } +} + +node { + ansiColor('xterm') { + stage("Checkout") { + checkout scm + + // Ensure user.email and user.name is set, otherwise rebase cannot work + sh "git config user.email 'info@openttd.org'" + sh "git config user.name 'OpenTTD CI'" + + // Ensure we also have origin/master available + sh "git fetch --no-tags origin master:refs/remotes/origin/master" + + // Try to rebase to origin/master; if this fails, fail the CI + sh "git rebase origin/master" + + stash name: "source", useDefaultExcludes: false + } + + ci_stages.each { ci_stage -> + stage(ci_stage.key) { + parallel generateStage(ci_stage.value) + } + } + } +} + diff --git a/Makefile.bundle.in b/Makefile.bundle.in index 4366cf10a1..ff9ec1b2e1 100644 --- a/Makefile.bundle.in +++ b/Makefile.bundle.in @@ -12,15 +12,15 @@ # The revision is needed for the bundle name and creating an OSX application bundle. # Detect the revision VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") -REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') +VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') -# Make sure we have something in REV -ifeq ($(REV),) -REV := norev000 +# Make sure we have something in VERSION +ifeq ($(VERSION),) +VERSION := norev000 endif ifndef BUNDLE_NAME -BUNDLE_NAME = openttd-custom-$(REV)-$(OS) +BUNDLE_NAME = openttd-custom-$(VERSION)-$(OS) endif # An OSX application bundle needs the data files, lang files and openttd executable in a different location. @@ -69,7 +69,7 @@ endif $(Q)cp "$(BIN_DIR)/baseset/opntitle.dat" "$(BASESET_DIR)/" $(Q)cp "$(BIN_DIR)/baseset/"*.obm "$(BASESET_DIR)/" $(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/" - $(Q)cp "$(ROOT_DIR)/readme.txt" "$(BUNDLE_DIR)/" + $(Q)cp "$(ROOT_DIR)/README.md" "$(BUNDLE_DIR)/" $(Q)cp "$(ROOT_DIR)/COPYING" "$(BUNDLE_DIR)/" $(Q)cp "$(ROOT_DIR)/known-bugs.txt" "$(BUNDLE_DIR)/" $(Q)cp "$(ROOT_DIR)/docs/multiplayer.txt" "$(BUNDLE_DIR)/docs/" @@ -88,7 +88,7 @@ ifdef MENU_DIR $(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install" endif ifeq ($(TTD), openttd.exe) - $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/readme.txt" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" + $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" ifeq ($(OS), DOS) $(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi/cwsdpmi.txt" "$(BUNDLE_DIR)/docs/" ifndef STRIP @@ -159,7 +159,7 @@ bundle_dmg: bundle bundle_exe: all @echo '[BUNDLE] Creating $(BUNDLE_NAME).exe' $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)unix2dos "$(ROOT_DIR)/docs/"*.txt "$(ROOT_DIR)/readme.txt" "$(ROOT_DIR)/COPYING" "$(ROOT_DIR)/changelog.txt" "$(ROOT_DIR)/known-bugs.txt" + $(Q)unix2dos "$(ROOT_DIR)/docs/"*.txt "$(ROOT_DIR)/README.md" "$(ROOT_DIR)/COPYING" "$(ROOT_DIR)/changelog.txt" "$(ROOT_DIR)/known-bugs.txt" $(Q)cd $(ROOT_DIR)/os/windows/installer && makensis.exe //DVERSION_INCLUDE=version_$(PLATFORM).txt install.nsi $(Q)mv $(ROOT_DIR)/os/windows/installer/*$(PLATFORM).exe "$(BUNDLES_DIR)/$(BUNDLE_NAME).exe" @@ -188,7 +188,7 @@ endif $(Q)install -m 644 "$(BUNDLE_DIR)/scripts/"* "$(INSTALL_DATA_DIR)/scripts" ifndef DO_NOT_INSTALL_DOCS $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/readme.txt" "$(BUNDLE_DIR)/known-bugs.txt" "$(INSTALL_DOC_DIR)" + $(Q)install -m 644 "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/known-bugs.txt" "$(INSTALL_DOC_DIR)" endif ifndef DO_NOT_INSTALL_CHANGELOG $(Q)install -d "$(INSTALL_DOC_DIR)" diff --git a/Makefile.src.in b/Makefile.src.in index 0e190a4e62..a2069a2b7b 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -94,15 +94,15 @@ VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') # Use autodetected revisions -REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') -REV_NR := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') +VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') +ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') -# Make sure we have something in REV and REV_NR -ifeq ($(REV),) -REV := norev000 +# Make sure we have something in VERSION and ISODATE +ifeq ($(VERSION),) +VERSION := norev000 endif -ifeq ($(REV_NR),) -REV_NR := 0 +ifeq ($(ISODATE),) +ISODATE := 00000000 endif # This helps to recompile if flags change @@ -113,7 +113,7 @@ RES := $(shell if [ "`cat $(CONFIG_CACHE_ENDIAN) 2>/dev/null`" != "$(ENDIAN_FORC # If there is a change in the source-file-list, make sure we recheck the deps RES := $(shell if [ "`cat $(CONFIG_CACHE_SOURCE) 2>/dev/null`" != "$(SRCS)" ]; then echo "$(SRCS)" > $(CONFIG_CACHE_SOURCE); fi ) # If there is a change in the revision, make sure we recompile rev.cpp -RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(REV) $(MODIFIED)" ]; then echo "$(REV) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi ) +RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(VERSION) $(MODIFIED)" ]; then echo "$(VERSION) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi ) ifndef MAKEDEPEND # The slow, but always correct, dep-check @@ -293,10 +293,10 @@ $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp # Revision files $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp + $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc + $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc FORCE: diff --git a/readme.txt b/README.md similarity index 53% rename from readme.txt rename to README.md index e378bd5d22..f8773ec25b 100644 --- a/readme.txt +++ b/README.md @@ -1,37 +1,33 @@ -Last updated: 2016-07-01 -Release version: 1.6.1 ------------------------------------------------------------------------- - - -Table of contents ------------------ -1.0) About -2.0) Contacting - * 2.1) Reporting bugs - * 2.2) Reporting desyncs -3.0) Supported platforms -4.0) Installing and running OpenTTD - * 4.1) (Required) 3rd party files - * 4.2) OpenTTD directories - * 4.3) Portable installations (portable media) - * 4.4) Files in tar (archives) -5.0) OpenTTD features - * 5.1) Logging of potentially dangerous actions -6.0) Configuration file -7.0) Compiling - * 7.1) Required/optional libraries - * 7.2) Supported compilers - * 7.3) Compilation of base sets -8.0) Translating - * 8.1) Translation - * 8.2) Previewing -9.0) Troubleshooting -10.0) Licensing -X.X) Credits - - -1.0) About ----- ----- +# OpenTTD + +## Table of contents + +- 1.0) [About](#10-about) +- 2.0) [Contacting](#20-contacting) + - 2.1) [Reporting bugs](#21-reporting-bugs) + - 2.2) [Reporting desyncs](#22-reporting-desyncs) +- 3.0) [Supported platforms](#30-supported-platforms) +- 4.0) [Installing and running OpenTTD](#40-installing-and-running-openttd) + - 4.1) [(Required) 3rd party files](#41-required-3rd-party-files) + - 4.2) [OpenTTD directories](#42-openttd-directories) + - 4.3) [Portable installations (portable media)](#43-portable-installations-portable-media) + - 4.4) [Files in tar (archives)](#44-files-in-tar-archives) +- 5.0) [OpenTTD features](#50-openttd-features) + - 5.1) [Logging of potentially dangerous actions](#51-logging-of-potentially-dangerous-actions) +- 6.0) [Configuration file](#60-configuration-file) +- 7.0) [Compiling](#70-compiling) + - 7.1) [Required/optional libraries](#71-requiredoptional-libraries) + - 7.2) [Supported compilers](#72-supported-compilers) + - 7.3) [Compilation of base sets](#73-compilation-of-base-sets) +- 8.0) [Translating](#80-translating) + - 8.1) [Translation](#81-translation) + - 8.2) [Previewing](#82-previewing) +- 9.0) [Troubleshooting](#90-troubleshooting) +- 10.0) [Licensing](#100-licensing) +- X.X) [Credits](#xx-credits) + +## 1.0) About + OpenTTD is a transport simulation game based upon the popular game Transport Tycoon Deluxe, written by Chris Sawyer. It attempts to mimic the original game as closely as possible while extending it with new features. @@ -40,60 +36,61 @@ OpenTTD is licensed under the GNU General Public License version 2.0, but includes some 3rd party software under different licenses. See the section "Licensing" below for details. -2.0) Contacting ----- ---------- +## 2.0) Contacting + The easiest way to contact the OpenTTD team is by submitting bug reports or posting comments in our forums. You can also chat with us on IRC (#openttd on irc.oftc.net). -The OpenTTD homepage is http://www.openttd.org/. +The OpenTTD homepage is [http://www.openttd.org/](http://www.openttd.org/). -You can also find the OpenTTD forums at -http://forum.openttd.org/ +You can also find the OpenTTD forums at [http://forum.openttd.org/](http://forum.openttd.org/). + +### 2.1) Reporting bugs -2.1) Reporting bugs ----- -------------- First of all, check whether the bug is not already known. Do this by looking through the file called 'known-bugs.txt' which is distributed with OpenTTD like this readme. -For tracking our bugs we are using a bug tracker called Flyspray. You can find -the tracker at http://bugs.openttd.org/. Before actually reporting take a look +For tracking our bugs we are using Githubs issue tracker. You can find +the tracker at [https://github.com/OpenTTD/OpenTTD/issues](https://github.com/OpenTTD/OpenTTD/issues). Before actually reporting take a look through the already reported bugs there to see if the bug is already known. The 'known-bugs.txt' file might be a bit outdated at the moment you are reading it as only bugs known before the release are documented there. Also look through the recently closed bugs. When you are sure it is not already reported you should: - * Make sure you are running a recent version, i.e. run the latest stable or + +- Make sure you are running a recent version, i.e. run the latest stable or nightly based on where you found the bug. - * Make sure you are not running a non-official binary, like a patch pack. +- Make sure you are not running a non-official binary, like a patch pack. When you are playing with a patch pack you should report any bugs to the forum thread related to that patch pack. - * Make it reproducible for the developers. In other words, create a savegame +- Make it reproducible for the developers. In other words, create a savegame in which you can reproduce the issue once loaded. It is very useful to give us the crash.dmp, crash.sav, crash.log and crash screenshot which are created on crashes. - * Check whether the bug is already reported on our bug tracker. This includes +- Check whether the bug is already reported on our bug tracker. This includes searching for recently closed bug reports as the bug might already be fixed. After you have done all that you can report the bug. Please include the following information in your bug report: - * OpenTTD version (PLEASE test the latest SVN/nightly build) - * Bug details, including instructions how to reproduce it - * Platform (Windows, Linux, FreeBSD, ...) and compiler (including version) if + +- OpenTTD version (PLEASE test the latest SVN/nightly build) +- Bug details, including instructions how to reproduce it +- Platform (Windows, Linux, FreeBSD, …) and compiler (including version) if you compiled OpenTTD yourself. - * The processor architecture of your OS (32 bits Windows, 64 bits Windows, - Linux on an ARM, Mac OS X on a PowerPC, ...) - * Attach a saved game *and* a screenshot if possible - * If this bug only occurred recently please note the last version without +- The processor architecture of your OS (32 bits Windows, 64 bits Windows, + Linux on an ARM, Mac OS X on a PowerPC, …) +- Attach a saved game **and** a screenshot if possible +- If this bug only occurred recently please note the last version without the bug and the first version including the bug. That way we can fix it quicker by looking at the changes made. - * Attach crash.dmp, crash.log and crash.sav. These files are usually created +- Attach crash.dmp, crash.log and crash.sav. These files are usually created next to your openttd.cfg. The crash handler will tell you the location. -2.2) Reporting desyncs ----- ----------------- +### 2.2) Reporting desyncs + As desyncs are hard to make reproducible OpenTTD has the ability to log all actions done by clients so we can replay the whole game in an effort to make desyncs better reproducible. You need to turn this ability on. When turned @@ -103,15 +100,16 @@ this directory. Furthermore the log file 'commands-out.log' will be created and all actions will be written to there. To enable the desync debugging you need to set the debug level for 'desync' -to at least 1. You do this by starting OpenTTD with '-d desync=' as -parameter or by typing 'debug_level desync=' in OpenTTD's internal +to at least 1. You do this by starting OpenTTD with '`-d desync=`' as +parameter or by typing '`debug_level desync=`' in OpenTTD's internal console. The desync debug levels are: - 0: nothing. - 1: dumping of commands to 'commands-out.log'. - 2: same as 1 plus checking vehicle caches and dumping that too. - 3: same as 2 plus monthly saves in autosave. - 4 and higher: same as 3 + +- 0: nothing. +- 1: dumping of commands to 'commands-out.log'. +- 2: same as 1 plus checking vehicle caches and dumping that too. +- 3: same as 2 plus monthly saves in autosave. +- 4 and higher: same as 3 Restarting OpenTTD will overwrite 'commands-out.log'. OpenTTD will not remove the savegames (dmp_cmds_*.sav) made by the desync debugging system, so you @@ -125,19 +123,20 @@ then by date making it easier to find the right savegames. When a desync has occurred with the desync debugging turned on you should file a bug report with the following files attached: - - commands-out.log as it contains all the commands that were done - - the last saved savegame (search for the last line beginning with + +- commands-out.log as it contains all the commands that were done +- the last saved savegame (search for the last line beginning with 'save: dmp_cmds_' in commands-out.log). We use this savegame to check - whether we can quickly reproduce the desync. Otherwise we will need... - - the first saved savegame (search for the first line beginning with 'save' + whether we can quickly reproduce the desync. Otherwise we will need … +- the first saved savegame (search for the first line beginning with 'save' where the first part, up to the last underscore '_', is the same). We need this savegame to be able to reproduce the bug when the last savegame is not old enough. If you loaded a scenario or savegame you need to attach that. - - optionally you can attach the savegames from around 50%, 75%, 85%, 90% and +- optionally you can attach the savegames from around 50%, 75%, 85%, 90% and 95% of the game's progression. We can use these savegames to speed up the reproduction of the desync, but we should be able to reproduce these savegames based on the first savegame and commands-out.log. - - in case you use any NewGRFs you should attach the ones you used unless +- in case you use any NewGRFs you should attach the ones you used unless we can easily find them ourselves via bananas or when they are in the #openttdcoop pack. @@ -145,26 +144,24 @@ Do NOT remove the dmp_cmds savegames of a desync you have reported until the desync has been fixed; if you, by accident, send us the wrong savegames we will not be able to reproduce the desync and thus will be unable to fix it. +## 3.0) Supported platforms -3.0) Supported platforms ----- ------------------- OpenTTD has been ported to several platforms and operating systems. It should not be very difficult to port it to a new platform. The currently working platforms are: - BeOS - SDL or Allegro - DOS - Allegro - FreeBSD - SDL - Linux - SDL or Allegro - MacOS X (universal) - Cocoa video and sound drivers - MorphOS - SDL - OpenBSD - SDL - OS/2 - SDL - Windows - Win32 GDI (faster) or SDL or Allegro +- BeOS (SDL or Allegro) +- DOS (Allegro) +- FreeBSD (SDL) +- Linux (SDL or Allegro) +- MacOS X (universal) (Cocoa video and sound drivers) +- MorphOS (SDL) +- OpenBSD (SDL) +- OS/2 (SDL) +- Windows (Win32 GDI (faster) or SDL or Allegro) +## 4.0) Installing and running OpenTTD -4.0) Installing and running OpenTTD ----- ------------------------------ Installing OpenTTD is fairly straightforward. Either you have downloaded an archive which you have to extract to a directory where you want OpenTTD to be installed, or you have downloaded an installer, which will automatically @@ -174,10 +171,12 @@ OpenTTD looks in multiple locations to find the required data files (described in section 4.2). Installing any 3rd party files into a 'shared' location has the advantage that you only need to do this step once, rather than copying the data files into all OpenTTD versions you have. + Savegames, screenshots, etc are saved relative to the config file (openttd.cfg) currently being used. This means that if you use a config file in one of the shared directories, savegames will reside in the save/ directory next to the openttd.cfg file there. + If you want savegames and screenshots in the directory where the OpenTTD binary resides, simply have your config file in that location. But if you remove this config file, savegames will still be in this directory (see notes in @@ -192,8 +191,8 @@ automatically selected (and downloaded) if you get the AIs via the 'Check Online Content'. If you do not have an AI but have configured OpenTTD to start an AI a message will be shown that the 'dummy' AI has been started. -4.1) (Required) 3rd party files ----- -------------------------- +### 4.1) (Required) 3rd party files + Before you run OpenTTD, you need to put the game's data files into a baseset/ directory which can be located in various places addressed in the following section. @@ -206,40 +205,43 @@ Do NOT copy files included with OpenTTD into 'shared' directories (explained in the following sections) as sooner or later you will run into graphical glitches when using other versions of the game. -4.1.1) Free graphics and sound files ------- ----------------------------- +#### 4.1.1) Free graphics and sound files + The free data files, split into OpenGFX for graphics, OpenSFX for sounds and OpenMSX for music can be found at: - - http://www.openttd.org/download-opengfx for OpenGFX - - http://www.openttd.org/download-opensfx for OpenSFX - - http://www.openttd.org/download-openmsx for OpenMSX + +- [http://www.openttd.org/download-opengfx](http://www.openttd.org/download-opengfx) for OpenGFX +- [http://www.openttd.org/download-opensfx](http://www.openttd.org/download-opensfx) for OpenSFX +- [http://www.openttd.org/download-openmsx](http://www.openttd.org/download-openmsx) for OpenMSX + Please follow the readme of these packages about the installation procedure. The Windows installer can optionally download and install these packages. -4.1.2) Original Transport Tycoon Deluxe graphics and sound files ------- --------------------------------------------------------- +#### 4.1.2) Original Transport Tycoon Deluxe graphics and sound files + If you want to play with the original Transport Tycoon Deluxe data files you have to copy the data files from the CD-ROM into the baseset/ directory. It does not matter whether you copy them from the DOS or Windows version of Transport Tycoon Deluxe. The Windows install can optionally copy these files. You need to copy the following files: - - sample.cat - - trg1r.grf or TRG1.GRF - - trgcr.grf or TRGC.GRF - - trghr.grf or TRGH.GRF - - trgir.grf or TRGI.GRF - - trgtr.grf or TRGT.GRF - -4.1.3) Original Transport Tycoon Deluxe music ------- -------------------------------------- + +- sample.cat +- trg1r.grf or TRG1.GRF +- trgcr.grf or TRGC.GRF +- trghr.grf or TRGH.GRF +- trgir.grf or TRGI.GRF +- trgtr.grf or TRGT.GRF + +#### 4.1.3) Original Transport Tycoon Deluxe music + If you want the Transport Tycoon Deluxe music, copy the files from the gm/ folder from the Windows version of Transport Tycoon Deluxe to the baseset folder in your OpenTTD folder (also explained in the following sections). The music from the DOS version as well as the original Transport Tycoon does not work. -4.1.4) AIs ------- --- +#### 4.1.4) AIs + If you want AIs use the in-game content downloader. If for some reason that is not possible or you want to use an AI that has not been uploaded to the content download system download the tar file and place it in the ai/ directory. If the @@ -249,23 +251,24 @@ the content download system can be found at http://noai.openttd.org/downloads/ The AIs and libraries can be found their in the form of .tar.gz packages. OpenTTD can read inside tar files but it does not extract .tar.gz files by itself. + To figure out which libraries you need for an AI you have to start the AI and wait for an error message to pop up. The error message will tell you 'could not find library "lib-name"'. Download that library and try again. -4.1.5) Game scripts ------- ------------ +#### 4.1.5) Game scripts + If you want an extra challenge in OpenTTD you can download so-called game scripts via the in-game content downloader. These game scripts have varying functionality, though they can generally influence town growth, subsidies, add goals to reach or provide a different ranking system. + If you download a game script manually you have to follow the same rules as for AIs, except that game scripts are placed in the game/ directory instead of the ai/ directory. +### 4.2) OpenTTD directories -4.2) OpenTTD directories ----- ------------------- OpenTTD uses its own directory to store its required 3rd party base set files (see section 4.1 'Required 3rd party files') and non-compulsory extension and configuration files. See below for their proper place within this OpenTTD main @@ -273,72 +276,80 @@ data directory. The main OpenTTD directories can be found in various locations, depending on your operating system: - 1. The current working directory (from where you started OpenTTD) + +1. The current working directory (from where you started OpenTTD) For non-Windows operating systems OpenTTD will not scan for files in this directory if it is your personal directory, i.e. '~/', or when it is the root directory, i.e. '/'. - 2. Your personal directory - Windows: C:\My Documents\OpenTTD (95, 98, ME) - C:\Documents and Settings\\My Documents\OpenTTD (2000, XP) - C:\Users\\Documents\OpenTTD (Vista, 7) - Mac OSX: ~/Documents/OpenTTD - Linux: $XDG_DATA_HOME/openttd which is usually ~/.local/share/openttd when - built with XDG base directory support, otherwise ~/.openttd - 3. The shared directory - Windows: C:\Documents and Settings\All Users\Shared Documents\OpenTTD (2000, XP) - C:\Users\Public\Documents\OpenTTD (Vista, 7) - Mac OSX: /Library/Application Support/OpenTTD - Linux: not available - 4. The binary directory (where the OpenTTD executable is) - Windows: C:\Program Files\OpenTTD - Linux: /usr/games - 5. The installation directory (Linux only) - Linux: /usr/share/games/openttd - 6. The application bundle (Mac OSX only) +2. Your personal directory + - Windows: + - `C:\My Documents\OpenTTD` (95, 98, ME) + - `C:\Documents and Settings\\My Documents\OpenTTD` (2000, XP) + - `C:\Users\\Documents\OpenTTD` (Vista, 7) + - Mac OSX: `~/Documents/OpenTTD` + - Linux: `$XDG_DATA_HOME/openttd` which is usually `~/.local/share/openttd` + when built with XDG base directory support, otherwise `~/.openttd` +3. The shared directory + - Windows: + - `C:\Documents and Settings\All Users\Shared Documents\OpenTTD` (2000, XP) + - `C:\Users\Public\Documents\OpenTTD` (Vista, 7) + - Mac OSX: `/Library/Application Support/OpenTTD` + - Linux: not available +4. The binary directory (where the OpenTTD executable is) + - Windows: `C:\Program Files\OpenTTD` + - Linux: `/usr/games` +5. The installation directory (Linux only) + - Linux: `/usr/share/games/openttd` +6. The application bundle (Mac OSX only) It includes the OpenTTD files (grf+lng) and it will work as long as they are not touched Different types of data or extensions go into different subdirectories of the chosen main OpenTTD directory: - Config File: (no subdirectory) - Screenshots: screenshot - Base Graphics: baseset (or a subdirectory thereof) - Sound Sets: baseset (or a subdirectory thereof) - NewGRFs: newgrf (or a subdirectory thereof) - 32bpp Sets: newgrf (or a subdirectory thereof) - Music Sets: baseset (or a subdirectory thereof) - AIs: ai (or a subdirectory thereof) - AI Libraries: ai/library (or a subdirectory thereof) - Game Scripts (GS): game (or a subdirectory thereof) - GS Libraries: game/library (or a subdirectory thereof) - Savegames: save - Automatic Savegames: save/autosave - Scenarios: scenario + +| data type | directory | additional info | +| --- | --- | --- | +| Config File | (no subdirectory) | | +| Screenshots | screenshot | | +| Base Graphics | baseset| (or a subdirectory thereof) | +| Sound Sets | baseset| (or a subdirectory thereof) | +| NewGRFs | newgrf| (or a subdirectory thereof) | +| 32bpp Sets | newgrf| (or a subdirectory thereof) | +| Music Sets | baseset| (or a subdirectory thereof) | +| AIs | ai| (or a subdirectory thereof) | +| AI Libraries | ai/library| (or a subdirectory thereof) | +| Game Scripts (GS) | game| (or a subdirectory thereof) | +| GS Libraries | game/library | (or a subdirectory thereof) | +| Savegames | save | | +| Automatic Savegames | save/autosave | | +| Scenarios | scenario | | The (automatically created) directory content_download is for OpenTTD's internal use and no files should be added to it or its subdirectories manually. -Notes: - - Linux in the previous list means .deb, but most paths should be similar for - others. - - The previous search order is also used for NewGRFs and openttd.cfg. - - If openttd.cfg is not found, then it will be created using the 2, 4, 1, 3, - 5 order. When built with XDG base directory support, openttd.cfg will be - created in $XDG_CONFIG_HOME/openttd which is usually ~/.config/openttd. - - Savegames will be relative to the config file only if there is no save/ - directory in paths with higher priority than the config file path, but - autosaves and screenshots will always be relative to the config file. - Unless the configuration file is in $XDG_CONFIG_HOME/openttd, then all - other files will be saved under $XDG_DATA_HOME/openttd. - -The preferred setup: +#### Notes: + +- Linux in the previous list means .deb, but most paths should be similar for + others. +- The previous search order is also used for NewGRFs and openttd.cfg. +- If openttd.cfg is not found, then it will be created using the 2, 4, 1, 3, + 5 order. When built with XDG base directory support, openttd.cfg will be + created in $XDG_CONFIG_HOME/openttd which is usually ~/.config/openttd. +- Savegames will be relative to the config file only if there is no save/ + directory in paths with higher priority than the config file path, but + autosaves and screenshots will always be relative to the config file. + Unless the configuration file is in $XDG_CONFIG_HOME/openttd, then all + other files will be saved under $XDG_DATA_HOME/openttd. + +#### The preferred setup: + Place 3rd party files in shared directory (or in personal directory if you do not have write access on shared directory) and have your openttd.cfg config file in personal directory (where the game will then also place savegames and screenshots). -4.3) Portable installations (portable media) ----- --------------------------------------- +### 4.3) Portable installations (portable media) + You can install OpenTTD on external media so you can take it with you, i.e. using a USB key, or a USB HDD, etc. Create a directory where you shall store the game in (i.e. OpenTTD/). @@ -350,8 +361,8 @@ media to. As always - additional grf files are stored in the newgrf/ dir (for details, again, see section 4.1). -4.4) Files in tar (archives) ----- ----------------------- +### 4.4) Files in tar (archives) + OpenTTD can read files that are in an uncompressed tar (archive), which makes it easy to bundle files belonging to the same script, NewGRF or base set. Music sets are the only exception as they cannot be stored in a tar @@ -372,33 +383,33 @@ same as the path in the tar file. Again it is advised to have an unique path to the normal file so they do not collide with the files from other tar files. +## 5.0) OpenTTD features -5.0) OpenTTD features ----- ---------------- OpenTTD has a lot of features going beyond the original Transport Tycoon Deluxe emulation. Unfortunately, there is currently no comprehensive list of features, but there is a basic features list on the web, and some optional features can be controlled through the Advanced Settings dialog. We also implement some -features known from TTDPatch (http://www.ttdpatch.net/). +features known from [TTDPatch](http://www.ttdpatch.net/). Several important non-standard controls: -* Ctrl modifies many commands and makes them more powerful. For example Ctrl +- Ctrl modifies many commands and makes them more powerful. For example Ctrl clicking on signals with the build signal tool changes their behaviour, holding Ctrl while the track build tool is activated changes it to the track removal - tool, and so on. See http://wiki.openttd.org/Hidden_features for a non- - comprehensive list or look at the tooltips. -* Ingame console. More information at - http://wiki.openttd.org/index.php/Console -* Hovering over a GUI element shows tooltips. This can be changed to right click + tool, and so on. See [http://wiki.openttd.org/Hidden_features](http://wiki.openttd.org/Hidden_features) + for a non-comprehensive list or look at the tooltips. +- Ingame console. More information at + [http://wiki.openttd.org/index.php/Console](http://wiki.openttd.org/index.php/Console) +- Hovering over a GUI element shows tooltips. This can be changed to right click via the advanced settings. -5.1) Logging of potentially dangerous actions ----- ---------------------------------------- +### 5.1) Logging of potentially dangerous actions + OpenTTD is a complex program, and together with NewGRF, it may show a buggy behaviour. But not only bugs in code can cause problems. There are several ways to affect game state possibly resulting in program crash or multiplayer desyncs. + Easier way would be to forbid all these unsafe actions, but that would affect game usability for many players. We certainly do not want that. However, we receive bug reports because of this. To reduce time spent with @@ -407,23 +418,22 @@ the savegame (including crash.sav). Log is stored in crash logs, too. Information logged: -* Adding / removing / changing order of NewGRFs -* Changing NewGRF parameters, loading compatible NewGRF -* Changing game mode (scenario editor <-> normal game) -* Loading game saved in a different OpenTTD / TTDPatch / Transport Tycoon Deluxe / +- Adding / removing / changing order of NewGRFs +- Changing NewGRF parameters, loading compatible NewGRF +- Changing game mode (scenario editor <-> normal game) +- Loading game saved in a different OpenTTD / TTDPatch / Transport Tycoon Deluxe / original Transport Tycoon version -* Running a modified OpenTTD build -* Changing settings affecting NewGRF behaviour (non-network-safe settings) -* Triggering NewGRF bugs +- Running a modified OpenTTD build +- Changing settings affecting NewGRF behaviour (non-network-safe settings) +- Triggering NewGRF bugs No personal information is stored. You can show the game log by typing 'gamelog' in the console or by running OpenTTD in debug mode. +## 6.0) Configuration file -6.0) Configuration file ----- ------------------ The configuration file for OpenTTD (openttd.cfg) is in a simple Windows-like .INI format. It is mostly undocumented. Almost all settings can be changed ingame by using the 'Advanced Settings' window. @@ -431,73 +441,82 @@ When you cannot find openttd.cfg you should look in the directories as described in section 4.2. If you do not have an openttd.cfg OpenTTD will create one after closing. +## 7.0) Compiling + +### Windows: + +You need Microsoft Visual Studio .NET. Open the project file +and it should build automatically. In case you want to build with SDL support +you need to add WITH_SDL to the project settings. + +PNG (WITH_PNG) and ZLIB (WITH_ZLIB) support is enabled by default. For these +to work you need their development files. For best results, download the +openttd-useful.zip file from [http://www.openttd.org/download-openttd-useful](http://www.openttd.org/download-openttd-useful) +Put the header files into your compiler's include/ directory and the +library (.lib) files into the lib/ directory. +For more help with VS see docs/Readme_Windows_MSVC.txt. + +You can also build it using the Makefile with MSYS/MinGW or Cygwin/MinGW. +Please read the Makefile for more information. + +### Solaris, FreeBSD, OpenBSD: + +Use '`gmake`', but do a '`./configure`' before the first build. + +### Linux/Unix: + +OpenTTD can be built with GNU '`make`'. On non-GNU systems it is called '`gmake`'. +However, for the first build one has to do a '`./configure`' first. + +### MacOS X: + +Use '`make`' or Xcode (which will then call make for you) +This will give you a binary for your CPU type (PPC/Intel) +However, for the first build one has to do a '`./configure`' first. +To make a universal binary type '`./configure --enabled-universal`' +instead of '`./configure`'. + +### BeOS: + +Use '`make`', but do a '`./configure`' before the first build. + +### MorphOS: + +Use '`make`'. However, for the first build one has to do a '`./configure`' +first. Note that you need the MorphOS SDK, latest libnix updates (else C++ +parts of OpenTTD will not build) and the powersdl.library SDK. Optionally libz, +libpng and freetype2 developer files. + +### OS/2: + +A comprehensive GNU build environment is required to build the OS/2 version. +See the docs/Readme_OS2.txt file for more information. + +### DOS: + +A build environment with DJGPP is needed as well as libraries such as +Allegro, zlib and libpng, which all can be downloaded from the DJGPP +website. Compilation is straight forward: use '`make`', but do a '`./configure`' +before the first build. The build binary will need cwsdpmi.exe to be in +the same directory as the openttd executable. cwsdpmi.exe can be found in +the os/dos/cwsdpmi subdirectory. If you compile with stripping turned on a +binary will be generated that does not need cwsdpmi.exe by adding the +cswdstub.exe to the created OpenTTD binary. + +### 7.1) Required/optional libraries -7.0) Compiling ----- --------- -Windows: - You need Microsoft Visual Studio .NET. Open the project file - and it should build automatically. In case you want to build with SDL support - you need to add WITH_SDL to the project settings. - PNG (WITH_PNG) and ZLIB (WITH_ZLIB) support is enabled by default. For these - to work you need their development files. For best results, download the - openttd-useful.zip file from http://www.openttd.org/download-openttd-useful - Put the header files into your compiler's include/ directory and the - library (.lib) files into the lib/ directory. - For more help with VS see docs/Readme_Windows_MSVC.txt. - - You can also build it using the Makefile with MSYS/MinGW or Cygwin/MinGW. - Please read the Makefile for more information. - -Solaris, FreeBSD, OpenBSD: - Use 'gmake', but do a './configure' before the first build. - -Linux/Unix: - OpenTTD can be built with GNU 'make'. On non-GNU systems it is called 'gmake'. - However, for the first build one has to do a './configure' first. - -MacOS X: - Use 'make' or Xcode (which will then call make for you) - This will give you a binary for your CPU type (PPC/Intel) - However, for the first build one has to do a './configure' first. - To make a universal binary type './configure --enabled-universal' - instead of './configure'. - -BeOS: - Use 'make', but do a './configure' before the first build. - -MorphOS: - Use 'make'. However, for the first build one has to do a './configure' first. - Note that you need the MorphOS SDK, latest libnix updates (else C++ parts of - OpenTTD will not build) and the powersdl.library SDK. Optionally libz, - libpng and freetype2 developer files. - -OS/2: - A comprehensive GNU build environment is required to build the OS/2 version. - See the docs/Readme_OS2.txt file for more information. - -DOS: - A build environment with DJGPP is needed as well as libraries such as - Allegro, zlib and libpng, which all can be downloaded from the DJGPP - website. Compilation is straight forward: use make, but do a './configure' - before the first build. The build binary will need cwsdpmi.exe to be in - the same directory as the openttd executable. cwsdpmi.exe can be found in - the os/dos/cwsdpmi subdirectory. If you compile with stripping turned on a - binary will be generated that does not need cwsdpmi.exe by adding the - cswdstub.exe to the created OpenTTD binary. - -7.1) Required/optional libraries ----- --------------------------- The following libraries are used by OpenTTD for: - - libSDL/liballegro: hardware access (video, sound, mouse) - - zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, - heightmaps - - liblzo2: (de)compressing of old (pre 0.3.0) savegames - - liblzma: (de)compressing of savegames (1.1.0 and later) - - libpng: making screenshots and loading heightmaps - - libfreetype: loading generic fonts and rendering them - - libfontconfig: searching for fonts, resolving font names to actual fonts - - libicu: handling of right-to-left scripts (e.g. Arabic and Persian) and - natural sorting of strings. + +- libSDL/liballegro: hardware access (video, sound, mouse) +- zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, + heightmaps +- liblzo2: (de)compressing of old (pre 0.3.0) savegames +- liblzma: (de)compressing of savegames (1.1.0 and later) +- libpng: making screenshots and loading heightmaps +- libfreetype: loading generic fonts and rendering them +- libfontconfig: searching for fonts, resolving font names to actual fonts +- libicu: handling of right-to-left scripts (e.g. Arabic and Persian) and + natural sorting of strings. OpenTTD does not require any of the libraries to be present, but without liblzma you cannot open most recent savegames and without zlib you cannot @@ -505,96 +524,99 @@ open most older savegames or use the content downloading system. Without libSDL/liballegro on non-Windows and non-MacOS X machines you have no graphical user interface; you would be building a dedicated server. -7.2) Supported compilers ----- ------------------- +### 7.2) Supported compilers + The following compilers are known to compile OpenTTD: - - Microsoft Visual C++ (MSVC) 2005, 2008 and 2010. - Version 2005 gives bogus warnings about scoping issues. - - GNU Compiler Collection (GCC) 3.3 - 4.4, 4.6 - 4.8. - Versions 4.1 and earlier give bogus warnings about uninitialised variables. - Versions 4.4, 4.6 give bogus warnings about freeing non-heap objects. - Versions 4.6 and later give invalid warnings when lto is enabled. - - Intel C++ Compiler (ICC) 12.0. - - Clang/LLVM 2.9 - 3.0 - Version 2.9 gives bogus warnings about code nonconformity. + +- Microsoft Visual C++ (MSVC) 2005, 2008 and 2010. + Version 2005 gives bogus warnings about scoping issues. +- GNU Compiler Collection (GCC) 3.3 - 4.4, 4.6 - 4.8. + - Versions 4.1 and earlier give bogus warnings about uninitialised variables. + - Versions 4.4, 4.6 give bogus warnings about freeing non-heap objects. + - Versions 4.6 and later give invalid warnings when lto is enabled. +- Intel C++ Compiler (ICC) 12.0. +- Clang/LLVM 2.9 - 3.0 + Version 2.9 gives bogus warnings about code nonconformity. The following compilers are known not to compile OpenTTD: - - Microsoft Visual C++ (MSVC) 2003 and earlier. - - GNU Compiler Collection (GCC) 3.2 and earlier. - These old versions fail due to OpenTTD's template usage. - - GNU Compiler Collection (GCC) 4.5. It optimizes enums too aggressively. - See http://bugs.openttd.org/task/5513 and references therein. - - Intel C++ Compiler (ICC) 11.1 and earlier. - Version 10.0 and earlier fail a configure check and fail with recent system - headers. - Version 10.1 fails to compile station_gui.cpp. - Version 11.1 fails with an internal error when compiling network.cpp. - - Clang/LLVM 2.8 and earlier. - - (Open) Watcom. + +- Microsoft Visual C++ (MSVC) 2003 and earlier. +- GNU Compiler Collection (GCC) 3.2 and earlier. + These old versions fail due to OpenTTD's template usage. +- GNU Compiler Collection (GCC) 4.5. It optimizes enums too aggressively. + See http://bugs.openttd.org/task/5513 and references therein. +- Intel C++ Compiler (ICC) 11.1 and earlier. + - Version 10.0 and earlier fail a configure check and fail with recent + system headers. + - Version 10.1 fails to compile station_gui.cpp. + - Version 11.1 fails with an internal error when compiling network.cpp. +- Clang/LLVM 2.8 and earlier. +- (Open) Watcom. If any of these compilers can compile OpenTTD again, please let us know. Patches to support more compilers are welcome. -7.3) Compilation of base sets ------------------------------ +### 7.3) Compilation of base sets + To recompile the extra graphics needed to play with the original Transport Tycoon Deluxe graphics you need GRFCodec (which includes NFORenum) as well. -GRFCodec can be found at: http://www.openttd.org/download-grfcodec +GRFCodec can be found at: [http://www.openttd.org/download-grfcodec](http://www.openttd.org/download-grfcodec) The compilation of these extra graphics does generally not happen, unless -you remove the graphics file using 'make maintainer-clean'. +you remove the graphics file using '`make maintainer-clean`'. -Re-compilation of the base sets, thus also use of --maintainer-clean can +Re-compilation of the base sets, thus also use of '`--maintainer-clean`' can leave the repository in a modified state as different grfcodec versions can cause binary differences in the resulting grf. Also translations might have been added for the base sets which are not yet included in the base set -information files. Use the configure option --without-grfcodec to avoid +information files. Use the configure option '`--without-grfcodec`' to avoid modification of the base set files by the build process. +## 8.0) Translating -8.0) Translating ----- ----------- -See http://www.openttd.org/development for up-to-date information. +See [http://www.openttd.org/development](http://www.openttd.org/development) for up-to-date information. The use of the online Translator service, located at -http://translator.openttd.org/, is highly encouraged. For getting an account -simply follow the guidelines in the FAQ of the translator website. +[http://translator.openttd.org/](http://translator.openttd.org/), is highly +encouraged. For getting an account simply follow the guidelines in the FAQ of +the translator website. If for some reason the website is down for a longer period of time, the information below might be of help. -Please contact the translations manager (http://www.openttd.org/contact) +Please contact the translations manager ([http://www.openttd.org/contact](http://www.openttd.org/contact)) before beginning the translation process! This avoids double work, as someone else may have already started translating to the same language. -8.1) Translation ----- ----------- +### 8.1) Translation + So, now that you have notified the development team about your intention to translate (You did, right? Of course you did.) you can pick up english.txt (found in the SVN repository under /src/lang) and translate. You must change the first two lines of the file appropriately: -##name English-Name-Of-Language -##ownname Native-Name-Of-Language + ##name English-Name-Of-Language + ##ownname Native-Name-Of-Language Note: Do not alter the following parts of the file: - * String identifiers (the first word on each line) - * Parts of the strings which are in curly braces (such as {STRING}) - * Lines beginning with ## (such as ##id), other than the first two lines of - the file +- String identifiers (the first word on each line) +- Parts of the strings which are in curly braces (such as {STRING}) +- Lines beginning with ## (such as ##id), other than the first two lines of + the file + +### 8.2) Previewing -8.2) Previewing ----- ---------- In order to view the translation in the game, you need to compile your language file with the strgen utility. As this utility is tailored to a specific OpenTTD version, you need to compile it yourself. Just take the normal OpenTTD sources and build that. During the build process the strgen utility will be made. strgen is a command-line utility. It takes the language filename as parameter. + Example: -strgen lang/german.txt + strgen lang/german.txt This results in compiling german.txt and produces another file named german.lng. Any missing strings are replaced with the English strings. Note that it looks @@ -603,18 +625,17 @@ should also be. That is all! You should now be able to select the language in the game options. +## 9.0) Troubleshooting -9.0) Troubleshooting ----- --------------- To see all startup options available to you, start OpenTTD with the -'./openttd -h' option. This might help you tweak some of the settings. +'`./openttd -h`' option. This might help you tweak some of the settings. If the game is acting strange and you feel adventurous you can try the -'-d [[=]]' flag, where the higher levels will give you more +'`-d [[=]]`' flag, where the higher levels will give you more debugging output. The 'name' variable can help you to display only some type of debugging messages. This is mostly undocumented so best is to look in the source code file debug.c for the various debugging types. For more information -look at http://wiki.openttd.org/index.php/Command_line. +look at [http://wiki.openttd.org/index.php/Command_line](http://wiki.openttd.org/index.php/Command_line). The most frequent problem is missing data files. Please install OpenGFX and possibly OpenSFX and OpenMSX. See section 4.1.1 for more information. @@ -631,24 +652,26 @@ With the added support for font-based text selecting a non-latin language can result in lots of question marks ('?') being shown on screen. Please open your configuration file (openttd.cfg - see Section 4.2 for where to find it) and add a suitable font for the small, medium and / or large font, e.g.: - small_font = "Tahoma" - medium_font = "Tahoma" - large_font = "Tahoma" + + small_font = "Tahoma" + medium_font = "Tahoma" + large_font = "Tahoma" + You should use a font name like 'Tahoma' or a path to the desired font. Any NewGRF file used in a game is stored inside the savegame and will refuse to load if you do not have that NewGRF file available. A list of missing files can be viewed in the NewGRF window accessible from the file load dialogue window. -You can try to obtain the missing files from that NewGRF dialogue or - if they -are not available online - you can search manually through our forum's graphics -development section (http://www.tt-forums.net/viewforum.php?f=66) or GrfCrawler +You can try to obtain the missing files from that NewGRF dialogue or – if they +are not available online – you can search manually through our [forum's graphics +development section](http://www.tt-forums.net/viewforum.php?f=66) or GrfCrawler (http://grfcrawler.tt-forums.net/). Put the NewGRF files in OpenTTD's newgrf folder (see section 4.2 'OpenTTD directories') and rescan the list of available NewGRFs. Once you have all missing files, you are set to go. -10.0) Licensing ------ --------- +## 10.0) Licensing + OpenTTD is licensed under the GNU General Public License version 2.0. For the complete license text, see the file 'COPYING'. This license applies to all files in this distribution, except as noted below. @@ -675,60 +698,66 @@ The CWSDPMI implementation in os/dos/cwsdpmi is distributed under a custom binary-only license that prohibits modification. The exact licensing terms can be found in os/dos/cwsdpmi/cwsdpmi.txt. The sources for these files can be downloaded at its author site, at: -http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi5s.zip - -X.X) Credits ----- ------- -The OpenTTD team (in alphabetical order): - Albert Hofkamp (Alberth) - GUI expert (since 0.7) - Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3) - Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3) - Christoph Elsenhans (frosch) - General coding (since 0.6) - Loïc Guilloux (glx) - Windows Expert (since 0.4.5) - Michael Lutz (michi_cc) - Path based signals (since 0.7) - Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1) - Peter Nelson (peter1138) - Spiritual descendant from newGRF gods (since 0.4.5) - Ingo von Borstel (planetmaker) - General coding, Support (since 1.1) - Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5) - José Soler (Terkhen) - General coding (since 1.0) - Leif Linse (Zuu) - AI/Game Script (since 1.2) - -Inactive Developers: - Jean-François Claeys (Belugas) - GUI, newindustries and more (0.4.5 - 1.0) - Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles (0.3 - 0.7) - Victor Fischer (Celestar) - Programming everywhere you need him to (0.3 - 0.6) - Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;) (0.4.5 - 0.6) - Jonathan Coome (Maedhros) - High priest of the NewGRF Temple (0.5 - 0.6) - Attila Bán (MiHaMiX) - WebTranslator 1 and 2 (0.3 - 0.5) - Zdeněk Sojka (SmatZ) - Bug finder and fixer (0.6 - 1.3) - Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5) - Patric Stout (TrueBrain) - NoProgrammer (0.3 - 1.2), sys op (active) - Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3) - -Retired Developers: - Tamás Faragó (Darkvater) - Ex-Lead coder (0.3 - 0.5) - Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3 - 0.3) - Emil Djupfeld (egladil) - MacOSX port (0.4 - 0.6) - Simon Sasburg (HackyKid) - Bug fixer (0.4 - 0.4.5) - Ludvig Strigeus (ludde) - Original author of OpenTTD, main coder (0.1 - 0.3) - Cian Duffy (MYOB) - BeOS port / manual writing (0.1 - 0.3) - Petr Baudiš (pasky) - Many patches, newgrf support, etc. (0.3 - 0.3) - Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker (0.6 - 0.7) - Serge Paquet (vurlix) - 2nd contributor after ludde (0.1 - 0.3) - -Thanks to: - Josef Drexler - For his great work on TTDPatch. - Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and track foundations - Stefan Meißner (sign_de) - For his work on the console - Mike Ragsdale - OpenTTD installer - Christian Rosentreter (tokai) - MorphOS / AmigaOS port - Richard Kempton (RichK67) - Additional airports, initial TGP implementation - Alberto Demichelis - Squirrel scripting language - L. Peter Deutsch - MD5 implementation - Michael Blunck - For revolutionizing TTD with awesome graphics - George - Canal graphics - Andrew Parkhouse (andythenorth) - River graphics - David Dallaston (Pikka) - Tram tracks - All Translators - For their support to make OpenTTD a truly international game - Bug Reporters - Thanks for all bug reports - Chris Sawyer - For an amazing game! +[http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi5s.zip](http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi5s.zip) + +## X.X) Credits + +### The OpenTTD team (in alphabetical order): + +- Grzegorz Duczyński (adf88) - General coding (since 1.7.2) +- Albert Hofkamp (Alberth) - GUI expert (since 0.7) +- Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3) +- Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3) +- Christoph Elsenhans (frosch) - General coding (since 0.6) +- Loïc Guilloux (glx) - Windows Expert (since 0.4.5) +- Michael Lutz (michi_cc) - Path based signals (since 0.7) +- Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1) +- Peter Nelson (peter1138) - Spiritual descendant from newGRF gods (since 0.4.5) +- Ingo von Borstel (planetmaker) - General coding, Support (since 1.1) +- Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5) +- José Soler (Terkhen) - General coding (since 1.0) +- Leif Linse (Zuu) - AI/Game Script (since 1.2) + +### Inactive Developers: + +- Jean-François Claeys (Belugas) - GUI, newindustries and more (0.4.5 - 1.0) +- Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles (0.3 - 0.7) +- Victor Fischer (Celestar) - Programming everywhere you need him to (0.3 - 0.6) +- Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;) (0.4.5 - 0.6) +- Jonathan Coome (Maedhros) - High priest of the NewGRF Temple (0.5 - 0.6) +- Attila Bán (MiHaMiX) - WebTranslator 1 and 2 (0.3 - 0.5) +- Zdeněk Sojka (SmatZ) - Bug finder and fixer (0.6 - 1.3) +- Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5) +- Patric Stout (TrueBrain) - NoProgrammer (0.3 - 1.2), sys op (active) +- Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3) + +### Retired Developers: + +- Tamás Faragó (Darkvater) - Ex-Lead coder (0.3 - 0.5) +- Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3 - 0.3) +- Emil Djupfeld (egladil) - MacOSX port (0.4 - 0.6) +- Simon Sasburg (HackyKid) - Bug fixer (0.4 - 0.4.5) +- Ludvig Strigeus (ludde) - Original author of OpenTTD, main coder (0.1 - 0.3) +- Cian Duffy (MYOB) - BeOS port / manual writing (0.1 - 0.3) +- Petr Baudiš (pasky) - Many patches, newgrf support, etc. (0.3 - 0.3) +- Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker (0.6 - 0.7) +- Serge Paquet (vurlix) - 2nd contributor after ludde (0.1 - 0.3) + +### Thanks to: + +- Josef Drexler - For his great work on TTDPatch. +- Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and track foundations +- Stefan Meißner (sign_de) - For his work on the console +- Mike Ragsdale - OpenTTD installer +- Christian Rosentreter (tokai) - MorphOS / AmigaOS port +- Richard Kempton (RichK67) - Additional airports, initial TGP implementation +- Alberto Demichelis - Squirrel scripting language +- L. Peter Deutsch - MD5 implementation +- Michael Blunck - For revolutionizing TTD with awesome graphics +- George - Canal graphics +- Andrew Parkhouse (andythenorth) - River graphics +- David Dallaston (Pikka) - Tram tracks +- All Translators - For their support to make OpenTTD a truly international game +- Bug Reporters - Thanks for all bug reports +- Chris Sawyer - For an amazing game! + diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut index 1290443c4d..6eb0c980ea 100644 --- a/bin/ai/compat_1.7.nut +++ b/bin/ai/compat_1.7.nut @@ -7,4 +7,4 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -GSLog.Info("1.7 API compatibility in effect."); +AILog.Info("1.7 API compatibility in effect."); diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut index fe985b90d0..95ab6a76dd 100644 --- a/bin/ai/compat_1.8.nut +++ b/bin/ai/compat_1.8.nut @@ -6,3 +6,5 @@ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ + +AILog.Info("1.8 API compatibility in effect."); diff --git a/bin/ai/compat_1.9.nut b/bin/ai/compat_1.9.nut new file mode 100644 index 0000000000..fe985b90d0 --- /dev/null +++ b/bin/ai/compat_1.9.nut @@ -0,0 +1,8 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/bin/ai/regression/regression_info.nut b/bin/ai/regression/regression_info.nut index f908ae28ac..341d13a085 100644 --- a/bin/ai/regression/regression_info.nut +++ b/bin/ai/regression/regression_info.nut @@ -6,7 +6,7 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.8"; } + function GetAPIVersion() { return "1.9"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } } diff --git a/bin/baseset/openttd.grf b/bin/baseset/openttd.grf index 85d3fc8adc..6c9afef2ab 100644 Binary files a/bin/baseset/openttd.grf and b/bin/baseset/openttd.grf differ diff --git a/bin/baseset/orig_dos.obg b/bin/baseset/orig_dos.obg index 2ed8a5a59c..9d0db3e2af 100644 --- a/bin/baseset/orig_dos.obg +++ b/bin/baseset/orig_dos.obg @@ -77,7 +77,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 -ORIG_EXTRA.GRF = 0b10a95c0adee710ecca9c3d676be4f3 +ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_dos_de.obg b/bin/baseset/orig_dos_de.obg index 598d8ed89d..754ab5a2d4 100644 --- a/bin/baseset/orig_dos_de.obg +++ b/bin/baseset/orig_dos_de.obg @@ -75,7 +75,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGT.GRF = fcde1d7e8a74197d72a62695884b909e -ORIG_EXTRA.GRF = 0b10a95c0adee710ecca9c3d676be4f3 +ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_extra.grf b/bin/baseset/orig_extra.grf index 46faff3916..728a8b2555 100644 Binary files a/bin/baseset/orig_extra.grf and b/bin/baseset/orig_extra.grf differ diff --git a/bin/baseset/orig_win.obg b/bin/baseset/orig_win.obg index 2b7d43478d..ec00781488 100644 --- a/bin/baseset/orig_win.obg +++ b/bin/baseset/orig_win.obg @@ -76,7 +76,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 -ORIG_EXTRA.GRF = 0b10a95c0adee710ecca9c3d676be4f3 +ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut index fe985b90d0..6acdbc0609 100644 --- a/bin/game/compat_1.8.nut +++ b/bin/game/compat_1.8.nut @@ -6,3 +6,5 @@ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ + +GSLog.Info("1.8 API compatibility in effect."); diff --git a/bin/game/compat_1.9.nut b/bin/game/compat_1.9.nut new file mode 100644 index 0000000000..fe985b90d0 --- /dev/null +++ b/bin/game/compat_1.9.nut @@ -0,0 +1,8 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/changelog.txt b/changelog.txt index 89b3babf84..8edba15fb4 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,94 @@ +1.7.2 (2017-12-24) +------------------------------------------------------------------------ +(None) + + +1.7.2-RC1 (2017-12-11) +------------------------------------------------------------------------ +- Change: When train depots have a horizontal scrollbar, allow scrolling 1 tile beyond the longest train, so you can actually attach a wagon at the end (r27937) +- Fix: When moving wagons in the depot, the drag highlight did not exactly match the length of the dragged wagon chain (r27936) +- Fix: [Win32] Right mouse scrolling didn't work properly with the Windows 10 Fall Creators Update [FS#6629] (r27935) +- Fix: Forest, candyfloss forest and battery farm skipped the first animation frame [FS#6639] (r27932) +- Fix: Glyphs in range U+0020 to U+00FF may only be defined in orig_extra.grf, not in openttd.grf [FS#6620] (r27915) +- Fix: 'unban' console command was not handling IPv6 adresses properly (r27914, r27913) +- Fix: Keep the 'link' between industry chain and smallmap windows whenever possible [FS#6585] (r27905) +- Fix: When the last vehicle is removed from a shared orders group, hide the 'Stop sharing' button in the vehicle orders window [FS#6593] (r27904) +- Fix: Tooltip of 'increase service interval' said 'decrease' [FS#6606] (r27895) +- Fix: Console command parser passed invalid strings to the debug output, if command lines had many parameters [FS#6576] (r27884, r27883) + + +1.7.1 (2017-06-13) +------------------------------------------------------------------------ +(None) + + +1.7.1-RC1 (2017-05-04) +------------------------------------------------------------------------ +- Fix: Add missing game script event for ships arriving at a station [FS#6560] (r27859, r27858) +- Fix: StringID truncation to 16 bits broke string remapping test [FS#6555] (r27851) +- Fix: Infinite loop in pathfinder when checking safe waiting position from a waypoint [FS#5926] (r27846) +- Fix: [YAPF] Consider depot as destination before reversing path and applying penalty (r27843) +- Fix: Don't consider locks or ship depots as clear water when placing industries (r27841) +- Fix: Small news window's fake caption was not sized to fit its text (r27838) +- Fix: Black remap did nothing in 8bpp-simple blitter (r27837) +- Fix: Misaligned resize icon due to widget bounds being inclusive (r27831) +- Fix: Update viewport sign dimensions when changing GUI zoom level (r27827, r27819) +- Fix: Vehicle viewport is not user scrollable so flag window as such (r27823) +- Fix: Allow dropdown to be drawn above origin widget even with scrollbar (r27820) +- Fix: 32bpp-anim blitters assumed that pitch and width of the screen were equal [FS#6545] (r27796) +- Fix: Chat text background overflowed due to missing padding [FS#6526] (r27794) +- Fix: Failed to load lzo compressed savegames sometimes [FS#6450] (r27793) +- Fix: [Win32] Mark OpenTTD as DPI-aware to avoid OS window scaling that breaks mouse input [FS#6366] (r27791, r27790) +- Fix: [NewGRF] Get vehicle load amount after executing new cargo trigger [FS#6536] (r27788) +- Fix: AI configuration changed incorrect parameter when some parameters are hidden [FS#6479] (r27787, r27786) +- Fix: Buoys not always drawn after being placed depending on zoom level [FS#6508] (r27785) +- Fix: Allow rail conversion even if ship is on tile [FS#6505] (r27784) + + +1.7.0 (2017-04-01) +------------------------------------------------------------------------ +(None) + + +1.7.0-RC1 (2017-03-11) +------------------------------------------------------------------------ +- Feature: [NewGRF] Extend the DCxx range to D800-DFFF (r27769) +- Feature: [NewGRF, script] Increase the maximum number of GameScript texts to 64k, and NewGRF texts to 512k (r27758) +- Feature: [NewGRF] CB 37 results 0x0401 and 0x0800-0BFF for improved control of display of input cargos in the industry GUI (r27751) +- Feature: Sprites missing in outdated basesets are now provided by openttd.grf (r27732, r27731, r27730) +- Feature: [NewGRF] String command 9A 1E to print the name of a cargo type (r27707, r27706) +- Feature: [Debug] Assign descriptive names to threads [FS#6471] (r27674, r27673, r27670) +- Feature: [NewGRF] Allow composing vehicles from multiple sprites (r27668) +- Change: Enable realistic train and road vehicle acceleration by default (r27760) +- Change: Hide the drive-in stops from the tram station picker (r27734) +- Change: Do not count static NewGRF when checking for the maximum number of NewGRFs in a game (r27729) +- Change: Limit waypoint area by maximum station spread during dragging (r27710) +- Change: [Build] Re-enable Wnarrowing for gcc 4.9+ [FS#6532] (r27709, r27703) +- Change: List railtype of rail tiles explicitly in the tile info window (r27686) +- Change: Re-arrange the autoreplace GUI for trains, and do not filter it by railtype by default (r27683) +- Change: Various performance improvements to CargoDist and LinkGraphs (r27682, r27681, r27614, r27613, r27612, r27611) +- Change: Improve randomisation of rough land appearance (r27657) +- Change: [Build] Enable C++11 for clang 3.3 (r27654) +- Fix: Insufficient thread synchronisation when switching blitters lead to crashes [FS#6510] (r27775) +- Fix: Enabling palette animation for 32bpp blitters while paused skipped initialisation of the palette and resulted in black windows [FS#5889] (r27774) +- Fix: Intro games other than the traditional nightly one would cause townname NewGRFs to not get activated in the game options [FS#5819] (r27772) +- Fix: Some variables were not reset between loading old savegames, which made loading them fail [FS#6540] (r27770) +- Fix: Removing secondary roadtypes from bridges was factor 2 too cheap [FS#6538] (r27746) +- Fix: Extra viewports did not center on the selected tile [FS#6537] (r27743) +- Fix: [Build] Building on newer OSX versions with newer SDKs [FS#6295, FS#6502] (r27727, r27675) +- Fix: Improve error message when trying to build rail track over a depot (r27726) +- Fix: Rescanning NewGRF in-game could break the loaded NewGRF, if very many NewGRF were in use (r27721) +- Fix: Text could overflow various GUI elements [FS#6527] (r27713) +- Fix: Memory leak when reloading NewGRF (r27690, r27688, r27687) +- Fix: When removing objects of bankrupt companies the tiles may revert to canal. In that case also check the ownership of the canal [FS#6511] (r27656) +- Fix: Make the console file commands operate independent of the save/load GUI (r27645) +- Fix: When dragging vehicles in group or depot GUI, draw the complete articulated vehicle (r27632) +- Fix: When dragging multiple vehicles in the depot, make the destination gap as long as the chain instead of just considering the first vehicle (r27629) +- Fix: [Build] Change the GCC version detection so that it works with two-digit and truncated versions [FS#6487] (r27623, r27616) +- Fix: Do not hide filtered and highlighted industries by overlapping tiles in the zoomed-out smallmap (r27622, r27621, r27620) +- Fix: [Script] Kill scripts, when a non-suspendable valuator call takes way too long [FS#6473] (r27594) + + 1.6.1 (2016-07-01) ------------------------------------------------------------------------ - Fix: Compilation and optimisation issues with GCC6 (r27606, r27605, r27595) diff --git a/config.lib b/config.lib index 4bacba4f95..4dde23b457 100644 --- a/config.lib +++ b/config.lib @@ -1210,12 +1210,15 @@ make_compiler_cflags() { # $4 - name of the ldflags variable # $5 - name of the features variable + # Get the compiler to tell us who it is + compiler="`$1 --version | head -n1 | cut -d' ' -f1`" + eval eval "flags=\\\$$2" eval eval "cxxflags=\\\$$3" eval eval "ldflags=\\\$$4" eval eval "features=\\\$$5" - if [ `basename $1 | cut -c 1-3` = "icc" ]; then + if [ "$compiler" = "icc" ]; then # Enable some things only for certain ICC versions cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g` @@ -1307,7 +1310,7 @@ make_compiler_cflags() { features="$features lto" fi fi - elif [ `basename $1 | grep 'clang'` ]; then + elif [ "$compiler" = "clang" ]; then # Enable some things only for certain clang versions cc_version="`$1 -v 2>&1 | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`" @@ -1367,6 +1370,8 @@ make_compiler_cflags() { # rdynamic is used to get useful stack traces from crash reports. ldflags="$ldflags -rdynamic" + + # Assume gcc, since it just uses argv[0] in its --version output else # Enable some things only for certain GCC versions # cc_version = major_version * 100 + minor_version @@ -1485,21 +1490,27 @@ make_compiler_cflags() { make_cflags_and_ldflags() { # General CFlags for BUILD - CFLAGS_BUILD="$CFLAGS_BUILD" + CFLAGS_BUILD_ENV="$CFLAGS_BUILD" + CFLAGS_BUILD="" # Special CXXFlags for BUILD - CXXFLAGS_BUILD="$CXXFLAGS_BUILD" + CXXFLAGS_BUILD_ENV="$CXXFLAGS_BUILD" + CXXFLAGS_BUILD="" # LDFLAGS for BUILD - LDFLAGS_BUILD="$LDFLAGS_BUILD" + LDFLAGS_BUILD_ENV="$LDFLAGS_BUILD" + LDFLAGS_BUILD="" # FEATURES for BUILD (lto) FEATURES_BUILD="" # General CFlags for HOST - CFLAGS="$CFLAGS" + CFLAGS_ENV="$CFLAGS" + CFLAGS="" # Special CXXFlags for HOST - CXXFLAGS="$CXXFLAGS" + CXXFLAGS_ENV="$CXXFLAGS" + CXXFLAGS="" # Libs to compile. In fact this is just LDFLAGS LIBS="-lstdc++" # LDFLAGS used for HOST - LDFLAGS="$LDFLAGS" + LDFLAGS_ENV="$LDFLAGS" + LDFLAGS="" # FEATURES for HOST (lto) FEATURES="" @@ -1920,6 +1931,14 @@ make_cflags_and_ldflags() { fi fi + # All flags to be extended via the env + CFLAGS_BUILD="$CFLAGS_BUILD $CFLAGS_BUILD_ENV" + CXXFLAGS_BUILD="$CXXFLAGS_BUILD $CXXFLAGS_BUILD_ENV" + LDFLAGS_BUILD="$LDFLAGS_BUILD $LDFLAGS_BUILD_ENV" + CFLAGS="$CFLAGS $CFLAGS_ENV" + CXXFLAGS="$CXXFLAGS $CXXFLAGS_ENV" + LDFLAGS="$LDFLAGS $LDFLAGS_ENV" + log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD" log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD" log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD" @@ -1970,7 +1989,22 @@ check_compiler() { # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo # $9 - What the command is to check for - if [ -n "$3" ]; then + if [ -n "$4" ]; then + # Check for manual compiler + machine=`$4 $9 2>/dev/null` + ret=$? + eval "$2=\"$4\"" + + log 2 "executing $4 $9" + log 2 " returned $machine" + log 2 " exit code $ret" + + if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then + log 1 "checking $1... $4 not found" + log 1 "the selected binary doesn't seem to be a $6 binary" + exit 1 + fi + elif [ -n "$3" ]; then # Check for system if [ -z "$6" ]; then compiler="$3" @@ -2013,21 +2047,6 @@ check_compiler() { log 1 "the compiler suggests it doesn't build code for the machine you specified" exit 1 fi - elif [ -n "$4" ]; then - # Check for manual compiler - machine=`$4 $9 2>/dev/null` - ret=$? - eval "$2=\"$4\"" - - log 2 "executing $4 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $4 not found" - log 1 "the selected binary doesn't seem to be a $6 binary" - exit 1 - fi else # Nothing given, autodetect @@ -2090,26 +2109,13 @@ check_compiler() { } check_build() { - if [ "$os" = "FREEBSD" ]; then - # FreeBSD's C compiler does not support dump machine. - # However, removing C support is not possible because PSP must be linked with the C compiler. - check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CXX" "g++" "c++" "0" "-dumpmachine" - else - check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine" - fi + check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine" } check_host() { # By default the host is the build if [ -z "$host" ]; then host="$build"; fi - - if [ "$os" = "FREEBSD" ]; then - # FreeBSD's C compiler does not support dump machine. - # However, removing C support is not possible because PSP must be linked with the C compiler. - check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CXX" "g++" "c++" "0" "-dumpmachine" - else - check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine" - fi + check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine" } check_cxx_build() { diff --git a/docs/Readme_Windows_MSVC.txt b/docs/Readme_Windows_MSVC.txt index 637b28b2e2..65701e0e86 100644 --- a/docs/Readme_Windows_MSVC.txt +++ b/docs/Readme_Windows_MSVC.txt @@ -76,7 +76,7 @@ list, above all others, otherwise compilation will most likely fail!! 3) TTD GRAPHICS FILES --------------------- -See section 4.1 of readme.txt for the required 3rdparty files and how to install them. +See section 4.1 of README.md for the required 3rdparty files and how to install them. 4) COMPILING diff --git a/findversion.sh b/findversion.sh index 6be52b696f..8fd292c8bc 100755 --- a/findversion.sh +++ b/findversion.sh @@ -14,42 +14,31 @@ if [ "$#" != "0" ]; then Usage: ./findversion.sh Finds the current revision and if the code is modified. -Output: \t\t\t -REV +Output: \t\t\t +VERSION a string describing what version of the code the current checkout is - based on. The exact format of this string depends on the version - control system in use, but it tries to identify the revision used as - close as possible (using the svn revision number or hg/git hash). - This also includes an indication of whether the checkout was - modified and which branch was checked out. This value is not + based on. + This also includes the commit date, an indication of whether the checkout + was modified and which branch was checked out. This value is not guaranteed to be sortable, but is mainly meant for identifying the revision and user display. If no revision identifier could be found, this is left empty. -REV_NR - the revision number of the svn revision this checkout is based on. - This can be used to determine which functionality is present in this - checkout. For trunk svn checkouts and hg/git branches based upon it, - this number should be accurate. For svn branch checkouts, this - number is mostly meaningless, at least when comparing with the - REV_NR from other branches or trunk. - - This number should be sortable. Within a given branch or trunk, a - higher number means a newer version. However, when using git or hg, - this number will not increase on new commits. - - If no revision number could be found, this is left empty. +ISODATE + the commit date of the revision this checkout is based on. + The commit date may differ from the author date. + This can be used to decide upon the age of the source. + + If no timestamp could be found, this is left empty. MODIFIED Whether (the src directory of) this checkout is modified or not. A value of 0 means not modified, a value of 2 means it was modified. - Modification is determined in relation to the commit identified by - REV, so not in relation to the svn revision identified by REV_NR. A value of 1 means that the modified status is unknown, because this - is not an svn/git/hg checkout for example. + is not an git checkout for example. -CLEAN_REV - the same as REV but without branch name +HASH + the git revision hash By setting the AWK environment variable, a caller can determine which version of "awk" is used. If nothing is set, this script defaults to @@ -70,21 +59,7 @@ ROOT_DIR=`pwd` # Determine if we are using a modified version # Assume the dir is not modified MODIFIED="0" -if [ -d "$ROOT_DIR/.svn" ] || [ -d "$ROOT_DIR/../.svn" ]; then - # We are an svn checkout - if [ -n "`svnversion | grep 'M'`" ]; then - MODIFIED="2" - fi - # Find the revision like: rXXXXM-branch - BRANCH=`LC_ALL=C svn info | "$AWK" '/^URL:.*branches/ { split($2, a, "/"); for(i in a) if (a[i]=="branches") { print a[i+1]; break } }'` - TAG=`LC_ALL=C svn info | "$AWK" '/^URL:.*tags/ { split($2, a, "/"); for(i in a) if (a[i]=="tags") { print a[i+1]; break } }'` - REV_NR=`LC_ALL=C svn info | "$AWK" '/^Last Changed Rev:/ { print $4 }'` - if [ -n "$TAG" ]; then - REV=$TAG - else - REV="r$REV_NR" - fi -elif [ -d "$ROOT_DIR/.git" ]; then +if [ -d "$ROOT_DIR/.git" ]; then # We are a git checkout # Refresh the index to make sure file stat info is in sync, then look for modifications git update-index --refresh >/dev/null @@ -92,35 +67,21 @@ elif [ -d "$ROOT_DIR/.git" ]; then MODIFIED="2" fi HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` - REV="g`echo $HASH | cut -c1-8`" - BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@;s@^master$@@'`" - REV_NR=`LC_ALL=C git log --pretty=format:%s --grep="^(svn r[0-9]*)" -1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"` - if [ -z "$REV_NR" ]; then - # No rev? Maybe it is a custom git-svn clone - REV_NR=`LC_ALL=C git log --pretty=format:%b --grep="git-svn-id:.*@[0-9]*" -1 | sed "s@.*\@\([0-9]*\).*@\1@"` - fi + SHORTHASH=`echo ${HASH} | cut -c1-8` + ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'` + BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`" TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`" + if [ -n "$TAG" ]; then - BRANCH="" - REV="$TAG" - fi -elif [ -d "$ROOT_DIR/.hg" ]; then - # We are a hg checkout - if [ -n "`HGPLAIN= hg status | grep -v '^?'`" ]; then - MODIFIED="2" - fi - HASH=`LC_ALL=C HGPLAIN= hg id -i | cut -c1-12` - REV="h`echo $HASH | cut -c1-8`" - BRANCH="`HGPLAIN= hg branch | sed 's@^default$@@'`" - TAG="`HGPLAIN= hg id -t | grep -v 'tip$'`" - if [ -n "$TAG" ]; then - BRANCH="" - REV="$TAG" + VERSION="${TAG}" + elif [ "${BRANCH}" = "master" ]; then + VERSION="${ISODATE}-g${SHORTHASH}" + else + VERSION="${ISODATE}-${BRANCH}-g${SHORTHASH}" fi - REV_NR=`LC_ALL=C HGPLAIN= hg log -f -k "(svn r" -l 1 --template "{desc|firstline}\n" | grep "^(svn r[0-9]*)" | sed "s@.*(svn r\([0-9]*\)).*@\1@"` - if [ -z "$REV_NR" ]; then - # No rev? Maybe it is a custom hgsubversion clone - REV_NR=`LC_ALL=C HGPLAIN= hg parent --template="{svnrev}"` + + if [ "$MODIFIED" -eq "2" ]; then + VERSION="${VERSION}M" fi elif [ -f "$ROOT_DIR/.ottdrev" ]; then # We are an exported source bundle @@ -129,19 +90,12 @@ elif [ -f "$ROOT_DIR/.ottdrev" ]; then else # We don't know MODIFIED="1" + HASH="" + SHORTHASH="" BRANCH="" - REV="" - REV_NR="" -fi - -if [ "$MODIFIED" -eq "2" ]; then - REV="${REV}M" -fi - -CLEAN_REV=${REV} - -if [ -n "$BRANCH" ]; then - REV="${REV}-$BRANCH" + ISODATE="" + TAG="" + VERSION="" fi -echo "$REV $REV_NR $MODIFIED $CLEAN_REV" +echo "$VERSION $ISODATE $MODIFIED $HASH" diff --git a/known-bugs.txt b/known-bugs.txt index f5ae731018..e76229e722 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -453,3 +453,12 @@ Some houses and industries are not affected by transparency [FS#5817]: This is a bug of the original graphics, and unfortunately cannot be fixed with OpenGFX for the sake of maintaining compatibility with the original graphics. + +Involuntary cargo exchange with cargodist via neutral station [FS#6114]: + When two players serve a neutral station at an industry, a cross-company + chain for cargo flow can and will be established which can only be + interrupted if one of the players stops competing for the ressources of + that industry. There is an easy fix for this: If you are loading at the + shared station make the order "no unload" and if you're unloading make + it "no load". Cargodist will then figure out that it should not create + such a route. diff --git a/media/extra_grf/airports.nfo b/media/extra_grf/airports.nfo index 8feb813baf..45cd25de04 100644 --- a/media/extra_grf/airports.nfo +++ b/media/extra_grf/airports.nfo @@ -23,3 +23,16 @@ -1 sprites/airports.png 8bpp 82 88 64 31 -31 0 normal -1 sprites/airports.png 8bpp 162 88 64 31 -31 0 normal -1 sprites/airports.png 8bpp 242 88 64 31 -31 0 normal + -1 * 0 0C "Climate specific sprites by PaulC" + -1 * 0 07 83 01 \7! 01 03 + -1 * 0 05 90 02 0D + -1 sprites/airports.png 8bpp 320 88 64 31 -31 0 normal + -1 sprites/airports.png 8bpp 400 88 64 31 -31 0 normal + -1 * 0 07 83 01 \7! 02 03 + -1 * 0 05 90 02 0D + -1 sprites/airports.png 8bpp 480 88 64 31 -31 0 normal + -1 sprites/airports.png 8bpp 560 88 64 31 -31 0 normal + -1 * 0 07 83 01 \7! 03 03 + -1 * 0 05 90 02 0D + -1 sprites/airports.png 8bpp 640 88 64 31 -31 0 normal + -1 sprites/airports.png 8bpp 720 88 64 31 -31 0 normal diff --git a/media/extra_grf/airports.png b/media/extra_grf/airports.png index fd63355b1f..5fb9618bc5 100644 Binary files a/media/extra_grf/airports.png and b/media/extra_grf/airports.png differ diff --git a/media/extra_grf/airports_orig_extra.nfo b/media/extra_grf/airports_orig_extra.nfo new file mode 100644 index 0000000000..f2a8dc8327 --- /dev/null +++ b/media/extra_grf/airports_orig_extra.nfo @@ -0,0 +1,12 @@ +// +// $Id$ +// +// This file is part of OpenTTD. +// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . +// + -1 * 0 0C "Climate specific airport sprite by PaulC" + -1 * 0 07 83 01 \7! 03 02 + -1 * 0 0A 01 01 2F 08 + -1 sprites/airports.png 8bpp 20 170 42 39 -19 -21 normal diff --git a/media/extra_grf/openttdgui.png b/media/extra_grf/openttdgui.png index 28ad2fbafe..710adf001b 100644 Binary files a/media/extra_grf/openttdgui.png and b/media/extra_grf/openttdgui.png differ diff --git a/media/extra_grf/orig_extra.nfo b/media/extra_grf/orig_extra.nfo index 534badab03..a1173a58c1 100644 --- a/media/extra_grf/orig_extra.nfo +++ b/media/extra_grf/orig_extra.nfo @@ -78,6 +78,7 @@ #include "chars_orig_extra.nfo" #include "shore.nfo" #include "fix_graphics.nfo" +#include "airports_orig_extra.nfo" #include "canals_extra.nfo" #include "rivers/rapids.nfo" #include "rivers/temperate.nfo" diff --git a/os/debian/changelog b/os/debian/changelog index c8cf30794b..ce2582128c 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,39 @@ +openttd (1.7.2-0) unstable; urgency=low + + * New upstream release 1.7.2 + + -- OpenTTD Sun, 24 Dec 2017 14:00:00 +0100 + +openttd (1.7.2~RC1-0) unstable; urgency=low + + * New upstream release 1.7.2-RC1 + + -- OpenTTD Mon, 11 Dec 2017 21:30:00 +0100 + +openttd (1.7.1-0) unstable; urgency=low + + * New upstream release 1.7.1 + + -- OpenTTD Tue, 13 Jun 2017 21:00:00 +0200 + +openttd (1.7.1~RC1-0) unstable; urgency=low + + * New upstream release 1.7.1-RC1 + + -- OpenTTD Thu, 04 Mai 2017 21:00:00 +0200 + +openttd (1.7.0-0) unstable; urgency=low + + * New upstream release 1.7.0 + + -- OpenTTD Sat, 01 Apr 2017 19:00:00 +0200 + +openttd (1.7.0~RC1-0) unstable; urgency=low + + * New upstream release 1.7.0-RC1 + + -- OpenTTD Sat, 11 Mar 2017 22:30:00 +0100 + openttd (1.6.1-0) unstable; urgency=low * New upstream release 1.6.1 diff --git a/os/debian/copyright b/os/debian/copyright index ab62f66a42..05cbfc4328 100644 --- a/os/debian/copyright +++ b/os/debian/copyright @@ -5,7 +5,7 @@ Source: http://www.openttd.org Files: * -Copyright: © 2004-2017 Ludvig Strigeous and others. +Copyright: © 2004-2018 Ludvig Strigeous and others. License: GPL-2.0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2.0 as diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd index 5e30e4c354..a15198b5f1 100644 --- a/os/os2/installer/make_installer.cmd +++ b/os/os2/installer/make_installer.cmd @@ -1,6 +1,6 @@ @echo off -set OPENTTD_VERSION=1.8.0 +set OPENTTD_VERSION=1.9.0 set OPENSFX_VERSION=0.8.0 set NOSOUND_VERSION=0.8.0 set OPENGFX_VERSION=1.2.0 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 9685624462..5fa4d72a1e 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -2,7 +2,7 @@ # spec file for package openttd # # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. -# Copyright (c) 2007-2017 The OpenTTD developers +# Copyright (c) 2007-2018 The OpenTTD developers # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.8.beta1 +Version: 1.9.beta1 Release: 0 -%define srcver 1.8.0-beta1 +%define srcver 1.9.0-beta1 Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe License: GPL-2.0 Group: Amusements/Games/Strategy/Other diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index 76a87b37dd..cb93d4d04d 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -1,6 +1,6 @@ # Version numbers to update !define APPV_MAJOR 1 -!define APPV_MINOR 8 +!define APPV_MINOR 9 !define APPV_MAINT 0 !define APPV_BUILD 0 !define APPV_EXTRA "-beta1" @@ -89,7 +89,7 @@ Page custom SelectCDEnter SelectCDExit ": TTD folder" !define MUI_FINISHPAGE_LINK "Visit the OpenTTD site for more information" !define MUI_FINISHPAGE_LINK_LOCATION "${APPURLLINK}" !define MUI_FINISHPAGE_NOREBOOTSUPPORT -!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt" +!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.md" !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED !define MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT DisableBack @@ -139,7 +139,7 @@ Section "!OpenTTD" Section1 ; Copy the scripts SetOutPath "$INSTDIR\scripts\" File ${PATH_ROOT}bin\scripts\*.* - Push "$INSTDIR\scripts\readme.txt" + Push "$INSTDIR\scripts\README.md" Call unix2dos ; Copy some documention files @@ -158,8 +158,8 @@ Section "!OpenTTD" Section1 File ${PATH_ROOT}COPYING Push "$INSTDIR\COPYING" Call unix2dos - File ${PATH_ROOT}readme.txt - Push "$INSTDIR\readme.txt" + File ${PATH_ROOT}README.md + Push "$INSTDIR\README.md" Call unix2dos File ${PATH_ROOT}known-bugs.txt Push "$INSTDIR\known-bugs.txt" @@ -213,13 +213,13 @@ Section "!OpenTTD" Section1 CreateDirectory "$SMPROGRAMS\$SHORTCUTS" CreateShortCut "$SMPROGRAMS\$SHORTCUTS\OpenTTD.lnk" "$INSTDIR\openttd.exe" CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk" "$INSTDIR\uninstall.exe" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" "$INSTDIR\Readme.txt" + CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" "$INSTDIR\README.md" CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk" "$INSTDIR\Changelog.txt" CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Known-bugs.lnk" "$INSTDIR\known-bugs.txt" CreateDirectory "$SMPROGRAMS\$SHORTCUTS\Docs" CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Docs\Multiplayer.lnk" "$INSTDIR\docs\multiplayer.txt" CreateDirectory "$SMPROGRAMS\$SHORTCUTS\Scripts" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Scripts\Readme.lnk" "$INSTDIR\scripts\readme.txt" + CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Scripts\Readme.lnk" "$INSTDIR\scripts\README.md" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd @@ -387,7 +387,7 @@ Section "Uninstall" ; Clean up OpenTTD dir Delete "$INSTDIR\changelog.txt" - Delete "$INSTDIR\readme.txt" + Delete "$INSTDIR\README.md" Delete "$INSTDIR\known-bugs.txt" Delete "$INSTDIR\openttd.exe" Delete "$INSTDIR\COPYING" diff --git a/os/windows/installer/version_win9x.txt b/os/windows/installer/version_win9x.txt index 077390eacb..21dbf6200a 100644 --- a/os/windows/installer/version_win9x.txt +++ b/os/windows/installer/version_win9x.txt @@ -1,5 +1,5 @@ !define APPBITS 32 ; Define number of bits for the architecture !define EXTRA_VERSION "95, 98, ME, 2000 and XP without SP3" !define APPARCH "win9x" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}bin" +!define BINARY_DIR "${PATH_ROOT}objs\release" InstallDir "$PROGRAMFILES32\OpenTTD\" diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index e738569e3a..b1f7886a4f 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -21,312 +21,132 @@ Sub FindReplaceInFile(filename, to_find, replacement) file.Close End Sub -Sub UpdateFile(modified, revision, version, cur_date, filename) +Sub UpdateFile(modified, isodate, version, cur_date, filename) FSO.CopyFile filename & ".in", filename FindReplaceInFile filename, "!!MODIFIED!!", modified - FindReplaceInFile filename, "!!REVISION!!", revision + FindReplaceInFile filename, "!!ISODATE!!", isodate FindReplaceInFile filename, "!!VERSION!!", version FindReplaceInFile filename, "!!DATE!!", cur_date End Sub Sub UpdateFiles(version) - Dim modified, revision, cur_date + Dim modified, isodate, cur_date cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) If InStr(version, Chr(9)) Then - revision = Mid(version, InStr(version, Chr(9)) + 1) - modified = Mid(revision, InStr(revision, Chr(9)) + 1) - revision = Mid(revision, 1, InStr(revision, Chr(9)) - 1) + isodate = Mid(version, InStr(version, Chr(9)) + 1) + modified = Mid(isodate, InStr(isodate, Chr(9)) + 1) + isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) version = Mid(version, 1, InStr(version, Chr(9)) - 1) Else - revision = 0 + isodate = 0 modified = 1 End If - UpdateFile modified, revision, version, cur_date, "../src/rev.cpp" - UpdateFile modified, revision, version, cur_date, "../src/os/windows/ottdres.rc" + UpdateFile modified, isodate, version, cur_date, "../src/rev.cpp" + UpdateFile modified, isodate, version, cur_date, "../src/os/windows/ottdres.rc" End Sub -Function ReadRegistryKey(shive, subkey, valuename, architecture) - Dim hiveKey, objCtx, objLocator, objServices, objReg, Inparams, Outparams - - ' First, get the Registry Provider for the requested architecture - Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet") - objCtx.Add "__ProviderArchitecture", architecture ' Must be 64 of 32 - Set objLocator = CreateObject("Wbemscripting.SWbemLocator") - Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx) - Set objReg = objServices.Get("StdRegProv") - - ' Check the hive and give it the right value - Select Case shive - Case "HKCR", "HKEY_CLASSES_ROOT" - hiveKey = &h80000000 - Case "HKCU", "HKEY_CURRENT_USER" - hiveKey = &H80000001 - Case "HKLM", "HKEY_LOCAL_MACHINE" - hiveKey = &h80000002 - Case "HKU", "HKEY_USERS" - hiveKey = &h80000003 - Case "HKCC", "HKEY_CURRENT_CONFIG" - hiveKey = &h80000005 - Case "HKDD", "HKEY_DYN_DATA" ' Only valid for Windows 95/98 - hiveKey = &h80000006 - Case Else - MsgBox "Hive not valid (ReadRegistryKey)" - End Select - - Set Inparams = objReg.Methods_("GetStringValue").Inparameters - Inparams.Hdefkey = hiveKey - Inparams.Ssubkeyname = subkey - Inparams.Svaluename = valuename - Set Outparams = objReg.ExecMethod_("GetStringValue", Inparams,,objCtx) - - ReadRegistryKey = Outparams.SValue -End Function - -Function DetermineSVNVersion() - Dim WshShell, version, branch, modified, revision, clean_rev, url, oExec, line, hash +Function DetermineVersion() + Dim WshShell, branch, tag, modified, isodate, oExec, line, hash, shorthash Set WshShell = CreateObject("WScript.Shell") On Error Resume Next - revision = 0 - - ' Try TortoiseSVN - ' Get the directory where TortoiseSVN (should) reside(s) - Dim sTortoise - ' First, try with 32-bit architecture - sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 32) - If sTortoise = "" Or IsNull(sTortoise) Then - ' No 32-bit version of TortoiseSVN installed, try 64-bit version (doesn't hurt on 32-bit machines, it returns nothing or is ignored) - sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 64) - End If - - ' If TortoiseSVN is installed, try to get the revision number - If sTortoise <> "" Then - Dim SubWCRev - Set SubWCRev = WScript.CreateObject("SubWCRev.object") - SubWCRev.GetWCInfo FSO.GetAbsolutePathName("../"), 0, 0 - revision = SubWCRev.Revision - version = "r" & revision - modified = 0 - if SubWCRev.HasModifications then modified = 2 - url = SubWCRev.Url - End If - - ' Looks like there is no TortoiseSVN installed either. Then we don't know it. - If revision = 0 Then - ' Reset error and version - Err.Clear - version = "norev000" - modified = 0 - - ' Set the environment to english - WshShell.Environment("PROCESS")("LANG") = "en" - - ' Do we have subversion installed? Check immediatelly whether we've got a modified WC. - Set oExec = WshShell.Exec("svnversion ../") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop + modified = 1 + hash = "" + shorthash = "" + branch = "" + isodate = "" + tag = "" + + ' Set the environment to english + WshShell.Environment("PROCESS")("LANG") = "en" + + Set oExec = WshShell.Exec("git rev-parse --verify HEAD") + If Err.Number = 0 Then + ' Wait till the application is finished ... + Do While oExec.Status = 0 + Loop + + If oExec.ExitCode = 0 Then + hash = oExec.StdOut.ReadLine() + shorthash = Mid(hash, 1, 8) + ' Make sure index is in sync with disk + Set oExec = WshShell.Exec("git update-index --refresh") + If Err.Number = 0 Then + ' StdOut and StdErr share a 4kB buffer so prevent it from filling up as we don't care about the output + oExec.StdOut.Close + oExec.StdErr.Close + ' Wait till the application is finished ... + Do While oExec.Status = 0 + WScript.Sleep 10 + Loop + End If + Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../") + If Err.Number = 0 Then + ' Wait till the application is finished ... + Do While oExec.Status = 0 + Loop - line = OExec.StdOut.ReadLine() - If line <> "exported" Then - If InStr(line, "M") Then + If oExec.ExitCode = 1 Then modified = 2 - End If + End If ' oExec.ExitCode = 1 - ' And use svn info to get the correct revision and branch information. - Set oExec = WshShell.Exec("svn info ../") - If Err.Number = 0 Then - Do - line = OExec.StdOut.ReadLine() - If InStr(line, "URL") Then - url = line - End If - If InStr(line, "Last Changed Rev") Then - revision = Mid(line, 19) - version = "r" & revision - End If - Loop While Not OExec.StdOut.atEndOfStream + Set oExec = WshShell.Exec("git show -s --pretty=format:%ci") + if Err.Number = 0 Then + isodate = Mid(oExec.StdOut.ReadLine(), 1, 10) + isodate = Replace(isodate, "-", "") End If ' Err.Number = 0 - End If ' line <> "exported" - End If ' Err.Number = 0 - End If ' InStr(version, "$") - If version <> "norev000" Then - If InStr(url, "branches") Then - branch = Mid(url, InStr(url, "branches/") + 9) - End If - If InStr(url, "tags") Then - version = Mid(url, InStr(url, "tags/") + 5) - End If - Else ' version <> "norev000" - ' svn detection failed, reset error and try git - Err.Clear - Set oExec = WshShell.Exec("git rev-parse --verify HEAD") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - - If oExec.ExitCode = 0 Then - hash = oExec.StdOut.ReadLine() - version = "g" & Mid(hash, 1, 8) - ' Make sure index is in sync with disk - Set oExec = WshShell.Exec("git update-index --refresh") + ' Check branch + Err.Clear + Set oExec = WshShell.Exec("git symbolic-ref HEAD") If Err.Number = 0 Then - ' StdOut and StdErr share a 4kB buffer so prevent it from filling up as we don't care about the output - oExec.StdOut.Close - oExec.StdErr.Close - ' Wait till the application is finished ... - Do While oExec.Status = 0 - WScript.Sleep 10 - Loop - End If - Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../") + line = oExec.StdOut.ReadLine() + branch = Mid(line, InStrRev(line, "/") + 1) + End If ' Err.Number = 0 + + ' Check if a tag is currently checked out + Err.Clear + Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD") If Err.Number = 0 Then ' Wait till the application is finished ... Do While oExec.Status = 0 Loop - - If oExec.ExitCode = 1 Then - modified = 2 - End If ' oExec.ExitCode = 1 - - Set oExec = WshShell.Exec("git symbolic-ref HEAD") - If Err.Number = 0 Then - line = oExec.StdOut.ReadLine() - line = Mid(line, InStrRev(line, "/") + 1) - If line <> "master" Then - branch = line - End If ' line <> "master" - End If ' Err.Number = 0 - - Set oExec = WshShell.Exec("git log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1") - if Err.Number = 0 Then - revision = Mid(oExec.StdOut.ReadLine(), 7) - revision = Mid(revision, 1, InStr(revision, ")") - 1) - End If ' Err.Number = 0 - If revision = "" Then - ' No revision? Maybe it is a custom git-svn clone - ' Reset error number as WshShell.Exec will not do that on success - Err.Clear - Set oExec = WshShell.Exec("git log --pretty=format:%b --grep=" & Chr(34) & "git-svn-id:.*@[0-9]*" & Chr(34) & " -1") - If Err.Number = 0 Then - revision = oExec.StdOut.ReadLine() - revision = Mid(revision, InStr(revision, "@") + 1) - revision = Mid(revision, 1, InStr(revision, " ") - 1) - End If ' Err.Number = 0 - End If ' revision = "" - - ' Check if a tag is currently checked out - Err.Clear - Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - If oExec.ExitCode = 0 Then - version = oExec.StdOut.ReadLine() - If Right(version, 2) = "^0" Then - version = Left(version, Len(version) - 2) - End If - branch = "" - End If ' oExec.ExitCode = 0 - End If ' Err.Number = 0 + If oExec.ExitCode = 0 Then + tag = oExec.StdOut.ReadLine() + If Right(tag, 2) = "^0" Then + tag = Left(tag, Len(tag) - 2) + End If + End If ' oExec.ExitCode = 0 End If ' Err.Number = 0 - End If ' oExec.ExitCode = 0 - End If ' Err.Number = 0 - - If version = "norev000" Then - ' git detection failed, reset error and try mercurial (hg) - Err.Clear - Set oExec = WshShell.Exec("hg id -i") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - - If oExec.ExitCode = 0 Then - line = OExec.StdOut.ReadLine() - hash = Left(line, 12) - version = "h" & Mid(hash, 1, 8) - - ' Check if a tag is currently checked out - Err.Clear - Set oExec = WshShell.Exec("hg id -t") - If Err.Number = 0 Then - line = oExec.StdOut.ReadLine() - If Len(line) > 0 And Right(line, 3) <> "tip" Then - version = line - branch = "" - End If ' Len(line) > 0 And Right(line, 3) <> "tip" - End If ' Err.Number = 0 - - Err.Clear - Set oExec = WshShell.Exec("hg status ../") - If Err.Number = 0 Then - Do - line = OExec.StdOut.ReadLine() - If Len(line) > 0 And Mid(line, 1, 1) <> "?" Then - modified = 2 - Exit Do - End If ' Len(line) > 0 And Mid(line, 1, 1) <> "?" - Loop While Not OExec.StdOut.atEndOfStream - - Set oExec = WshShell.Exec("hg branch") - If Err.Number = 0 Then - line = OExec.StdOut.ReadLine() - If line <> "default" Then - branch = line - End If ' line <> "default" - End If ' Err.Number = 0 - - Set oExec = WshShell.Exec("hg log -f -k " & Chr(34) & "(svn r" & Chr(34) & " -l 1 --template " & Chr(34) & "{desc|firstline}\n" & Chr(34) & " --cwd ../") - If Err.Number = 0 Then - line = oExec.StdOut.ReadLine() - If Left(line, 6) = "(svn r" Then - revision = Mid(line, 7) - revision = Mid(revision, 1, InStr(revision, ")") - 1) - End If 'Left(line, 6) = "(svn r" - End If ' Err.Number = 0 - - If revision = "" Then - ' No rev? Maybe it is a custom hgsubversion clone - Err.Clear - Set oExec = WshShell.Exec("hg parent --template=" & Chr(34) & "{svnrev}" & Chr(34)) - If Err.Number = 0 Then - revision = oExec.StdOut.ReadLine() - End If ' Err.Number = 0 - End If ' revision = "" - End If ' Err.Number = 0 - End If ' oExec.ExitCode = 0 End If ' Err.Number = 0 - End If ' version = "norev000" - End If ' version <> "norev000" + End If ' oExec.ExitCode = 0 + End If ' Err.Number = 0 - If version = "norev000" And FSO.FileExists("../.ottdrev") Then + If hash = "" And FSO.FileExists("../.ottdrev") Then Dim rev_file Set rev_file = FSO.OpenTextFile("../.ottdrev", 1, True, 0) - DetermineSVNVersion = rev_file.ReadLine() + DetermineVersion = rev_file.ReadLine() rev_file.Close() + ElseIf hash = "" Then + DetermineVersion = "norev000" Else - If modified = 2 Then - version = version & "M" + Dim version + If tag <> "" Then + version = tag + ElseIf branch = "master" Then + version = isodate & "-g" & shorthash + Else + version = isodate & "-" & branch & "-g" & shorthash End If - clean_rev = version - If branch <> "" Then - version = version & "-" & branch + If modified = 2 Then + version = version & "M" End If - If version <> "norev000" Then - DetermineSVNVersion = version & Chr(9) & revision & Chr(9) & modified & Chr(9) & clean_rev - Else - DetermineSVNVersion = version - End If + DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash End If End Function @@ -359,7 +179,7 @@ Function CheckFile(filename) End Function Dim version -version = DetermineSVNVersion +version = DetermineVersion If Not (IsCachedVersion(version) And CheckFile("../src/rev.cpp") And CheckFile("../src/os/windows/ottdres.rc")) Then UpdateFiles version End If diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj index 642f3a43d3..de117cc40a 100644 --- a/projects/openttd_vs100.vcxproj +++ b/projects/openttd_vs100.vcxproj @@ -146,8 +146,11 @@ true - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -192,8 +195,11 @@ MachineX86 - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -251,8 +257,11 @@ true - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -299,8 +308,11 @@ MachineX64 - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -1013,6 +1025,8 @@ + + @@ -1078,6 +1092,8 @@ + + @@ -1289,7 +1305,7 @@ - + diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters index 54cd94e730..ef11613ff8 100644 --- a/projects/openttd_vs100.vcxproj.filters +++ b/projects/openttd_vs100.vcxproj.filters @@ -2232,6 +2232,12 @@ Script API + + Script API + + + Script API + Script API @@ -2427,6 +2433,12 @@ Script API Implementation + + Script API Implementation + + + Script API Implementation + Script API Implementation @@ -3054,6 +3066,6 @@ - + diff --git a/projects/openttd_vs100.vcxproj.filters.in b/projects/openttd_vs100.vcxproj.filters.in index cda491072c..126bd61459 100644 --- a/projects/openttd_vs100.vcxproj.filters.in +++ b/projects/openttd_vs100.vcxproj.filters.in @@ -8,6 +8,6 @@ - + diff --git a/projects/openttd_vs100.vcxproj.in b/projects/openttd_vs100.vcxproj.in index c8e71c4234..ab2ae133af 100644 --- a/projects/openttd_vs100.vcxproj.in +++ b/projects/openttd_vs100.vcxproj.in @@ -146,8 +146,11 @@ true - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -192,8 +195,11 @@ MachineX86 - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -251,8 +257,11 @@ true - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -299,15 +308,18 @@ MachineX64 - dpi_aware.manifest + dpi_aware.manifest;os_versions.manifest + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + !!FILES!! - + diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 541d5d4aaf..e4380931a3 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -152,8 +152,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -202,8 +206,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -264,8 +272,12 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -316,8 +328,12 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -1030,6 +1046,8 @@ + + @@ -1095,6 +1113,8 @@ + + @@ -1306,7 +1326,7 @@ - + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 54cd94e730..ef11613ff8 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -2232,6 +2232,12 @@ Script API + + Script API + + + Script API + Script API @@ -2427,6 +2433,12 @@ Script API Implementation + + Script API Implementation + + + Script API Implementation + Script API Implementation @@ -3054,6 +3066,6 @@ - + diff --git a/projects/openttd_vs140.vcxproj.filters.in b/projects/openttd_vs140.vcxproj.filters.in index cda491072c..126bd61459 100644 --- a/projects/openttd_vs140.vcxproj.filters.in +++ b/projects/openttd_vs140.vcxproj.filters.in @@ -8,6 +8,6 @@ - + diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index 98b6481dcd..1e490d29e7 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -152,8 +152,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -202,8 +206,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -264,8 +272,12 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -316,15 +328,19 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + !!FILES!! - + diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index c735569b33..bba72864b2 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -152,8 +152,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -202,8 +206,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -264,8 +272,12 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -316,8 +328,12 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -1027,6 +1043,8 @@ + + @@ -1092,6 +1110,8 @@ + + @@ -1303,7 +1323,7 @@ - + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 06800ffdaf..d502733796 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -2223,6 +2223,12 @@ Script API + + Script API + + + Script API + Script API @@ -2418,6 +2424,12 @@ Script API Implementation + + Script API Implementation + + + Script API Implementation + Script API Implementation @@ -3045,6 +3057,6 @@ - + diff --git a/projects/openttd_vs141.vcxproj.filters.in b/projects/openttd_vs141.vcxproj.filters.in index cda491072c..126bd61459 100644 --- a/projects/openttd_vs141.vcxproj.filters.in +++ b/projects/openttd_vs141.vcxproj.filters.in @@ -8,6 +8,6 @@ - + diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index 9afda46b7c..f4ec557c60 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -152,8 +152,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -202,8 +206,12 @@ 5.01 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -264,8 +272,12 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + @@ -316,15 +328,19 @@ 5.02 + os_versions.manifest PerMonitorHighDPIAware + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + !!FILES!! - + diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj index afb125acf2..aa08062ff3 100644 --- a/projects/openttd_vs80.vcproj +++ b/projects/openttd_vs80.vcproj @@ -122,6 +122,8 @@ /> @@ -3338,6 +3346,14 @@ RelativePath=".\..\src\script\api\script_cargomonitor.hpp" > + + + + @@ -3602,6 +3618,14 @@ RelativePath=".\..\src\script\api\script_cargomonitor.cpp" > + + + + @@ -4500,7 +4524,7 @@ > diff --git a/projects/openttd_vs80.vcproj.in b/projects/openttd_vs80.vcproj.in index 587871dca0..00c330d22f 100644 --- a/projects/openttd_vs80.vcproj.in +++ b/projects/openttd_vs80.vcproj.in @@ -122,6 +122,8 @@ /> @@ -437,7 +445,7 @@ > diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj index f35a14ece5..c0a285e2f9 100644 --- a/projects/openttd_vs90.vcproj +++ b/projects/openttd_vs90.vcproj @@ -121,6 +121,8 @@ /> @@ -3335,6 +3343,14 @@ RelativePath=".\..\src\script\api\script_cargomonitor.hpp" > + + + + @@ -3599,6 +3615,14 @@ RelativePath=".\..\src\script\api\script_cargomonitor.cpp" > + + + + @@ -4497,7 +4521,7 @@ > diff --git a/projects/openttd_vs90.vcproj.in b/projects/openttd_vs90.vcproj.in index ce90ab5f29..0ebf4fcbed 100644 --- a/projects/openttd_vs90.vcproj.in +++ b/projects/openttd_vs90.vcproj.in @@ -121,6 +121,8 @@ /> @@ -434,7 +442,7 @@ > diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest new file mode 100644 index 0000000000..52ed17bcb9 --- /dev/null +++ b/projects/os_versions.manifest @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/source.list b/source.list index c88f322cd1..7ed1eb63b2 100644 --- a/source.list +++ b/source.list @@ -785,6 +785,8 @@ script/api/script_bridgelist.hpp script/api/script_cargo.hpp script/api/script_cargolist.hpp script/api/script_cargomonitor.hpp +script/api/script_client.hpp +script/api/script_clientlist.hpp script/api/script_company.hpp script/api/script_companymode.hpp script/api/script_controller.hpp @@ -852,6 +854,8 @@ script/api/script_bridgelist.cpp script/api/script_cargo.cpp script/api/script_cargolist.cpp script/api/script_cargomonitor.cpp +script/api/script_client.cpp +script/api/script_clientlist.cpp script/api/script_company.cpp script/api/script_companymode.cpp script/api/script_controller.cpp diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 2afd5d4199..9c27006c47 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -29,7 +29,7 @@ static bool CheckAPIVersion(const char *api_version) return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0; + strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0; } #if defined(WIN32) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 78dda8b3b6..796c5f5e09 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -11,17 +11,14 @@ #include "stdafx.h" #include "core/alloc_func.hpp" +#include "core/smallvec_type.hpp" #include "tile_cmd.h" #include "viewport_func.h" #include "safeguards.h" /** The table/list with animated tiles. */ -TileIndex *_animated_tile_list = NULL; -/** The number of animated tiles in the current state. */ -uint _animated_tile_count = 0; -/** The number of slots for animated tiles allocated currently. */ -uint _animated_tile_allocated = 0; +SmallVector _animated_tiles; /** * Removes the given tile from the animated tile table. @@ -29,17 +26,11 @@ uint _animated_tile_allocated = 0; */ void DeleteAnimatedTile(TileIndex tile) { - for (TileIndex *ti = _animated_tile_list; ti < _animated_tile_list + _animated_tile_count; ti++) { - if (tile == *ti) { - /* Remove the hole - * The order of the remaining elements must stay the same, otherwise the animation loop - * may miss a tile; that's why we must use memmove instead of just moving the last element. - */ - memmove(ti, ti + 1, (_animated_tile_list + _animated_tile_count - (ti + 1)) * sizeof(*ti)); - _animated_tile_count--; - MarkTileDirtyByTile(tile); - return; - } + TileIndex *to_remove = _animated_tiles.Find(tile); + if (to_remove != _animated_tiles.End()) { + /* The order of the remaining elements must stay the same, otherwise the animation loop may miss a tile. */ + _animated_tiles.ErasePreservingOrder(to_remove); + MarkTileDirtyByTile(tile); } } @@ -51,19 +42,7 @@ void DeleteAnimatedTile(TileIndex tile) void AddAnimatedTile(TileIndex tile) { MarkTileDirtyByTile(tile); - - for (const TileIndex *ti = _animated_tile_list; ti < _animated_tile_list + _animated_tile_count; ti++) { - if (tile == *ti) return; - } - - /* Table not large enough, so make it larger */ - if (_animated_tile_count == _animated_tile_allocated) { - _animated_tile_allocated *= 2; - _animated_tile_list = ReallocT(_animated_tile_list, _animated_tile_allocated); - } - - _animated_tile_list[_animated_tile_count] = tile; - _animated_tile_count++; + _animated_tiles.Include(tile); } /** @@ -71,8 +50,8 @@ void AddAnimatedTile(TileIndex tile) */ void AnimateAnimatedTiles() { - const TileIndex *ti = _animated_tile_list; - while (ti < _animated_tile_list + _animated_tile_count) { + const TileIndex *ti = _animated_tiles.Begin(); + while (ti < _animated_tiles.End()) { const TileIndex curr = *ti; AnimateTile(curr); /* During the AnimateTile call, DeleteAnimatedTile could have been called, @@ -93,7 +72,5 @@ void AnimateAnimatedTiles() */ void InitializeAnimatedTiles() { - _animated_tile_list = ReallocT(_animated_tile_list, 256); - _animated_tile_count = 0; - _animated_tile_allocated = 256; + _animated_tiles.Clear(); } diff --git a/src/base_media_base.h b/src/base_media_base.h index d5de6c3739..7614118b7f 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -219,6 +219,11 @@ public: static bool HasSet(const ContentInfo *ci, bool md5sum); }; +template /* static */ const char *BaseMedia::ini_set; +template /* static */ const Tbase_set *BaseMedia::used_set; +template /* static */ Tbase_set *BaseMedia::available_sets; +template /* static */ Tbase_set *BaseMedia::duplicate_sets; + /** * Check whether there's a base set matching some information. * @param ci The content info to compare it to. diff --git a/src/base_media_func.h b/src/base_media_func.h index e3678d5a15..f45956f765 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -17,11 +17,6 @@ #include "ini_type.h" #include "string_func.h" -template /* static */ const char *BaseMedia::ini_set; -template /* static */ const Tbase_set *BaseMedia::used_set; -template /* static */ Tbase_set *BaseMedia::available_sets; -template /* static */ Tbase_set *BaseMedia::duplicate_sets; - /** * Try to read a single piece of metadata and return false if it doesn't exist. * @param name the name of the item to fetch. diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index ac8da1be77..b32d3c5abd 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -27,6 +27,8 @@ #define MARGIN_NORMAL_THRESHOLD (zoom == ZOOM_LVL_OUT_32X ? 8 : 4) ///< Minimum width to use margins with BM_NORMAL. #define MARGIN_REMAP_THRESHOLD 4 ///< Minimum width to use margins with BM_COLOUR_REMAP. +#undef ALIGN + #ifdef _MSC_VER #define ALIGN(n) __declspec(align(n)) #else diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 7abc38563c..62f5450c5b 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -264,6 +264,6 @@ bool HandleBootstrap() /* Failure to get enough working to get a graphics set. */ failure: - usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD. See section 4.1 of readme.txt."); + usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD. See section 4.1 of README.md."); return false; } diff --git a/src/command.cpp b/src/command.cpp index 959610cd28..df0cd004c3 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -167,6 +167,7 @@ CommandProc CmdSetStoryPageDate; CommandProc CmdShowStoryPage; CommandProc CmdRemoveStoryPage; CommandProc CmdRemoveStoryPageElement; +CommandProc CmdScrollViewport; CommandProc CmdLevelLand; @@ -322,6 +323,7 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdShowStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SHOW_STORY_PAGE DEF_CMD(CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_PAGE DEF_CMD(CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_ELEMENT_PAGE + DEF_CMD(CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SCROLL_VIEWPORT DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once diff --git a/src/command_type.h b/src/command_type.h index f318216acc..0a2fde297b 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -293,6 +293,8 @@ enum Commands { CMD_SHOW_STORY_PAGE, ///< show a story page CMD_REMOVE_STORY_PAGE, ///< remove a story page CMD_REMOVE_STORY_PAGE_ELEMENT, ///< remove a story page element + CMD_SCROLL_VIEWPORT, ///< scroll main viewport of players + CMD_LEVEL_LAND, ///< level land CMD_BUILD_LOCK, ///< build a lock diff --git a/src/company_manager_face.h b/src/company_manager_face.h index 993e539cc7..511f85b7d5 100644 --- a/src/company_manager_face.h +++ b/src/company_manager_face.h @@ -78,7 +78,7 @@ static const CompanyManagerFaceBitsInfo _cmf_info[] = { /* CMFV_MOUSTACHE */ { 13, 2, { 3, 0, 3, 0 }, { 0x367, 0, 0x397, 0 } }, ///< Depends on CMFV_HAS_MOUSTACHE /* CMFV_LIPS */ { 13, 4, { 12, 10, 9, 9 }, { 0x35B, 0x351, 0x3A5, 0x3C8 } }, ///< Depends on !CMFV_HAS_MOUSTACHE /* CMFV_NOSE */ { 17, 3, { 8, 4, 4, 5 }, { 0x349, 0x34C, 0x393, 0x3B3 } }, ///< Depends on !CMFV_HAS_MOUSTACHE - /* CMFV_HAIR */ { 20, 4, { 9, 5, 5, 4 }, { 0x382, 0x38B, 0x3D4, 0x3D9 } }, + /* CMFV_HAIR */ { 20, 4, { 9, 5, 5, 5 }, { 0x382, 0x38B, 0x3D4, 0x3D9 } }, /* CMFV_JACKET */ { 24, 2, { 3, 3, 3, 3 }, { 0x36B, 0x378, 0x36B, 0x378 } }, /* CMFV_COLLAR */ { 26, 2, { 4, 4, 4, 4 }, { 0x36E, 0x37B, 0x36E, 0x37B } }, /* CMFV_TIE_EARRING */ { 28, 3, { 6, 3, 6, 3 }, { 0x372, 0x37F, 0x372, 0x3D1 } }, ///< Depends on CMFV_HAS_TIE_EARRING diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index 31edba0817..06b5aaafa6 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -195,10 +195,10 @@ public: inline void Push(const Titem &item) { if (this->value != Tinvalid) { - ThreadMutexLocker lock(_pool.GetMutex()); - Tindex new_item = _pool.Create(); + ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + Tindex new_item = SmallStack::GetPool().Create(); if (new_item != Tmax_size) { - PooledSmallStack &pushed = _pool.Get(new_item); + PooledSmallStack &pushed = SmallStack::GetPool().Get(new_item); pushed.value = this->value; pushed.next = this->next; pushed.branch_count = 0; @@ -218,16 +218,16 @@ public: if (this->next == Tmax_size) { this->value = Tinvalid; } else { - ThreadMutexLocker lock(_pool.GetMutex()); - PooledSmallStack &popped = _pool.Get(this->next); + ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + PooledSmallStack &popped = SmallStack::GetPool().Get(this->next); this->value = popped.value; if (popped.branch_count == 0) { - _pool.Destroy(this->next); + SmallStack::GetPool().Destroy(this->next); } else { --popped.branch_count; /* We can't use Branch() here as we already have the mutex.*/ if (popped.next != Tmax_size) { - ++(_pool.Get(popped.next).branch_count); + ++(SmallStack::GetPool().Get(popped.next).branch_count); } } /* Accessing popped here is no problem as the pool will only set @@ -257,11 +257,11 @@ public: { if (item == Tinvalid || item == this->value) return true; if (this->next != Tmax_size) { - ThreadMutexLocker lock(_pool.GetMutex()); + ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); const SmallStack *in_list = this; do { in_list = static_cast( - static_cast(&_pool.Get(in_list->next))); + static_cast(&SmallStack::GetPool().Get(in_list->next))); if (in_list->value == item) return true; } while (in_list->next != Tmax_size); } @@ -269,7 +269,11 @@ public: } protected: - static SmallStackPool _pool; + static SmallStackPool &GetPool() + { + static SmallStackPool pool; + return pool; + } /** * Create a branch in the pool if necessary. @@ -277,8 +281,8 @@ protected: inline void Branch() { if (this->next != Tmax_size) { - ThreadMutexLocker lock(_pool.GetMutex()); - ++(_pool.Get(this->next).branch_count); + ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + ++(SmallStack::GetPool().Get(this->next).branch_count); } } }; diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 8676265d26..588dd599dc 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -158,6 +158,23 @@ public: } } + /** + * Insert a new item at a specific position into the vector, moving all following items. + * @param item Position at which the new item should be inserted + * @return pointer to the new item + */ + inline T *Insert(T *item) + { + assert(item >= this->Begin() && item <= this->End()); + + size_t to_move = this->End() - item; + size_t start = item - this->Begin(); + + this->Append(); + if (to_move > 0) MemMoveT(this->Begin() + start + 1, this->Begin() + start, to_move); + return this->Begin() + start; + } + /** * Search for the first occurrence of an item. * The '!=' operator of T is used for comparison. @@ -232,13 +249,24 @@ public: * @param count Number of consecutive items to remove. */ void ErasePreservingOrder(uint pos, uint count = 1) + { + ErasePreservingOrder(this->data + pos, count); + } + + /** + * Remove items from the vector while preserving the order of other items. + * @param item First item to remove. + * @param count Number of consecutive items to remove. + */ + inline void ErasePreservingOrder(T *item, uint count = 1) { if (count == 0) return; - assert(pos < this->items); - assert(pos + count <= this->items); + assert(item >= this->Begin()); + assert(item + count <= this->End()); + this->items -= count; - uint to_move = this->items - pos; - if (to_move > 0) MemMoveT(this->data + pos, this->data + pos + count, to_move); + ptrdiff_t to_move = this->End() - item; + if (to_move > 0) MemMoveT(item, item + count, to_move); } /** diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 53a85e442c..78d9b1465b 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -27,6 +27,7 @@ #include "network/network.h" #include "language.h" #include "fontcache.h" +#include "news_gui.h" #include "ai/ai_info.hpp" #include "game/game.hpp" @@ -308,6 +309,27 @@ char *CrashLog::LogGamelog(char *buffer, const char *last) const return CrashLog::gamelog_buffer + seprintf(CrashLog::gamelog_buffer, last, "\n"); } +/** + * Writes any recent news messages to the buffer. + * @param buffer The begin where to write at. + * @param last The last position in the buffer to write to. + * @return the position of the \c '\0' character after the buffer. + */ +char *CrashLog::LogRecentNews(char *buffer, const char *last) const +{ + buffer += seprintf(buffer, last, "Recent news messages:\n"); + + for (NewsItem *news = _oldest_news; news != NULL; news = news->next) { + YearMonthDay ymd; + ConvertDateToYMD(news->date, &ymd); + buffer += seprintf(buffer, last, "(%i-%02i-%02i) StringID: %u, Type: %u, Ref1: %u, %u, Ref2: %u, %u\n", + ymd.year, ymd.month + 1, ymd.day, news->string_id, news->type, + news->reftype1, news->ref1, news->reftype2, news->ref2); + } + buffer += seprintf(buffer, last, "\n"); + return buffer; +} + /** * Fill the crash log buffer with all data of a crash log. * @param buffer The begin where to write at. @@ -334,6 +356,7 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last) const buffer = this->LogLibraries(buffer, last); buffer = this->LogModules(buffer, last); buffer = this->LogGamelog(buffer, last); + buffer = this->LogRecentNews(buffer, last); buffer += seprintf(buffer, last, "*** End of OpenTTD Crash Report ***\n"); return buffer; diff --git a/src/crashlog.h b/src/crashlog.h index 6f7fb3c215..b9bc8afa24 100644 --- a/src/crashlog.h +++ b/src/crashlog.h @@ -85,6 +85,7 @@ protected: char *LogConfiguration(char *buffer, const char *last) const; char *LogLibraries(char *buffer, const char *last) const; char *LogGamelog(char *buffer, const char *last) const; + char *LogRecentNews(char *buffer, const char *list) const; public: /** Stub destructor to silence some compilers. */ diff --git a/src/debug.cpp b/src/debug.cpp index 16eecadad0..1846152254 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -100,8 +100,6 @@ char *DumpDebugFacilityNames(char *buf, char *last) return buf; } -#if !defined(NO_DEBUG_MESSAGES) - /** * Internal function for outputting the debug line. * @param dbg Debug category. @@ -168,7 +166,6 @@ void CDECL debug(const char *dbg, const char *format, ...) debug_print(dbg, buf); } -#endif /* NO_DEBUG_MESSAGES */ /** * Set debugging levels by parsing the text in \a s. diff --git a/src/debug.h b/src/debug.h index 7da72da1d3..ce454c962e 100644 --- a/src/debug.h +++ b/src/debug.h @@ -28,37 +28,33 @@ * 6.. - extremely detailed spamming */ -#ifdef NO_DEBUG_MESSAGES - #define DEBUG(name, level, ...) { } -#else /* NO_DEBUG_MESSAGES */ - /** - * Output a line of debugging information. - * @param name Category - * @param level Debugging level, higher levels means more detailed information. - */ - #define DEBUG(name, level, ...) if ((level) == 0 || _debug_ ## name ## _level >= (level)) debug(#name, __VA_ARGS__) - - extern int _debug_driver_level; - extern int _debug_grf_level; - extern int _debug_map_level; - extern int _debug_misc_level; - extern int _debug_net_level; - extern int _debug_sprite_level; - extern int _debug_oldloader_level; - extern int _debug_npf_level; - extern int _debug_yapf_level; - extern int _debug_freetype_level; - extern int _debug_script_level; - extern int _debug_sl_level; - extern int _debug_gamelog_level; - extern int _debug_desync_level; - extern int _debug_console_level; +/** + * Output a line of debugging information. + * @param name Category + * @param level Debugging level, higher levels means more detailed information. + */ +#define DEBUG(name, level, ...) if ((level) == 0 || _debug_ ## name ## _level >= (level)) debug(#name, __VA_ARGS__) + +extern int _debug_driver_level; +extern int _debug_grf_level; +extern int _debug_map_level; +extern int _debug_misc_level; +extern int _debug_net_level; +extern int _debug_sprite_level; +extern int _debug_oldloader_level; +extern int _debug_npf_level; +extern int _debug_yapf_level; +extern int _debug_freetype_level; +extern int _debug_script_level; +extern int _debug_sl_level; +extern int _debug_gamelog_level; +extern int _debug_desync_level; +extern int _debug_console_level; #ifdef RANDOM_DEBUG - extern int _debug_random_level; +extern int _debug_random_level; #endif - void CDECL debug(const char *dbg, const char *format, ...) WARN_FORMAT(2, 3); -#endif /* NO_DEBUG_MESSAGES */ +void CDECL debug(const char *dbg, const char *format, ...) WARN_FORMAT(2, 3); char *DumpDebugFacilityNames(char *buf, char *last); void SetDebugString(const char *s); diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 15291f6b63..14461d8817 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -383,12 +383,13 @@ struct DepotWindow : Window { int col = _colour_gradient[wid->colour][4]; int image_left = rtl ? r.left + this->count_width : r.left + this->header_width; int image_right = rtl ? r.right - this->header_width : r.right - this->count_width; + int first_line = w + (-this->hscroll->GetPosition()) % w; if (rtl) { - for (int x = image_right - w; x > image_left; x -= w) { + for (int x = image_right - first_line; x >= image_left; x -= w) { GfxDrawLine(x, r.top, x, r.bottom, col, 1, 3); } } else { - for (int x = image_left + w; x < image_right; x += w) { + for (int x = image_left + first_line; x <= image_right; x += w) { GfxDrawLine(x, r.top, x, r.bottom, col, 1, 3); } } @@ -734,7 +735,8 @@ struct DepotWindow : Window { } /* Always have 1 empty row, so people can change the setting of the train */ this->vscroll->SetCount(this->vehicle_list.Length() + this->wagon_list.Length() + 1); - this->hscroll->SetCount(max_width); + /* Always make it longer than the longest train, so you can attach vehicles at the end, and also see the next vertical tile separator line */ + this->hscroll->SetCount(max_width + ScaleGUITrad(2 * VEHICLEINFO_FULL_VEHICLE_WIDTH + 1)); } else { this->vscroll->SetCount(CeilDiv(this->vehicle_list.Length(), this->num_columns)); } diff --git a/src/economy.cpp b/src/economy.cpp index 0106e87e14..e97f61d6e9 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -654,12 +654,16 @@ static void CompanyCheckBankrupt(Company *c) */ static void CompaniesGenStatistics() { - Station *st; + /* Check for bankruptcy each month */ + Company *c; + FOR_ALL_COMPANIES(c) { + CompanyCheckBankrupt(c); + } Backup cur_company(_current_company, FILE_LINE); - Company *c; if (!_settings_game.economy.infrastructure_maintenance) { + Station *st; FOR_ALL_STATIONS(st) { cur_company.Change(st->owner); CommandCost cost(EXPENSES_PROPERTY, _price[PR_STATION_VALUE] >> 1); @@ -688,11 +692,6 @@ static void CompaniesGenStatistics() } cur_company.Restore(); - /* Check for bankruptcy each month */ - FOR_ALL_COMPANIES(c) { - CompanyCheckBankrupt(c); - } - /* Only run the economic statics and update company stats every 3rd month (1st of quarter). */ if (!HasBit(1 << 0 | 1 << 3 | 1 << 6 | 1 << 9, _cur_month)) return; diff --git a/src/fileio.cpp b/src/fileio.cpp index 526f5b184f..0590efd3a7 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -584,32 +584,6 @@ bool AppendPathSeparator(char *buf, const char *last) return true; } -/** - * Allocates and files a variable with the full path - * based on the given directory. - * @param dir the directory to base the path on - * @return the malloced full path - */ -char *BuildWithFullPath(const char *dir) -{ - char *dest = MallocT(MAX_PATH); - char *last = dest + MAX_PATH - 1; - strecpy(dest, dir, last); - - /* Check if absolute or relative path */ - const char *s = strchr(dest, PATHSEPCHAR); - - /* Add absolute path */ - if (s == NULL || dest != s) { - if (getcwd(dest, MAX_PATH) == NULL) *dest = '\0'; - AppendPathSeparator(dest, last); - strecat(dest, dir, last); - } - AppendPathSeparator(dest, last); - - return dest; -} - /** * Find the first directory in a tar archive. * @param tarname the name of the tar archive to look in. diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp index 6df45cf6a1..14eef9f640 100644 --- a/src/fontdetection.cpp +++ b/src/fontdetection.cpp @@ -382,38 +382,67 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) FT_Error err = FT_Err_Cannot_Open_Resource; /* Get font reference from name. */ + UInt8 file_path[PATH_MAX]; + OSStatus os_err = -1; CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, font_name, kCFStringEncodingUTF8); - ATSFontRef font = ATSFontFindFromName(name, kATSOptionFlagsDefault); - CFRelease(name); - if (font == kInvalidFont) return err; - /* Get a file system reference for the font. */ - FSRef ref; - OSStatus os_err = -1; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - os_err = ATSFontGetFileReference(font, &ref); +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + if (MacOSVersionIsAtLeast(10, 6, 0)) { + /* Simply creating the font using CTFontCreateWithNameAndSize will *always* return + * something, no matter the name. As such, we can't use it to check for existance. + * We instead query the list of all font descriptors that match the given name which + * does not do this stupid name fallback. */ + CTFontDescriptorRef name_desc = CTFontDescriptorCreateWithNameAndSize(name, 0.0); + CFSetRef mandatory_attribs = CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontNameAttribute, 1, &kCFTypeSetCallBacks); + CFArrayRef descs = CTFontDescriptorCreateMatchingFontDescriptors(name_desc, mandatory_attribs); + CFRelease(mandatory_attribs); + CFRelease(name_desc); + CFRelease(name); + + /* Loop over all matches until we can get a path for one of them. */ + for (CFIndex i = 0; descs != NULL && i < CFArrayGetCount(descs) && os_err != noErr; i++) { + CTFontRef font = CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs, i), 0.0, NULL); + CFURLRef fontURL = (CFURLRef)CTFontCopyAttribute(font, kCTFontURLAttribute); + if (CFURLGetFileSystemRepresentation(fontURL, true, file_path, lengthof(file_path))) os_err = noErr; + CFRelease(font); + CFRelease(fontURL); + } + if (descs != NULL) CFRelease(descs); } else #endif { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) + ATSFontRef font = ATSFontFindFromName(name, kATSOptionFlagsDefault); + CFRelease(name); + if (font == kInvalidFont) return err; + + /* Get a file system reference for the font. */ + FSRef ref; +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) + if (MacOSVersionIsAtLeast(10, 5, 0)) { + os_err = ATSFontGetFileReference(font, &ref); + } else +#endif + { #if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) && !defined(__LP64__) - /* This type was introduced with the 10.5 SDK. */ + /* This type was introduced with the 10.5 SDK. */ #if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) - #define ATSFSSpec FSSpec +#define ATSFSSpec FSSpec +#endif + FSSpec spec; + os_err = ATSFontGetFileSpecification(font, (ATSFSSpec *)&spec); + if (os_err == noErr) os_err = FSpMakeFSRef(&spec, &ref); #endif - FSSpec spec; - os_err = ATSFontGetFileSpecification(font, (ATSFSSpec *)&spec); - if (os_err == noErr) os_err = FSpMakeFSRef(&spec, &ref); + } + + /* Get unix path for file. */ + if (os_err == noErr) os_err = FSRefMakePath(&ref, file_path, sizeof(file_path)); #endif } if (os_err == noErr) { - /* Get unix path for file. */ - UInt8 file_path[PATH_MAX]; - if (FSRefMakePath(&ref, file_path, sizeof(file_path)) == noErr) { - DEBUG(freetype, 3, "Font path for %s: %s", font_name, file_path); - err = FT_New_Face(_library, (const char *)file_path, 0, face); - } + DEBUG(freetype, 3, "Font path for %s: %s", font_name, file_path); + err = FT_New_Face(_library, (const char *)file_path, 0, face); } return err; @@ -496,6 +525,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i } else #endif { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) /* Create a font iterator and iterate over all fonts that * are available to the application. */ ATSFontIterator itr; @@ -529,6 +559,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i } } ATSFontIteratorRelease(&itr); +#endif } if (!result) { diff --git a/src/game/game.hpp b/src/game/game.hpp index faa9650bfe..329ba5e500 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -55,7 +55,7 @@ public: /** * Resume execution of the Game Script. This function will not actually execute - * the script, but set a flag so that the script is executed my the usual + * the script, but set a flag so that the script is executed by the usual * mechanism that executes the script. */ static void Unpause(); diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index 05443327f2..9761532965 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -26,7 +26,7 @@ static bool CheckAPIVersion(const char *api_version) { return strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0; + strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0; } #if defined(WIN32) diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index c5e5c7f05a..e2b3775110 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -34,6 +34,8 @@ #include "../script/api/game/game_cargo.hpp.sq" #include "../script/api/game/game_cargolist.hpp.sq" #include "../script/api/game/game_cargomonitor.hpp.sq" +#include "../script/api/game/game_client.hpp.sq" +#include "../script/api/game/game_clientlist.hpp.sq" #include "../script/api/game/game_company.hpp.sq" #include "../script/api/game/game_companymode.hpp.sq" #include "../script/api/game/game_controller.hpp.sq" @@ -122,6 +124,9 @@ void GameInstance::RegisterAPI() SQGSCargoList_IndustryProducing_Register(this->engine); SQGSCargoList_StationAccepting_Register(this->engine); SQGSCargoMonitor_Register(this->engine); + SQGSClient_Register(this->engine); + SQGSClientList_Register(this->engine); + SQGSClientList_Company_Register(this->engine); SQGSCompany_Register(this->engine); SQGSCompanyMode_Register(this->engine); SQGSDate_Register(this->engine); diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index f5463d4015..3290aea653 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -594,12 +594,12 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str, break; } else if (c >= SCC_BLUE && c <= SCC_BLACK) { state.SetColour((TextColour)(c - SCC_BLUE)); - } else if (c == SCC_PREVIOUS_COLOUR) { // Revert to the previous colour. - state.SetPreviousColour(); - } else if (c == SCC_TINYFONT) { - state.SetFontSize(FS_SMALL); - } else if (c == SCC_BIGFONT) { - state.SetFontSize(FS_LARGE); + } else if (c == SCC_PUSH_COLOUR) { + state.PushColour(); + } else if (c == SCC_POP_COLOUR) { + state.PopColour(); + } else if (c >= SCC_FIRST_FONT && c <= SCC_LAST_FONT) { + state.SetFontSize((FontSize)(c - SCC_FIRST_FONT)); } else { /* Filter out text direction characters that shouldn't be drawn, and * will not be handled in the fallback non ICU case because they are diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 0a21d9b0ca..45d79ae474 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -18,6 +18,7 @@ #include #include +#include #ifdef WITH_ICU_LAYOUT #include "layout/ParagraphLayout.h" @@ -33,10 +34,11 @@ struct FontState { FontSize fontsize; ///< Current font size. TextColour cur_colour; ///< Current text colour. - TextColour prev_colour; ///< Text colour from before the last colour switch. - FontState() : fontsize(FS_END), cur_colour(TC_INVALID), prev_colour(TC_INVALID) {} - FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour), prev_colour(colour) {} + std::stack colour_stack; ///< Stack of colours to assist with colour switching. + + FontState() : fontsize(FS_END), cur_colour(TC_INVALID) {} + FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour) {} /** * Switch to new colour \a c. @@ -45,14 +47,25 @@ struct FontState { inline void SetColour(TextColour c) { assert(c >= TC_BLUE && c <= TC_BLACK); - this->prev_colour = this->cur_colour; this->cur_colour = c; } - /** Switch to previous colour. */ - inline void SetPreviousColour() + /** + * Switch to and pop the last saved colour on the stack. + */ + inline void PopColour() + { + if (colour_stack.empty()) return; + SetColour(colour_stack.top()); + colour_stack.pop(); + } + + /** + * Push the current colour on to the stack. + */ + inline void PushColour() { - Swap(this->cur_colour, this->prev_colour); + colour_stack.push(this->cur_colour); } /** @@ -149,7 +162,7 @@ class Layouter : public AutoDeleteSmallVectorstate_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.prev_colour != other.state_before.prev_colour) return this->state_before.prev_colour < other.state_before.prev_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; } }; diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 06534ad298..d5959f5e16 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -139,7 +139,7 @@ void CheckExternalFiles() if (used_set->GetNumInvalid() != 0) { /* Not all files were loaded successfully, see which ones */ - add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of readme.txt.\n\nThe following files are corrupted or missing:\n", used_set->name); + add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name); for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) { MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR); if (res != MD5File::CR_MATCH) add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", used_set->files[i].filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning); @@ -149,7 +149,7 @@ void CheckExternalFiles() const SoundsSet *sounds_set = BaseSounds::GetUsedSet(); if (sounds_set->GetNumInvalid() != 0) { - add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of readme.txt.\n\nThe following files are corrupted or missing:\n", sounds_set->name); + add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name); assert_compile(SoundsSet::NUM_FILES == 1); /* No need to loop each file, as long as there is only a single diff --git a/src/industry.h b/src/industry.h index 5e5d046880..9b185efc4b 100644 --- a/src/industry.h +++ b/src/industry.h @@ -66,7 +66,6 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { Date last_cargo_accepted_at; ///< Last day cargo was accepted by this industry byte selected_layout; ///< Which tile layout was used when creating the industry - byte random_triggers; ///< Triggers for the random uint16 random; ///< Random value used for randomisation of all kinds of things PersistentStorage *psa; ///< Persistent storage for NewGRF industries. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 8fea6953ae..9c98b120c6 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -491,7 +491,12 @@ static CommandCost ClearTile_Industry(TileIndex tile, DoCommandFlag flags) return CommandCost(EXPENSES_CONSTRUCTION, indspec->GetRemovalCost()); } -static void TransportIndustryGoods(TileIndex tile) +/** + * Move produced cargo from industry to nearby stations. + * @param tile Industry tile + * @return true if any cargo was moved. + */ +static bool TransportIndustryGoods(TileIndex tile) { Industry *i = Industry::GetByTile(tile); const IndustrySpec *indspec = GetIndustrySpec(i->type); @@ -516,16 +521,7 @@ static void TransportIndustryGoods(TileIndex tile) } } - if (moved_cargo && !StartStopIndustryTileAnimation(i, IAT_INDUSTRY_DISTRIBUTES_CARGO)) { - uint newgfx = GetIndustryTileSpec(GetIndustryGfx(tile))->anim_production; - - if (newgfx != INDUSTRYTILE_NOANIM) { - ResetIndustryConstructionStage(tile); - SetIndustryCompleted(tile); - SetIndustryGfx(tile, newgfx); - MarkTileDirtyByTile(tile); - } - } + return moved_cargo; } @@ -810,7 +806,17 @@ static void TileLoop_Industry(TileIndex tile) if (_game_mode == GM_EDITOR) return; - TransportIndustryGoods(tile); + if (TransportIndustryGoods(tile) && !StartStopIndustryTileAnimation(Industry::GetByTile(tile), IAT_INDUSTRY_DISTRIBUTES_CARGO)) { + uint newgfx = GetIndustryTileSpec(GetIndustryGfx(tile))->anim_production; + + if (newgfx != INDUSTRYTILE_NOANIM) { + ResetIndustryConstructionStage(tile); + SetIndustryCompleted(tile); + SetIndustryGfx(tile, newgfx); + MarkTileDirtyByTile(tile); + return; + } + } if (StartStopIndustryTileAnimation(tile, IAT_TILELOOP)) return; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 41b3c573ff..2e06983af0 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -777,37 +777,30 @@ public: y += FONT_HEIGHT_NORMAL; first = false; } + SetDParam(0, CargoSpec::Get(i->accepts_cargo[j])->name); + SetDParam(1, i->accepts_cargo[j]); + SetDParam(2, i->incoming_cargo_waiting[j]); + SetDParamStr(3, ""); + StringID str = STR_NULL; switch (cargo_suffix[j].display) { - case CSD_CARGO_AMOUNT: - if (stockpiling) { - SetDParam(0, i->accepts_cargo[j]); - SetDParam(1, i->incoming_cargo_waiting[j]); - DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT); - break; - } + case CSD_CARGO_AMOUNT_TEXT: + SetDParamStr(3, cargo_suffix[j].text); FALLTHROUGH; - - case CSD_CARGO: - SetDParam(0, CargoSpec::Get(i->accepts_cargo[j])->name); - DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO); + case CSD_CARGO_AMOUNT: + str = stockpiling ? STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT : STR_INDUSTRY_VIEW_ACCEPT_CARGO; break; case CSD_CARGO_TEXT: - SetDParam(0, CargoSpec::Get(i->accepts_cargo[j])->name); - SetDParamStr(1, cargo_suffix[j].text); - DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT); - break; - - case CSD_CARGO_AMOUNT_TEXT: - SetDParam(0, i->accepts_cargo[j]); - SetDParam(1, i->incoming_cargo_waiting[j]); - SetDParamStr(2, cargo_suffix[j].text); - DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT); + SetDParamStr(3, cargo_suffix[j].text); + FALLTHROUGH; + case CSD_CARGO: + str = STR_INDUSTRY_VIEW_ACCEPT_CARGO; break; default: NOT_REACHED(); } + DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, str); y += FONT_HEIGHT_NORMAL; } diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 02c5e92135..b7fee9ae8b 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2688,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Maatskappy-besi STR_ABOUT_OPENTTD :{WHITE}Oor OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oorspronklike kopiereg {COPYRIGHT} 1995 Chris Sawyer, Alle regte voorbehou STR_ABOUT_VERSION :{BLACK}OpenTTD uitgawe {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Die OpenTTD span +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Die OpenTTD span # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spaar Spel diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 70e4734099..b026705865 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2320,7 +2320,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الاصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة STR_ABOUT_VERSION :{BLACK}النسخة المفتوحة رقم {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2017 فريق النسخة المفتوحة +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2018 فريق النسخة المفتوحة # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}حفظ اللعبة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index f761d45931..6d80461b68 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2592,7 +2592,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Konpainia jabe STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ri buruz STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD bertsioa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gordetako jokoa diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index fc469fe53e..71efd347ab 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -598,7 +598,7 @@ STR_SORT_BY_TYPE :Тып STR_SORT_BY_TRANSPORTED :Вывезена STR_SORT_BY_NUMBER :Нумар STR_SORT_BY_PROFIT_LAST_YEAR :Прыбытак летась -STR_SORT_BY_PROFIT_THIS_YEAR :Прыбытак у бягучым годзе +STR_SORT_BY_PROFIT_THIS_YEAR :Прыбытак сёлета STR_SORT_BY_AGE :Узрост STR_SORT_BY_RELIABILITY :Надзейнасьць STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Умяшчальнасьць грузу @@ -1685,6 +1685,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :выключа STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Скролінг па кліку левай кнопкай мышы: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Уключыць пракручваньне мапы цягненьнем з націснутай левай кнопкай мышы. Гэта асабліва зручна пры выкарыстоўваньні сэнсарнага экрана. +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Зачыняць вокны пстрычкай ПКМ: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Зачыняць акно пстрычкай правай кнопкай мышы ў яго межах. Пры гэтым адключаецца з'яўленне падказак па правай кнопцы. STR_CONFIG_SETTING_AUTOSAVE :Аўтазахаваньні: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Азначце інтэрвал паміж аўтаматычнымі захаваньнямі @@ -2074,6 +2076,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Прав STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Зьмяніць наладкі ШІ ды гульнёвага скрыпту STR_INTRO_TOOLTIP_QUIT :{BLACK}Выйсьці з OpenTTD +STR_INTRO_BASESET :{BLACK}У абраным наборы базавай графікі адсутнічае {NUM} спрайт{P "" а аў}. Калі ласка, абнавіце набор графікі. STR_INTRO_TRANSLATION :{BLACK}На гэту мову не перакладзен{P 0 ы ы а} {NUM} рад{P ок кі коў}. Вы можаце дапамагчы праекту, калi зарэґіструецеся як перакладчык. Інструкцыі ў файле readme.txt. # Quit window @@ -2922,6 +2925,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Зона STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Прымае: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Тып чыгуначнага палатна: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Макс. хуткасьць чыгункi: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Макс. хуткасьць аўтамабіляў: {LTBLUE}{VELOCITY} @@ -2934,29 +2938,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Палi STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Засьнежаная зямля STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустэльня -STR_LAI_RAIL_DESCRIPTION_TRACK :Чыгунка рэйкi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Чыгунка рэйкi са звычайнымі сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Чыгунка рэйкi з уваходнымі прэсыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Чыгунка рэйкi з выхаднымi сыґналамi (прэсыґналамі) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Чыгунка рэйкi з камбiнаванымi сыґналамi (прэсыґналамі) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Чыгунка рэйкi з маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Чыгунка рэйкi з аднабаковымi маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Чыгунка рэйкi са звычайнымi й уваходнымі прэсыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Чыгунка рэйкi са звычайнымi й выхаднымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Чыгунка рэйкi са звычайнымi й камбiнаванымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Чыгунка рэйкi са звычайнымi й маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Чыгунка рэйкi са звычайнымi й аднабаковымi маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Чыгунка рэйкi з уваходнымi (прэcыгналамi) ды выхаднымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Чыгунка рэйкi з уваходнымi (прэсыґналамi) ды камбiнаванымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Чыгунка рэйкi з уваходнымi (прэсыґналамi) ды маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Чыгунка рэйкi з уваходнымi (прэсыґналамi) ды аднабаковымi маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Чыгунка рэйкi з выхаднымi й камбінаванымі прэсыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Чыгунка рэйкі з выхаднымі (прэсыґналамі) ды маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Чыгунка рэйкі з выхаднымі (прэсыґналамі) ды аднабаковымі маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Чыгунка рэйкі з камбінаванымі (прэсыґналамі) ды маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Чыгунка рэйкі з камбінаванымі (прэсыґналамі) ды аднабаковымі маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Чыгунка рэйкі з маршрутнымі (PMS) ды аднабаковымі маршрутнымі сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Чыгунка чыгуначнае дэпо +STR_LAI_RAIL_DESCRIPTION_TRACK :Чыгуначны пуць +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Чыгуначны пуць з сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Чыгуначны пуць з уваходнымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Чыгуначны пуць з выходнымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Чыгуначны пуць з камбінаванымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Чыгуначны пуць з маршрутнымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Чыгуначны пуць з аднабаковымі маршрутнымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Чыгуначны пуць са звычайным і ўваходным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Чыгуначны пуць са звычайным і выходным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Чыгуначны пуць са звычайнымі й камбінаванымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Чыгуначны пуць са звычайнымі і маршрутнымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Чыгуначны пуць са звычайным і аднабаковым маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Чыгуначны пуць з уваходным і выходным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Чыгуначны пуць з уваходным і камбінаваным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Чыгуначны пуць з выходным і маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Чыгуначны пуць з уваходным і аднабаковым маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Чыгуначны пуць з выходнымі й камбінаванымі сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Чыгуначны пуць з выходным і маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Чыгуначны пуць з выходным і аднабаковым маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Чыгуначны пуць з камбінаваным і маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Чыгуначны пуць з камбінаваным і аднабаковым маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Чыгуначны пуць з маршрутным і аднабаковым маршрутным сігналамі +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Чыгуначнае дэпо STR_LAI_ROAD_DESCRIPTION_ROAD :Дарога STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Дарога з вулічным асьвятленьнем @@ -3020,7 +3024,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Зямля на STR_ABOUT_OPENTTD :{WHITE}Аб OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Арыґінальныя аўтарскія правы {COPYRIGHT} 1995 Chris Sawyer. Усе правы абароненыя. STR_ABOUT_VERSION :{BLACK}OpenTTD вэрсія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2017 Каманда распрацоўнікаў OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2018 Каманда распрацоўнікаў OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Захаваць гульню @@ -3625,6 +3629,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Патр STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Патрабуецца: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакае{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING} @@ -3645,7 +3652,7 @@ STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Аўта STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Караблi: клікніце для атрыманьня даведкі STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Самалёты: клікніце для атрыманьня даведкі -STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Прыбытак у гэтым годзе: {CURRENCY_LONG} (летась: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Прыбытак сёлета: {CURRENCY_LONG} (летась: {CURRENCY_LONG}) STR_VEHICLE_LIST_AVAILABLE_TRAINS :Даступныя цягнiкi STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Даступныя аўтамабiлi @@ -3693,6 +3700,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Выдаліц STR_GROUP_RENAME_CAPTION :{BLACK}Перайменаваць групу +STR_GROUP_PROFIT_THIS_YEAR :Прыбытак сёлета: +STR_GROUP_PROFIT_LAST_YEAR :Прыбытак летась: +STR_GROUP_OCCUPANCY :Сярэдняя загрузка ТС: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Новы цягнік @@ -3725,6 +3736,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Усе тыпы STR_PURCHASE_INFO_ALL_BUT :Усё, акрамя {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. цягавае намаганьне: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Далёкасьць: {GOLD}{COMMA} клет{P ка кi ак} +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тып паветр. судна: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Сьпіс лакаматываў і вагонаў - пстрыкніце для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа ТС. STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Сьпіс аўтатранспарту - пстрыкніце для атрыманьня інфармацыі. Ctrl+пстрычка схавае/пакажа выбраны аўтамабіль. @@ -3871,6 +3883,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE.acc :магніта STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Кошт: {CURRENCY_LONG} Вага: {WEIGHT_SHORT}{}Хуткасьць: {VELOCITY} Магутнасьць: {POWER}{}Кошт абслуг.: {CURRENCY_LONG}/год{}Ёмістасьць: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Кошт: {CURRENCY_LONG} Вага: {WEIGHT_SHORT}{}Хуткасьць: {VELOCITY} Магутнасьць: {POWER} Макс. ЦН: {6:FORCE}{}Кошт абслуг.: {4:CURRENCY_LONG}/год{}Ёмістасьць: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Кошт: {CURRENCY_LONG} Макс. хуткасьць: {VELOCITY}{}Ёмістасьць: {CARGO_LONG}{}Кошт абслуг.: {CURRENCY_LONG}/год +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Кошт: {CURRENCY_LONG} Макс. хуткасць: {VELOCITY}{}Тып: {STRING}{}Ёмістасць: {CARGO_LONG}, {CARGO_LONG}{}Кошт абслуг.: {CURRENCY_LONG}/год +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Кошт: {CURRENCY_LONG} Макс. хуткасць: {VELOCITY}{}Тып: {STRING}{}Ёмістасць: {CARGO_LONG}{}Кошт абслуг.: {CURRENCY_LONG}/год +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Кошт: {CURRENCY_LONG} Макс. хуткасць: {VELOCITY}{}Тып: {STRING} Далёкасць: {COMMA} клетак{}Ёмістасць: {CARGO_LONG}, {CARGO_LONG}{}Кошт абслуг.: {CURRENCY_LONG}/год +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Кошт: {CURRENCY_LONG} Макс. хуткасць: {VELOCITY}{}Тып: {STRING} Далёкасць: {COMMA} клетак{}Ёмістасць: {CARGO_LONG}{}Кошт абслуг.: {CURRENCY_LONG}/год # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Замена {STRING.gen} — {STRING} @@ -3908,6 +3924,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Спын STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Пераключэньне паміж вокнамі замены лякаматываў і ваґонаў STR_REPLACE_ENGINES :Лякаматывы STR_REPLACE_WAGONS :Ваґоны +STR_REPLACE_ALL_RAILTYPE :Увесь чыгуначны транспарт STR_REPLACE_HELP_RAILTYPE :{BLACK}Выберыце тып чыгуначнага транспарту, цягнікі якога жадаеце замяніць STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}На які транспарт адбываецца замена @@ -4000,10 +4017,12 @@ STR_VEHICLE_INFO_AGE :{COMMA} г{P о STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} г{P од ады адоў} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс. хуткасьць: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. хуткасць: {LTBLUE}{VELOCITY} {BLACK}Тып паветр. судна: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Макс. хуткасць: {LTBLUE}{VELOCITY} {BLACK}Тып: {LTBLUE}{STRING} {BLACK}Далёкасць: {LTBLUE}{COMMA} клетак STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Магутнасьць: {LTBLUE}{POWER}{BLACK} Макс. хуткасьць: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Магутнасьць: {LTBLUE}{POWER}{BLACK} Макс. хуткасьць: {LTBLUE}{VELOCITY} {BLACK}Макс. ЦН: {LTBLUE}{FORCE} -STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прыбытак ў гэтым годзе: {LTBLUE}{CURRENCY_LONG} (летась: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прыбытак сёлета: {LTBLUE}{CURRENCY_LONG} (летась: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надзейнасьць: {LTBLUE}{COMMA}% {BLACK}Паломак з апошняга агляду: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Пабудаваны ў: {LTBLUE}{NUM} г.{BLACK} Кошт: {LTBLUE}{CURRENCY_LONG} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index f5ab33faf5..859a6c1afa 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1286,8 +1286,8 @@ STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Aguardar {COMMA STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito STR_CONFIG_SETTING_POPULATION_IN_LABEL :Exibir população da cidade na janela da cidade: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Exibe a população das cidades nos nomes, no mapa -STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grossura das linhas nos gráficos: {STRING} -STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grossura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir. +STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das linhas nos gráficos: {STRING} +STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir. STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :O terreno define a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das cidades. NewGRF's e Scripts de Jogo permitem um controle mais fino @@ -1373,6 +1373,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Desligado STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Mover a tela com o botão esquerdo: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Ativa rolamento do mapa por clique e arraste com o botão esquerdo. Especialmente útil ao usar um touchscreen para o rolamento +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Fechar janela com botão direito do mouse: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fecha uma janela ao clicar com o botão direito do mouse nela. Desativa o tooltip com o botão direito! STR_CONFIG_SETTING_AUTOSAVE :Auto-salvar: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Selecione intervalo entre jogos salvos automaticamente @@ -1536,12 +1538,12 @@ STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Exibe uma janel STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de sinal a ser construído: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo padrão de sinal a se utilizar STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normal -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Avançado -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Avançado de mão única +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :De trajeto +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :De trajeto de mão única STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Tipo de sinal a ser exibido: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Seleciona quais tipos de sinal a exibir, quando Ctrl+Clicar em Construir Sinais com a ferramenta Sinal STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Normal apenas -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Avançados apenas +STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :De trajeto apenas STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos STR_CONFIG_SETTING_TOWN_LAYOUT :Disposição de ruas para novas cidades: {STRING} @@ -1762,6 +1764,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Checar p STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Exibe configurações de IA e script do jogo STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair do 'OpenTTD' +STR_INTRO_BASESET :{BLACK}Faltam {NUM} "sprite{P "" s}" no conjunto de gráficos base selecionado. Por favor verifique se há atualizações para ele. STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} string{P "" s} nessa tradução. Por favor faça o OpenTTD melhor se inscrevendo como tradutor. Leia Readme.txt para mais detalhes. # Quit window @@ -2358,14 +2361,14 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinais p STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Verde enquanto haja um ou mais sinais de saída verdes na atual seção dos trilhos. Do contrário, mostra vermelho STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de saída (semáforo){}Funciona como um sinal normal, porém é necessário para o funcionamento correto do sistema de pré-sinais combo ou de entrada STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal combo (semáforo){}O sinal combo funciona tanto como um sinal de entrada quanto de saída. Permite construir várias ramificações -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal avançado(Semáforo){}Um sinal avançado permite mais de um trem em um bloco de ferrovia, Se o trem no bloco puder reservar um local seguro para parar, o sinal avançado já permite a passada do próximo -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal avançado de mão única(Semáforo){}Um sinal avançado permite mais de um trem em um bloco de ferrovia, Se o trem no bloco puder reservar um local seguro para parar, o sinal avançado já permite a passada do próximo, porém não permite a passagem na via contrária +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de trajeto(Semáforo){}Um sinal de trajeto permite mais de um trem em um bloco de ferrovia, Se o trem no bloco puder reservar um local seguro para parar, o sinal de trajeto já permite a passada do próximo +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de trajeto de mão única(Semáforo){}Um sinal de trajeto permite mais de um trem em um bloco de ferrovia, Se o trem no bloco puder reservar um local seguro para parar, o sinal de trajeto já permite a passada do próximo, porém não permite a passagem na via contrária STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal Padrão (elétrico){}Sinais são necessários para impedir que trens batam em redes de ferrovias com mais de uma máquina STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (elétrico){}Verde enquanto haja um ou mais sinais de saída verdes na atual seção dos trilhos. Do contrário, mostra vermelho STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de saída(elétrico){}Funciona como um sinal normal, porém é necessário para o funcionamento correto do sistema de pré-sinais combo ou de entrada STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combo (elétrico){}O sinal combo funciona tanto como um sinal de entrada quanto de saída. Permite construir várias ramificações de pré-sinais -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de trajeto(Elétrico){}Um sinal de trajeto permite mais de um trem entrar em um bloco de sinal ao mesmo tempo, se o trem puder reservar um trajeto para um ponto seguro de parada. Sinais de trajeto padrões podem ser passados pelo lado de trás -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal avançado de mão única(Elétrico){}Um sinal avançado permite mais de um trem em um bloco de ferrovia, Se o trem no bloco puder reservar um local seguro para parar, o sinal avançado já permite a passada do próximo, porém não permite a passagem na via contrária +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de trajeto (Elétrico){}Um sinal de trajeto permite mais de um trem entrar em um bloco de sinal ao mesmo tempo, se o trem puder reservar um trajeto para um ponto seguro de parada. Sinais de trajeto padrões podem ser passados pelo lado de trás +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal avançado de mão única(Elétrico){}Um sinal de trajeto permite mais de um trem em um bloco de ferrovia, Se o trem no bloco puder reservar um local seguro para parar, o sinal de trajeto já permite a passada do próximo, porém não permite a passagem na via contrária STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Converter sinal{}Quando selecionado, clicar num sinal existente converte-o para o tipo selecionado e suas variantes. Ctrl+Clique muda a variante atual. Shift+Clique mostra o preço estimado da conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densidade dos sinais ao clicar e arrastar STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir a densidade dos sinais @@ -2590,6 +2593,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome da STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceita: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de ferrovia: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Velocidade limite do trilho: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da rua: {LTBLUE}{VELOCITY} @@ -2602,29 +2606,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto -STR_LAI_RAIL_DESCRIPTION_TRACK :Trilho de Ferrovia -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Trilho de Ferrovia com sinais normais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Trilho de Ferrovia com pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Trilho de Ferrovia com sinais de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Trilho de Ferrovia com sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Trilho de Ferrovia com sinais avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Trilhos de Ferrovia com sinais avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Trilho de Ferrovia com sinais normais e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Trilho de Ferrovia com sinais normais e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Trilho de Ferrovia com sinais normais e sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Trilho de Ferrovia com sinais normais e avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Trilho de Ferrovia com sinais normais e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Trilho de Ferrovia com pré-sinais e de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Trilho de Ferrovia com pré-sinais e sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Trilho de Ferrovia com pré-sinais e sinais avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Trilho de Ferrovia com pré-sinais e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Trilho de Ferrovia com sinais de saída e sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Trilho de Ferrovia com sinais de saída e avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Trilho de Ferrovia com sinais de saída e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Trilho de Ferrovia com sinais-combo e avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Trilho de Ferrovia com sinais-combo e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Trilho de Ferrovia com sinais avançados e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito de Ferrovia +STR_LAI_RAIL_DESCRIPTION_TRACK :Trilho de ferrovia +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Trilho de ferrovia com sinais normais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Trilho de ferrovia com pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Trilho de ferrovia com sinais de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Trilho de ferrovia com sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Trilho de ferrovia com sinais de trajeto +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Trilhos de Ferrovia com sinais de trajeto de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Trilho de ferrovia com sinais normais e pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Trilho de ferrovia com sinais normais e pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Trilho de ferrovia com sinais normais e sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Trilho de ferrovia com sinais normais e de trajeto +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Trilho de ferrovia com sinais normais e de trajeto de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Trilho de ferrovia com pré-sinais e de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Trilho de ferrovia com pré-sinais e sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Trilho de ferrovia com pré-sinais e sinais de trajeto +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Trilho de ferrovia com pré-sinais de trajeto e de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Trilho de ferrovia com sinais de saída e sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Trilho de ferrovia com sinais de saída e de trajeto +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Trilho de ferrovia com sinais de saída de trajeto e de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Trilho de ferrovia com sinais-combo e de trajeto +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Trilho de ferrovia com sinais-combo de trajeto e de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Trilho de ferrovia com sinais de trajeto normais e de mão única +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito de ferrovia STR_LAI_ROAD_DESCRIPTION_ROAD :Rodovia STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Rodovia iluminada @@ -2688,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :O terreno é pr STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 A equipe do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipe do OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salvar Jogo @@ -3293,6 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requer: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} @@ -3361,6 +3368,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos o STR_GROUP_RENAME_CAPTION :{BLACK}Renomear um grupo +STR_GROUP_PROFIT_THIS_YEAR :Lucros deste ano: +STR_GROUP_PROFIT_LAST_YEAR :Lucros do ano passado: +STR_GROUP_OCCUPANCY :Uso atual: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Novos Veículos Ferroviários @@ -3393,6 +3404,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Todos as cargas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Tração máx : {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de trens - clique num trem para informações. Cltr+Clique para alterar a visibilidade do tipo de trem STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de automóveis - clique num automóvel para informações. Cltr+Clique para alterar a visibilidade do tipo de automóvel @@ -3527,6 +3539,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva magl STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Preço: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade: {VELOCITY} Potência: {POWER}{}Custo de manutenção: {CURRENCY_LONG}/ano{}Capacidade: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Preço: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Vel.: {VELOCITY} Potência: {POWER} Tração Máx: {6:FORCE}{}Custo de manutenção: {4:CURRENCY_LONG}/yr{}Capacidade: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Preço: {CURRENCY_LONG} Vel. Max.: {VELOCITY}{}Capacidade: {CARGO_LONG}{}Custo de manuteção: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel Máx.: {VELOCITY}{}Tipo de aeronave: {STRING}{}Capacidade: {CARGO_LONG}, {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel Máx.: {VELOCITY}{}Tipo de aeronave: {STRING}{}Capacidade: {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel. Máx.: {VELOCITY}{}Tipo de aeronave: {STRING} Alcance: {COMMA} quadrados{}Capacidade: {CARGO_LONG}, {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel. Máx.: {VELOCITY}{}Tipo de aeronave: {STRING} Alcance: {COMMA} quadrados{}Capacidade: {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Substituir {STRING} - {STRING} @@ -3556,6 +3572,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pression STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Troca entre substituir máquinas e substituir vagões STR_REPLACE_ENGINES :Motores STR_REPLACE_WAGONS :Vagões +STR_REPLACE_ALL_RAILTYPE :Todos os veículos ferroviários STR_REPLACE_HELP_RAILTYPE :{BLACK}Escolha o tipo de ferrovia para o qual deseja efetuar a substituição dos motores STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Exibe o tipo de motor que substituirá o que está selecionado à esquerda, se algum @@ -3648,6 +3665,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} ano{P " STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ano{P "" s} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade Max: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Vel. Máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Vel. Máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Alcance: {LTBLUE}{COMMA} quadrados STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Força: {LTBLUE}{POWER}{BLACK} Velocidade Max: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Força: {LTBLUE}{POWER}{BLACK} Velocidade Max: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE} @@ -3778,7 +3797,7 @@ STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Percentual carr STR_ORDER_CONDITIONAL_RELIABILITY :Confiabilidade STR_ORDER_CONDITIONAL_MAX_SPEED :Velocidade máxima STR_ORDER_CONDITIONAL_AGE :Idade (anos) -STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessia de manutenção +STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita de manutenção STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida restante (anos) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 81ae04a8ac..40394260d4 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -473,9 +473,9 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Напълно увеличен в кадъра. STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Увеличение по подразбиране STR_ABOUT_MENU_GIANT_SCREENSHOT :Огромен Screenshot -STR_ABOUT_MENU_ABOUT_OPENTTD :За 'OpenTTD' +STR_ABOUT_MENU_ABOUT_OPENTTD :Относно 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Подравнител на спрайтове -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Превключва слепване на прозците +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Активиране слепване на прозорците STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Превключва оцветяване на замърсените блокове ############ range ends here @@ -755,6 +755,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Пока STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Показване/скриване на височинна карта STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Скриване на собствеността на компанията от картата STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Показване на цялата собственост на компанията на картата +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Покажи всички товари на картата # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Покажи последното съобщение или отчет на новините @@ -1282,6 +1283,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Показва STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелина на линиите в графиките: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Дебелина на линиите в графиките. Тънките линии са по-лесни за разчитане, но по-дебелите се забелязват и разграничават по-лесно. +STR_CONFIG_SETTING_LANDSCAPE :Пейзаж: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR :Генератор на земя: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :оригинален STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :тера-генезис @@ -1293,6 +1295,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :много по STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :полегат STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :стръмен STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :много стръмен +STR_CONFIG_SETTING_RIVER_AMOUNT :Количество на реките: {STRING} STR_CONFIG_SETTING_TREE_PLACER :Алгоритъм за поставяне на дървета: {STRING} STR_CONFIG_SETTING_TREE_PLACER_NONE :без дървета STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :оригинален @@ -1584,6 +1587,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множител за големината на града: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на мегаполисите в сравнение с градовете в началото на играта +STR_CONFIG_SETTING_DEMAND_SIZE :Количество на връщания товар при симетричнен режим: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Единици за скорост: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Всеки път при показване на скорости, да бъдат изписвани в избраните мерни единици @@ -1624,9 +1628,11 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Позициониране STR_CONFIG_SETTING_SOUND :{ORANGE}Звукови ефекти STR_CONFIG_SETTING_INTERFACE :{ORANGE}Интерфейс +STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Основни STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Строене STR_CONFIG_SETTING_VEHICLES :{ORANGE}Автомобили STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Маршрутизация +STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Права STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Градове STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Индустрии STR_CONFIG_SETTING_AI :{ORANGE}Съперници @@ -2530,6 +2536,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Приет товар: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Ограничение на скоростта на линията: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Макс. скорост на пътя: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Скали @@ -2626,7 +2633,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земя, пр STR_ABOUT_OPENTTD :{WHITE}Относно OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторски права {COPYRIGHT} 1995 Крис Сойер (Chris Sawyer), Всички права са запазени STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Запази играта @@ -3010,6 +3017,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натисни върху услугата за да се фокусира върху индустрията/града. Ctrl отваря нов изглед към индустрията/града # Story book window +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Прескочи до определена страница чрез избирането й в дроп-даун листата. STR_STORY_BOOK_NEXT_PAGE :{BLACK}Следваща STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Отиди на следващата страница STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Невалидна цел @@ -3214,6 +3222,7 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Нужд STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакащ{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING} @@ -3274,12 +3283,16 @@ STR_GROUP_DELETE_TOOLTIP :{BLACK}Изтр STR_GROUP_RENAME_TOOLTIP :{BLACK}Преименувай избраната група STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Щракни да защитиш тази група от глобална автоматична замяна +STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Изтрий група +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Сигурен ли си, че искаш да изтриеш тази група и нейните производни? STR_GROUP_ADD_SHARED_VEHICLE :Добави споделени превозни средства STR_GROUP_REMOVE_ALL_VEHICLES :Премахни всички превозни средсва STR_GROUP_RENAME_CAPTION :{BLACK}Преименовай група +STR_GROUP_OCCUPANCY :Използва се за: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Нови Машини за Двурелсов път @@ -3446,6 +3459,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :локомот STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Цена: {CURRENCY_LONG} Тегло: {WEIGHT_SHORT}{}Скорост: {VELOCITY} Мощност: {POWER}{}Разход: {CURRENCY_LONG}/г.{}Капацитет: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Цена: {CURRENCY_LONG} Тегло: {WEIGHT_SHORT}{}Скорост: {VELOCITY} Мощност: {POWER} Макс. Т.С.: {6:FORCE}{}Експлоатационни разходи: {4:CURRENCY_LONG}/год.{}Вместимост: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Цена: {CURRENCY_LONG} Макс. Скорост: {VELOCITY}{}Вместимост: {CARGO_LONG}{}Експлоатационни разходи: {CURRENCY_LONG}/год. +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Цена: {CURRENCY_LONG} Макс.скорост: {VELOCITY}{}Тип самолет: {STRING}{}Вместимост: {CARGO_LONG}{}Оперативни разходи: {CURRENCY_LONG}/yr # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Замяна {STRING} - {STRING} @@ -3475,6 +3489,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Нати STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Превключване между замяна на локомотиви и вагони STR_REPLACE_ENGINES :Двигатели STR_REPLACE_WAGONS :Вагони +STR_REPLACE_ALL_RAILTYPE :Всички ЖП композиции STR_REPLACE_HELP_RAILTYPE :{BLACK}Избор на ЖП линия с която да се заменят локомотивите STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Показване с кой двигател се заменя ляво избрания, ако има @@ -4268,6 +4283,7 @@ STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... ви STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Групата неможе да бъде създадена... STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Тази група неможе да бъде изтрита... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Групата неможе да бъде преименована... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Не може да избере горна група.... STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Всички превозни средства немогат да бъдат премахнати от тази група... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Превозното средство неможе да се добави към тази група... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Поделени превозни средсва немогат да бъдат добавени към групата... diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 3cbde7515f..28814005c8 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :terreny propiet STR_ABOUT_OPENTTD :{WHITE}Quant a l'OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer. Tots els drets reservats. STR_ABOUT_VERSION :{BLACK}Versió {REV} de l'OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 L'equip de l'OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'equip de l'OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Desa la Partida @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessit STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}esperant -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 13e90746c5..e7694f1bde 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -572,7 +572,7 @@ STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zumirano do kra STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standardno zumiranje slike zaslona STR_ABOUT_MENU_GIANT_SCREENSHOT :Slika zaslona cijele karte STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD' -STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnjanje sprite-a +STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnanje spritea STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Odaberi granične okvire STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Mijenjaj boju blatnih blokova ############ range ends here @@ -778,7 +778,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikni n STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikni na glazbenu traku kako bi ju uklonio iz trenutnog programa (samo Proizvoljno 1 ili Proizvoljno 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najbolje tvrtke koje su dosigle razinu {NUM} +STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najbolje tvrtke do {NUM}. godine STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tablica tvrtki u {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Privrednik @@ -962,13 +962,13 @@ STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} od sada prihvaća {STRING.aku} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} od sada prihvaća {STRING.aku} i {STRING.aku} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Istekla je ponuda subvencije:{}{}prijevoz {STRING.gen} od {STRING} do {STRING} više neće biti subvencioniran +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Istekla je ponuda za poticaje:{}{}prijevoz {STRING.gen} od {STRING} do {STRING} više neće biti potican STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvencija je povučena:{}{}prijevoz {STRING.gen} od {STRING} do {STRING} više nije subvencioniran -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ponuđena je subvencija:{}{}Prvi koji preveze {STRING.aku} od {STRING} do {STRING} primat će jednogodišnju subvenciju od lokalne samouprave! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ponuđen je poticaj:{}{}Prvi koji preveze {STRING.aku} od {STRING} do {STRING} primat će jednogodišnji poticaj lokalne samouprave! STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvencija je dodijeljena tvrtki {STRING}!{}{}Prijevoz {STRING.gen} od postaje {STRING} do postaje {STRING} plaćat će se 50% više sljedećih godinu dana! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvencija je dodijeljena tvrtki {STRING}!{}{}Prijevoz {STRING.gen} od postaje {STRING} do postaje {STRING} plaćat će se dvostruko sljedećih godinu dana! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvencija je dodijeljena tvrtki {STRING}!{}{}Prijevoz {STRING.gen} od postaje {STRING} do postaje {STRING} plaćat će se trostruko sljedećih godinu dana! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvencija je dodijeljena tvrtki {STRING}!{}{}Prijevoz {STRING.gen} od postaje {STRING} do postaje {STRING} plaćat će se četverostruko sljedećih godinu dana! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Poticaj je dodijeljen tvrtki {STRING}!{}{}Prijevoz {STRING.gen} od postaje {STRING} do postaje {STRING} plaćat će se trostruko sljedećih godinu dana! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Poticaj je dodijeljen tvrtki {STRING}!{}{}Prijevoz {STRING.gen} od postaje {STRING} do postaje {STRING} plaćat će se četverostruko sljedećih godinu dana! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Grad {TOWN} zahvatio je prometni kaos!{}{}Program rekonstrukcije cesta koji financira tvrtka {STRING} sljedećih će 6 mjeseci zadavati glavobolje motoriziranima! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopol transporta! @@ -1245,7 +1245,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Brzina gradnje: STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Limitiraj količinu građevinskih akcija za UI-je STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Kvarovi vozila: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Kontroliraj kako često se mogu pokvariti loše servisirana vozila -STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Množitelj za subvencije: {STRING} +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Množitelj za poticaje: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Postavi koliko se plaća za subvencionirane veze STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Građevinski troškovi: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Postavi razinu građevinskih troškova i troškova kupnje @@ -1385,9 +1385,9 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Debljina linija STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Debljina linije u grafikonima. Tanja linija je preciznija za čitanje, deblja linija je lakša za vidjeti i boje su lakše za razabrati STR_CONFIG_SETTING_LANDSCAPE :Krajolik: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Tereni definiraju osnovne scenarije za igru sa različitim teretima i preduvjetima za rast gradova. NewGRF-ovi i Skripte Igre dozvoljavaju detaljnije kontrole i postavke. +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Tereni određuju osnovne scenarije za igru s različitim teretima i preduvjetima za rast gradova. NewGRF-ovi i Skripte Igre omogućavaju detaljnije kontrole i postavke. STR_CONFIG_SETTING_LAND_GENERATOR :Generator zemlje: {STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Originalni generator ovisi o baznom grafičkom setu i stvara fiksne oblike u terenu. TerraGenesis je generator baziran na Perlinu sa detaljnijim kontrolama i postavkama. +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Izvorni generator ovisi o osnovnom grafičkom setu i stvara fiksne oblike terena. TerraGenesis je generator temeljen na Perlinovom šumu s detaljnijim kontrolama i postavkama. STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Izvorni STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Vrsta terena: {STRING} @@ -1580,17 +1580,17 @@ STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Uključivanjem STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Dolazak prvog vozila na postaju igrača: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Prikaži novine kada prvo vozilo dođe na stanicu novog igrača STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Dolazak prvog vozila na postaju suparnika: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Prikaži novine kada prvo vozilo dođe na suparnikovu stanicu +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Prikaži novosti kada prvo vozilo dođe na protivničku postaju STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Nesreće / katastrofe: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Prikaži novine kod nesreća ili katastrofa STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Podaci vezani za tvrtku: {STRING} -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Prikaži novine kada se pojavi nova tvrtka ili kada tvrtke riskiraju bankrot +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Prikaži novosti kada se pojavi nova tvrtka ili kada tvrtke riskiraju bankrot STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Otvaranje industrije: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Prikaži novine kada se nove industrije otvaraju STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE :Zatvaranje industrije: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Prikaži novine kada se industrije zatvaraju -STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Promjene u gospodarstvu: {STRING} -STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Prikaži novine vezano za globalne promjene u ekonomiji +STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Prikaži novosti kada se industrije zatvaraju +STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Gospodarske promjene: {STRING} +STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Prikaži novosti vezane za globalne gospodarske promjene STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Promjene u proizvodnji industrija koje opslužuje tvrtka: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Prikaži novine kod promjene proizvodnih razina industrija koje tvrtka opslužuje STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Promjene u proizvodnji industrija koje opslužuju suparnici: {STRING} @@ -1602,11 +1602,11 @@ STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Prikaži poruke STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nova vozila: {STRING} STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Prikaži novine kada neki novi tip vozila postane dostupan STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Promjene u prihvaćanju tereta: {STRING} -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Prikaži poruke o stanicama koje mijenjaju prihvaćanje nekih tereta +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Prikaži poruke o postajama koje mijenjaju prihvaćanje nekih tereta STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subvencije: {STRING} -STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Prikaži novine vezano za događaje o subvencijama +STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Prikaži novosti vezane za poticaje STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Opće informacije: {STRING} -STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Prikaži novine vezano za opće događaje kao za kupnju ekskluzivnih prava ili financiranje rekonstrukcije cesta +STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Prikaži novosti vezane za opće događaje kao što su kupnja ekskluzivnih prava ili financiranje rekonstrukcije cesta STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Isključeno STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Sažetak @@ -1615,7 +1615,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Sve STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Vijesti u boji pojavljuju se: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Godina u kojoj će se novine početi izdavati u boji. Prije ove godine, koriste se crno/bijele novine STR_CONFIG_SETTING_STARTING_YEAR :Početna godina: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi tečnu ekonomiju (više manjih izazova): {STRING} +STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabilno gospodarstvo (više manjih izazova): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kada je uključeno, promjene u industrijskoj proizvodnji su češće ali u manjim rasponima. Ova postavka obično nema efekta ukoliko su industrije postavljene iz nekog NewGRF-a STR_CONFIG_SETTING_ALLOW_SHARES :Dopusti kupovanje udjela u drugim tvrtkama: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kada je uključeno, dopušta se kupnja i prodaja dionica tvrtki. Dionice će postati dostupne samo za tvrtke određene starosti @@ -1651,11 +1651,11 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Nasumično STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Gradovi mogu graditi ceste: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Dopusti gradovima građenje cesta u svrhu rasta. Isključi za sprečavanje gradskih vlasti u samostalnoj gradnji cesta STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Gradovi smiju graditi pružne prijelaze: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Uključivanje ove postavke dozvoljava se gradovima da grade cestovno-pružne prijelaze +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Uključivanje ove postavke dopušta gradovima izgradnju cestovno-pružnih prijelaza STR_CONFIG_SETTING_NOISE_LEVEL :Omogući određivanje razine buke za zračne luke od strane gradova: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Kada je ova postavka isključena, mogu postojati dvije zračne luke u svakom gradu. Kada je ova postavka uključena, broj zračnih luka u nekom gradu je ograničen količinom dopuštene buke u gradu, koja ovisi o broju stanovnika i udaljenosti i veličini zračne luke STR_CONFIG_SETTING_TOWN_FOUNDING :Osnivanje gradova tijekom igre: {STRING} -STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Uklučivanje ove postavke dozvoljava igračima osnivanje novih gradova tijekom igre +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Uklučivanje ove postavke dopušta igračima osnivanje novih gradova tijekom igre STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Zabranjeno STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dopušteno STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dopušteno, proizvoljan raspored grada @@ -1882,8 +1882,8 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Napusti igru -STR_ABANDON_GAME_QUERY :{YELLOW}Jesi li siguran da želiš napustiti ovu igru? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Jesi li siguran da želiš napustiti ovaj scenarij? +STR_ABANDON_GAME_QUERY :{YELLOW}Doista želiš napustiti ovu igru? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Doista želiš napustiti ovaj scenarij? # Cheat window STR_CHEATS :{WHITE}Varanje @@ -2377,7 +2377,7 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Namjesti STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Učini objekte nevidljivima umjesto prozirnima # Linkgraph legend window -STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda protoka tereta +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Kazalo protoka tereta STR_LINKGRAPH_LEGEND_ALL :{BLACK}Sve STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ništa STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Odaberi tvrtke koje će se prikazati @@ -2452,13 +2452,13 @@ STR_STATION_CLASS_WAYP :Čvorišta # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Izbornik signala -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Standardni signal (semafor){}Ovo je najosnovnija vrsta signala, dozvoljava istovremeno samo jedan vlak u bloku +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Standardni signal (semafor){}Ovo je najosnovnija vrsta signala, dopušta istovremeno samo jedan vlak u bloku STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Ulazni signal (semafor){}Zeleno sve dok je jedan ili više zelenih izlaznih signala na sljedećem dijelu pruge. U protivnom pokazuje crveno STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Izlazni signal (semafor){}Ponaša se na isti način kao i normalni signali, ali je nužno pogoditi točnu boju na ulaznim i kombo pred-signalima STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Kombo signal (semafor){}Kombo signal jednostavno radi kao ulazni i izlazni signal. Ovo omogućava izgradnju velike "mreže" pred-signala. STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Putni signal (semafor){}Putni signal omogućava da više od jednog vlaka uđe istovremeno u signalni blok, ako vlak može rezervirati putanju do sigurnog zaustavnog mjesta. Standardne putne signale moguće je proći iz suprotnog smjera. STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Jednosmjerni putni signal (semafor){}Putni signal omogućava da više od jednog vlaka uđe istovremeno u signalni blok, ako vlak može rezervirati putanju do sigurnog zaustavnog mjesta. Jednosmjerne putne signale nije moguće proći iz suprotnog smjera -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standardni signal (električni){}Ovo je najosnovnija vrsta signala, dozvoljava istovremeno samo jedan vlak u bloku +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standardni signal (električni){}Ovo je najosnovnija vrsta signala, istovremeno dopušta samo jedan vlak u bloku STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Ulazni signal (električni){}Zeleno sve dok je jedan ili više zelenih izlaznih signala na sljedećem dijelu pruge. U protivnom pokazuje crveno STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Izlazni signal (električni){}Ponaša se na isti način kao i normalni signali, ali je nužno pogoditi točnu boju na ulaznim i kombo pred-signalima. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombo signal (električni){}Kombo signal jednostavno radi kao ulazni i izlazni signal. Ovo omogućava izgradnju velike "mreže" pred-signala. @@ -2572,7 +2572,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Proizved STR_LANDSCAPING_TOOLBAR :{WHITE}Uređivanje krajolika STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Snizi jedan kut zemlje. Povlačenje snižava prvi odabrani kut i poravnava selektirano područje na novu visinu prvog kuta. Ctrl selektira područje dijagonalno. Shift mijenja prikaz građenje/procjena troškova. STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Podigni jedan kut zemlje. Povlačenje podiže prvi odabrani kut i poravnava selektirano područje na novu visinu prvog kuta. Ctrl selektira područje dijagonalno. Shift mijenja prikaz građenje/procjena troškova. -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Poravnaj područje zemlje na visinu prvog odabranog kuta. Ctrl selektira područje dijagonalno. Shift mijenja prikaz građenje/procjena troškova. +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Izravnaj zemlju na visinu prvog odabranog kuta. Ctrl odabire područje dijagonalno. Shift mijenja prikaz građenje/procjena troškova. STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Kupi zemlju za buduću uporabu. Shift mijenja prikaz građenje/procjena troškova. # Object construction window @@ -2787,7 +2787,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemlja u posjed STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spremi igru @@ -3392,11 +3392,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treba: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}čeka -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čeka{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index c914cfdc4d..cab72a7c92 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2784,7 +2784,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Půda vlastněn STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Původní copyright: {COPYRIGHT} 1995 Chris Sawyer, všechna práva vyhrazena STR_ABOUT_VERSION :{BLACK}OpenTTD verze {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Tým OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tým OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Uložit hru @@ -3389,11 +3389,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vyžaduj STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}ček{P á ají á} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ček{P á ají á}{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 18abcb7846..3119390f3e 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1372,6 +1372,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Fra STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Venstreklik-scrolling: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Aktiver rulle kortet ved at trække den med venstre museknap. Dette er især nyttigt, når du bruger en touch-screen til at rulle +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Luk vindue ved højre-klik: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Lukker vinduet ved at højreklikke inde i det. Deaktiverer værktøjstip ved at højreklikke! STR_CONFIG_SETTING_AUTOSAVE :Auto gem: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vælg interval mellem automatisk gemte spil @@ -1761,6 +1763,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tjek for STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Vis computerspiller/spilscript indstillinger STR_INTRO_TOOLTIP_QUIT :{BLACK}Afslut 'OpenTTD' +STR_INTRO_BASESET :{BLACK} Det aktuelt valgte base grafiksæt mangler {NUM} sprite {P "" s}. Se venligst efter opdateringer til basesættet. STR_INTRO_TRANSLATION :{BLACK}Denne oversættelse mangler {NUM} streng{P "" e}. Hjælp venligst med at gøre OpenTTD bedre ved at tilmelde dig som oversætter. Se readme.txt for detaljer. # Quit window @@ -2589,6 +2592,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lufthavn STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Accepteret last: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tog type: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Togspors hastighedsgrænse: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Vej hastighedsbegrænsning: {LTBLUE}{VELOCITY} @@ -2604,13 +2608,13 @@ STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbane spor STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbane spor med bloksignaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbane spor med with pre-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbane spor med udgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbane spor med udgangs-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbane spor med kombinerede signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbane spor med rute-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med en-vejs-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blok- og pre-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blok- og udgangs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blok og kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blok- og kombinerede signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blok- og rute-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blok og en-vejs rute-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med pre- og udgangs-signaler @@ -2621,7 +2625,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor m STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med udgangs- og rute-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med udgangs- og en-vejs rute-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinerede og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinerede og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinationede- og en-vejs rute-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med rute- og en-vejs rute-signaler STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togdepot @@ -2687,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land ejet af se STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheder reserveret STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gem spil @@ -3292,6 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kræver: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kræver: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING} @@ -3360,6 +3367,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Fjern alle kør STR_GROUP_RENAME_CAPTION :{BLACK}Omdøb en gruppe +STR_GROUP_PROFIT_THIS_YEAR :Afkast i år: +STR_GROUP_PROFIT_LAST_YEAR :Afkast sidste år: +STR_GROUP_OCCUPANCY :Nuværende brug: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nye jernbanekøretøjer @@ -3392,6 +3403,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Alle lasttyper STR_PURCHASE_INFO_ALL_BUT :Alle undtagen {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks. trækkraft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rækkevidde: {GOLD}{COMMA} felter +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Fly type: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Togvalgsliste - klik på et køretøj for mere information STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Liste over køretøjstyper - klik på køretøj for information @@ -3526,6 +3538,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnetskinnelok STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Styrke: {POWER}{}Driftsomkostninger: {CURRENCY_LONG}/år{}Kapacitet: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Hestekræfter: {POWER} Maks. Trækkraft: {6:FORCE}{}Driftsomkostning: {4:CURRENCY_LONG}/år{}Kapacitet: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Pris: {CURRENCY_LONG} Maks. hast.: {VELOCITY}{}Kapacitet: {CARGO_LONG}{}Driftsomkostninger: {CURRENCY_LONG}/år +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Pris: {CURRENCY_LONG} Max. Hastighed: {VELOCITY}{}Aircraft type: {STRING}{}Kapacitet: {CARGO_LONG}, {CARGO_LONG}{}Omkostninger: {CURRENCY_LONG}/år +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Pris: {CURRENCY_LONG} Max. Hastighed: {VELOCITY}{}Fly type: {STRING}{}Kapacitet: {CARGO_LONG}{}Omkostninger: {CURRENCY_LONG}/år +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Pris: {CURRENCY_LONG} Max. Hastighed: {VELOCITY}{}Fly type: {STRING} Rækkevidde: {COMMA} felter{}Kapacitet: {CARGO_LONG}, {CARGO_LONG}{}Omkostninger: {CURRENCY_LONG}/år +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Pris: {CURRENCY_LONG} Max. Hastighed{VELOCITY}{}Fly type: {STRING} Rækkevidde: {COMMA} felter{}Kapacitet: {CARGO_LONG}{}Omkostninger: {CURRENCY_LONG}/år # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Udskift {STRING} - {STRING} @@ -3555,6 +3571,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Tryk for STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skift imellem lokomotiv- og vognudskiftningsvindue STR_REPLACE_ENGINES :Lokomotiver STR_REPLACE_WAGONS :Vogne +STR_REPLACE_ALL_RAILTYPE :Alle jernbanevogne STR_REPLACE_HELP_RAILTYPE :{BLACK}Vælg den skinne type, du ønsker at udskifte lokomotiver til STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Viser hvilket køretøj det valgte køretøj til venstre bliver udskiftet med, hvis det udskiftes @@ -3647,6 +3664,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} år ({C STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} år ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Maks. hast.: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Max. hastighed: {LTBLUE}{VELOCITY} {BLACK}Fly type: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Max. hastighed: {LTBLUE}{VELOCITY} {BLACK}Fly type: {LTBLUE}{STRING} {BLACK}Rækkevidde: {LTBLUE}{COMMA} felter STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Vægt: {LTBLUE}{WEIGHT_SHORT} {BLACK}Effekt: {LTBLUE}{POWER}{BLACK} Maks. hast.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vægt: {LTBLUE}{WEIGHT_SHORT} {BLACK}Effekt: {LTBLUE}{POWER}{BLACK} Maks. hast.: {LTBLUE}{VELOCITY} {BLACK}Maks. trækkraft: {LTBLUE}{FORCE} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index ca1ce4be2c..383706f727 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedr STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele copyright {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden STR_ABOUT_VERSION :{BLACK}OpenTTD versie {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Het OpenTTD-team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Het OpenTTD-team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spel Opslaan @@ -3296,11 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereist: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}wachtend -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wachtend{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING} diff --git a/src/lang/english.txt b/src/lang/english.txt index 0228f9c307..258c02c6d6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game @@ -3296,11 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING}, {STRING}{RAW_STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}waiting -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{RAW_STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{RAW_STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:RAW_STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{RAW_STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index a37f78d61c..8d51d06660 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2662,7 +2662,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 63314c4159..86519ddc61 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game @@ -3296,11 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}waiting -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 8cb30a79d2..949fdb0d2c 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2265,7 +2265,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanie poseda STR_ABOUT_OPENTTD :{WHITE}Pri OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Origina kopirajto {COPYRIGHT} 1995 Chris Sawyer, Ĉiuj rajtoj rezervitaj STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 La teamo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 La teamo de OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Konservu Ludon diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index a69b0da58a..344f099741 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2745,7 +2745,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ettevõtte maa STR_ABOUT_OPENTTD :{WHITE}OpenTTD lisainfo STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Algne autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud STR_ABOUT_VERSION :{BLACK}OpenTTD osa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD meeskond +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD meeskond # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Mängu salvestamine diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 3fcea7a53e..4d90facad2 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2427,7 +2427,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ogn hjá fyrit STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upprunalig upphavsrættindi {COPYRIGHT} 1995 Chris Sawyer, Øll rættindi umbiðin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáva {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD toymi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD toymi # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Goym spæl diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 98fd58031d..b53a762c9b 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Yhtiön omistam STR_ABOUT_OPENTTD :{WHITE}Tietoja OpenTTD:stä STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Alkuperäiset oikeudet {COPYRIGHT} 1995 Chris Sawyer, kaikki oikeudet pidätetään STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Tallenna peli @@ -3296,9 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tarvitse STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}odottamassa +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} odottamassa{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING} diff --git a/src/lang/french.txt b/src/lang/french.txt index 3b74d392b4..2c57358046 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1373,6 +1373,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Désactivé STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Défilement par clic gauche{NBSP}: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Active le défilement de la carte en la glissant avec le bouton gauche de la souris. C'est surtout utile pour les écrans tactiles +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Fermer une fenêtre en cliquant droit{NBSP}: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fermer une fenêtre en cliquant droit à l’intérieur de celle-ci. Désactive l'infobulle sur clic droit{NBSP}! STR_CONFIG_SETTING_AUTOSAVE :Sauvegarde automatique{NBSP}: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Sélectionner l'intervalle de temps entre les sauvegardes automatiques @@ -2690,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrain apparte STR_ABOUT_OPENTTD :{WHITE}À propos de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Tous droits réservés STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 L'équipe OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'équipe OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sauvegarder la partie @@ -3295,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nécessi STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nécessite -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}en attente -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nécessite{NBSP}: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}{NBSP}: {CARGO_SHORT} en attente{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING} @@ -3368,6 +3368,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Retirer tous le STR_GROUP_RENAME_CAPTION :{BLACK}Renommer un groupe +STR_GROUP_PROFIT_THIS_YEAR :Profit cette année{NBSP}: +STR_GROUP_PROFIT_LAST_YEAR :Profit l'année précédente{NBSP}: +STR_GROUP_OCCUPANCY :Utilisation actuelle{NBSP}: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nouveaux véhicules ferroviaires diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index fa202dc6d4..c06b81ecf7 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2932,7 +2932,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tìr a' chompan STR_ABOUT_OPENTTD :{WHITE}Mu dheidhinn OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Còir-lethbhreac tùsail {COPYRIGHT} 1995 Chris Sawyer, a h-uile còir glèidhte STR_ABOUT_VERSION :{BLACK}OpenTTD tionndadh {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 An sgioba OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 An sgioba OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sàbhail an geama @@ -3537,11 +3537,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Feum air STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Feum air -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}a' feitheamh -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Feum air: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a' feitheamh{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 98119197b7..d87aa14abe 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreo propieda STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright orixinal {COPYRIGHT} 1995 Chris Sawyer, Tódolos dereitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 O equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 O equipo de OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gravar partida @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Require: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Require -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}agardando -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Require: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} agardando{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 499eb6ee6b..128c516c62 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firmeneigenes G STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Transport Tycoon-Urheberrecht {COPYRIGHT} 1995 Chris Sawyer, alle Rechte vorbehalten STR_ABOUT_VERSION :{BLACK}OpenTTD-Version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-Team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-Team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spiel speichern @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Benötig STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}wartend -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wartend{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 28493787fe..11d5755d78 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1479,6 +1479,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Απενεργ STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Μετάβαση με αριστερό κλικ: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Ενεργοποίηση της κύλισης του χάρτη σύροντας τον με το αριστερό κουμπί του ποντικιού. Αυτό είναι ιδιαίτερα χρήσιμο για την κύλιση όταν χρησιμοποιείται οθόνη αφής +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Κλείσιμο παραθύρου με δεξί-κλικ: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Κλείνει το παράθυρο με δεξί πάτημα μέσα του. Απενεργοποιεί την ανάδυση επεξηγήσεων με το δεξί κουμπί! STR_CONFIG_SETTING_AUTOSAVE :Αυτόματο σώσιμο: {STRING} @@ -2797,7 +2798,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτη STR_ABOUT_OPENTTD :{WHITE}Σχετικά με το OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Αρχικά Πνευματικά Δικαιώματα {COPYRIGHT} 1995 Chris Sawyer, Όλα τα δικαιώματα διατηρούνται STR_ABOUT_VERSION :{BLACK}Έκδοση OpenTTD{REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Η ομάδα του OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Η ομάδα του OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Αποθήκευση Παιχνιδιού @@ -3402,9 +3403,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Απαι STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}σε αναμονή +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} σε αναμονή{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index aa596d784f..90ed5ccc55 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1755,7 +1755,7 @@ STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}הגדר STR_INTRO_NEWGRF_SETTINGS :{BLACK}(NewGRF)הגדרות שדרוג גראפי STR_INTRO_ONLINE_CONTENT :{BLACK} בדוק תוכן מקוון STR_INTRO_SCRIPT_SETTINGS :{BLACK}הגדרות סקריפטים של משחק/שחקני מחשב -STR_INTRO_QUIT :{BLACK}צא +STR_INTRO_QUIT :{BLACK}יציאה STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}התחל משחק חדש. Ctrl+לחיצה מדלג על תצורת מפה STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}טען משחק שמור @@ -1777,6 +1777,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK} חפש STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK} הצג הגדרות סקריפטים של משחק/שחקני מחשב STR_INTRO_TOOLTIP_QUIT :{BLACK}צא מ-'OpenTTD' +STR_INTRO_BASESET :{BLACK}חסרים {NUM} ספרייט עבור גרפיקות הבסיס שנבחרו. אנא בדוק עדכונים לערכה זו. STR_INTRO_TRANSLATION :{BLACK}בתרגום זה חסרים {P 0 "מחרוזת " ""}{NUM}{P "" " מחרוזות"}. אנא עזור לשפר את OpenTTD ע"י הצטרפות כמתרגם. קרא בקובץ readme.txt לפרטים. # Quit window @@ -2618,29 +2619,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :שדות STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :אדמה מכוסה בשלג STR_LAI_CLEAR_DESCRIPTION_DESERT :מדבר -STR_LAI_RAIL_DESCRIPTION_TRACK :מסילת ברזל מסילה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים +STR_LAI_RAIL_DESCRIPTION_TRACK :מסילת ברזל +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :מסילת ברזל עם רמזורים חוסמים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :מסילת ברזל עם רמזורים מקדימים STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :מסילת ברזל מסילה עם רמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :מסילת ברזל עם רמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :מסילת ברזל עם רמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :מסילת ברזל עם רמזורי נתיב חד-סטריים STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ומקדימים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורי יציאה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורי יציאה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :מסילת ברזל עם רמזורים חוסמים ורמזורי יציאה +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :מסילת ברזל עם רמזורים חוסמים ורמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :מסילת ברזל עם רמזורים חוסמים ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :מסילת ברזל עם רמזורים חוסמים ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :מסילת ברזל עם רמזורים מקדימים ורמזורי יציאה +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :מסילת ברזל עם רמזורים מקדימים ורמזורים משולבים STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה ורמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :מסילת ברזל מסילה עם רמזורים משולבים ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורים משולבים ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורי נתיב ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :מסילת ברזל מוסך רכבות +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :מסילת ברזל עם רמזורים מקדימים ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :מסילת ברזל עם רמזורי יציאה ורמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :מסילת ברזל עם רמזורי יציאה ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :מסילת ברזל עם רמזורי יציאה ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :מסילת ברזל עם רמזורים משולבים ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :מסילת ברזל עם רמזורים משולבים ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :מסילת ברזל עם רמזורי נתיב ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :מוסך רכבות STR_LAI_ROAD_DESCRIPTION_ROAD :כביש STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :כביש עם תאורת רחוב @@ -2702,9 +2703,9 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :שטח בבעל # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}OpenTTD אודות -STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}כל הזכויות שמורות , {COPYRIGHT}1995 כריס סויר - {NBSP}זכויות יוצרים מקוריות +STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}כל הזכויות שמורות , {COPYRIGHT}1995 כריס סויר - זכויות יוצרים מקוריות STR_ABOUT_VERSION :{BLACK}{REV} גירסה , OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}שמור משחק @@ -3309,9 +3310,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{YELLOW}{3:STRI STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{YELLOW}{5:STRING}{4:STRING},{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :דורש ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}דורש -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}ממתין +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}דורש: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ממתין{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{YELLOW}{1:STRING}{0:STRING}{BLACK} :מייצר @@ -3380,8 +3381,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :הסר את כ STR_GROUP_RENAME_CAPTION :{BLACK}שנה שם קבוצה +STR_GROUP_PROFIT_THIS_YEAR :רווח בשנה זו: STR_GROUP_PROFIT_LAST_YEAR :רווח שנה שעברה: STR_GROUP_OCCUPANCY :שימוש נוכחי: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :רכבות חדשות @@ -3549,6 +3552,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :קטר פס מ STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}{1:WEIGHT_SHORT} :משקל {NBSP}{0:CURRENCY_LONG} :מחיר{} {NBSP}{3:POWER} :עצמת מנוע {NBSP}{2:VELOCITY} :מהירות {NBSP}{}{5:CARGO_LONG} : קיבולת {NBSP} לשנה {NBSP}{4:CURRENCY_LONG} :עלות תפעולית STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}עלות: {CURRENCY_LONG} משקל: {WEIGHT_SHORT}{}מהירות: {VELOCITY} הספק: {POWER} מקסימלי T.E.: {6:FORCE}{}עלות תפעולית: {4:CURRENCY_LONG}/לשנה{}קיבולת: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}עלות: {CURRENCY_LONG} מהירות מקסימלית: {VELOCITY}{}קיבולת: {CARGO_LONG}{}הוצאה שוטפת: {CURRENCY_LONG}/לשנה +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}עלות: {CURRENCY_LONG} מהירות מקסימלית: {VELOCITY}{}סוג כלי טיס: {STRING}{}קיבולת: {CARGO_LONG}, {CARGO_LONG}{}עלות תפעולית: {CURRENCY_LONG}/שנה +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}עלות: {CURRENCY_LONG} מהירות מקסימלית: {VELOCITY}{}סוג כלי טיס: {STRING}{}קיבולת: {CARGO_LONG}{}עלות תפעולית: {CURRENCY_LONG}/שנה +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}עלות: {CURRENCY_LONG} מהירות מקסימלית: {VELOCITY}{}סוג כלי טיס: {STRING} טווח: {COMMA} משבצות{}קיבולת: {CARGO_LONG}, {CARGO_LONG}{}עלות תפעולית: {CURRENCY_LONG}/שנה +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}עלות: {CURRENCY_LONG} מהירות מקסימלית: {VELOCITY}{}סוג כלי טיס: {STRING} טווח: {COMMA} משבצות{}קיבולת: {CARGO_LONG}{}עלות תפעולית: {CURRENCY_LONG}/שנה # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}החלף {STRING} - {STRING} @@ -3578,6 +3585,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}לחץ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}החלף בין חלונות החלפת קרון וקטר STR_REPLACE_ENGINES :מנועים/קטרים STR_REPLACE_WAGONS :קרונות +STR_REPLACE_ALL_RAILTYPE :כלל הרכבות STR_REPLACE_HELP_RAILTYPE :{BLACK}בחר את סוג המסילה עבורה ברצונך להחליף קטרים STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK} מציג אילו קטרים מוחלפים זה בזה @@ -3670,6 +3678,8 @@ STR_VEHICLE_INFO_AGE :({1:COMMA}) ש STR_VEHICLE_INFO_AGE_RED :{RED}({1:COMMA}) שנים {NBSP}{0:COMMA} STR_VEHICLE_INFO_MAX_SPEED :{BLACK}מהירות מקסימלית: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}מהירות מקס.: {LTBLUE}{VELOCITY} {BLACK}סוג כלי טיס: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}מהירות מקסימלית: {LTBLUE}{VELOCITY} {BLACK}סוג כלי טיס: {LTBLUE}{STRING} {BLACK}טווח: {LTBLUE}{COMMA} משבצות STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}משקל: {LTBLUE}{WEIGHT_SHORT} {BLACK}הספק: {LTBLUE}{POWER}{BLACK} מהירות מקסימלית: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}משקל: {LTBLUE}{WEIGHT_SHORT} {BLACK}הספק: {LTBLUE}{POWER}{BLACK} מהירות מקסימלית: {LTBLUE}{VELOCITY} {BLACK}T.E. מקסימלי: {LTBLUE}{FORCE} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index a993dc305d..99dbfb82c8 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2755,7 +2755,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Vállalat álta STR_ABOUT_OPENTTD :{WHITE}Az OpenTTD-ről STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Eredeti copyright {COPYRIGHT} 1995 Chris Sawyer, Minden jog fenntartva STR_ABOUT_VERSION :{BLACK}OpenTTD {REV} verzió -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 Az OpenTTD csapat +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Az OpenTTD csapat # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Játék mentése @@ -3361,10 +3361,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Felhaszn ############ range for requires ends STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Elfogad: -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}várakozik -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} várakozik{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 3202b99e62..77e9c09660 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2536,7 +2536,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land í eigu fy STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upphaflegur höfundarréttur {COPYRIGHT} 1995 Chris Sawyer, Öll réttindi áskilin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáfa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD hópurinn +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD hópurinn # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Vista leik diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index b9194ea0a7..36ead125af 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1372,6 +1372,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Non-aktifkan STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Geser dgn klik-kiri: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Aktifkan penggeseran peta dengan menyeret menggunakan tombol kiri mouse. Hal ini sangat berguna apabila menggunakan layar sentuh. +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Tutup jendela dengan klik kanan: {STRING} STR_CONFIG_SETTING_AUTOSAVE :Simpan otomatis: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Memilih jarak waktu antara menyimpan data game @@ -2589,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nama are STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Muatan diterima: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipe Rel: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Batasan kecepatan rel: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Batasan kecepatan jalan: {LTBLUE}{VELOCITY} @@ -2687,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah milik Per STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hak Cipta asli {COPYRIGHT} 1995 Chris Sawyer, Hak Cipta dilindungi STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Tim OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tim OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Simpan Permainan @@ -3356,6 +3358,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Jual semua STR_GROUP_RENAME_CAPTION :{BLACK}Ubah nama kelompok +STR_GROUP_PROFIT_THIS_YEAR :Keuntungan tahun ini: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Kereta Baru @@ -3643,6 +3646,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} tahun ( STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} tahun ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Kec. Max: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Kecepatan Maks.: {LTBLUE}{VELOCITY} {BLACK}Jenis pesawat: {LTBLUE}{STRING} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Berat: {LTBLUE}{WEIGHT_SHORT} {BLACK}Tenaga: {LTBLUE}{POWER}{BLACK} Kec. Max: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Berat: {LTBLUE}{WEIGHT_SHORT} {BLACK}Tenaga: {LTBLUE}{POWER}{BLACK} Kec. Max: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 229580074d..6c2cb21375 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Talamh faoi úi STR_ABOUT_OPENTTD :{WHITE}Maidir le OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Cóipcheart bunaidh {COPYRIGHT} 1995 Chris Sawyer, Gach ceart ar cosaint STR_ABOUT_VERSION :{BLACK}OpenTTD leagan {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 An fhoireann OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 An fhoireann OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sábháil an Cluiche diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 309f4e9f01..e2d5ffa49a 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2721,7 +2721,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno possedu STR_ABOUT_OPENTTD :{WHITE}Informazioni su OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright originale {COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati STR_ABOUT_VERSION :{BLACK}OpenTTD versione {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Il team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Il team OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salva partita @@ -3326,11 +3326,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Richiede STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}in attesa -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} in attesa{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index ed7584bfc1..8e7f0c486d 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2688,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :社有地 STR_ABOUT_OPENTTD :{WHITE}OpenTTDについて STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}オリジナル版権{COPYRIGHT} 1995 Chris Sawyer All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD バージョン {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}ゲームを保存 @@ -3293,8 +3293,7 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}必要 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}、{STRING}{STRING}、{STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資 -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT : {YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資: ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 9c6d98c05b..b6dc29a099 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2385,7 +2385,7 @@ STR_BRIDGE_NAME_GIRDER_STEEL :강철 거더 STR_BRIDGE_NAME_CANTILEVER_STEEL :강철 캔틸레버교 STR_BRIDGE_NAME_SUSPENSION_CONCRETE :콘크리트 현수교 STR_BRIDGE_NAME_WOODEN :나무 다리 -STR_BRIDGE_NAME_CONCRETE :콘트리트교 +STR_BRIDGE_NAME_CONCRETE :콘크리트교 STR_BRIDGE_NAME_TUBULAR_STEEL :강철 원통형 다리 STR_BRIDGE_TUBULAR_SILICON :실리콘 원통형 다리 @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :회사 소유 STR_ABOUT_OPENTTD :{WHITE}OpenTTD에 대해서 STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD 버전 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD 개발팀 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 개발팀 # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}게임 저장 @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}필요 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}받는 화물 -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}대기중 -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}받는 화물: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 대기중{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index bd47867beb..42047a47d6 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3498,11 +3498,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Postulat STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}manet -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING.acc}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} manet{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 30f43b807a..dab5900f75 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2628,7 +2628,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Uzņēmumam pie STR_ABOUT_OPENTTD :{WHITE}Par OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oriģināla autortiesības {COPYRIGHT} 1995 Kriss Sojers. Visas tiesības paturētas STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD darba grupa +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD darba grupa # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Saglabāt spēli diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 6d6d1428b8..4d44522671 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2906,7 +2906,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanijos žem STR_ABOUT_OPENTTD :{WHITE}Apie OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pradinės versijos teisės priklauso {COPYRIGHT} 1995 Chris Sawyer, Visos teisės saugomos STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD komanda +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD komanda # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Išsaugoti žaidimą diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 41150fc85a..38dba61000 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land am Firmenb STR_ABOUT_OPENTTD :{WHITE}Iwwert OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original Copyright {COPYRIGHT} 1995 Chris Sawyer, All Rechter virbehalen STR_ABOUT_VERSION :{BLACK}OpenTTD Versioun {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 D'OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 D'OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spill späicheren @@ -3296,11 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Brauch: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}um waarden -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} um waarden{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 427788ddee..4ba83efdaa 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -202,6 +202,7 @@ STR_UNITS_POWER_SI :{COMMA}kW STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg +STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}tan{P "" s} STR_UNITS_WEIGHT_LONG_METRIC :{COMMA} tan STR_UNITS_WEIGHT_LONG_SI :{COMMA} kg @@ -1218,6 +1219,7 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Beri amaran jik STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kenderaan tidak akan tamat tempohnya: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gunakan pembaharuan automatik apabila kenderaan usang : {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY :Wang minimum yang diperlukan untuk pembaharuan automatik: {STRING} +STR_CONFIG_SETTING_ERRMSG_DURATION :Jangkamasa mesej ralat: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL :Tunjukkan jumlah penduduk dalam label nama bandar: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Ketebalan garisan di dalam graf: {STRING} @@ -1325,6 +1327,7 @@ STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Sederhana STR_CONFIG_SETTING_AI_PROFILE_HARD :Sukar STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Benarkan Kepintaran Tiruan dalam permainan pemain berbilang: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Benarkan AI komputer menyertai permainan berbilang pemain STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes sebelum skrip adalah digantung: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :Tempoh waktu servis dalam peratusan: {STRING} @@ -2003,6 +2006,7 @@ STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Ghaibkan # Linkgraph legend window # Linkgraph legend window and linkgraph legend in smallmap +STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLACK}tepu # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Serlahan kawasan liputan @@ -2402,7 +2406,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah dimiliki STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hakcipta Asal {COPYRIGHT} 1995 Chris Sawyer, Hakcipta terpelihara STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Simpankan Permainan @@ -2802,6 +2806,7 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Menerima STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Penarafan STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Tunjukkan penarafan stesen +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Bekalan bulanan dan penarafan tempatan: @@ -2952,7 +2957,7 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Memerluk STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Diperlukan +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Diperlukan: ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 535e83e6ce..dccf73075f 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2695,7 +2695,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firma-eid lando STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opprinnelig opphavsbeskyttet {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Lagre spill @@ -3281,8 +3281,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrier STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ingen - -STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}{NBSP}% transportert) -STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}/{CARGO_LONG}{STRING}){YELLOW} ({COMMA}{NBSP}%/{COMMA}{NBSP}% transportert) +STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}% transportert) +STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}/{CARGO_LONG}{STRING}){YELLOW} ({COMMA}%/{COMMA}% transportert) STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien @@ -3300,11 +3300,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Trenger: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}venter -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 516933dd7a..5e545ce290 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2608,7 +2608,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Feltet eigast a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opphaveleg opphavsbeskytta av {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheiter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV}. Oversett til nynorsk av Thor Morten Skogrand med fleire. -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Lagre spel diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 28049b85d7..cc3f06cffe 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -702,7 +702,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Wyświet STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Wyświetl listę stacji firmy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Wyświetl informacje finansowe firmy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Wyświetl informacje ogólne firmy -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Pokaż okno opowieści +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Pokaż dziennik STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Pokaż listę celów STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Wyświetl wykresy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Wyświetl ranking firm @@ -3071,7 +3071,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren w posiada STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prawa Autorskie {COPYRIGHT} 1995 Chris Sawyer, Wszelkie prawa zastrzeżone STR_ABOUT_VERSION :{BLACK}OpenTTD wersja {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 Zespół OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Zapisz grę @@ -3416,7 +3416,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Kup roc STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Daj łapówkę lokalnym władzom, powiększ swoją ocenę, ryzykując poważne kary w razie złapania.{}Koszt: {CURRENCY_LONG} # Goal window -STR_GOALS_CAPTION :{WHITE}{COMPANY} Cele +STR_GOALS_CAPTION :{WHITE}Cele firmy {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Cele globalne STR_GOALS_GLOBAL_TITLE :{BLACK}Cele globalne: STR_GOALS_TEXT :{ORANGE}{STRING} @@ -3464,8 +3464,8 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik na usłudze żeby wyśrodkować widok na fabrykę/miasto. Ctrl+klik otwiera nowy podgląd na pozycji fabryki/miasta # Story book window -STR_STORY_BOOK_CAPTION :{WHITE}Album Historii Firmy {COMPANY} -STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globalne okno opowieści +STR_STORY_BOOK_CAPTION :{WHITE}Dziennik Historii Firmy {COMPANY} +STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Ogólny przewodnik STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strona {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skocz na właściwą stronę wybierając ją z listy. @@ -3676,11 +3676,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Wymaga: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Potrzebuje -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}oczekuje -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Potrzebuje: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} oczekuje{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} @@ -4196,7 +4194,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :mniejszy lub r STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :większy niż STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :większy lub równy STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :prawda -STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :fałsz +STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :nie prawda STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Wartość do porównania z danymi pojazdu STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Podaj wartość do porównania @@ -4226,10 +4224,10 @@ STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Idź bezpośred STR_ORDER_SERVICE_AT :Serwisuj w STR_ORDER_SERVICE_NON_STOP_AT :Serwisuj non-stop w -STR_ORDER_NEAREST_DEPOT :najbliższych -STR_ORDER_NEAREST_HANGAR :najbliższy hangar -STR_ORDER_TRAIN_DEPOT :Warsztatów -STR_ORDER_ROAD_VEHICLE_DEPOT :Zajezdni samochodowej +STR_ORDER_NEAREST_DEPOT :najbliższego +STR_ORDER_NEAREST_HANGAR :najbliższego hangaru +STR_ORDER_TRAIN_DEPOT :serwisu w warsztatach +STR_ORDER_ROAD_VEHICLE_DEPOT :serwisu w zajezdni STR_ORDER_SHIP_DEPOT :Doku STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} @@ -4281,7 +4279,7 @@ STR_ORDER_OUT_OF_RANGE :{RED} (Kolejny STR_ORDER_CONDITIONAL_UNCONDITIONAL :Skocz do rozkazu {COMMA} STR_ORDER_CONDITIONAL_NUM :Skocz do rozkazu {COMMA} kiedy {STRING} {STRING} {COMMA} -STR_ORDER_CONDITIONAL_TRUE_FALSE :Skocz do rozkazu {COMMA} kiedy {STRING} {STRING} +STR_ORDER_CONDITIONAL_TRUE_FALSE :Skocz do rozkazu {0:COMMA} kiedy {2:STRING} że {1:STRING} STR_INVALID_ORDER :{RED} (Błędne polecenie) @@ -5302,8 +5300,8 @@ STR_FORMAT_WAYPOINT_NAME_SERIAL :Post. {TOWN} #{ STR_FORMAT_DEPOT_NAME_TRAIN :Warsztaty {TOWN} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Warsztaty {TOWN} #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Zajezdnia samochodowa {TOWN} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Zajezdnia samochodowa {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Zajezdnia {TOWN} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Zajezdnia {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_SHIP :Stocznia {TOWN} STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Stocznia {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :Hangar {STATION} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 8fc61c35ef..65ad9c6661 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1199,9 +1199,9 @@ STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Altura máxima STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Tamanho máximo de túneis: {STRING} STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Tamanho máximo para construção de túneis STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Método de financiamento de indústrias primárias: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Método de financiar uma indústria pirmária. 'nenhum' significa que não é possível financiar nenhuma, 'prospecção' significa que é possível financiar, mas a construção é feita num local arbitrário no mapa e até pode falhar, 'como outras indústrias' significa que as indústrias de matérias primas podem ser construídas por companhias como indústrias de processamento em qualquer sítio que elas escolham +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Método de financiar uma indústria primária. 'nenhum' significa que não é possível financiar nenhuma, 'prospecção' significa que é possível financiar, mas a construção é feita num local arbitrário no mapa e até pode falhar, 'como as outras' significa que as indústrias de matérias primas podem ser construídas em qualquer sítio pelas empresas, como se fossem indústrias de processamento STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Nenhum -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Mesmo método +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Como as outras STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospecção STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana à volta das industrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano á volta de uma industria. Isto garante que terreno vazio esteja disponível para construir linhas, etc @@ -1373,6 +1373,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Desligado STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Deslocar com botão esquerdo: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Activar deslocamento do mapa através de arrastamento com o botão esquerdo do rato. Esta opção é particularmente útil quando é usado um ecran de toque para deslocamento +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Fechar janelas ao fazer clique direito: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Fecha uma janela ao fazer clique direito dentro dela. Desactiva os textos de ajuda ao fazer clique direito! STR_CONFIG_SETTING_AUTOSAVE :Guardar automaticamente: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Seleccione o intervalo entre gravações automáticas @@ -1402,7 +1404,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar horári STR_CONFIG_SETTING_QUICKGOTO :Criação rápida de ordens de veículos: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-seleccionar o 'cursor Ir Para' ao abrir a janela de ordens STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo padrão de ferrovia (ao criar ou abrir jogo): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de carrir seleccionado após o início ou carregamento de um jogo. 'primeiro disponível' selecciona o tipo mais antigo de carril, 'último disponível' selecciona o tipo mais recente de carril e 'mais utilizado' selecciona o tipo mais utilizado actualmente +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de carril seleccionado após o início ou carregamento de um jogo. 'primeiro disponível' selecciona o tipo mais antigo de carril, 'último disponível' selecciona o tipo mais recente de carril e 'mais utilizado' selecciona o tipo mais utilizado actualmente STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Primeiro disponível STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Último disponível STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mais utilizado @@ -1762,6 +1764,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verifica STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostrar definições de IA e de script de jogo STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair de 'OpenTTD' +STR_INTRO_BASESET :{BLACK}O conjunto de gráficos base seleccionado tem {NUM} sprite{P "" s} em falta. Por favor verifique se existem atualizações para o conjunto. STR_INTRO_TRANSLATION :{BLACK}Faltam {NUM} string{P "" s} nesta tradução. Ajude o OpenTTD em inscrever-se como tradutor. Leia readme.txt para mais detalhes. # Quit window @@ -2590,6 +2593,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceite: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de carril: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limite de velocidade da linha: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da estrada: {LTBLUE}{VELOCITY} @@ -2602,29 +2606,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto -STR_LAI_RAIL_DESCRIPTION_TRACK :Caminhos-de-ferro linha -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Caminhos-de-ferro linha com sinais de bloqueio -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Caminhos-de-ferro linha com pre-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Caminhos-de-ferro linha com sinais de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Caminhos-de-ferro linha com sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Caminhos-de-ferro linha com sinais de caminho -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Caminhos-de-ferro linha com bloqueio e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais de saida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais de saida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Caminhos-de-ferro linha com sinais de saida e sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Caminhos-de-ferro linha com sinais de saida e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais de saida e de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Caminhos-de-ferro linha com sinais combinados e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais combinados e sentido unico -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais de rota e de sentido unico -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Caminhos-de-ferro depósito de comboios +STR_LAI_RAIL_DESCRIPTION_TRACK :Linha de caminhos-de-ferro +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Linha de caminhos-de-ferro com sinais de bloqueio +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Linha de caminhos-de-ferro com pre-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Linha de caminhos-de-ferro com sinais de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Linha de caminhos-de-ferro com sinais combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Linha de caminhos-de-ferro com sinais de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Linha de caminhos-de-ferro com sinais de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Linha de caminhos-de-ferro com sinais de bloqueio e pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Linha de caminhos-de-ferro com sinais de bloqueio e de saida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Linha de caminhos-de-ferro com sinais de bloqueio e combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Linha de caminhos-de-ferro com sinais de bloqueio e de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Linha de caminhos-de-ferro com sinais de bloqueio e de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Linha de caminhos-de-ferro com pré-sinais e sinais de saida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Linha de caminhos-de-ferro com pré-sinais e sinais combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Linha de caminhos-de-ferro com pré-sinais e sinais de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Linha de caminhos-de-ferro com pré-sinais e sinais de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Linha de caminhos-de-ferro com sinais de saida e combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Linha de caminhos-de-ferro com sinais de saida e de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Linha de caminhos-de-ferro com sinais de saida e de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Linha de caminhos-de-ferro com sinais combinados e de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Linha de caminhos-de-ferro com sinais combinados e de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Linha de caminhos-de-ferro com sinais de rota e de sentido único +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito de comboios de caminhos-de-ferro STR_LAI_ROAD_DESCRIPTION_ROAD :Estrada STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Estrada com iluminação @@ -2688,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno proprie STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 A equipa do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipa do OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar Jogo @@ -3293,6 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessá STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requer: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a aguardar{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} @@ -3361,6 +3368,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos o STR_GROUP_RENAME_CAPTION :{BLACK}Renomear um grupo +STR_GROUP_PROFIT_THIS_YEAR :Lucro deste ano: +STR_GROUP_PROFIT_LAST_YEAR :Lucro no último ano: +STR_GROUP_OCCUPANCY :Utilização actual: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Novos Veículos Ferroviários @@ -3393,6 +3404,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. Força de Tracção: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de veículos ferroviários - clique num veículo para informações STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de veículos rodoviários - clique num veículo para informações @@ -3524,9 +3536,13 @@ STR_ENGINE_PREVIEW_SHIP :barco STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotiva monocarril STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva maglev -STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade: {VELOCITY} Potência: {POWER}{}Custo de circulação: {CURRENCY_LONG}/ano{}Capacidade: {CARGO_LONG} -STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade: {VELOCITY} Potência: {POWER} Máx. F.T.: {6:FORCE}{}Custo de circulação: {4:CURRENCY_LONG}/ano{}Capacidade: {5:CARGO_LONG} -STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Máx. Velocidade: {VELOCITY}{}Capacidade: {CARGO_LONG}{}Custo de circulação: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade Máx.: {VELOCITY} Potência: {POWER}{}Custo de Circulação: {CURRENCY_LONG}/ano{}Capacidade: {CARGO_LONG} +STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade Máx.: {VELOCITY} Potência: {POWER} F.T. Máx.: {6:FORCE}{}Custo de Circulação: {4:CURRENCY_LONG}/ano{}Capacidade: {5:CARGO_LONG} +STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Velocidade Máx.: {VELOCITY}{}Capacidade: {CARGO_LONG}{}Custo de Circulação: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Velocidade Máx.: {VELOCITY}{}Tipo de Aeronave: {STRING}{}Capacidade: {CARGO_LONG}, {CARGO_LONG}{}Custo de Circulação: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Velocidade Máx.: {VELOCITY}{}Tipo de Aeronave: {STRING}{}Capacidade: {CARGO_LONG}{}Custo de Circulação: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Velocidade Máx.: {VELOCITY}{}Tipo de Aeronave: {STRING} Alcance: {COMMA} quadrados{}Capacidade: {CARGO_LONG}, {CARGO_LONG}{}Custo de Circulação: {CURRENCY_LONG}/ano +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Velocidade Máx.: {VELOCITY}{}Tipo de Aeronave: {STRING} Alcance: {COMMA} quadrados{}Capacidade: {CARGO_LONG}{}Custo de Circulação: {CURRENCY_LONG}/ano # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Substituir {STRING} - {STRING} @@ -3556,6 +3572,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pression STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Alternar entre a janela de substituição de locomotivas e a janela de substituição de vagões STR_REPLACE_ENGINES :Locomotivas STR_REPLACE_WAGONS :Vagões +STR_REPLACE_ALL_RAILTYPE :Todos os veículos ferroviários STR_REPLACE_HELP_RAILTYPE :{BLACK}Seleccione o tipo de carril para o qual deseja efectuar a substituição dos motores STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Exibe o tipo de motor que substituirá o que está seleccionado à esquerda, se algum @@ -3648,6 +3665,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} ano{P " STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ano{P "" s} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Máx. velocidade: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Vel. máxima: {LTBLUE}{VELOCITY} {BLACK}Tipo de Aeronave: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de Aeronave: {LTBLUE}{STRING} {BLACK}Alcance: {LTBLUE}{COMMA} quadrados STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Max. velocidade: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Máx. velocidade: {LTBLUE}{VELOCITY} {BLACK}Máx. E.T.: {LTBLUE}{FORCE} @@ -4018,7 +4037,7 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_START_DELAY :Número de dias para iniciar esta IA depois da anterior (tomar ou lorgar): {ORANGE}{STRING} +STR_AI_SETTINGS_START_DELAY :Número de dias para iniciar esta IA depois da anterior (aproximadamente): {ORANGE}{STRING} # Textfile window diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 69b3c11a18..a2aa17927e 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2652,7 +2652,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren în propr STR_ABOUT_OPENTTD :{WHITE}Despre OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Toate drepturile rezervate STR_ABOUT_VERSION :{BLACK}OpenTTD versiunea {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Echipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Echipa OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salvează joc diff --git a/src/lang/russian.txt b/src/lang/russian.txt index bdc0a8dd7f..45b3be2c6d 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2871,7 +2871,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земля в STR_ABOUT_OPENTTD :{WHITE}Об OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинальные авторские права {COPYRIGHT} 1995 Chris Sawyer. Все права защищены. STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Команда разработчиков OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Команда разработчиков OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Сохранить игру @@ -3477,10 +3477,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Треб ############ range for requires ends STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Требуется: -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}ожидает -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ожидает{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 5a81456990..155772ce5d 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2882,7 +2882,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemljište u po STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originalni kopirajt {COPYRIGHT} 1995 Chris Sawyer, Sva prava zadržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sačuvaj poziciju diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index b00dfef89e..d8e9f0c8c6 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2688,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司属地 STR_ABOUT_OPENTTD :{WHITE}关于 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留一切权力。 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD 团队 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 团队 # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}保存游戏 @@ -3293,8 +3293,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}等待中 +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 等待中{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING} @@ -3363,6 +3363,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :移除所有车 STR_GROUP_RENAME_CAPTION :{BLACK}重命名分组 +STR_GROUP_PROFIT_THIS_YEAR :今年利润: STR_GROUP_PROFIT_LAST_YEAR :去年利润 STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3562,6 +3563,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}点击 STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}可以切换 机车/挂车 替换项目 STR_REPLACE_ENGINES :机车 STR_REPLACE_WAGONS :挂车 +STR_REPLACE_ALL_RAILTYPE :所有铁路车辆 STR_REPLACE_HELP_RAILTYPE :{BLACK}选择要更新的车辆对应的铁路类型 STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}显示用来替换左侧被选定车辆的新车辆 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index eaf1b59285..4e28c45c02 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2755,7 +2755,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pôvodný copyright: {COPYRIGHT} 1995 Chris Sawyer, všetky práva vyhradené STR_ABOUT_VERSION :{BLACK}OpenTTD verzia {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 team OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Uložiť hru diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 5f1598beb6..5fd44b4d36 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1525,6 +1525,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Izklop STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Premik slike z levim klikom: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Omogoči pomik pogleda z levim klikom miške in vlečenjem. Primerno za dotične zaslone. +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Zapri okno z desnim klikom: {STRING} STR_CONFIG_SETTING_AUTOSAVE :Samodejno shrani: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Izberi časovni interval samodejnega shranjevanja igre @@ -2840,7 +2841,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ozemlje v lasti STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prvotne avtorske pravice {COPYRIGHT} 1995 Chris Sawyer, vse pravice pridržane STR_ABOUT_VERSION :{BLACK}OpenTTD različica {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 ekipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 ekipa OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Shrani igro @@ -3679,6 +3680,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnetna lokomo STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {CURRENCY_LONG} Teža: {WEIGHT_SHORT}{}Hitrost: {VELOCITY} Moč: {POWER}{}Cena delovanja: {CURRENCY_LONG}/leto{}Zmogljivost: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cena: {CURRENCY_LONG} Teža: {WEIGHT_SHORT}{}Hitrost: {VELOCITY} Moč: {POWER} Max. T.E.: {6:FORCE}{}Stroški: {4:CURRENCY_LONG}/yr{}Zmogljivost: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Max. hitrost: {VELOCITY}{}Zmogljivost: {CARGO_LONG}{}Cena delovanja: {CURRENCY_LONG}/leto +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Max. hitrost: {VELOCITY}{}Vrsta letala: {STRING}{}Zmogljivost: {CARGO_LONG}{}Stroški obratovanja: {CURRENCY_LONG}/leto # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Zamenjaj {STRING} - {STRING} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 5e27b22c4d..6993b7b04b 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright Original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 El equipo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 El equipo OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar Juego @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necesita STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}esperando -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 11e2c22f12..afca51643c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -55,7 +55,7 @@ STR_CARGO_PLURAL_CANDY :{G=m}Dulces STR_CARGO_PLURAL_COLA :{G=f}Bebida de cola STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Algodón de azúcar STR_CARGO_PLURAL_BUBBLES :{G=f}Burbujas -STR_CARGO_PLURAL_TOFFEE :{G=m}Jamoncillos +STR_CARGO_PLURAL_TOFFEE :{G=m}Caramelos suaves STR_CARGO_PLURAL_BATTERIES :{G=f}Pilas STR_CARGO_PLURAL_PLASTIC :{G=m}Plástico STR_CARGO_PLURAL_FIZZY_DRINKS :{G=m}Refrescos @@ -89,7 +89,7 @@ STR_CARGO_SINGULAR_CANDY :{G=m}Dulce STR_CARGO_SINGULAR_COLA :{G=f}Bebida de cola STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Algodón de azúcar STR_CARGO_SINGULAR_BUBBLE :{G=f}Burbuja -STR_CARGO_SINGULAR_TOFFEE :{G=m}Jamoncillo +STR_CARGO_SINGULAR_TOFFEE :{G=m}Caramelo suave STR_CARGO_SINGULAR_BATTERY :{G=f}Pila STR_CARGO_SINGULAR_PLASTIC :{G=m}Plástico STR_CARGO_SINGULAR_FIZZY_DRINK :{G=m}Refresco @@ -123,7 +123,7 @@ STR_QUANTITY_SWEETS :{COMMA}{NBSP}bo STR_QUANTITY_COLA :{VOLUME_LONG} de cola STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de algo{P dón dones} de azúcar STR_QUANTITY_BUBBLES :{COMMA} burbuja{P "" s} -STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de jamoncillo{P "" s} +STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramelo suave STR_QUANTITY_BATTERIES :{COMMA} pila{P "" s} STR_QUANTITY_PLASTIC :{VOLUME_LONG} de plásticos STR_QUANTITY_FIZZY_DRINKS :{COMMA} refresco{P "" s} @@ -131,39 +131,39 @@ STR_QUANTITY_N_A :N/A # Two letter abbreviation of cargo name STR_ABBREV_NOTHING : -STR_ABBREV_PASSENGERS :{TINY_FONT}PJ -STR_ABBREV_COAL :{TINY_FONT}CB -STR_ABBREV_MAIL :{TINY_FONT}CR -STR_ABBREV_OIL :{TINY_FONT}PT -STR_ABBREV_LIVESTOCK :{TINY_FONT}GN -STR_ABBREV_GOODS :{TINY_FONT}MC +STR_ABBREV_PASSENGERS :{TINY_FONT}PS +STR_ABBREV_COAL :{TINY_FONT}CA +STR_ABBREV_MAIL :{TINY_FONT}CO +STR_ABBREV_OIL :{TINY_FONT}PE +STR_ABBREV_LIVESTOCK :{TINY_FONT}GA +STR_ABBREV_GOODS :{TINY_FONT}ME STR_ABBREV_GRAIN :{TINY_FONT}GR -STR_ABBREV_WOOD :{TINY_FONT}MD -STR_ABBREV_IRON_ORE :{TINY_FONT}MH +STR_ABBREV_WOOD :{TINY_FONT}MA +STR_ABBREV_IRON_ORE :{TINY_FONT}HI STR_ABBREV_STEEL :{TINY_FONT}AC -STR_ABBREV_VALUABLES :{TINY_FONT}VA -STR_ABBREV_COPPER_ORE :{TINY_FONT}MC +STR_ABBREV_VALUABLES :{TINY_FONT}OV +STR_ABBREV_COPPER_ORE :{TINY_FONT}CB STR_ABBREV_MAIZE :{TINY_FONT}MZ -STR_ABBREV_FRUIT :{TINY_FONT}FT -STR_ABBREV_DIAMONDS :{TINY_FONT}DM +STR_ABBREV_FRUIT :{TINY_FONT}FR +STR_ABBREV_DIAMONDS :{TINY_FONT}DI STR_ABBREV_FOOD :{TINY_FONT}AL -STR_ABBREV_PAPER :{TINY_FONT}PP +STR_ABBREV_PAPER :{TINY_FONT}PA STR_ABBREV_GOLD :{TINY_FONT}OR STR_ABBREV_WATER :{TINY_FONT}AG -STR_ABBREV_WHEAT :{TINY_FONT}TG -STR_ABBREV_RUBBER :{TINY_FONT}GA +STR_ABBREV_WHEAT :{TINY_FONT}TR +STR_ABBREV_RUBBER :{TINY_FONT}CH STR_ABBREV_SUGAR :{TINY_FONT}AZ -STR_ABBREV_TOYS :{TINY_FONT}JG -STR_ABBREV_SWEETS :{TINY_FONT}DC +STR_ABBREV_TOYS :{TINY_FONT}JU +STR_ABBREV_SWEETS :{TINY_FONT}DU STR_ABBREV_COLA :{TINY_FONT}CL STR_ABBREV_CANDYFLOSS :{TINY_FONT}AA STR_ABBREV_BUBBLES :{TINY_FONT}BU -STR_ABBREV_TOFFEE :{TINY_FONT}JM +STR_ABBREV_TOFFEE :{TINY_FONT}CS STR_ABBREV_BATTERIES :{TINY_FONT}PI STR_ABBREV_PLASTIC :{TINY_FONT}PL -STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}RF -STR_ABBREV_NONE :{TINY_FONT}NO -STR_ABBREV_ALL :{TINY_FONT}TOD +STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}RE +STR_ABBREV_NONE :{TINY_FONT}NADA +STR_ABBREV_ALL :{TINY_FONT}TODO # 'Mode' of transport for cargoes STR_PASSENGERS :{COMMA}{NBSP}pasajero{P "" s} @@ -212,7 +212,7 @@ STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}{NBSP}ga STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}{NBSP}l STR_UNITS_VOLUME_SHORT_SI :{COMMA}{NBSP}m³ -STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA} gal{P ón ones} +STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}{NBSP} gal{P ón ones} STR_UNITS_VOLUME_LONG_METRIC :{COMMA}{NBSP}litro{P "" s} STR_UNITS_VOLUME_LONG_SI :{COMMA}{NBSP}m³ @@ -247,7 +247,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Arrastra STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Cambiar entre tamaño de ventana grande o pequeño STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de desplazamiento (mueve la lista arriba o abajo) STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de desplazamiento (mueve la lista izquierda o derecha) -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demoler edificios, etc. en un área de terreno. Ctrl permite trazar una diagonal para seleccionar un área cuadrada. Mayús muestra una estimación del precio +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demoler edificios, etc. en un área de terreno. Ctrl para seleccionar un área en diagonal. Mayús muestra una estimación del precio # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Mostrar ocultos @@ -271,7 +271,7 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :°!"#$%&/()=?¡ # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Longitud: {NUM} -STR_MEASURE_AREA :{BLACK}Área: {NUM} x {NUM} +STR_MEASURE_AREA :{BLACK}Área: {NUM} × {NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Longitud: {NUM}{}Diferencia altura: {HEIGHT} STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Área: {NUM}×{NUM}{}Diferencia altura: {HEIGHT} @@ -301,7 +301,7 @@ STR_SORT_BY_WAITING_TOTAL :Cargamento tota STR_SORT_BY_WAITING_AVAILABLE :Cargamento disponible en espera STR_SORT_BY_RATING_MAX :Valoración más alta de cargamento STR_SORT_BY_RATING_MIN :Valoración más baja de cargamento -STR_SORT_BY_ENGINE_ID :EngineID (classic sort)Id. locomotora (orden clásico) +STR_SORT_BY_ENGINE_ID :Id. locomotora (orden clásico) STR_SORT_BY_COST :Costo STR_SORT_BY_POWER :Potencia STR_SORT_BY_TRACTIVE_EFFORT :Fuerza de tracción @@ -598,8 +598,8 @@ STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPAN STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Ingeniero STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Director de Tráfico STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordinador de Transporte -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervisor de Ruta -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Directivo +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervisor de Rutas +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Jefe STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Subdirector STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente @@ -804,7 +804,7 @@ STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}¡Empresa de transporte en problemas! STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}¡{STRING} será vendida o declarada en bancarrota de no incrementar su desempeño pronto! -STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}¡Fusión de empresa de transportes! +STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}¡Fusión de empresas de transportes! STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}¡{STRING} fue vendida a {STRING} por {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}¡En bancarrota! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}¡{STRING} fue cerrada por sus acreedores y todos sus activos fueron vendidos! @@ -844,32 +844,32 @@ STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} tiene muy pocas órdenes en la lista STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} tiene una orden vacía STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} tiene órdenes duplicadas -STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} tiene en la lista una estación no válida -STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} tiene en la lista un aeropuerto con una pista muy corta +STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} tiene una estación no válida en la lista +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} tiene un aeropuerto con una pista muy corta en la lista STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} se está haciendo viejo STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} se está haciendo muy viejo STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} se está haciendo muy viejo y requiere renovación urgente STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} no encuentra una ruta para continuar STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} se perdió -STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}La utilidad del año pasado del {VEHICLE} fue de {CURRENCY_LONG} +STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}La utilidad de {VEHICLE} el año pasado fue de {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} no puede llegar al siguiente destino porque no está a su alcance -STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} no avanza porque no pudo reequipar su carga +STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} no avanza porque no pudo reformarse STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Renovación automática fallida para {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}¡Nuev{G o a} {STRING} ahora disponible! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}¡Nuev{G o a} {STRING} ahora disponible! - {ENGINE} -STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ya no recibe {STRING} -STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ya no recibe {STRING} ni {STRING} -STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} recibe ahora {STRING} -STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} recibe ahora {STRING} y {STRING} +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ya no acepta {STRING} +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ya no acepta {STRING} ni {STRING} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} acepta ahora {STRING} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} acepta ahora {STRING} y {STRING} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsidio vencida:{}{}{STRING} de {STRING} a {STRING} ya no está subsidiado STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidio retirado:{}{}El servicio de {STRING} desde {STRING} a {STRING} ya no está subsidiado -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Se ofrece subsidio.{}{}¡El primer servicio de {STRING} desde {STRING} a {STRING} tendrá subsidio durante un año parte del ayuntamiento local! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Se ofrece subsidio.{}{}¡El primer servicio de {STRING} desde {STRING} a {STRING} tendrá subsidio durante un año por parte del ayuntamiento local! STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}¡Subsidio otorgado a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} generará un 50% extra por un año! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}¡Subsidio otorgado a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} generará tasa doble durante un año! STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}¡Subsidio otorgado a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} generará tasa triple durante un año! @@ -1108,7 +1108,7 @@ STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Mostrar lista con opciones predeterminadas STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar solo las opciones más esenciales) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avanzado (mostrar la mayoría de las opciones) -STR_CONFIG_SETTING_RESTRICT_ALL :Experto (mostrar todas las opciones, hasta las más extrañas) +STR_CONFIG_SETTING_RESTRICT_ALL :Experto (mostrar todas las opciones, incluso las avanzadas) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Opciones con un valor diferente al predeterminado STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Opciones con un valor diferente a las opciones de partida nueva @@ -1134,14 +1134,14 @@ STR_CONFIG_SETTING_COMPANIES_ALL :Todas las empre STR_CONFIG_SETTING_NONE :Ninguno STR_CONFIG_SETTING_ORIGINAL :Original -STR_CONFIG_SETTING_REALISTIC :Simulado +STR_CONFIG_SETTING_REALISTIC :Realista STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Izquierda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Máximo préstamo inicial: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede recibir como préstamo (sin tener en cuenta la inflación) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede pedir prestada (sin tener en cuenta la inflación) STR_CONFIG_SETTING_INTEREST_RATE :Porcentaje de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Porcentaje de interés de los préstamos; controla también la inflación, en caso de estar activada STR_CONFIG_SETTING_RUNNING_COSTS :Costos de operación: {STRING} @@ -1344,8 +1344,8 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Desplazamiento STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Forma en la que la vista principal se mueve a una ubicación específica al hacer clic en el minimapa o tras una orden de moverse a un objeto determinado del mapa. Si se activa, la vista se mueve de forma suave. Si se desactiva, la vista se mueve instantáneamente al sitio indicado STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar información de medidas al usar las herramientas de construcción: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distancias en número de casillas y las diferencias de altura cuando se realicen labores de construcción -STR_CONFIG_SETTING_LIVERIES :Mostrar diseño de colores según el tipo de vehículo: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controlar el uso de diseños de colores específicos para vehículos en lugar de los específicos de cada empresa +STR_CONFIG_SETTING_LIVERIES :Mostrar cromáticas por tipo de vehículo: {STRING} +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Controlar el uso de cromáticas por vehículo y no por empresa STR_CONFIG_SETTING_LIVERIES_NONE :Ninguno STR_CONFIG_SETTING_LIVERIES_OWN :Mi empresa STR_CONFIG_SETTING_LIVERIES_ALL :Todas las empresas @@ -1792,9 +1792,9 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}¿Está # Cheat window STR_CHEATS :{WHITE}Trucos -STR_CHEATS_TOOLTIP :{BLACK}Las casillas verificadas indican que ya se usó este truco +STR_CHEATS_TOOLTIP :{BLACK}Las casillas marcadas indican que ya se usó este truco STR_CHEATS_WARNING :{BLACK}¡Atención! Estás a punto de traicionar a tus competidores. Recuerda que siempre se recordará tal deshonra -STR_CHEAT_MONEY :{LTBLUE}Recibir {CURRENCY_LONG} de dinero +STR_CHEAT_MONEY :{LTBLUE}Añadir {CURRENCY_LONG} en efectivo STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jugar como la empresa: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Excavadora mágica (elimina industrias y objetos inamovibles): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Los túneles se pueden cruzar: {ORANGE}{STRING} @@ -1810,18 +1810,18 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir cambiar los valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Diseño de colores corporativos - -STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar diseño general de colores -STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostrar diseño general de colores para trenes -STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Mostrar diseño general de colores para vehículos de carretera -STR_LIVERY_SHIP_TOOLTIP :{BLACK}Mostrar diseño general de colores de colores para barcos -STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostrar diseño general de colores de colores para aeronaves -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Elegir el color principal para el diseño seleccionado. Ctrl+Clic para establecerlo como diseño general -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Elegir el color secundario para el diseño seleccionado. Ctrl+Clic para establecerlo como diseño general -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Elegir un solo diseño de colores, o Ctrl+Clic para elegir varios. Verificar cada una casilla para establecer diferentes combinaciones según el tipo de vehículo - -STR_LIVERY_DEFAULT :Diseño de colores estándar +STR_LIVERY_CAPTION :{WHITE}Nueva cromática + +STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar cromática general +STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostrar cromáticas para trenes +STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Mostrar cromáticas para vehículos de carretera +STR_LIVERY_SHIP_TOOLTIP :{BLACK}Mostrar cromáticas para barcos +STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostrar cromáticas para aeronaves +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Elegir el color principal para la cromática elegida. Ctrl+Clic para establecerlo como cromática general +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Elegir el color secundario para el diseño seleccionado. Ctrl+Clic para establecerlo como cromática general +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Elegir un solo tipo de cromática, o Ctrl+Clic para elegir varios. Marcar las casillas para establecer diferentes combinaciones según el tipo de vehículo + +STR_LIVERY_DEFAULT :Cromática estándar STR_LIVERY_STEAM :Locomotora a vapor STR_LIVERY_DIESEL :Locomotora de diésel STR_LIVERY_ELECTRIC :Locomotora eléctrica @@ -1857,7 +1857,7 @@ STR_FACE_FEMALE_BUTTON :{BLACK}Mujer STR_FACE_FEMALE_TOOLTIP :{BLACK}Elegir cara femenina STR_FACE_NEW_FACE_BUTTON :{BLACK}Nueva cara STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Generar cara al azar -STR_FACE_ADVANCED :{BLACK}Avanzada +STR_FACE_ADVANCED :{BLACK}Avanzado STR_FACE_ADVANCED_TOOLTIP :{BLACK}Selección avanzada de caras STR_FACE_SIMPLE :{BLACK}Simple STR_FACE_SIMPLE_TOOLTIP :{BLACK}Selección simple de caras @@ -2191,7 +2191,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} cr STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} salió de la partida ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} cambió su nombre a {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} le dio a tu empresa {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {2:CURRENCY_LONG} entregado a la empresa {1:STRING} +STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {2:CURRENCY_LONG} cedidos a la empresa {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha cerrado la sesión STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Se está reiniciando el servidor...{}Espera por favor... @@ -2298,7 +2298,7 @@ STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Desactiv STR_STATION_BUILD_COVERAGE_ON :{BLACK}Activado STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}No mostrar área de recolección en el sitio planeado STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Mostrar área de recolección en el sitio planeado -STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Recibe: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Acepta: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Provee: {GOLD}{CARGO_LIST} # Join station window @@ -2475,9 +2475,9 @@ STR_STATION_BUILD_NOISE :{BLACK}Ruido ge # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Modificación de terreno -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Disminuir una esquina del terreno. Al arrastrar el ratón se reduce la primera esquina elegida y se nivela el resto del terreno seleccionado a dicha altura. Ctrl permite trazar una diagonal para seleccionar un área cuadrada. -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar una esquina del terreno. Al arrastrar el ratón se eleva la primera esquina elegida y se nivela el resto del terreno seleccionado a dicha altura. Ctrl permite trazar una diagonal para seleccionar un área cuadrada. Mayús muestra una estimación del precio -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivela un área de terreno a la altura de la primera esquina seleccionada. Ctrl permite trazar una diagonal para seleccionar un área cuadrada. Mayús muestra una estimación del precio +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Disminuir una esquina del terreno. Al arrastrar el ratón se reduce la primera esquina elegida y se nivela el resto del terreno seleccionado a dicha altura. Ctrl para seleccionar un área en diagonal. +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar una esquina del terreno. Al arrastrar el ratón se eleva la primera esquina elegida y se nivela el resto del terreno seleccionado a dicha altura. Ctrl para seleccionar un área en diagonal. Mayús muestra una estimación del precio +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivela un área de terreno a la altura de la primera esquina seleccionada. Ctrl para seleccionar un área en diagonal. Mayús muestra una estimación del precio STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para usos futuros. Mayús muestra una estimación del precio # Object construction window @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017, el equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018, el equipo de OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar partida @@ -2938,7 +2938,7 @@ STR_NEWGRF_LIST_MISSING :{RED}Archivos q STR_NEWGRF_BROKEN :{WHITE}Es posible que el funcionamiento del NewGRF '{0:STRING}' cause desincronizaciones o errores STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Cambió el estado 'vagón con motor' para '{1:ENGINE}' cuando no estaba dentro de un depósito STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}cambió la longitud del vehículo para '{1:ENGINE}' cuando no estaba dentro de un depósito -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Cambió la capacidad del vehículo para '{1:ENGINE}' cuando no estaba dentro de un depósito o mientras no se estaba reequipando +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Cambió la capacidad del vehículo para '{1:ENGINE}' cuando no estaba dentro de un depósito o mientras no se estaba reformando STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tren '{VEHICLE}' perteneciente a '{COMPANY}' tiene una longitud no válida. Puede ser debido a problemas con los NewGRF. El juego puede fallar STR_NEWGRF_BUGGY :{WHITE}El NewGRF '{0:STRING}' da información incorrecta @@ -3097,7 +3097,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ir a la STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referencia a objetivos no válida # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Nombres de estación: Clic en un nombre para centrar la vista principal en la estación. Ctrl+Clic abre una ventana de vista en dicha ubicación +STR_STATION_LIST_TOOLTIP :{BLACK}Nombres de estaciones: Clic en un nombre para centrar la vista principal en la estación. Ctrl+Clic abre una ventana de vista en dicha ubicación STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Mantener pulsado Ctrl para seleccionar más de un elemento STR_STATION_LIST_CAPTION :{WHITE}{COMPANY}: {COMMA} estaci{P ón ones} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3113,9 +3113,9 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO_SHORT} en camino desde {STATION}) STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} reservado para cargar) -STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Recibe -STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Mostrar lista de cargamento recibido -STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Recibe: {WHITE}{CARGO_LIST} +STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Acepta +STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Lista de cargamento aceptado +STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Acepta: {WHITE}{CARGO_LIST} STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estación tiene los derechos exclusivos de transporte en este pueblo. STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} compró los derechos exclusivos de transporte en este pueblo. @@ -3131,11 +3131,11 @@ STR_STATION_VIEW_WAITING_AMOUNT :Cantidad: Esper STR_STATION_VIEW_PLANNED_STATION :Estación: Planeado STR_STATION_VIEW_PLANNED_AMOUNT :Cantidad: Planeado STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} desde {STATION} -STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} por {STATION} +STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} pasando por {STATION} STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} a {STATION} STR_STATION_VIEW_FROM_ANY :{RED}{CARGO_SHORT} desde estación desconocida STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHORT} a cualquier estación -STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHORT} por cualquier estación +STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHORT} pasando por cualquier estación STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} con salida desde esta estación STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_SHORT} se detendrá en esta estación STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} a esta estación @@ -3216,7 +3216,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurada: {WHITE}{NUM} -STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Diseño de colores: +STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Cromática: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tren{P "" es} STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} vehículo{P "" s} de carretera @@ -3244,8 +3244,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver info STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nueva cara STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Elegir nueva cara para el presidente -STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Diseño de colores -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Cambiar el diseño de colores corporativos de la empresa +STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Cromática +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Cambiar la cromática (colores corporativos) de los vehículos STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Nombre empresa STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Cambiar el nombre de la empresa STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Nombre presidente @@ -3271,7 +3271,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tranvía STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Casillas de agua: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canales STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estaciones: -STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Casillas de estación +STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Casillas de estaciones STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Aeropuertos STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENCY_LONG}/año @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requiere STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requiere -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}esperando -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requiere: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} @@ -3401,7 +3399,7 @@ STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {G STR_PURCHASE_INFO_COST_SPEED :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} Velocidad: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacidad: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagones con motor: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} -STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reequipamiento: {GOLD}{STRING} +STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reforma: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todo tipo de carga STR_PURCHASE_INFO_ALL_BUT :Todo excepto {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. fuerza de tracción: {GOLD}{FORCE} @@ -3606,10 +3604,10 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esto com STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forzar al tren a proceder sin esperar a que la señal le ceda vía libre -STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Reequipar tren para transportar otro tipo de cargamento -STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reequipar vehículo de carretera para transportar otro tipo de cargamento -STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Reequipar barco para que transporte otro tipo de cargamento -STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reequipar aeronave para llevar otro tipo de cargamento +STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Reformar tren para transportar otro tipo de cargamento +STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reformar vehículo de carretera para transportar otro tipo de cargamento +STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Reformar barco para que transporte otro tipo de cargamento +STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar aeronave para llevar otro tipo de cargamento STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Cambiar dirección del tren STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forzar al vehículo a girar en sentido opuesto @@ -3722,35 +3720,35 @@ STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Mostrar STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Capacidad: {LTBLUE} # Vehicle refit -STR_REFIT_CAPTION :{WHITE}{VEHICLE} (reequipar) +STR_REFIT_CAPTION :{WHITE}{VEHICLE} (reformar) STR_REFIT_TITLE :{GOLD}Elegir el nuevo tipo de cargamento: -STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Costo por reequipar: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Ingreso al reequipar: {GREEN}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Costo por reequipar: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ingreso al reequipar: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Elegir los vehículos de ferrocarril a reequipar. Arrastrar con el ratón para elegir más de un vehículo. Clic en un espacio vacío para elegir el tren completo. Ctrl+Clic para elegir una unidad del tren y los vagones subsecuentes +STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Costo por reformar: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Ingreso al reformar: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Costo por reformar: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ingreso al reformar: {GREEN}{CURRENCY_LONG} +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Elegir los vehículos de ferrocarril a reformar. Arrastrar con el ratón para elegir más de un vehículo. Clic en un espacio vacío para elegir el tren completo. Ctrl+Clic para elegir una unidad del tren y los vagones subsecuentes STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para el tren STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para el vehículo de carretera STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para el barco STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para la aeronave -STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Reequipar tren -STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Reequipar vehículo de carretera -STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Reequipar barco -STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Reequipar aeronave +STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Reformar tren +STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Reformar vehículo de carretera +STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Reformar barco +STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Reformar aeronave -STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Reequipar el tren para transportar el cargamento elegido -STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reequipar el vehículo de carretera para transportar el cargamento elegido -STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Reequipar el barco para transportar el cargamento elegido -STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reequipar la aeronave para transportar el cargamento elegido +STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Reformar el tren para transportar el cargamento elegido +STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reformar el vehículo de carretera para transportar el cargamento elegido +STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Reformar el barco para transportar el cargamento elegido +STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar la aeronave para transportar el cargamento elegido # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Órdenes) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Itinerario STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambiar a la ventana de itinerarios -STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de órdenes: Clic en una orden para seleccionarla. Ctrl+Clic para desplazarse a la estación indicada en la orden +STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de órdenes: Clic en una orden para resaltarla. Ctrl+Clic para desplazarse a la estación indicada en la orden STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} @@ -3761,28 +3759,28 @@ STR_ORDERS_END_OF_SHARED_ORDERS :- - Fin de órd STR_ORDER_NON_STOP :{BLACK}Sin paradas STR_ORDER_GO_TO :Ir a STR_ORDER_GO_NON_STOP_TO :Ir sin paradas a -STR_ORDER_GO_VIA :Ir por +STR_ORDER_GO_VIA :Pasar por STR_ORDER_GO_NON_STOP_VIA :Ir sin paradas por -STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Cambiar el comportamiento de parada en la orden elegida +STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Cambiar la forma de parada en la orden resaltada -STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Llenar cualquier carga +STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Llenar cualquiera STR_ORDER_DROP_LOAD_IF_POSSIBLE :Cargar si hay disponible -STR_ORDER_DROP_FULL_LOAD_ALL :Llenar todas las cargas -STR_ORDER_DROP_FULL_LOAD_ANY :Llenar cualquier carga +STR_ORDER_DROP_FULL_LOAD_ALL :Llenar todo +STR_ORDER_DROP_FULL_LOAD_ANY :Llenar cualquiera STR_ORDER_DROP_NO_LOADING :No cargar -STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Cambiar el comportamiento de carga en la orden elegida +STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Cambiar la forma de carga en la orden resaltada STR_ORDER_TOGGLE_UNLOAD :{BLACK}Descargar todo -STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Descargar si es recibido +STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Descargar si es aceptado STR_ORDER_DROP_UNLOAD :Descargar todo STR_ORDER_DROP_TRANSFER :Transferir STR_ORDER_DROP_NO_UNLOADING :No descargar -STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Cambiar el comportamiento de descarga en la orden elegida +STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Cambiar la forma de descarga en la orden resaltada -STR_ORDER_REFIT :{BLACK}Reequipar -STR_ORDER_REFIT_TOOLTIP :{BLACK}Elegir el tipo de cargamento a reequipar en esta orden. Ctrl+Clic para eliminar la orden -STR_ORDER_REFIT_AUTO :{BLACK}Reequipar en estación -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elegir el tipo de cargamento a reequipar en esta orden. Ctrl+Clic para eliminar la orden. Reequipar solo es posible si el vehículo lo permite +STR_ORDER_REFIT :{BLACK}Reformar +STR_ORDER_REFIT_TOOLTIP :{BLACK}Elegir el tipo de cargamento a reformar en esta orden. Ctrl+Clic para eliminar la orden +STR_ORDER_REFIT_AUTO :{BLACK}Reformar en estación +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elegir el tipo de cargamento a reformar en esta orden. Ctrl+Clic para eliminar la orden. Reformar solo es posible si el vehículo lo permite STR_ORDER_DROP_REFIT_AUTO :Cargamento fijo STR_ORDER_DROP_REFIT_AUTO_ANY :Cargamento disponible @@ -3806,21 +3804,21 @@ STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tiempo de vida STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Comparación de los datos del vehículo respecto al valor dado STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :es igual a STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :no es igual a -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :es menos de -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :es menor o igual a -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :es más de -STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :es más o igual a +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :es menor que +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :es menor o igual que +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :es mayor que +STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :es mayor o igual a STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :es verdadero STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :es falso STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}El valor contra el cual comparar de los datos del vehículo -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Indicar el valor contra el cual comparar +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Indicar el valor a comparar -STR_ORDERS_SKIP_BUTTON :{BLACK}Saltar -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Ignorar la orden actual y saltar a la siguiente. Ctrl+Clic salta a la orden elegida +STR_ORDERS_SKIP_BUTTON :{BLACK}Ignorar +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Ignorar la orden actual y proceder con la siguiente. Ctrl+Clic para iniciar la orden resaltada STR_ORDERS_DELETE_BUTTON :{BLACK}Eliminar -STR_ORDERS_DELETE_TOOLTIP :{BLACK}Eliminar orden marcada +STR_ORDERS_DELETE_TOOLTIP :{BLACK}Eliminar orden resaltada STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Eliminar todas las órdenes STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Dejar de compartir STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Dejar de compartir la lista de órdenes. Ctrl+Clic elimina también todas las órdenes de este vehículo @@ -3835,11 +3833,11 @@ STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Ver todos los vehículos que comparten el mismo itinerario # String parts to build the order string -STR_ORDER_GO_TO_WAYPOINT :Ir por {WAYPOINT} -STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Ir sin paradas por {WAYPOINT} +STR_ORDER_GO_TO_WAYPOINT :Ir pasando por {WAYPOINT} +STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Ir sin paradas pasando por {WAYPOINT} STR_ORDER_SERVICE_AT :Mantenimiento en -STR_ORDER_SERVICE_NON_STOP_AT :Mantenimiento sin paradas en +STR_ORDER_SERVICE_NON_STOP_AT :Ir a sin paradas a mantenimiento en STR_ORDER_NEAREST_DEPOT :el más cercano STR_ORDER_NEAREST_HANGAR :el hangar más cercano @@ -3849,8 +3847,8 @@ STR_ORDER_SHIP_DEPOT :astillero de ba STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} -STR_ORDER_REFIT_ORDER :(Reequipar a {STRING}) -STR_ORDER_REFIT_STOP_ORDER :(Reequipar a {STRING} y detenerse) +STR_ORDER_REFIT_ORDER :(Reformar a {STRING}) +STR_ORDER_REFIT_STOP_ORDER :(Reformar a {STRING} y detenerse) STR_ORDER_STOP_ORDER :(Detenerse) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -3861,7 +3859,7 @@ STR_ORDER_FULL_LOAD :(Llenar todo) STR_ORDER_FULL_LOAD_ANY :(Llenar cualquiera) STR_ORDER_NO_LOAD :(No cargar) STR_ORDER_UNLOAD :(Descargar y cargar) -STR_ORDER_UNLOAD_FULL_LOAD :(Descargar y llenar) +STR_ORDER_UNLOAD_FULL_LOAD :(Descargar y llenar todo) STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Descargar y llenar cualquiera) STR_ORDER_UNLOAD_NO_LOAD :(Descargar y dejar vacío) STR_ORDER_TRANSFER :(Transferir y cargar) @@ -3869,22 +3867,22 @@ STR_ORDER_TRANSFER_FULL_LOAD :(Transferir y l STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Transferir y llenar cualquiera) STR_ORDER_TRANSFER_NO_LOAD :(Transferir y dejar vacío) STR_ORDER_NO_UNLOAD :(No descargar y cargar) -STR_ORDER_NO_UNLOAD_FULL_LOAD :(No descargar y llenar) +STR_ORDER_NO_UNLOAD_FULL_LOAD :(No descargar y llenar todo) STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(No descargar y llenar cualquiera) STR_ORDER_NO_UNLOAD_NO_LOAD :(No descargar ni cargar) -STR_ORDER_AUTO_REFIT :(Reequipar a {STRING}) -STR_ORDER_FULL_LOAD_REFIT :(Reequipar a {STRING} y llenar) -STR_ORDER_FULL_LOAD_ANY_REFIT :(Reequipar a {STRING} y llenar cualquiera) -STR_ORDER_UNLOAD_REFIT :(Descargar y cargar con reequipamiento a {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Descargar y llenar con reequipamiento a {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Descargar y llenar cualquiera con reequipamiento a {STRING}) -STR_ORDER_TRANSFER_REFIT :(Transferir y cargar con reequipamiento a {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Transferir y llenar con reequipamiento a {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Transferir y llenar cualquiera con reequipamiento a {STRING}) -STR_ORDER_NO_UNLOAD_REFIT :(No descargar y cargar con reequipamiento a {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(No descargar y llenar con reequipamiento a {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(No descargar y llenar cualquiera con reequipamiento a {STRING}) +STR_ORDER_AUTO_REFIT :(Reformar a {STRING}) +STR_ORDER_FULL_LOAD_REFIT :(Llenar todo y reformar a{STRING}) +STR_ORDER_FULL_LOAD_ANY_REFIT :(Llenar cualquiera y reformar a {STRING}) +STR_ORDER_UNLOAD_REFIT :(Descargar y cargar con reforma a {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Descargar y llenar todo con reforma a {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Descargar y llenar cualquiera con reforma a {STRING}) +STR_ORDER_TRANSFER_REFIT :(Transferir y cargar con reforma a {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Transferir y llenar con reforma a {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Transferir y llenar cualquiera con reforma a {STRING}) +STR_ORDER_NO_UNLOAD_REFIT :(No descargar y cargar con reforma a {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(No descargar y llenar todo con reforma a {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(No descargar y llenar cualquiera con reforma a {STRING}) STR_ORDER_AUTO_REFIT_ANY :cargamento disponible @@ -3892,7 +3890,7 @@ STR_ORDER_STOP_LOCATION_NEAR_END :[principio] STR_ORDER_STOP_LOCATION_MIDDLE :[centro] STR_ORDER_STOP_LOCATION_FAR_END :[fondo] -STR_ORDER_OUT_OF_RANGE :{RED} (El sig. destino está legos del alcance) +STR_ORDER_OUT_OF_RANGE :{RED} (El siguiente destino está muy lejos) STR_ORDER_CONDITIONAL_UNCONDITIONAL :Saltar a orden {COMMA} STR_ORDER_CONDITIONAL_NUM :Saltar a orden {COMMA} cuando {STRING} {STRING} {COMMA} @@ -3916,9 +3914,9 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar durante STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (durante {STRING}, no programado) STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (durante {STRING}, no programado) a {VELOCITY} como máximo STR_TIMETABLE_STAY_FOR_ESTIMATED :(esperar {STRING}, no programado) -STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar por {STRING}, no programado) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar {STRING}, no programado) STR_TIMETABLE_STAY_FOR :y esperar {STRING} -STR_TIMETABLE_AND_TRAVEL_FOR :y viajar por {STRING} +STR_TIMETABLE_AND_TRAVEL_FOR :y viajar {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}día{P "" s} STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} @@ -3949,8 +3947,8 @@ STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Borrar e STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar retrasos STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar el contador del retraso para que el vehículo vaya a tiempo -STR_TIMETABLE_AUTOFILL :{BLACK}Rellenar automáticamente -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Rellenar la tabla de itinerarios automáticamente con los valores del siguiente recorrido (Ctrl+Clic para intentar mantener los tiempos de espera) +STR_TIMETABLE_AUTOFILL :{BLACK}Llenar automáticamente +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Llenar la tabla de itinerarios automáticamente con los valores del siguiente recorrido (Ctrl+Clic para intentar mantener los tiempos de espera) STR_TIMETABLE_EXPECTED :{BLACK}Esperado STR_TIMETABLE_SCHEDULED :{BLACK}Programado @@ -4100,7 +4098,7 @@ STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... no h STR_ERROR_PNGMAP :{WHITE}No se puede cargar mapa desde PNG... STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... archivo no encontrado STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... no se pudo convertir el tipo de imagen. Se requieren imágenes PNG de 8 o 24 bits -STR_ERROR_PNGMAP_MISC :{WHITE}... algo salió mal (quizá el archivo esté tenga errores) +STR_ERROR_PNGMAP_MISC :{WHITE}... algo salió mal (quizá el archivo está dañado) STR_ERROR_BMPMAP :{WHITE}No se pudo cargar mapa desde BMP... STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... no se pudo convertir el tipo de imagen @@ -4127,13 +4125,13 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensaje # Generic construction errors STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fuera del borde del mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Demasiado cerca del borde del mapa -STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}No hay suficiente dinero: se requieren {CURRENCY_LONG} +STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}No alcanza el dinero: se necesitan {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Se requiere terreno plano STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tierra inclinada en dirección errónea STR_ERROR_CAN_T_DO_THIS :{WHITE}No se puede hacer eso... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Primero se debe demoler el edificio STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}No se puede despejar esta zona... -STR_ERROR_SITE_UNSUITABLE :{WHITE}... lugar no apropiado +STR_ERROR_SITE_UNSUITABLE :{WHITE}... lugar no apto STR_ERROR_ALREADY_BUILT :{WHITE}... ya construido STR_ERROR_OWNED_BY :{WHITE}... propiedad de {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... otra empresa es dueña de esta área @@ -4174,7 +4172,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No se pu STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No se puede construir la sede de la empresa... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}No se puede comprar el 25% de acciones... STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}No se puede vender el 25% de acciones... -STR_ERROR_PROTECTED :{WHITE}Esta empresa es aún muy reciente para comerciar con acciones... +STR_ERROR_PROTECTED :{WHITE}Esta empresa es muy reciente para comerciar con acciones... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}No se puede crear ningún pueblo @@ -4185,10 +4183,10 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... dema STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... demasiado cerca de otro pueblo STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiados pueblos STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ya no hay espacio en el mapa -STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}El pueblo no construirá carreteras. La función de construcción de carreteras puede activarse Configuración->Ambiente->Pueblos +STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}El pueblo no construirá carreteras. La función de construcción de carreteras puede activarse en Configuración->Ambiente->Pueblos STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obras de carretera en progreso STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No se puede eliminar este pueblo...{}Quedan estaciones o depósitos relacionados con él, o una propiedad suya no puede ser retirada -STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no hay lugar apropiado para una estatua en el centro de esta pueblo +STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no hay ningún lugar apto para una estatua en el centro de este pueblo # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... demasiadas industrias @@ -4209,8 +4207,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... los STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... solo se puede construir por encima del nivel de nieve STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... solo se puede construir por debajo del nivel de nieve -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}No hubo sitios apropiados para industrias '{STRING}' -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Cambia los parámetros de generación para obtener un mejor mapa +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}No hubo espacio para industrias de tipo "{STRING}" +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Cambia las opciones de generación para crear un mejor mapa # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}No se puede construir la estación de tren aquí... @@ -4227,7 +4225,7 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiad STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes de estación de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paradas de autobuses STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiadas estaciones de camiones -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Demasiado cerca de otra estación de pasajeros o carga +STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Demasiado cerca de otra estación o zona de carga STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Demasiado cerca de otro muelle STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado cerca de otro aeropuerto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}No se puede cambiar nombre de la estación... @@ -4280,14 +4278,14 @@ STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... pued STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... puede que esté detenido dentro de un astillero STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... puede que esté detenido dentro de un hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Los trenes únicamente pueden modificarse si están detenidos dentro de un depósito +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Los trenes pueden modificarse solo si están detenidos dentro de un depósito STR_ERROR_TRAIN_TOO_LONG :{WHITE}Tren demasiado largo STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}No se puede cambiar dirección del vehículo... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... vehículo compuesto por múltiples unidades STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Los tipos de vías férreas no son compatibles STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}No se puede mover vehículo... -STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}El motor posterior debe seguir siempre al delantero +STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}La locomotora trasera debe conectarse a la delantera STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}No se puede encontrar ruta al depósito STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}No se puede encontrar depósito @@ -4359,14 +4357,14 @@ STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}No se pu STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Lugar no apto para entrada de túnel STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Primero se debe demoler el túnel STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Otro túnel obstaculiza -STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}El túnel terminaría fuera del mapa +STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}El túnel se extendería más allá del mapa STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}No se puede excavar la tierra al otro lado del túnel STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... túnel demasiado largo # Object related errors STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... demasiados objetos STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}No se puede colocar objeto... -STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Otro objeto obstaculiza +STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Otro objeto estorba STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... la sede de la empresa obstaculiza STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}No es posible adquirir este terreno... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... ¡ya fue adquirido por el jugador! @@ -4381,15 +4379,15 @@ STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}No se pu STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}No se pueden añadir vehículos compartidos al grupo... # Generic vehicle errors -STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Tren obstaculiza -STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Vehículo de carretera obstaculiza -STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Barco obstaculiza +STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Tren estorba +STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Vehículo de carretera estorba +STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Barco estorba STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Aeronave obstaculiza -STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}No se puede reequipar tren... -STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}No se puede reequipar vehículo de carretera... -STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}No se puede reequipar barco... -STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}No se puede reequipar aeronave... +STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}No se puede reformar tren... +STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}No se puede reformar vehículo de carretera... +STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}No se puede reformar barco... +STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}No se puede reformar aeronave... STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}No se puede cambiar nombre del tren... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}No se puede cambiar nombre del vehículo... @@ -4467,7 +4465,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... la a # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}No se pueden asignar itinerarios al vehículo... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Los vehículos solo pueden esperar en estaciones -STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo se detendrá en esta estación +STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo no se detendrá en esta estación # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... demasiados carteles @@ -4495,7 +4493,7 @@ STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1 :Edificio de ofi STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Conjunto habitacional pequeño STR_TOWN_BUILDING_NAME_CHURCH_1 :Iglesia STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1 :Complejo de oficinas -STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Casas de pueblo +STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Casas adosadas STR_TOWN_BUILDING_NAME_HOTEL_1 :Hotel STR_TOWN_BUILDING_NAME_STATUE_1 :Estatua STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Fuente @@ -4584,7 +4582,7 @@ STR_SV_STNAME_TRANSFER :Transferencia { STR_SV_STNAME_HALT :Parada {STRING} STR_SV_STNAME_VALLEY :Valle de {STRING} STR_SV_STNAME_HEIGHTS :Altos de {STRING} -STR_SV_STNAME_WOODS :Alameda de {STRING} +STR_SV_STNAME_WOODS :Bosques de {STRING} STR_SV_STNAME_LAKESIDE :Lago de {STRING} STR_SV_STNAME_EXCHANGE :Intercambio {STRING} STR_SV_STNAME_AIRPORT :Aeropuerto de {STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e884079d44..255967c9d7 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Mark som ägs a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Ursprunglig upphovsrätt {COPYRIGHT} 1995 Chris Sawyer, Alla rättigheter hävdas STR_ABOUT_VERSION :{BLACK}OpenTTD-version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spara spel @@ -3296,11 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kräver: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kräver -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}väntar -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kräver: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} väntar{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index c0df044d1f..ec3ef56fff 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2378,7 +2378,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :நிறுவ STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ஐ பற்றி STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}அசல் உரிமைகள் {COPYRIGHT} 1995 கிறிஸ் சாயர், எல்லா உரிமைகளும் பதிவுசெய்யப்பட்டது STR_ABOUT_VERSION :{BLACK}OpenTTD பதிப்பு {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD குழுமம் +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD குழுமம் # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}ஆட்டத்தை பதிவு செய் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 1d2ff09156..d939eeeeac 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2635,7 +2635,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :บริษั STR_ABOUT_OPENTTD :{WHITE}เกี่ยวกับ OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}ลิขสิทธิ์เดิม {COPYRIGHT} ค.ศ.1995 ของ Chris Sawyer, สงวนลิขสิทธิ์ STR_ABOUT_VERSION :{BLACK}OpenTTD รุ่นที่ {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2017 ของ The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2018 ของ The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}บันทึกเกม diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 7346889e4a..7ce922edc1 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司所有土 STR_ABOUT_OPENTTD :{WHITE}關於 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原著作權為 {COPYRIGHT} 1995 Chris Sawyer,保留所有權利 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD 開發小組 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 開發小組 # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}儲存遊戲 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index f34035c22c..763fb2a65a 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Satın alınmı STR_ABOUT_OPENTTD :{WHITE}OpenTTD Hakkında STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Telif hakkı {COPYRIGHT} 1995 Chris Sawyer, Her hakkı saklıdır STR_ABOUT_VERSION :{BLACK}OpenTTD sürüm {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD ekibi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD ekibi # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Oyunu Kaydet @@ -3297,11 +3297,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}İstenen STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}İstenenler: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}bekliyor -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} bekliyor{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 1b3e3a42bb..dbb815d2dc 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2818,7 +2818,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ця ділян STR_ABOUT_OPENTTD :{WHITE}Про OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторське право {COPYRIGHT} 1995 Кріс Сойєр, Всі права захищені STR_ABOUT_VERSION :{BLACK}OpenTTD версія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 команда OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 команда OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Зберегти гру diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 2b0b989323..051b62c843 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -2475,7 +2475,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Lân fan bedriu STR_ABOUT_OPENTTD :{WHITE}Oer OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Orizjineel copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD-ferzje {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 It OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 It OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spul Opslaan diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index ff0ad37f4e..4f4d4846ff 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -776,7 +776,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Stabeyo di komp # About OpenTTD window STR_ABOUT_VERSION :{BLACK}OpenTTD versiono {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 La kruo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 La kruo OpenTTD # Save/load game/scenario STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Ludo Detali diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index f3b4cbaaec..6a0157c5a8 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1202,7 +1202,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Компани STR_ABOUT_OPENTTD :{WHITE}За OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинален copyright {COPYRIGHT} 1995 Chris Sawyer, Сите права се задржани STR_ABOUT_VERSION :{BLACK}OpenTTD верзија {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD тимот +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD тимот # Save/load game/scenario STR_SAVELOAD_LOAD_BUTTON :{BLACK}Оптоварување diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 14a70bab4e..9701899630 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2389,7 +2389,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :زمین خری STR_ABOUT_OPENTTD :{WHITE}OpenTTD در باره ی STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD ویرایش {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}ذخیره ی بازی diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index c9ef33616e..19fbce1cfd 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Đất công ty STR_ABOUT_OPENTTD :{WHITE}Về OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Nguyên tác bản quyền {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD phiên bản {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Nhóm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Nhóm OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Lưu Ván Chơi @@ -3296,11 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Yêu c STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends -STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Cần cung cấp -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}đang chờ -STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Cần cung cấp: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} đang chờ{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 4519d0e919..6e77712da4 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1372,6 +1372,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :I ffwrdd STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Sgrolio Clic-chwith: {STRING} STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Galluogi sgrolio ar y map drwy ei lusgo gyda botwm chwith y llygoden. Mae hyn yn arbennig o ddefnyddiol pan yn defnyddio sgrin-gyffwrdd ar gyfer sgrolio +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Cau ffenest wrth dde-glicio: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Cau ffenest wrth dde-glicio tu fewn iddo. Mae hyn yn analluogi dangos gwybodaeth ar dde-clicio! STR_CONFIG_SETTING_AUTOSAVE :Awtogadw: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Dewis pa mor aml y dylid awtogadw gemau @@ -1761,6 +1763,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Gwirio a STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Dangos gosodiadau AI a sgript Gêm STR_INTRO_TOOLTIP_QUIT :{BLACK}Gadael 'OpenTTD' +STR_INTRO_BASESET :{BLACK}Mae {NUM} corlun ar goll o'r set raffeg sylfaenol a ddewiswyd. Gwiriwch am ddiweddariadau i'r set raffeg. STR_INTRO_TRANSLATION :{BLACK}Mae'r cyfieithiad yma'n brin o {NUM} llinyn. Helpwch wella OpenTTD drwy ymaelodi fel cyfieithydd. Gweler readme.txt am fanylion. # Quit window @@ -2688,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tir cwmni STR_ABOUT_OPENTTD :{WHITE}Gwybodaeth am OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hawlfraint Wreiddiol {COPYRIGHT} 1995 Chris Sawyer, Holl cedwir pob hawl STR_ABOUT_VERSION :{BLACK}fersiwn OpenTTD {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 Y tîm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Y tîm OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Cadw Gêm @@ -3100,7 +3103,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Dim - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Dewis pob cyfleuster -STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Dewis pob math llwyth (gan gynnwys llwythi dim aros) +STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Dewis pob math llwyth (gan gynnwys llwythi lle nad oes dim yn disgwyl) STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Nid oes llwyth o unrhyw fath yn disgwyl # Station view window @@ -3293,6 +3296,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Angen: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Angen: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} yn disgwyl{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING} @@ -3361,6 +3367,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Dileu pob cerby STR_GROUP_RENAME_CAPTION :{BLACK}Ailenwi grŵp +STR_GROUP_PROFIT_THIS_YEAR :Elw eleni: +STR_GROUP_PROFIT_LAST_YEAR :Elw llynedd: +STR_GROUP_OCCUPANCY :Defnydd presennol: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Cerbydau Rheilffordd Newydd @@ -3393,6 +3403,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Pob math o lwyt STR_PURCHASE_INFO_ALL_BUT :Popeth ond{CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Grym Tynnu Uchaf: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Pellter cyrhaeddiad: {GOLD}{COMMA} teil +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Math awyren: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Rhestr dewis trenau. Cliciwch ar gerbyd am wybodaeth. Mae Ctrl+Clicio'n toglu cuddio'r math cerbyd STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Rhestr dewis cerbydau ffordd. Cliciwch ar gerbyd am wybodaeth. Mae Ctrl+Clicio'n toglu cuddio'r math cerbyd @@ -3527,6 +3538,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :trên maglef STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Côst: {CURRENCY_LONG} Pwysau: {WEIGHT_SHORT}{}Cyflymder: {VELOCITY} Pŵer: {POWER}{}Côst Rhedeg: {CURRENCY_LONG}/bl{}Gallu cludo: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {CURRENCY_LONG} Pwysau: {WEIGHT_SHORT}{}Cyflymder: {VELOCITY} Pŵer: {POWER} Grym Uchaf: {6:FORCE}{}Cost Rhedeg: {4:CURRENCY_LONG}/bl{}Cynhwysedd: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Cyflym. Uchaf: {VELOCITY}{}Cynhwysedd: {CARGO_LONG}{}Cost Rhedeg: {CURRENCY_LONG}/bl +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Cyflym. Uchaf: {VELOCITY}{}Math awyren: {STRING}{}Cynhwysedd: {CARGO_LONG}, {CARGO_LONG}{}Cost rhedeg: {CURRENCY_LONG}/bl +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Cyflym. Uchaf: {VELOCITY}{}Math awyren: {STRING}{}Cynhwysedd: {CARGO_LONG}{}Cost Rhedeg: {CURRENCY_LONG}/bl +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Cyflym. Uchaf: {VELOCITY}{}Math awyren: {STRING} Pellter hedfan: {COMMA} teil{}Cynhwysedd: {CARGO_LONG}, {CARGO_LONG}{}Cost Rhedeg: {CURRENCY_LONG}/bl +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Cyflym. Uchaf: {VELOCITY}{}Math awyren: {STRING} Pellter hedfan: {COMMA} teil{}Cynhwysedd: {CARGO_LONG}{}Cost Rhedeg: {CURRENCY_LONG}/bl # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Disodli {STRING} - {STRING} @@ -3649,6 +3664,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} blwyddy STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} blwyddyn ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}cyflymder uchaf: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Cyflym. uchaf: {LTBLUE}{VELOCITY} {BLACK}Math awyren: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Cyflym. uchaf: {LTBLUE}{VELOCITY} {BLACK}Math awyren: {LTBLUE}{STRING} {BLACK}Pellter hedfan: {LTBLUE}{COMMA} teil STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Pwys: {LTBLUE}{WEIGHT_SHORT} {BLACK}Pŵer: {LTBLUE}{POWER}{BLACK} Cyflym. Max: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Pwys: {LTBLUE}{WEIGHT_SHORT} {BLACK}Pŵer: {LTBLUE}{POWER}{BLACK} Cyflym. Max: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE} diff --git a/src/language.h b/src/language.h index d33ba81892..ec241dbd8c 100644 --- a/src/language.h +++ b/src/language.h @@ -105,7 +105,7 @@ extern LanguageList _languages; extern const LanguageMetadata *_current_language; #ifdef WITH_ICU_SORT -extern Collator *_current_collator; +extern icu::Collator *_current_collator; #endif /* WITH_ICU_SORT */ bool ReadLanguagePack(const LanguageMetadata *lang); diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 03500c2a26..01e8d2c45d 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -397,6 +397,7 @@ static const char * const _credits[] = { "Original graphics by Simon Foster", "", "The OpenTTD team (in alphabetical order):", + " Grzegorz Duczy\xC5\x84ski (adf88) - General coding (since 1.7.2)", " Albert Hofkamp (Alberth) - GUI expert (since 0.7)", " Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3)", " Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3)", diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index de3bda843e..471fb3f366 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -99,7 +99,6 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) int port = GetDriverParamInt(parm, "port", -1); -#ifndef NO_DEBUG_MESSAGES if (_debug_driver_level > 0) { /* Print all valid output ports. */ char desc[DMUS_MAX_DESCRIPTION]; @@ -116,7 +115,6 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) } } } -#endif IDirectMusicPort *music_port = NULL; // NULL means 'use default port'. diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4759c8a19c..5b1713709d 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -12,6 +12,7 @@ #include "stdafx.h" #include +#include #include "debug.h" #include "fileio_func.h" @@ -1970,12 +1971,12 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte if (length == 0 || number == 0) break; if (length > statspec->lengths) { + byte diff_length = length - statspec->lengths; statspec->platforms = ReallocT(statspec->platforms, length); - memset(statspec->platforms + statspec->lengths, 0, length - statspec->lengths); + memset(statspec->platforms + statspec->lengths, 0, diff_length); statspec->layouts = ReallocT(statspec->layouts, length); - memset(statspec->layouts + statspec->lengths, 0, - (length - statspec->lengths) * sizeof(*statspec->layouts)); + memset(statspec->layouts + statspec->lengths, 0, diff_length * sizeof(*statspec->layouts)); statspec->lengths = length; } @@ -3672,6 +3673,9 @@ static void DuplicateTileTable(AirportSpec *as) HangarTileTable *depot_table = MallocT(as->nof_depots); MemCpyT(depot_table, as->depot_table, as->nof_depots); as->depot_table = depot_table; + Direction *rotation = MallocT(as->num_table); + MemCpyT(rotation, as->rotation, as->num_table); + as->rotation = rotation; } /** @@ -3741,6 +3745,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } case 0x0A: { // Set airport layout + free(as->rotation); as->num_table = buf->ReadByte(); // Number of layaouts as->rotation = MallocT(as->num_table); uint32 defsize = buf->ReadDWord(); // Total size of the definition @@ -4683,16 +4688,63 @@ static void NewSpriteGroup(ByteReader *buf) group->adjusts = MallocT(group->num_adjusts); MemCpyT(group->adjusts, adjusts.Begin(), group->num_adjusts); - group->num_ranges = buf->ReadByte(); - if (group->num_ranges > 0) group->ranges = CallocT(group->num_ranges); - - for (uint i = 0; i < group->num_ranges; i++) { - group->ranges[i].group = GetGroupFromGroupID(setid, type, buf->ReadWord()); - group->ranges[i].low = buf->ReadVarSize(varsize); - group->ranges[i].high = buf->ReadVarSize(varsize); + std::vector ranges; + ranges.resize(buf->ReadByte()); + for (uint i = 0; i < ranges.size(); i++) { + ranges[i].group = GetGroupFromGroupID(setid, type, buf->ReadWord()); + ranges[i].low = buf->ReadVarSize(varsize); + ranges[i].high = buf->ReadVarSize(varsize); } group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord()); + group->error_group = ranges.size() > 0 ? ranges[0].group : group->default_group; + /* nvar == 0 is a special case -- we turn our value into a callback result */ + group->calculated_result = ranges.size() == 0; + + /* Sort ranges ascending. When ranges overlap, this may required clamping or splitting them */ + std::vector bounds; + for (uint i = 0; i < ranges.size(); i++) { + bounds.push_back(ranges[i].low); + if (ranges[i].high != UINT32_MAX) bounds.push_back(ranges[i].high + 1); + } + std::sort(bounds.begin(), bounds.end()); + bounds.erase(std::unique(bounds.begin(), bounds.end()), bounds.end()); + + std::vector target; + for (uint j = 0; j < bounds.size(); ++j) { + uint32 v = bounds[j]; + const SpriteGroup *t = group->default_group; + for (uint i = 0; i < ranges.size(); i++) { + if (ranges[i].low <= v && v <= ranges[i].high) { + t = ranges[i].group; + break; + } + } + target.push_back(t); + } + assert(target.size() == bounds.size()); + + std::vector optimised; + for (uint j = 0; j < bounds.size(); ) { + if (target[j] != group->default_group) { + DeterministicSpriteGroupRange r; + r.group = target[j]; + r.low = bounds[j]; + while (j < bounds.size() && target[j] == r.group) { + j++; + } + r.high = j < bounds.size() ? bounds[j] - 1 : UINT32_MAX; + optimised.push_back(r); + } else { + j++; + } + } + + group->num_ranges = optimised.size(); + if (group->num_ranges > 0) { + group->ranges = MallocT(group->num_ranges); + MemCpyT(group->ranges, &optimised.front(), group->num_ranges); + } break; } diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 6db12f7373..0863d09861 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -26,7 +26,18 @@ struct AirportScopeResolver : public ScopeResolver { byte layout; ///< Layout of the airport to build. TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks. - AirportScopeResolver(ResolverObject &ro, TileIndex tile, Station *st, byte airport_id, byte layout); + /** + * Constructor of the scope resolver for an airport. + * @param ro Surrounding resolver. + * @param tile %Tile for the callback, only valid for airporttile callbacks. + * @param st %Station of the airport for which the callback is run, or \c NULL for build gui. + * @param airport_id Type of airport for which the callback is run. + * @param layout Layout of the airport to build. + */ + AirportScopeResolver(ResolverObject &ro, TileIndex tile, Station *st, byte airport_id, byte layout) + : ScopeResolver(ro), st(st), airport_id(airport_id), layout(layout), tile(tile) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; @@ -242,22 +253,6 @@ AirportResolverObject::AirportResolverObject(TileIndex tile, Station *st, byte a this->root_spritegroup = AirportSpec::Get(airport_id)->grf_prop.spritegroup[0]; } -/** - * Constructor of the scope resolver for an airport. - * @param ro Surrounding resolver. - * @param tile %Tile for the callback, only valid for airporttile callbacks. - * @param st %Station of the airport for which the callback is run, or \c NULL for build gui. - * @param airport_id Type of airport for which the callback is run. - * @param layout Layout of the airport to build. - */ -AirportScopeResolver::AirportScopeResolver(ResolverObject &ro, TileIndex tile, Station *st, byte airport_id, byte layout) : ScopeResolver(ro) -{ - this->st = st; - this->airport_id = airport_id; - this->layout = layout; - this->tile = tile; -} - SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout) { AirportResolverObject object(INVALID_TILE, NULL, as->GetIndex(), layout); diff --git a/src/newgrf_airporttiles.cpp b/src/newgrf_airporttiles.cpp index 5eb24f670f..2d3a5129c9 100644 --- a/src/newgrf_airporttiles.cpp +++ b/src/newgrf_airporttiles.cpp @@ -222,21 +222,6 @@ AirportTileResolverObject::AirportTileResolverObject(const AirportTileSpec *ats, this->root_spritegroup = ats->grf_prop.spritegroup[0]; } -/** - * Constructor of the scope resolver specific for airport tiles. - * @param ats Specification of the airport tiles. - * @param tile %Tile for the callback, only valid for airporttile callbacks. - * @param st Station of the airport for which the callback is run, or \c NULL for build gui. - */ -AirportTileScopeResolver::AirportTileScopeResolver(ResolverObject &ro, const AirportTileSpec *ats, TileIndex tile, Station *st) : ScopeResolver(ro) -{ - assert(st != NULL); - - this->st = st; - this->airport_id = st->airport.type; - this->tile = tile; -} - uint16 GetAirportTileCallback(CallbackID callback, uint32 param1, uint32 param2, const AirportTileSpec *ats, Station *st, TileIndex tile, int extra_data = 0) { AirportTileResolverObject object(ats, tile, st, callback, param1, param2); diff --git a/src/newgrf_airporttiles.h b/src/newgrf_airporttiles.h index 4d25aa9240..dc04642037 100644 --- a/src/newgrf_airporttiles.h +++ b/src/newgrf_airporttiles.h @@ -17,6 +17,7 @@ #include "newgrf_animation_type.h" #include "newgrf_commons.h" #include "newgrf_spritegroup.h" +#include "station_base.h" /** Scope resolver for handling the tiles of an airport. */ struct AirportTileScopeResolver : public ScopeResolver { @@ -24,7 +25,18 @@ struct AirportTileScopeResolver : public ScopeResolver { byte airport_id; ///< Type of airport for which the callback is run. TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks. - AirportTileScopeResolver(ResolverObject &ro, const AirportTileSpec *ats, TileIndex tile, Station *st); + /** + * Constructor of the scope resolver specific for airport tiles. + * @param ats Specification of the airport tiles. + * @param tile %Tile for the callback, only valid for airporttile callbacks. + * @param st Station of the airport for which the callback is run, or \c NULL for build gui. + */ + AirportTileScopeResolver(ResolverObject &ro, const AirportTileSpec *ats, TileIndex tile, Station *st) + : ScopeResolver(ro), st(st), tile(tile) + { + assert(st != NULL); + this->airport_id = st->airport.type; + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index cba19cbdba..3438bb9850 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -25,7 +25,10 @@ WaterFeature _water_feature[CF_END]; struct CanalScopeResolver : public ScopeResolver { TileIndex tile; ///< Tile containing the canal. - CanalScopeResolver(ResolverObject &ro, TileIndex tile); + CanalScopeResolver(ResolverObject &ro, TileIndex tile) + : ScopeResolver(ro), tile(tile) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; @@ -110,11 +113,6 @@ struct CanalResolverObject : public ResolverObject { return group->loaded[0]; } -CanalScopeResolver::CanalScopeResolver(ResolverObject &ro, TileIndex tile) : ScopeResolver(ro) -{ - this->tile = tile; -} - /** * Canal resolver constructor. * @param feature Which canal feature we want. diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 8dd8d545a2..660b7e476b 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -347,21 +347,6 @@ static byte MapAircraftMovementAction(const Aircraft *v) return this->v == NULL ? 0 : this->v->waiting_triggers; } -/* virtual */ void VehicleScopeResolver::SetTriggers(int triggers) const -{ - /* Evil cast to get around const-ness. This used to be achieved by an - * innocent looking function pointer cast... Currently I cannot see a - * way of avoiding this without removing consts deep within gui code. - */ - Vehicle *v = const_cast(this->v); - - /* This function must only be called when processing triggers -- any - * other time is an error. */ - assert(this->ro.trigger != 0); - - if (v != NULL) v->waiting_triggers = triggers; -} - /* virtual */ ScopeResolver *VehicleResolverObject::GetScope(VarSpriteGroupScope scope, byte relative) { @@ -952,21 +937,6 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object, return in_motion ? group->loaded[set] : group->loading[set]; } -/** - * Scope resolver of a single vehicle. - * @param ro Surrounding resolver. - * @param engine_type Engine type - * @param v %Vehicle being resolved. - * @param info_view Indicates if the item is being drawn in an info window. - */ -VehicleScopeResolver::VehicleScopeResolver(ResolverObject &ro, EngineID engine_type, const Vehicle *v, bool info_view) - : ScopeResolver(ro) -{ - this->v = v; - this->self_type = engine_type; - this->info_view = info_view; -} - /** * Get the grf file associated with an engine type. * @param engine_type Engine to query. @@ -1140,13 +1110,18 @@ static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_rando assert(v != NULL); VehicleResolverObject object(v->engine_type, v, VehicleResolverObject::WO_CACHED, false, CBID_RANDOM_TRIGGER); - object.trigger = trigger; + object.waiting_triggers = v->waiting_triggers | trigger; + v->waiting_triggers = object.waiting_triggers; // store now for var 5F const SpriteGroup *group = object.Resolve(); if (group == NULL) return; + /* Store remaining triggers. */ + v->waiting_triggers = object.GetRemainingTriggers(); + + /* Rerandomise bits. Scopes other than SELF are invalid for rerandomisation. For bug-to-bug-compatibility with TTDP we ignore the scope. */ byte new_random_bits = Random(); - uint32 reseed = object.GetReseedSum(); // The scope only affects triggers, not the reseeding + uint32 reseed = object.GetReseedSum(); v->random_bits &= ~reseed; v->random_bits |= (first ? new_random_bits : base_random_bits) & reseed; diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index 3c8108737c..51adb0b7fb 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -26,14 +26,23 @@ struct VehicleScopeResolver : public ScopeResolver { EngineID self_type; ///< Type of the vehicle. bool info_view; ///< Indicates if the item is being drawn in an info window. - VehicleScopeResolver(ResolverObject &ro, EngineID engine_type, const Vehicle *v, bool info_view); + /** + * Scope resolver of a single vehicle. + * @param ro Surrounding resolver. + * @param engine_type Engine type + * @param v %Vehicle being resolved. + * @param info_view Indicates if the item is being drawn in an info window. + */ + VehicleScopeResolver(ResolverObject &ro, EngineID engine_type, const Vehicle *v, bool info_view) + : ScopeResolver(ro), v(v), self_type(engine_type), info_view(info_view) + { + } void SetVehicle(const Vehicle *v) { this->v = v; } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; /* virtual */ uint32 GetTriggers() const; - /* virtual */ void SetTriggers(int triggers) const; }; /** Resolver for a vehicle (chain) */ diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp index 9bd77239aa..6606422154 100644 --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -31,7 +31,16 @@ struct GenericScopeResolver : public ScopeResolver { uint8 count; uint8 station_size; - GenericScopeResolver(ResolverObject &ro, bool ai_callback); + /** + * Generic scope resolver. + * @param ro Surrounding resolver. + * @param ai_callback Callback comes from the AI. + */ + GenericScopeResolver(ResolverObject &ro, bool ai_callback) + : ScopeResolver(ro), cargo_type(0), default_selection(0), src_industry(0), dst_industry(0), distance(0), + event(), count(0), station_size(0), ai_callback(ai_callback) + { + } /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; @@ -145,24 +154,6 @@ GenericResolverObject::GenericResolverObject(bool ai_callback, CallbackID callba { } -/** - * Generic scope resolver. - * @param ro Surrounding resolver. - * @param ai_callback Callback comes from the AI. - */ -GenericScopeResolver::GenericScopeResolver(ResolverObject &ro, bool ai_callback) : ScopeResolver(ro) -{ - this->cargo_type = 0; - this->default_selection = 0; - this->src_industry = 0; - this->dst_industry = 0; - this->distance = 0; - this->event = (AIConstructionEvent)0; - this->count = 0; - this->station_size = 0; - this->ai_callback = ai_callback; -} - /** * Follow a generic feature callback list and return the first successful diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 2bc85f9acb..ebdd858a4d 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -31,28 +31,6 @@ static HouseClassMapping _class_mapping[HOUSE_CLASS_MAX]; HouseOverrideManager _house_mngr(NEW_HOUSE_OFFSET, NUM_HOUSES, INVALID_HOUSE_ID); -/** - * Constructor of a house scope resolver. - * @param ro Surrounding resolver. - * @param house_id House type being queried. - * @param tile %Tile containing the house. - * @param town %Town containing the house. - * @param not_yet_constructed House is still under construction. - * @param initial_random_bits Random bits during construction checks. - * @param watched_cargo_triggers Cargo types that triggered the watched cargo callback. - */ -HouseScopeResolver::HouseScopeResolver(ResolverObject &ro, HouseID house_id, TileIndex tile, Town *town, - bool not_yet_constructed, uint8 initial_random_bits, uint32 watched_cargo_triggers) - : ScopeResolver(ro) -{ - this->house_id = house_id; - this->tile = tile; - this->town = town; - this->not_yet_constructed = not_yet_constructed; - this->initial_random_bits = initial_random_bits; - this->watched_cargo_triggers = watched_cargo_triggers; -} - /** * Retrieve the grf file associated with a house. * @param house_id House to query. @@ -169,12 +147,6 @@ void DecreaseBuildingCount(Town *t, HouseID house_id) return this->not_yet_constructed ? 0 : GetHouseTriggers(this->tile); } -/* virtual */ void HouseScopeResolver::SetTriggers(int triggers) const -{ - assert(!this->not_yet_constructed && IsValidTile(this->tile) && IsTileType(this->tile, MP_HOUSE)); - SetHouseTriggers(this->tile, triggers); -} - static uint32 GetNumHouses(HouseID house_id, const Town *town) { uint8 map_id_count, town_id_count, map_class_count, town_class_count; @@ -613,14 +585,19 @@ static void DoTriggerHouse(TileIndex tile, HouseTrigger trigger, byte base_rando if (hs->grf_prop.spritegroup[0] == NULL) return; HouseResolverObject object(hid, tile, Town::GetByTile(tile), CBID_RANDOM_TRIGGER); - object.trigger = trigger; + object.waiting_triggers = GetHouseTriggers(tile) | trigger; + SetHouseTriggers(tile, object.waiting_triggers); // store now for var 5F const SpriteGroup *group = object.Resolve(); if (group == NULL) return; + /* Store remaining triggers. */ + SetHouseTriggers(tile, object.GetRemainingTriggers()); + + /* Rerandomise bits. Scopes other than SELF are invalid for houses. For bug-to-bug-compatibility with TTDP we ignore the scope. */ byte new_random_bits = Random(); byte random_bits = GetHouseRandomBits(tile); - uint32 reseed = object.GetReseedSum(); // The scope only affects triggers, not the reseeding + uint32 reseed = object.GetReseedSum(); random_bits &= ~reseed; random_bits |= (first ? new_random_bits : base_random) & reseed; SetHouseRandomBits(tile, random_bits); diff --git a/src/newgrf_house.h b/src/newgrf_house.h index 37c1679470..0ac868d1e7 100644 --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -27,13 +27,26 @@ struct HouseScopeResolver : public ScopeResolver { uint16 initial_random_bits; ///< Random bits during construction checks. uint32 watched_cargo_triggers; ///< Cargo types that triggered the watched cargo callback. + /** + * Constructor of a house scope resolver. + * @param ro Surrounding resolver. + * @param house_id House type being queried. + * @param tile %Tile containing the house. + * @param town %Town containing the house. + * @param not_yet_constructed House is still under construction. + * @param initial_random_bits Random bits during construction checks. + * @param watched_cargo_triggers Cargo types that triggered the watched cargo callback. + */ HouseScopeResolver(ResolverObject &ro, HouseID house_id, TileIndex tile, Town *town, - bool not_yet_constructed, uint8 initial_random_bits, uint32 watched_cargo_triggers); + bool not_yet_constructed, uint8 initial_random_bits, uint32 watched_cargo_triggers) + : ScopeResolver(ro), house_id(house_id), tile(tile), town(town), not_yet_constructed(not_yet_constructed), + initial_random_bits(initial_random_bits), watched_cargo_triggers(watched_cargo_triggers) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; /* virtual */ uint32 GetTriggers() const; - /* virtual */ void SetTriggers(int triggers) const; }; /** Resolver object to be used for houses (feature 07 spritegroups). */ diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index e8486e7604..7815ba36af 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -380,13 +380,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout /* virtual */ uint32 IndustriesScopeResolver::GetTriggers() const { - return this->industry != NULL ? this->industry->random_triggers : 0; -} - -/* virtual */ void IndustriesScopeResolver::SetTriggers(int triggers) const -{ - assert(this->industry != NULL && this->industry->index != INVALID_INDUSTRY); - this->industry->random_triggers = triggers; + return 0; } /* virtual */ void IndustriesScopeResolver::StorePSA(uint pos, int32 value) @@ -463,23 +457,6 @@ TownScopeResolver *IndustriesResolverObject::GetTown() return this->town_scope; } -/** - * Scope resolver for industries. - * @param ro Surrounding resolver. - * @param tile %Tile owned by the industry. - * @param industry %Industry being resolved. - * @param type Type of the industry. - * @param random_bits Random bits of the new industry. - */ -IndustriesScopeResolver::IndustriesScopeResolver(ResolverObject &ro, TileIndex tile, Industry *industry, IndustryType type, uint32 random_bits) - : ScopeResolver(ro) -{ - this->tile = tile; - this->industry = industry; - this->type = type; - this->random_bits = random_bits; -} - /** * Perform an industry callback. * @param callback The callback to perform. diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index 94a5021662..fa809fcd73 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -21,12 +21,22 @@ struct IndustriesScopeResolver : public ScopeResolver { IndustryType type; ///< Type of the industry. uint32 random_bits; ///< Random bits of the new industry. - IndustriesScopeResolver(ResolverObject &ro, TileIndex tile, Industry *industry, IndustryType type, uint32 random_bits = 0); + /** + * Scope resolver for industries. + * @param ro Surrounding resolver. + * @param tile %Tile owned by the industry. + * @param industry %Industry being resolved. + * @param type Type of the industry. + * @param random_bits Random bits of the new industry. + */ + IndustriesScopeResolver(ResolverObject &ro, TileIndex tile, Industry *industry, IndustryType type, uint32 random_bits = 0) + : ScopeResolver(ro), tile(tile), industry(industry), type(type), random_bits(random_bits) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; /* virtual */ uint32 GetTriggers() const; - /* virtual */ void SetTriggers(int triggers) const; /* virtual */ void StorePSA(uint pos, int32 value); }; diff --git a/src/newgrf_industrytiles.cpp b/src/newgrf_industrytiles.cpp index 90a17550d0..69c4b1d07d 100644 --- a/src/newgrf_industrytiles.cpp +++ b/src/newgrf_industrytiles.cpp @@ -117,12 +117,6 @@ uint32 GetRelativePosition(TileIndex tile, TileIndex ind_tile) return GetIndustryTriggers(this->tile); } -/* virtual */ void IndustryTileScopeResolver::SetTriggers(int triggers) const -{ - assert(this->industry != NULL && this->industry->index != INVALID_INDUSTRY && IsValidTile(this->tile) && IsTileType(this->tile, MP_INDUSTRY)); - SetIndustryTriggers(this->tile, triggers); -} - /** * Get the associated NewGRF file from the industry graphics. * @param gfx Graphics to query. @@ -152,18 +146,6 @@ IndustryTileResolverObject::IndustryTileResolverObject(IndustryGfx gfx, TileInde this->root_spritegroup = GetIndustryTileSpec(gfx)->grf_prop.spritegroup[0]; } -/** - * Constructor of the scope resolver for the industry tile. - * @param ro Surrounding resolver. - * @param industry %Industry owning the tile. - * @param tile %Tile of the industry. - */ -IndustryTileScopeResolver::IndustryTileScopeResolver(ResolverObject &ro, Industry *industry, TileIndex tile) : ScopeResolver(ro) -{ - this->industry = industry; - this->tile = tile; -} - static void IndustryDrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, byte rnd_colour, byte stage, IndustryGfx gfx) { const DrawTileSprites *dts = group->ProcessRegisters(&stage); @@ -326,11 +308,16 @@ static void DoTriggerIndustryTile(TileIndex tile, IndustryTileTrigger trigger, I if (itspec->grf_prop.spritegroup[0] == NULL) return; IndustryTileResolverObject object(gfx, tile, ind, CBID_RANDOM_TRIGGER); - object.trigger = trigger; + object.waiting_triggers = GetIndustryTriggers(tile) | trigger; + SetIndustryTriggers(tile, object.waiting_triggers); // store now for var 5F const SpriteGroup *group = object.Resolve(); if (group == NULL) return; + /* Store remaining triggers. */ + SetIndustryTriggers(tile, object.GetRemainingTriggers()); + + /* Rerandomise tile bits */ byte new_random_bits = Random(); byte random_bits = GetIndustryRandomBits(tile); random_bits &= ~object.reseed[VSG_SCOPE_SELF]; diff --git a/src/newgrf_industrytiles.h b/src/newgrf_industrytiles.h index 394f75e1c6..6051c1062b 100644 --- a/src/newgrf_industrytiles.h +++ b/src/newgrf_industrytiles.h @@ -21,12 +21,20 @@ struct IndustryTileScopeResolver : public ScopeResolver { Industry *industry; ///< Industry owning the tiles. TileIndex tile; ///< %Tile being resolved. - IndustryTileScopeResolver(ResolverObject &ro, Industry *industry, TileIndex tile); + /** + * Constructor of the scope resolver for the industry tile. + * @param ro Surrounding resolver. + * @param industry %Industry owning the tile. + * @param tile %Tile of the industry. + */ + IndustryTileScopeResolver(ResolverObject &ro, Industry *industry, TileIndex tile) + : ScopeResolver(ro), industry(industry), tile(tile) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; /* virtual */ uint32 GetTriggers() const; - /* virtual */ void SetTriggers(int triggers) const; }; /** Resolver for industry tiles. */ diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 058d5e0c00..78bbc52443 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -128,21 +128,6 @@ bool NewGRFClass::IsUIAvailable(uint index) const INSTANTIATE_NEWGRF_CLASS_METHODS(ObjectClass, ObjectSpec, ObjectClassID, OBJECT_CLASS_MAX) -/** - * Constructor of an object scope resolver. - * @param ro Surrounding resolver. - * @param obj Object being resolved. - * @param tile %Tile of the object. - * @param view View of the object. - */ -ObjectScopeResolver::ObjectScopeResolver(ResolverObject &ro, Object *obj, TileIndex tile, uint8 view) - : ScopeResolver(ro) -{ - this->obj = obj; - this->tile = tile; - this->view = view; -} - /* virtual */ uint32 ObjectScopeResolver::GetRandomBits() const { return IsValidTile(this->tile) && IsTileType(this->tile, MP_OBJECT) ? GetObjectRandomBits(this->tile) : 0; diff --git a/src/newgrf_object.h b/src/newgrf_object.h index cbd06b6f6d..69e1a3299c 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -104,7 +104,17 @@ struct ObjectScopeResolver : public ScopeResolver { TileIndex tile; ///< The tile related to the object. uint8 view; ///< The view of the object. - ObjectScopeResolver(ResolverObject &ro, Object *obj, TileIndex tile, uint8 view = 0); + /** + * Constructor of an object scope resolver. + * @param ro Surrounding resolver. + * @param obj Object being resolved. + * @param tile %Tile of the object. + * @param view View of the object. + */ + ObjectScopeResolver(ResolverObject &ro, Object *obj, TileIndex tile, uint8 view = 0) + : ScopeResolver(ro), obj(obj), tile(tile), view(view) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp index 8a074db974..624b0eca84 100644 --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -67,18 +67,6 @@ return NULL; } -/** - * Constructor of the railtype scope resolvers. - * @param ro Surrounding resolver. - * @param tile %Tile containing the track. For track on a bridge this is the southern bridgehead. - * @param context Are we resolving sprites for the upper halftile, or on a bridge? - */ -RailTypeScopeResolver::RailTypeScopeResolver(ResolverObject &ro, TileIndex tile, TileContext context) : ScopeResolver(ro) -{ - this->tile = tile; - this->context = context; -} - /** * Resolver object for rail types. * @param rti Railtype. NULL in NewGRF Inspect window. diff --git a/src/newgrf_railtype.h b/src/newgrf_railtype.h index 4c68e7d1db..5fadcd2ab5 100644 --- a/src/newgrf_railtype.h +++ b/src/newgrf_railtype.h @@ -21,7 +21,16 @@ struct RailTypeScopeResolver : public ScopeResolver { TileIndex tile; ///< Tracktile. For track on a bridge this is the southern bridgehead. TileContext context; ///< Are we resolving sprites for the upper halftile, or on a bridge? - RailTypeScopeResolver(ResolverObject &ro, TileIndex tile, TileContext context); + /** + * Constructor of the railtype scope resolvers. + * @param ro Surrounding resolver. + * @param tile %Tile containing the track. For track on a bridge this is the southern bridgehead. + * @param context Are we resolving sprites for the upper halftile, or on a bridge? + */ + RailTypeScopeResolver(ResolverObject &ro, TileIndex tile, TileContext context) + : ScopeResolver(ro), tile(tile), context(context) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index c6fcd0a9e5..a5d689bbf9 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -10,6 +10,7 @@ /** @file newgrf_spritegroup.cpp Handling of primarily NewGRF action 2. */ #include "stdafx.h" +#include #include "debug.h" #include "newgrf_spritegroup.h" #include "core/pool_func.hpp" @@ -60,11 +61,7 @@ RandomizedSpriteGroup::~RandomizedSpriteGroup() static inline uint32 GetVariable(const ResolverObject &object, ScopeResolver *scope, byte variable, uint32 parameter, bool *available) { - /* First handle variables common with Action7/9/D */ uint32 value; - if (GetGlobalVariable(variable, &value, object.grffile)) return value; - - /* Non-common variable */ switch (variable) { case 0x0C: return object.callback; case 0x10: return object.callback_param1; @@ -79,18 +76,14 @@ static inline uint32 GetVariable(const ResolverObject &object, ScopeResolver *sc if (object.grffile == NULL) return 0; return object.grffile->GetParam(parameter); - /* Not a common variable, so evaluate the feature specific variables */ - default: return scope->GetVariable(variable, parameter, available); + default: + /* First handle variables common with Action7/9/D */ + if (variable < 0x40 && GetGlobalVariable(variable, &value, object.grffile)) return value; + /* Not a common variable, so evaluate the feature specific variables */ + return scope->GetVariable(variable, parameter, available); } } -ScopeResolver::ScopeResolver(ResolverObject &ro) - : ro(ro) -{ -} - -ScopeResolver::~ScopeResolver() {} - /** * Get a few random bits. Default implementation has no random bits. * @return Random bits. @@ -109,12 +102,6 @@ ScopeResolver::~ScopeResolver() {} return 0; } -/** - * Set the triggers. Base class implementation does nothing. - * @param triggers Triggers to set. - */ -/* virtual */ void ScopeResolver::SetTriggers(int triggers) const {} - /** * Get a variable value. Default implementation has no available variables. * @param variable Variable to read @@ -136,27 +123,6 @@ ScopeResolver::~ScopeResolver() {} */ /* virtual */ void ScopeResolver::StorePSA(uint reg, int32 value) {} -/** - * Resolver constructor. - * @param grffile NewGRF file associated with the object (or \c NULL if none). - * @param callback Callback code being resolved (default value is #CBID_NO_CALLBACK). - * @param callback_param1 First parameter (var 10) of the callback (only used when \a callback is also set). - * @param callback_param2 Second parameter (var 18) of the callback (only used when \a callback is also set). - */ -ResolverObject::ResolverObject(const GRFFile *grffile, CallbackID callback, uint32 callback_param1, uint32 callback_param2) - : default_scope(*this) -{ - this->callback = callback; - this->callback_param1 = callback_param1; - this->callback_param2 = callback_param2; - this->ResetState(); - - this->grffile = grffile; - this->root_spritegroup = NULL; -} - -ResolverObject::~ResolverObject() {} - /** * Get the real sprites of the grf. * @param group Group to get. @@ -201,11 +167,9 @@ static U EvalAdjustT(const DeterministicSpriteGroupAdjust *adjust, ScopeResolver value >>= adjust->shift_num; value &= adjust->and_mask; - if (adjust->type != DSGA_TYPE_NONE) value += (S)adjust->add_val; - switch (adjust->type) { - case DSGA_TYPE_DIV: value = (S)value / (S)adjust->divmod_val; break; - case DSGA_TYPE_MOD: value = (S)value % (S)adjust->divmod_val; break; + case DSGA_TYPE_DIV: value = ((S)value + (S)adjust->add_val) / (S)adjust->divmod_val; break; + case DSGA_TYPE_MOD: value = ((S)value + (S)adjust->add_val) % (S)adjust->divmod_val; break; case DSGA_TYPE_NONE: break; } @@ -238,6 +202,11 @@ static U EvalAdjustT(const DeterministicSpriteGroupAdjust *adjust, ScopeResolver } +static bool RangeHighComparator(const DeterministicSpriteGroupRange& range, uint32 value) +{ + return range.high < value; +} + const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject &object) const { uint32 last_value = 0; @@ -269,7 +238,7 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject &object) con if (!available) { /* Unsupported variable: skip further processing and return either * the group from the first range or the default group. */ - return SpriteGroup::Resolve(this->num_ranges > 0 ? this->ranges[0].group : this->default_group, object, false); + return SpriteGroup::Resolve(this->error_group, object, false); } switch (this->size) { @@ -283,7 +252,7 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject &object) con object.last_value = last_value; - if (this->num_ranges == 0) { + if (this->calculated_result) { /* nvar == 0 is a special case -- we turn our value into a callback result */ if (value != CALLBACK_FAILED) value = GB(value, 0, 15); static CallbackResultSpriteGroup nvarzero(0, true); @@ -291,9 +260,17 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject &object) con return &nvarzero; } - for (i = 0; i < this->num_ranges; i++) { - if (this->ranges[i].low <= value && value <= this->ranges[i].high) { - return SpriteGroup::Resolve(this->ranges[i].group, object, false); + if (this->num_ranges > 4) { + DeterministicSpriteGroupRange *lower = std::lower_bound(this->ranges + 0, this->ranges + this->num_ranges, value, RangeHighComparator); + if (lower != this->ranges + this->num_ranges && lower->low <= value) { + assert(lower->low <= value && value <= lower->high); + return SpriteGroup::Resolve(lower->group, object, false); + } + } else { + for (i = 0; i < this->num_ranges; i++) { + if (this->ranges[i].low <= value && value <= this->ranges[i].high) { + return SpriteGroup::Resolve(this->ranges[i].group, object, false); + } } } @@ -304,21 +281,15 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject &object) con const SpriteGroup *RandomizedSpriteGroup::Resolve(ResolverObject &object) const { ScopeResolver *scope = object.GetScope(this->var_scope, this->count); - if (object.trigger != 0) { + if (object.callback == CBID_RANDOM_TRIGGER) { /* Handle triggers */ - /* Magic code that may or may not do the right things... */ - byte waiting_triggers = scope->GetTriggers(); - byte match = this->triggers & (waiting_triggers | object.trigger); + byte match = this->triggers & object.waiting_triggers; bool res = (this->cmp_mode == RSG_CMP_ANY) ? (match != 0) : (match == this->triggers); if (res) { - waiting_triggers &= ~match; + object.used_triggers |= match; object.reseed[this->var_scope] |= (this->num_groups - 1) << this->lowest_randbit; - } else { - waiting_triggers |= object.trigger; } - - scope->SetTriggers(waiting_triggers); } uint32 mask = (this->num_groups - 1) << this->lowest_randbit; diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 0a7705d667..6adf7c2ac8 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -174,13 +174,16 @@ struct DeterministicSpriteGroup : SpriteGroup { VarSpriteGroupScope var_scope; DeterministicSpriteGroupSize size; uint num_adjusts; - byte num_ranges; + uint num_ranges; + bool calculated_result; DeterministicSpriteGroupAdjust *adjusts; DeterministicSpriteGroupRange *ranges; // Dynamically allocated /* Dynamically allocated, this is the sole owner */ const SpriteGroup *default_group; + const SpriteGroup *error_group; // was first range, before sorting ranges + protected: const SpriteGroup *Resolve(ResolverObject &object) const; }; @@ -288,12 +291,11 @@ struct IndustryProductionSpriteGroup : SpriteGroup { struct ScopeResolver { ResolverObject &ro; ///< Surrounding resolver object. - ScopeResolver(ResolverObject &ro); - virtual ~ScopeResolver(); + ScopeResolver(ResolverObject &ro) : ro(ro) {} + virtual ~ScopeResolver() {} virtual uint32 GetRandomBits() const; virtual uint32 GetTriggers() const; - virtual void SetTriggers(int triggers) const; virtual uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; virtual void StorePSA(uint reg, int32 value); @@ -306,8 +308,20 @@ struct ScopeResolver { * to get the results of callbacks, rerandomisations or normal sprite lookups. */ struct ResolverObject { - ResolverObject(const GRFFile *grffile, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - virtual ~ResolverObject(); + /** + * Resolver constructor. + * @param grffile NewGRF file associated with the object (or \c NULL if none). + * @param callback Callback code being resolved (default value is #CBID_NO_CALLBACK). + * @param callback_param1 First parameter (var 10) of the callback (only used when \a callback is also set). + * @param callback_param2 Second parameter (var 18) of the callback (only used when \a callback is also set). + */ + ResolverObject(const GRFFile *grffile, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0) + : default_scope(*this), callback(callback), callback_param1(callback_param1), callback_param2(callback_param2), grffile(grffile), root_spritegroup(NULL) + { + this->ResetState(); + } + + virtual ~ResolverObject() {} ScopeResolver default_scope; ///< Default implementation of the grf scope. @@ -315,9 +329,10 @@ struct ResolverObject { uint32 callback_param1; ///< First parameter (var 10) of the callback. uint32 callback_param2; ///< Second parameter (var 18) of the callback. - byte trigger; - uint32 last_value; ///< Result of most recent DeterministicSpriteGroup (including procedure calls) + + uint32 waiting_triggers; ///< Waiting triggers to be used by any rerandomisation. (scope independent) + uint32 used_triggers; ///< Subset of cur_triggers, which actually triggered some rerandomisation. (scope independent) uint32 reseed[VSG_END]; ///< Collects bits to rerandomise while triggering triggers. const GRFFile *grffile; ///< GRFFile the resolved SpriteGroup belongs to @@ -346,6 +361,14 @@ struct ResolverObject { virtual ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0); + /** + * Returns the waiting triggers that did not trigger any rerandomisation. + */ + uint32 GetRemainingTriggers() const + { + return this->waiting_triggers & ~this->used_triggers; + } + /** * Returns the OR-sum of all bits that need reseeding * independent of the scope they were accessed with. @@ -367,7 +390,8 @@ struct ResolverObject { void ResetState() { this->last_value = 0; - this->trigger = 0; + this->waiting_triggers = 0; + this->used_triggers = 0; memset(this->reseed, 0, sizeof(this->reseed)); } }; diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index cd5dad7b47..41ef7af75c 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -235,13 +235,6 @@ static uint32 GetRailContinuationInfo(TileIndex tile) } -/* virtual */ void StationScopeResolver::SetTriggers(int triggers) const -{ - BaseStation *st = const_cast(this->st); - assert(st != NULL); - st->waiting_triggers = triggers; -} - /** * Station variable cache * This caches 'expensive' station variable lookups which iterate over @@ -585,23 +578,6 @@ StationResolverObject::~StationResolverObject() delete this->town_scope; } -/** - * Constructor for station scopes. - * @param ro Surrounding resolver. - * @param statspec Station (type) specification. - * @param st Instance of the station. - * @param tile %Tile of the station. - */ -StationScopeResolver::StationScopeResolver(ResolverObject &ro, const StationSpec *statspec, BaseStation *st, TileIndex tile) - : ScopeResolver(ro) -{ - this->tile = tile; - this->st = st; - this->statspec = statspec; - this->cargo_type = CT_INVALID; - this->axis = INVALID_AXIS; -} - /** * Resolve sprites for drawing a station tile. * @param statspec Station spec @@ -997,8 +973,9 @@ void TriggerStationRandomisation(Station *st, TileIndex tile, StationRandomTrigg } } - /* Convert trigger to bit */ - uint8 trigger_bit = 1 << trigger; + /* Store triggers now for var 5F */ + SetBit(st->waiting_triggers, trigger); + uint32 used_triggers = 0; /* Check all tiles over the station to check if the specindex is still in use */ TILE_AREA_LOOP(tile, area) { @@ -1014,11 +991,13 @@ void TriggerStationRandomisation(Station *st, TileIndex tile, StationRandomTrigg if (cargo_type == CT_INVALID || HasBit(ss->cargo_triggers, cargo_type)) { StationResolverObject object(ss, st, tile, CBID_RANDOM_TRIGGER, 0); - object.trigger = trigger_bit; + object.waiting_triggers = st->waiting_triggers; const SpriteGroup *group = object.Resolve(); if (group == NULL) continue; + used_triggers |= object.used_triggers; + uint32 reseed = object.GetReseedSum(); if (reseed != 0) { whole_reseed |= reseed; @@ -1037,6 +1016,7 @@ void TriggerStationRandomisation(Station *st, TileIndex tile, StationRandomTrigg } /* Update whole station random bits */ + st->waiting_triggers &= ~used_triggers; if ((whole_reseed & 0xFFFF) != 0) { st->random_bits &= ~whole_reseed; st->random_bits |= Random() & whole_reseed; diff --git a/src/newgrf_station.h b/src/newgrf_station.h index b9333c1053..5413a4c08f 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -30,11 +30,20 @@ struct StationScopeResolver : public ScopeResolver { CargoID cargo_type; ///< Type of cargo of the station. Axis axis; ///< Station axis, used only for the slope check callback. - StationScopeResolver(ResolverObject &ro, const StationSpec *statspec, BaseStation *st, TileIndex tile); + /** + * Constructor for station scopes. + * @param ro Surrounding resolver. + * @param statspec Station (type) specification. + * @param st Instance of the station. + * @param tile %Tile of the station. + */ + StationScopeResolver(ResolverObject &ro, const StationSpec *statspec, BaseStation *st, TileIndex tile) + : ScopeResolver(ro), tile(tile), st(st), statspec(statspec), cargo_type(CT_INVALID), axis(INVALID_AXIS) + { + } /* virtual */ uint32 GetRandomBits() const; /* virtual */ uint32 GetTriggers() const; - /* virtual */ void SetTriggers(int triggers) const; /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; }; diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index 2f48eb757d..820e2be689 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -16,18 +16,6 @@ #include "safeguards.h" -/** - * Resolver of a town scope. - * @param ro Surrounding resolver. - * @param t %Town of the scope. - * @param readonly Scope may change persistent storage of the town. - */ -TownScopeResolver::TownScopeResolver(ResolverObject &ro, Town *t, bool readonly) : ScopeResolver(ro) -{ - this->t = t; - this->readonly = readonly; -} - /* virtual */ uint32 TownScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const { switch (variable) { diff --git a/src/newgrf_town.h b/src/newgrf_town.h index 145571e8ae..7c4fb5395c 100644 --- a/src/newgrf_town.h +++ b/src/newgrf_town.h @@ -25,7 +25,16 @@ struct TownScopeResolver : public ScopeResolver { Town *t; ///< %Town of the scope. bool readonly; ///< When set, persistent storage of the town is read-only, - TownScopeResolver(ResolverObject &ro, Town *t, bool readonly); + /** + * Resolver of a town scope. + * @param ro Surrounding resolver. + * @param t %Town of the scope. + * @param readonly Scope may change persistent storage of the town. + */ + TownScopeResolver(ResolverObject &ro, Town *t, bool readonly) + : ScopeResolver(ro), t(t), readonly(readonly) + { + } virtual uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; virtual void StorePSA(uint reg, int32 value); diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 6338b760b8..94cfaccf93 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -42,10 +42,10 @@ const NewsItem *_statusbar_news_item = NULL; -static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages -static uint _total_news = 0; ///< current number of news items -static NewsItem *_oldest_news = NULL; ///< head of news items queue -static NewsItem *_latest_news = NULL; ///< tail of news items queue +static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages +static uint _total_news = 0; ///< current number of news items +NewsItem *_oldest_news = NULL; ///< head of news items queue +static NewsItem *_latest_news = NULL; ///< tail of news items queue /** * Forced news item. diff --git a/src/news_gui.h b/src/news_gui.h index f0b28a734c..0f42c68c6c 100644 --- a/src/news_gui.h +++ b/src/news_gui.h @@ -12,7 +12,11 @@ #ifndef NEWS_GUI_H #define NEWS_GUI_H +#include "news_type.h" + void ShowLastNewsMessage(); void ShowMessageHistory(); +extern NewsItem *_oldest_news; + #endif /* NEWS_GUI_H */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 2accfd59ab..6c85bc72d4 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -834,7 +834,7 @@ int openttd_main(int argc, char *argv[]) if (sounds_set == NULL && BaseSounds::ini_set != NULL) sounds_set = stredup(BaseSounds::ini_set); if (!BaseSounds::SetSet(sounds_set)) { if (StrEmpty(sounds_set) || !BaseSounds::SetSet(NULL)) { - usererror("Failed to find a sounds set. Please acquire a sounds set for OpenTTD. See section 4.1 of readme.txt."); + usererror("Failed to find a sounds set. Please acquire a sounds set for OpenTTD. See section 4.1 of README.md."); } else { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND); msg.SetDParamStr(0, sounds_set); @@ -847,7 +847,7 @@ int openttd_main(int argc, char *argv[]) if (music_set == NULL && BaseMusic::ini_set != NULL) music_set = stredup(BaseMusic::ini_set); if (!BaseMusic::SetSet(music_set)) { if (StrEmpty(music_set) || !BaseMusic::SetSet(NULL)) { - usererror("Failed to find a music set. Please acquire a music set for OpenTTD. See section 4.1 of readme.txt."); + usererror("Failed to find a music set. Please acquire a music set for OpenTTD. See section 4.1 of README.md."); } else { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND); msg.SetDParamStr(0, music_set); diff --git a/src/os/macosx/macos.h b/src/os/macosx/macos.h index 1e6729f121..4204d93bb6 100644 --- a/src/os/macosx/macos.h +++ b/src/os/macosx/macos.h @@ -38,4 +38,6 @@ static inline bool MacOSVersionIsAtLeast(long major, long minor, long bugfix) bool IsMonospaceFont(CFStringRef name); +void MacOSSetThreadName(const char *name); + #endif /* MACOS_H */ diff --git a/src/os/macosx/macos.mm b/src/os/macosx/macos.mm index 8d34cda58a..7fb71fe9ee 100644 --- a/src/os/macosx/macos.mm +++ b/src/os/macosx/macos.mm @@ -14,6 +14,7 @@ #include "../../rev.h" #include "macos.h" #include "../../string_func.h" +#include #define Rect OTTDRect #define Point OTTDPoint @@ -21,12 +22,26 @@ #undef Rect #undef Point +#ifndef __clang__ +#define __bridge +#endif + /* * This file contains objective C * Apple uses objective C instead of plain C to interact with OS specific/native functions */ +#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_10) +typedef struct { + NSInteger majorVersion; + NSInteger minorVersion; + NSInteger patchVersion; +} OTTDOperatingSystemVersion; + +#define NSOperatingSystemVersion OTTDOperatingSystemVersion +#endif + /** * Get the version of the MacOS we are running under. Code adopted * from http://www.cocoadev.com/index.pl?DeterminingOSVersion @@ -40,6 +55,19 @@ void GetMacOSVersion(int *return_major, int *return_minor, int *return_bugfix) *return_major = -1; *return_minor = -1; *return_bugfix = -1; + + if ([[ NSProcessInfo processInfo] respondsToSelector:@selector(operatingSystemVersion) ]) { + IMP sel = [ [ NSProcessInfo processInfo] methodForSelector:@selector(operatingSystemVersion) ]; + NSOperatingSystemVersion ver = ((NSOperatingSystemVersion (*)(id, SEL))sel)([ NSProcessInfo processInfo], @selector(operatingSystemVersion)); + + *return_major = (int)ver.majorVersion; + *return_minor = (int)ver.minorVersion; + *return_bugfix = (int)ver.patchVersion; + + return; + } + +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10) SInt32 systemVersion, version_major, version_minor, version_bugfix; if (Gestalt(gestaltSystemVersion, &systemVersion) == noErr) { if (systemVersion >= 0x1040) { @@ -52,6 +80,7 @@ void GetMacOSVersion(int *return_major, int *return_minor, int *return_bugfix) *return_bugfix = (int)GB(systemVersion, 0, 4); } } +#endif } #ifdef WITH_SDL @@ -182,7 +211,7 @@ uint GetCPUCoreCount() uint count = 1; #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) if (MacOSVersionIsAtLeast(10, 5, 0)) { - count = [ [ NSProcessInfo processInfo ] activeProcessorCount ]; + count = (uint)[ [ NSProcessInfo processInfo ] activeProcessorCount ]; } else #endif { @@ -201,7 +230,25 @@ uint GetCPUCoreCount() */ bool IsMonospaceFont(CFStringRef name) { - NSFont *font = [ NSFont fontWithName:(NSString *)name size:0.0f ]; + NSFont *font = [ NSFont fontWithName:(__bridge NSString *)name size:0.0f ]; return font != NULL ? [ font isFixedPitch ] : false; } + +/** + * Set the name of the current thread for the debugger. + * @param name The new name of the current thread. + */ +void MacOSSetThreadName(const char *name) +{ +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + if (MacOSVersionIsAtLeast(10, 6, 0)) { + pthread_setname_np(name); + } +#endif + + NSThread *cur = [ NSThread currentThread ]; + if (cur != NULL && [ cur respondsToSelector:@selector(setName:) ]) { + [ cur performSelector:@selector(setName:) withObject:[ NSString stringWithUTF8String:name ] ]; + } +} diff --git a/src/os/macosx/osx_stdafx.h b/src/os/macosx/osx_stdafx.h index 4e16b5e63b..70dc8030cc 100644 --- a/src/os/macosx/osx_stdafx.h +++ b/src/os/macosx/osx_stdafx.h @@ -53,6 +53,13 @@ #define MAC_OS_X_VERSION_10_9 1090 #endif +#ifndef MAC_OS_X_VERSION_10_10 +#define MAC_OS_X_VERSION_10_10 101000 +#endif + +#ifndef MAC_OS_X_VERSION_10_11 +#define MAC_OS_X_VERSION_10_11 101100 +#endif #define __STDC_LIMIT_MACROS #include diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index fca129c6a6..616d8bb3eb 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -79,8 +79,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,8,0,!!REVISION!! - PRODUCTVERSION 1,8,0,!!REVISION!! + FILEVERSION 1,9,0,!!ISODATE!! + PRODUCTVERSION 1,9,0,!!ISODATE!! FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -100,7 +100,7 @@ BEGIN VALUE "FileDescription", "OpenTTD\0" VALUE "FileVersion", "!!VERSION!!\0" VALUE "InternalName", "openttd\0" - VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2017. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2018. All Rights Reserved.\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "openttd.exe\0" VALUE "PrivateBuild", "\0" diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index ee60dace40..f989ff2c34 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -275,7 +275,6 @@ static uint NPFReservedTrackCost(AyStarNode *current) */ static void NPFMarkTile(TileIndex tile) { -#ifndef NO_DEBUG_MESSAGES if (_debug_npf_level < 1 || _networking) return; switch (GetTileType(tile)) { case MP_RAILWAY: @@ -296,7 +295,6 @@ static void NPFMarkTile(TileIndex tile) default: break; } -#endif } static int32 NPFWaterPathCost(AyStar *as, AyStarNode *current, OpenListNode *parent) diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp index 713e3755aa..6360567bb2 100644 --- a/src/pathfinder/yapf/yapf_base.hpp +++ b/src/pathfinder/yapf/yapf_base.hpp @@ -122,10 +122,8 @@ public: { m_veh = v; -#ifndef NO_DEBUG_MESSAGES CPerformanceTimer perf; perf.Start(); -#endif /* !NO_DEBUG_MESSAGES */ Yapf().PfSetStartupNodes(); bool bDestFound = true; @@ -154,7 +152,6 @@ public: bDestFound &= (m_pBestDestNode != NULL); -#ifndef NO_DEBUG_MESSAGES perf.Stop(); if (_debug_yapf_level >= 2) { int t = perf.Get(1000000); @@ -174,7 +171,6 @@ public: ); } } -#endif /* !NO_DEBUG_MESSAGES */ return bDestFound; } diff --git a/src/rev.cpp.in b/src/rev.cpp.in index b6bddeacfc..6689fe6891 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -26,18 +26,16 @@ bool IsReleasedVersion() /** * The text version of OpenTTD's revision. - * This will be either "..[-RC]", - * "r[M][-]" or "norev000". + * This will be either + * - "", like "..[-RC]", + * - "-g" in "master", + * - "--g" in other branches, or + * - "norev000", if the version is unknown. * * The major, minor and build are the numbers that describe releases of * OpenTTD (like 0.5.3). "-RC" is used to flag release candidates. * - * The revision number is fairly straight forward. The M is to show that - * the binary is made from modified source code. The branch shows the - * branch the revision is of and will not be there when it is trunk. - * - * norev000 is for non-releases that are made on systems without - * subversion or sources that are not a checkout of subversion. + * shows a "M", if the binary is made from modified source code. */ const char _openttd_revision[] = "!!VERSION!!"; @@ -66,13 +64,13 @@ const byte _openttd_revision_modified = !!MODIFIED!!; * 24-27 minor version * 20-23 build * 19 1 if it is a release, 0 if it is not. - * 0-18 revision number; 0 for releases and when the revision is unknown. + * 0-18 used to be the SVN revision, currently unused * * The 19th bit is there so the development/betas/alpha, etc. leading to a * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. */ -const uint32 _openttd_newgrf_version = 1 << 28 | 8 << 24 | 0 << 20 | 0 << 19 | (!!REVISION!! & ((1 << 19) - 1)); +const uint32 _openttd_newgrf_version = 1 << 28 | 9 << 24 | 0 << 20 | 0 << 19; #ifdef __MORPHOS__ /** diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index d5d9bc3a48..f01afb425d 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2157,22 +2157,21 @@ bool AfterLoadGame() /* Animated tiles would sometimes not be actually animated or * in case of old savegames duplicate. */ - extern TileIndex *_animated_tile_list; - extern uint _animated_tile_count; + extern SmallVector _animated_tiles; - for (uint i = 0; i < _animated_tile_count; /* Nothing */) { + for (TileIndex *tile = _animated_tiles.Begin(); tile < _animated_tiles.End(); /* Nothing */) { /* Remove if tile is not animated */ - bool remove = _tile_type_procs[GetTileType(_animated_tile_list[i])]->animate_tile_proc == NULL; + bool remove = _tile_type_procs[GetTileType(*tile)]->animate_tile_proc == NULL; /* and remove if duplicate */ - for (uint j = 0; !remove && j < i; j++) { - remove = _animated_tile_list[i] == _animated_tile_list[j]; + for (TileIndex *j = _animated_tiles.Begin(); !remove && j < tile; j++) { + remove = *tile == *j; } if (remove) { - DeleteAnimatedTile(_animated_tile_list[i]); + DeleteAnimatedTile(*tile); } else { - i++; + tile++; } } } diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 3fc5f61753..2152c42e34 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -12,22 +12,21 @@ #include "../stdafx.h" #include "../tile_type.h" #include "../core/alloc_func.hpp" +#include "../core/smallvec_type.hpp" #include "saveload.h" #include "../safeguards.h" -extern TileIndex *_animated_tile_list; -extern uint _animated_tile_count; -extern uint _animated_tile_allocated; +extern SmallVector _animated_tiles; /** * Save the ANIT chunk. */ static void Save_ANIT() { - SlSetLength(_animated_tile_count * sizeof(*_animated_tile_list)); - SlArray(_animated_tile_list, _animated_tile_count, SLE_UINT32); + SlSetLength(_animated_tiles.Length() * sizeof(*_animated_tiles.Begin())); + SlArray(_animated_tiles.Begin(), _animated_tiles.Length(), SLE_UINT32); } /** @@ -38,22 +37,20 @@ static void Load_ANIT() /* Before version 80 we did NOT have a variable length animated tile table */ if (IsSavegameVersionBefore(80)) { /* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */ - SlArray(_animated_tile_list, 256, IsSavegameVersionBefore(6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32); + TileIndex anim_list[256]; + SlArray(anim_list, 256, IsSavegameVersionBefore(6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32); - for (_animated_tile_count = 0; _animated_tile_count < 256; _animated_tile_count++) { - if (_animated_tile_list[_animated_tile_count] == 0) break; + for (int i = 0; i < 256; i++) { + if (anim_list[i] == 0) break; + *_animated_tiles.Append() = anim_list[i]; } return; } - _animated_tile_count = (uint)SlGetFieldLength() / sizeof(*_animated_tile_list); - - /* Determine a nice rounded size for the amount of allocated tiles */ - _animated_tile_allocated = 256; - while (_animated_tile_allocated < _animated_tile_count) _animated_tile_allocated *= 2; - - _animated_tile_list = ReallocT(_animated_tile_list, _animated_tile_allocated); - SlArray(_animated_tile_list, _animated_tile_count, SLE_UINT32); + uint count = (uint)SlGetFieldLength() / sizeof(*_animated_tiles.Begin()); + _animated_tiles.Clear(); + _animated_tiles.Append(count); + SlArray(_animated_tiles.Begin(), count, SLE_UINT32); } /** diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index c5ddadfdd0..b28730e3c3 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -57,7 +57,7 @@ static const SaveLoad _industry_desc[] = { SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 160), SLE_CONDREF(Industry, psa, REF_STORAGE, 161, SL_MAX_VERSION), - SLE_CONDVAR(Industry, random_triggers, SLE_UINT8, 82, SL_MAX_VERSION), + SLE_CONDNULL(1, 82, 196), // random_triggers SLE_CONDVAR(Industry, random, SLE_UINT16, 82, SL_MAX_VERSION), SLE_CONDNULL(32, 2, 143), // old reserved space diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 0c57166816..61a5aa5c6d 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -28,6 +28,7 @@ #include "../engine_func.h" #include "../company_base.h" #include "../disaster_vehicle.h" +#include "../core/smallvec_type.hpp" #include "saveload_internal.h" #include "oldloader.h" @@ -490,8 +491,7 @@ static inline uint RemapOrderIndex(uint x) return _savegame_type == SGT_TTO ? (x - 0x1AC4) / 2 : (x - 0x1C18) / 2; } -extern TileIndex *_animated_tile_list; -extern uint _animated_tile_count; +extern SmallVector _animated_tiles; extern char *_old_name_array; static uint32 _old_town_index; @@ -640,22 +640,18 @@ static bool LoadOldOrder(LoadgameState *ls, int num) static bool LoadOldAnimTileList(LoadgameState *ls, int num) { - /* This is slightly hackish - we must load a chunk into an array whose - * address isn't static, but instead pointed to by _animated_tile_list. - * To achieve that, create an OldChunks list on the stack on the fly. - * The list cannot be static because the value of _animated_tile_list - * can change between calls. */ - + TileIndex anim_list[256]; const OldChunks anim_chunk[] = { - OCL_VAR ( OC_TILE, 256, _animated_tile_list ), + OCL_VAR ( OC_TILE, 256, anim_list ), OCL_END () }; if (!LoadChunk(ls, NULL, anim_chunk)) return false; - /* Update the animated tile counter by counting till the first zero in the array */ - for (_animated_tile_count = 0; _animated_tile_count < 256; _animated_tile_count++) { - if (_animated_tile_list[_animated_tile_count] == 0) break; + /* The first zero in the loaded array indicates the end of the list. */ + for (int i = 0; i < 256; i++) { + if (anim_list[i] == 0) break; + *_animated_tiles.Append() = anim_list[i]; } return true; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index dfa3be7219..cea80b59df 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -264,8 +264,9 @@ * 194 26881 1.5.x, 1.6.0 * 195 27572 1.6.x * 196 27778 1.7.x + * 197 27978 1.8.x */ -extern const uint16 SAVEGAME_VERSION = 196; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 197; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. diff --git a/src/script/api/ai/ai_company.hpp.sq b/src/script/api/ai/ai_company.hpp.sq index 76cc18e3a5..7ed55d97b6 100644 --- a/src/script/api/ai/ai_company.hpp.sq +++ b/src/script/api/ai/ai_company.hpp.sq @@ -21,15 +21,16 @@ void SQAICompany_Register(Squirrel *engine) SQAICompany.PreRegister(engine); SQAICompany.AddConstructor(engine, "x"); - SQAICompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); + SQAICompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); + SQAICompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); + SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); + SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); + SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::IsMine, "IsMine", 2, ".i"); diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index db1c6eb2a2..25e8b3e378 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -15,11 +15,15 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * + * \b 1.9.0 + * + * 1.9.0 is not yet released. The following changes are not set in stone yet. + * * \b 1.8.0 * * 1.8.0 is not yet released. The following changes are not set in stone yet. * - * \b 1.7.0 + * \b 1.7.0 - 1.7.2 * * No changes * diff --git a/src/script/api/game/game_client.hpp.sq b/src/script/api/game/game_client.hpp.sq new file mode 100644 index 0000000000..b4230a6d05 --- /dev/null +++ b/src/script/api/game/game_client.hpp.sq @@ -0,0 +1,34 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_client.hpp" +#include "../template/template_client.hpp.sq" + + +template <> const char *GetClassName() { return "GSClient"; } + +void SQGSClient_Register(Squirrel *engine) +{ + DefSQClass SQGSClient("GSClient"); + SQGSClient.PreRegister(engine); + SQGSClient.AddConstructor(engine, "x"); + + SQGSClient.DefSQConst(engine, ScriptClient::CLIENT_INVALID, "CLIENT_INVALID"); + SQGSClient.DefSQConst(engine, ScriptClient::CLIENT_SERVER, "CLIENT_SERVER"); + SQGSClient.DefSQConst(engine, ScriptClient::CLIENT_FIRST, "CLIENT_FIRST"); + + SQGSClient.DefSQStaticMethod(engine, &ScriptClient::ResolveClientID, "ResolveClientID", 2, ".i"); + SQGSClient.DefSQStaticMethod(engine, &ScriptClient::GetName, "GetName", 2, ".i"); + SQGSClient.DefSQStaticMethod(engine, &ScriptClient::GetCompany, "GetCompany", 2, ".i"); + SQGSClient.DefSQStaticMethod(engine, &ScriptClient::GetJoinDate, "GetJoinDate", 2, ".i"); + + SQGSClient.PostRegister(engine); +} diff --git a/src/script/api/game/game_clientlist.hpp.sq b/src/script/api/game/game_clientlist.hpp.sq new file mode 100644 index 0000000000..ef02586474 --- /dev/null +++ b/src/script/api/game/game_clientlist.hpp.sq @@ -0,0 +1,37 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_clientlist.hpp" +#include "../template/template_clientlist.hpp.sq" + + +template <> const char *GetClassName() { return "GSClientList"; } + +void SQGSClientList_Register(Squirrel *engine) +{ + DefSQClass SQGSClientList("GSClientList"); + SQGSClientList.PreRegister(engine, "GSList"); + SQGSClientList.AddConstructor(engine, "x"); + + SQGSClientList.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSClientList_Company"; } + +void SQGSClientList_Company_Register(Squirrel *engine) +{ + DefSQClass SQGSClientList_Company("GSClientList_Company"); + SQGSClientList_Company.PreRegister(engine, "GSList"); + SQGSClientList_Company.AddConstructor(engine, "xi"); + + SQGSClientList_Company.PostRegister(engine); +} diff --git a/src/script/api/game/game_company.hpp.sq b/src/script/api/game/game_company.hpp.sq index 56917a5b21..29476fc8aa 100644 --- a/src/script/api/game/game_company.hpp.sq +++ b/src/script/api/game/game_company.hpp.sq @@ -27,6 +27,7 @@ void SQGSCompany_Register(Squirrel *engine) SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); diff --git a/src/script/api/game/game_viewport.hpp.sq b/src/script/api/game/game_viewport.hpp.sq index d313f0d755..357357ae39 100644 --- a/src/script/api/game/game_viewport.hpp.sq +++ b/src/script/api/game/game_viewport.hpp.sq @@ -21,7 +21,10 @@ void SQGSViewport_Register(Squirrel *engine) SQGSViewport.PreRegister(engine); SQGSViewport.AddConstructor(engine, "x"); - SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollTo, "ScrollTo", 2, ".i"); + SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollTo, "ScrollTo", 2, ".i"); + SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollEveryoneTo, "ScrollEveryoneTo", 2, ".i"); + SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollCompanyClientsTo, "ScrollCompanyClientsTo", 3, ".ii"); + SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollClientTo, "ScrollClientTo", 3, ".ii"); SQGSViewport.PostRegister(engine); } diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 00b9539590..5f278e4f08 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -15,11 +15,22 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * + * \b 1.9.0 + * + * 1.9.0 is not yet released. The following changes are not set in stone yet. + * API additions: + * \li GSClient + * \li GSClientList + * \li GSClientList_Company + * \li GSViewport::ScrollEveryoneTo + * \li GSViewport::ScrollCompanyClientsTo + * \li GSViewport::ScrollClientTo + * * \b 1.8.0 * - * 1.8.0 is not yet released. The following changes are not set in stone yet. + * No changes * - * \b 1.7.0 + * \b 1.7.0 - 1.7.2 * * No changes * diff --git a/src/script/api/script_client.cpp b/src/script/api/script_client.cpp new file mode 100644 index 0000000000..771a0ae4ec --- /dev/null +++ b/src/script/api/script_client.cpp @@ -0,0 +1,74 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_client.cpp Implementation of ScriptClient. */ + +#include "../../stdafx.h" +#include "script_client.hpp" +#include "../../network/network.h" +#include "../../network/network_base.h" + +#include "../../safeguards.h" + +#ifdef ENABLE_NETWORK +/** + * Finds NetworkClientInfo given client-identifier, + * is used by other methods to resolve client-identifier. + * @param client The client to get info structure for + * @return A pointer to corresponding CI struct or NULL when not found. + */ +static NetworkClientInfo *FindClientInfo(ScriptClient::ClientID client) +{ + if (client == ScriptClient::CLIENT_INVALID) return NULL; + if (!_networking) return NULL; + return NetworkClientInfo::GetByClientID((::ClientID)client); +} +#endif + +/* static */ ScriptClient::ClientID ScriptClient::ResolveClientID(ScriptClient::ClientID client) +{ +#ifdef ENABLE_NETWORK + return (FindClientInfo(client) == NULL ? ScriptClient::CLIENT_INVALID : client); +#else + return CLIENT_INVALID; +#endif +} + +/* static */ char *ScriptClient::GetName(ScriptClient::ClientID client) +{ +#ifdef ENABLE_NETWORK + NetworkClientInfo *ci = FindClientInfo(client); + if (ci == NULL) return NULL; + return stredup(ci->client_name); +#else + return NULL; +#endif +} + +/* static */ ScriptCompany::CompanyID ScriptClient::GetCompany(ScriptClient::ClientID client) +{ +#ifdef ENABLE_NETWORK + NetworkClientInfo *ci = FindClientInfo(client); + if (ci == NULL) return ScriptCompany::COMPANY_INVALID; + return (ScriptCompany::CompanyID)ci->client_playas; +#else + return ScriptCompany::COMPANY_INVALID; +#endif +} + +/* static */ ScriptDate::Date ScriptClient::GetJoinDate(ScriptClient::ClientID client) +{ +#ifdef ENABLE_NETWORK + NetworkClientInfo *ci = FindClientInfo(client); + if (ci == NULL) return ScriptDate::DATE_INVALID; + return (ScriptDate::Date)ci->join_date; +#else + return ScriptDate::DATE_INVALID; +#endif +} diff --git a/src/script/api/script_client.hpp b/src/script/api/script_client.hpp new file mode 100644 index 0000000000..423f134c07 --- /dev/null +++ b/src/script/api/script_client.hpp @@ -0,0 +1,70 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_client.hpp Everything to query a network client's information */ + +#ifndef SCRIPT_CLIENT_HPP +#define SCRIPT_CLIENT_HPP + +#include "script_text.hpp" +#include "script_date.hpp" +#include "script_company.hpp" +#include "../../network/network_type.h" + +/** + * Class that handles all client related functions. + * + * @api game + */ +class ScriptClient : public ScriptObject { +public: + + /** Different constants related to ClientID. */ + enum ClientID { + CLIENT_INVALID = 0, ///< Client is not part of anything + CLIENT_SERVER = 1, ///< Servers always have this ID + CLIENT_FIRST = 2, ///< The first client ID + }; + + /** + * Resolves the given client id to the correct index for the client. + * If the client with the given id does not exist it will + * return CLIENT_INVALID. + * @param client The client id to resolve. + * @return The resolved client id. + */ + static ClientID ResolveClientID(ClientID client); + + /** + * Get the name of the given client. + * @param client The client to get the name for. + * @pre ResolveClientID(client) != CLIENT_INVALID. + * @return The name of the given client. + */ + static char *GetName(ClientID client); + + /** + * Get the company in which the given client is playing. + * @param client The client to get company for. + * @pre ResolveClientID(client) != CLIENT_INVALID. + * @return The company in which client is playing or COMPANY_SPECTATOR. + */ + static ScriptCompany::CompanyID GetCompany(ClientID client); + + /** + * Get the game date when the given client has joined. + * @param client The client to get joining date for. + * @pre ResolveClientID(client) != CLIENT_INVALID. + * @return The date when client has joined. + */ + static ScriptDate::Date GetJoinDate(ClientID client); +}; + + +#endif /* SCRIPT_CLIENT_HPP */ diff --git a/src/script/api/script_clientlist.cpp b/src/script/api/script_clientlist.cpp new file mode 100644 index 0000000000..2f7a19a9ff --- /dev/null +++ b/src/script/api/script_clientlist.cpp @@ -0,0 +1,49 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_clientlist.cpp Implementation of ScriptClientList and friends. */ + +#include "../../stdafx.h" +#include "script_company.hpp" +#include "script_clientlist.hpp" +#include "../../network/network.h" +#include "../../network/network_base.h" + +#include "../../safeguards.h" + +ScriptClientList::ScriptClientList() +{ +#ifdef ENABLE_NETWORK + if (!_networking) return; + NetworkClientInfo *ci; + FOR_ALL_CLIENT_INFOS(ci) { + this->AddItem(ci->client_id); + } +#endif +} + +ScriptClientList_Company::ScriptClientList_Company(ScriptCompany::CompanyID company) +{ +#ifdef ENABLE_NETWORK + if (!_networking) return; + CompanyID c; + if (company == ScriptCompany::COMPANY_SPECTATOR) { + c = ::COMPANY_SPECTATOR; + } else { + company = ScriptCompany::ResolveCompanyID(company); + if (company == ScriptCompany::COMPANY_INVALID) return; + c = (CompanyID)company; + } + + NetworkClientInfo *ci; + FOR_ALL_CLIENT_INFOS(ci) { + if (ci->client_playas == c) this->AddItem(ci->client_id); + } +#endif +} diff --git a/src/script/api/script_clientlist.hpp b/src/script/api/script_clientlist.hpp new file mode 100644 index 0000000000..58d0177b21 --- /dev/null +++ b/src/script/api/script_clientlist.hpp @@ -0,0 +1,42 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_clientlist.hpp List all the TODO. */ + +#ifndef SCRIPT_CLIENTLIST_HPP +#define SCRIPT_CLIENTLIST_HPP + +#include "script_list.hpp" +#include "script_company.hpp" + + +/** + * Creates a list of clients that are currently in game. + * @api game + * @ingroup ScriptList + */ +class ScriptClientList : public ScriptList { +public: + ScriptClientList(); +}; + +/** + * Creates a list of clients that are playing in the company. + * @api game + * @ingroup ScriptList + */ +class ScriptClientList_Company : public ScriptList { +public: + /** + * @param company_id The company to list clients for. + */ + ScriptClientList_Company(ScriptCompany::CompanyID company); +}; + +#endif /* SCRIPT_CIENTLIST_HPP */ diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp index 4deaeed5e3..4bfe0d02e6 100644 --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -30,12 +30,13 @@ public: /** Different constants related to CompanyID. */ enum CompanyID { /* Note: these values represent part of the in-game Owner enum */ - COMPANY_FIRST = ::COMPANY_FIRST, ///< The first available company. - COMPANY_LAST = ::MAX_COMPANIES, ///< The last available company. + COMPANY_FIRST = ::COMPANY_FIRST, ///< The first available company. + COMPANY_LAST = ::MAX_COMPANIES, ///< The last available company. /* Custom added value, only valid for this API */ - COMPANY_INVALID = -1, ///< An invalid company. - COMPANY_SELF = 254, ///< Constant that gets resolved to the correct company index for your company. + COMPANY_INVALID = -1, ///< An invalid company. + COMPANY_SELF = 254, ///< Constant that gets resolved to the correct company index for your company. + COMPANY_SPECTATOR = 255, ///< Constant indicating that player is spectating (gets resolved to COMPANY_INVALID) }; /** Possible genders for company presidents. */ diff --git a/src/script/api/script_viewport.cpp b/src/script/api/script_viewport.cpp index 737e7e68da..bed3ba9923 100644 --- a/src/script/api/script_viewport.cpp +++ b/src/script/api/script_viewport.cpp @@ -10,9 +10,11 @@ /** @file script_viewport.cpp Implementation of ScriptViewport. */ #include "../../stdafx.h" +#include "script_error.hpp" #include "script_viewport.hpp" #include "script_game.hpp" #include "script_map.hpp" +#include "../script_instance.hpp" #include "../../viewport_func.h" #include "../../safeguards.h" @@ -24,3 +26,34 @@ ScrollMainWindowToTile(tile); } + +/* static */ bool ScriptViewport::ScrollEveryoneTo(TileIndex tile) +{ + EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); + EnforcePrecondition(false, ScriptMap::IsValidTile(tile)); + + return ScriptObject::DoCommand(tile, VST_EVERYONE, 0, CMD_SCROLL_VIEWPORT); +} + +/* static */ bool ScriptViewport::ScrollCompanyClientsTo(ScriptCompany::CompanyID company, TileIndex tile) +{ + EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); + EnforcePrecondition(false, ScriptMap::IsValidTile(tile)); + + company = ScriptCompany::ResolveCompanyID(company); + EnforcePrecondition(false, company != ScriptCompany::COMPANY_INVALID); + + return ScriptObject::DoCommand(tile, VST_COMPANY, company, CMD_SCROLL_VIEWPORT); +} + +/* static */ bool ScriptViewport::ScrollClientTo(ScriptClient::ClientID client, TileIndex tile) +{ + EnforcePrecondition(false, ScriptGame::IsMultiplayer()); + EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); + EnforcePrecondition(false, ScriptMap::IsValidTile(tile)); + + client = ScriptClient::ResolveClientID(client); + EnforcePrecondition(false, client != ScriptClient::CLIENT_INVALID); + + return ScriptObject::DoCommand(tile, VST_CLIENT, client, CMD_SCROLL_VIEWPORT); +} diff --git a/src/script/api/script_viewport.hpp b/src/script/api/script_viewport.hpp index 542b58095e..cae1a59300 100644 --- a/src/script/api/script_viewport.hpp +++ b/src/script/api/script_viewport.hpp @@ -13,6 +13,8 @@ #define SCRIPT_VIEWPORT_HPP #include "script_object.hpp" +#include "script_client.hpp" +#include "script_company.hpp" /** * Class that manipulates the user's viewport. @@ -28,6 +30,38 @@ public: * @pre ScriptMap::IsValidTile(tile). */ static void ScrollTo(TileIndex tile); + + /** + * Scroll the viewport of all players to the given tile, + * where the tile will be in the center of the screen. + * @param tile The tile to put in the center of the screen. + * @pre ScriptObject::GetCompany() == OWNER_DEITY + * @pre ScriptMap::IsValidTile(tile) + */ + static bool ScrollEveryoneTo(TileIndex tile); + + /** + * Scroll the viewports of all players in the company to the given tile, + * where the tile will be in the center of the screen. + * @param company The company which players to scroll the viewport of. + * @param tile The tile to put in the center of the screen. + * @pre ScriptObject::GetCompany() == OWNER_DEITY + * @pre ScriptMap::IsValidTile(tile) + * @pre ResolveCompanyID(company) != COMPANY_INVALID + */ + static bool ScrollCompanyClientsTo(ScriptCompany::CompanyID company, TileIndex tile); + + /** + * Scroll the viewport of the client to the given tile, + * where the tile will be in the center of the screen. + * @param client The client to scroll the viewport of. + * @param tile The tile to put in the center of the screen. + * @pre ScriptGame::IsMultiplayer() + * @pre ScriptObject::GetCompany() == OWNER_DEITY + * @pre ScriptMap::IsValidTile(tile) + * @pre ResolveClientID(client) != CLIENT_INVALID + */ + static bool ScrollClientTo(ScriptClient::ClientID client, TileIndex tile); }; #endif /* SCRIPT_ADMIN_HPP */ diff --git a/src/script/api/template/template_client.hpp.sq b/src/script/api/template/template_client.hpp.sq new file mode 100644 index 0000000000..13b9d68b6a --- /dev/null +++ b/src/script/api/template/template_client.hpp.sq @@ -0,0 +1,25 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_client.hpp" + +namespace SQConvert { + /* Allow enums to be used as Squirrel parameters */ + template <> inline ScriptClient::ClientID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptClient::ClientID)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptClient::ClientID res) { sq_pushinteger(vm, (int32)res); return 1; } + + /* Allow ScriptClient to be used as Squirrel parameter */ + template <> inline ScriptClient *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClient *)instance; } + template <> inline ScriptClient &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClient *)instance; } + template <> inline const ScriptClient *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClient *)instance; } + template <> inline const ScriptClient &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClient *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptClient *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Client", res, NULL, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert diff --git a/src/script/api/template/template_clientlist.hpp.sq b/src/script/api/template/template_clientlist.hpp.sq new file mode 100644 index 0000000000..74c3f4525f --- /dev/null +++ b/src/script/api/template/template_clientlist.hpp.sq @@ -0,0 +1,30 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_clientlist.hpp" + +namespace SQConvert { + /* Allow ScriptClientList to be used as Squirrel parameter */ + template <> inline ScriptClientList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList *)instance; } + template <> inline ScriptClientList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList *)instance; } + template <> inline const ScriptClientList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList *)instance; } + template <> inline const ScriptClientList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptClientList *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "ClientList", res, NULL, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert + +namespace SQConvert { + /* Allow ScriptClientList_Company to be used as Squirrel parameter */ + template <> inline ScriptClientList_Company *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList_Company *)instance; } + template <> inline ScriptClientList_Company &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList_Company *)instance; } + template <> inline const ScriptClientList_Company *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList_Company *)instance; } + template <> inline const ScriptClientList_Company &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList_Company *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptClientList_Company *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "ClientList_Company", res, NULL, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp index 8cf4a632bc..8133bf62f6 100644 --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -18,6 +18,7 @@ #ifdef WITH_COCOA #include "../stdafx.h" +#include "../os/macosx/macos.h" #include "../debug.h" #include "../driver.h" #include "../mixer.h" @@ -47,8 +48,6 @@ static OSStatus audioCallback(void *inRefCon, AudioUnitRenderActionFlags *inActi const char *SoundDriver_Cocoa::Start(const char * const *parm) { - Component comp; - ComponentDescription desc; struct AURenderCallbackStruct callback; AudioStreamBasicDescription requestedDesc; @@ -71,21 +70,49 @@ const char *SoundDriver_Cocoa::Start(const char * const *parm) MxInitialize((uint)requestedDesc.mSampleRate); - /* Locate the default output audio unit */ - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_HALOutput; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; - - comp = FindNextComponent (NULL, &desc); - if (comp == NULL) { - return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned NULL"; - } - - /* Open & initialize the default output audio unit */ - if (OpenAComponent(comp, &_outputAudioUnit) != noErr) { - return "cocoa_s: Failed to start CoreAudio: OpenAComponent"; +#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK) + if (MacOSVersionIsAtLeast(10, 6, 0)) { + /* Locate the default output audio unit */ + AudioComponentDescription desc; + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_HALOutput; + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; + + AudioComponent comp = AudioComponentFindNext (NULL, &desc); + if (comp == NULL) { + return "cocoa_s: Failed to start CoreAudio: AudioComponentFindNext returned NULL"; + } + + /* Open & initialize the default output audio unit */ + if (AudioComponentInstanceNew(comp, &_outputAudioUnit) != noErr) { + return "cocoa_s: Failed to start CoreAudio: AudioComponentInstanceNew"; + } + } else +#endif + { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) + /* Locate the default output audio unit */ + ComponentDescription desc; + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_HALOutput; + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; + + Component comp = FindNextComponent (NULL, &desc); + if (comp == NULL) { + return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned NULL"; + } + + /* Open & initialize the default output audio unit */ + if (OpenAComponent(comp, &_outputAudioUnit) != noErr) { + return "cocoa_s: Failed to start CoreAudio: OpenAComponent"; + } +#else + return "cocoa_s: Not supported on this OS X version"; +#endif } if (AudioUnitInitialize(_outputAudioUnit) != noErr) { @@ -132,9 +159,21 @@ void SoundDriver_Cocoa::Stop() return; } - if (CloseComponent(_outputAudioUnit) != noErr) { - DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: CloseComponent failed"); - return; +#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK) + if (MacOSVersionIsAtLeast(10, 6, 0)) { + if (AudioComponentInstanceDispose(_outputAudioUnit) != noErr) { + DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: AudioComponentInstanceDispose failed"); + return; + } + } else +#endif + { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) + if (CloseComponent(_outputAudioUnit) != noErr) { + DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: CloseComponent failed"); + return; + } +#endif } } diff --git a/src/station.cpp b/src/station.cpp index 456262dea4..f86286f3d9 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -35,9 +35,6 @@ StationPool _station_pool("Station"); INSTANTIATE_POOL_METHODS(Station) -typedef StationIDStack::SmallStackPool StationIDStackPool; -template<> StationIDStackPool StationIDStack::_pool = StationIDStackPool(); - BaseStation::~BaseStation() { free(this->name); diff --git a/src/strings.cpp b/src/strings.cpp index 1c539d9343..e1e352f5df 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -52,7 +52,7 @@ const LanguageMetadata *_current_language = NULL; ///< The currently loaded lang TextDirection _current_text_dir; ///< Text direction of the currently selected language. #ifdef WITH_ICU_SORT -Collator *_current_collator = NULL; ///< Collator for the language currently in use. +icu::Collator *_current_collator = NULL; ///< Collator for the language currently in use. #endif /* WITH_ICU_SORT */ static uint64 _global_string_params_data[20]; ///< Global array of string parameters. To access, use #SetDParam. @@ -449,6 +449,8 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money n /* convert from negative */ if (number < 0) { + if (buff + Utf8CharLen(SCC_PUSH_COLOUR) > last) return buff; + buff += Utf8Encode(buff, SCC_PUSH_COLOUR); if (buff + Utf8CharLen(SCC_RED) > last) return buff; buff += Utf8Encode(buff, SCC_RED); buff = strecpy(buff, "-", last); @@ -485,8 +487,8 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money n if (spec->symbol_pos != 0) buff = strecpy(buff, spec->suffix, last); if (negative) { - if (buff + Utf8CharLen(SCC_PREVIOUS_COLOUR) > last) return buff; - buff += Utf8Encode(buff, SCC_PREVIOUS_COLOUR); + if (buff + Utf8CharLen(SCC_POP_COLOUR) > last) return buff; + buff += Utf8Encode(buff, SCC_POP_COLOUR); *buff = '\0'; } @@ -1795,7 +1797,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) /* Create a collator instance for our current locale. */ UErrorCode status = U_ZERO_ERROR; - _current_collator = Collator::createInstance(Locale(_current_language->isocode), status); + _current_collator = icu::Collator::createInstance(icu::Locale(_current_language->isocode), status); /* Sort number substrings by their numerical value. */ if (_current_collator != NULL) _current_collator->setAttribute(UCOL_NUMERIC_COLLATION, UCOL_ON, status); /* Avoid using the collator if it is not correctly set. */ @@ -2014,10 +2016,8 @@ bool MissingGlyphSearcher::FindMissingGlyphs(const char **str) FontSize size = this->DefaultSize(); if (str != NULL) *str = text; for (WChar c = Utf8Consume(&text); c != '\0'; c = Utf8Consume(&text)) { - if (c == SCC_TINYFONT) { - size = FS_SMALL; - } else if (c == SCC_BIGFONT) { - size = FS_LARGE; + if (c >= SCC_FIRST_FONT && c <= SCC_LAST_FONT) { + size = (FontSize)(c - SCC_FIRST_FONT); } else if (!IsInsideMM(c, SCC_SPRITE_START, SCC_SPRITE_END) && IsPrintable(c) && !IsTextDirectionChar(c) && c != '?' && GetGlyph(size, c) == question_mark[size]) { /* The character is printable, but not in the normal font. This is the case we were testing for. */ return true; diff --git a/src/table/control_codes.h b/src/table/control_codes.h index d6b1ad6f4e..d8e9673e9f 100644 --- a/src/table/control_codes.h +++ b/src/table/control_codes.h @@ -26,9 +26,13 @@ enum StringControlCode { /* This must be the first entry. It's encoded in strings that are saved. */ SCC_ENCODED = SCC_CONTROL_START, - /* Display control codes */ - SCC_TINYFONT, ///< Switch to small font - SCC_BIGFONT, ///< Switch to large font + /* Font selection codes, must be in same order as FontSize enum */ + SCC_FIRST_FONT, + SCC_NORMALFONT = SCC_FIRST_FONT, ///< Switch to normal size font + SCC_TINYFONT, ///< Switch to small font + SCC_BIGFONT, ///< Switch to large font + SCC_MONOFONT, ///< Switch to monospaced font + SCC_LAST_FONT = SCC_MONOFONT, /* Formatting control codes */ SCC_REVISION, @@ -111,7 +115,8 @@ enum StringControlCode { SCC_GRAY, SCC_DKBLUE, SCC_BLACK, - SCC_PREVIOUS_COLOUR, + SCC_PUSH_COLOUR, + SCC_POP_COLOUR, /** * The next variables are part of a NewGRF subsystem for creating text strings. diff --git a/src/table/elrail_data.h b/src/table/elrail_data.h index 102ad42644..6915360035 100644 --- a/src/table/elrail_data.h +++ b/src/table/elrail_data.h @@ -310,10 +310,10 @@ enum WireSpriteOffset { WSO_X_NE_UP, WSO_Y_NW_DOWN, - WSO_ENTRANCE_NE, - WSO_ENTRANCE_SE, WSO_ENTRANCE_SW, WSO_ENTRANCE_NW, + WSO_ENTRANCE_NE, + WSO_ENTRANCE_SE, }; struct SortableSpriteStruct { @@ -400,10 +400,10 @@ static const SortableSpriteStruct RailCatenarySpriteData_Depot[] = { }; static const SortableSpriteStruct RailCatenarySpriteData_Tunnel[] = { - { WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel exit - { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel exit - { WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel exit - { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel exit + { WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel (SW facing exit) + { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel (NW facing exit) + { WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel (NE facing exit) + { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel (SE facing exit) }; diff --git a/src/table/settings.ini b/src/table/settings.ini index 23fca32a43..2554a2ece5 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2189,7 +2189,7 @@ cat = SC_BASIC base = GameSettings var = game_creation.variety type = SLE_UINT8 -flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC +from = 197 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 0 min = 0 diff --git a/src/table/strgen_tables.h b/src/table/strgen_tables.h index 322f1bc6bf..6297eea3bc 100644 --- a/src/table/strgen_tables.h +++ b/src/table/strgen_tables.h @@ -37,8 +37,10 @@ extern void EmitGender(Buffer *buffer, char *buf, int value); static const CmdStruct _cmd_structs[] = { /* Font size */ + {"NORMAL_FONT", EmitSingleChar, SCC_NORMALFONT, 0, -1, C_NONE}, {"TINY_FONT", EmitSingleChar, SCC_TINYFONT, 0, -1, C_NONE}, {"BIG_FONT", EmitSingleChar, SCC_BIGFONT, 0, -1, C_NONE}, + {"MONO_FONT", EmitSingleChar, SCC_MONOFONT, 0, -1, C_NONE}, /* Colours */ {"BLUE", EmitSingleChar, SCC_BLUE, 0, -1, C_DONTCOUNT}, @@ -58,6 +60,8 @@ static const CmdStruct _cmd_structs[] = { {"GRAY", EmitSingleChar, SCC_GRAY, 0, -1, C_DONTCOUNT}, {"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, -1, C_DONTCOUNT}, {"BLACK", EmitSingleChar, SCC_BLACK, 0, -1, C_DONTCOUNT}, + {"PUSH_COLOUR", EmitSingleChar, SCC_PUSH_COLOUR, 0, -1, C_DONTCOUNT}, + {"POP_COLOUR", EmitSingleChar, SCC_POP_COLOUR, 0, -1, C_DONTCOUNT}, {"REV", EmitSingleChar, SCC_REVISION, 0, -1, C_NONE}, // openttd revision string diff --git a/src/thread/thread_morphos.cpp b/src/thread/thread_morphos.cpp index 6d00d0579c..e368663f79 100644 --- a/src/thread/thread_morphos.cpp +++ b/src/thread/thread_morphos.cpp @@ -50,14 +50,10 @@ struct OTTDThreadStartupMessage { * Default OpenTTD STDIO/ERR debug output is not very useful for this, so we * utilize serial/ramdebug instead. */ -#ifndef NO_DEBUG_MESSAGES void KPutStr(CONST_STRPTR format) { RawDoFmt(format, NULL, (void (*)())RAWFMTFUNC_SERIAL, NULL); } -#else -#define KPutStr(x) -#endif /** diff --git a/src/thread/thread_pthread.cpp b/src/thread/thread_pthread.cpp index 747b8943d6..8aed5ee136 100644 --- a/src/thread/thread_pthread.cpp +++ b/src/thread/thread_pthread.cpp @@ -14,6 +14,10 @@ #include #include +#if defined(__APPLE__) +#include "../os/macosx/macos.h" +#endif + #include "../safeguards.h" /** @@ -69,6 +73,9 @@ private: pthread_setname_np(pthread_self(), self->name); } #endif +#endif +#if defined(__APPLE__) + MacOSSetThreadName(self->name); #endif self->ThreadProc(); pthread_exit(NULL); diff --git a/src/tile_map.h b/src/tile_map.h index 4d5891d7ba..66726df610 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -44,7 +44,7 @@ uint TileHeightOutsideMap(int x, int y); * @param tile The tile to change the height * @param height The new height value of the tile * @pre tile < MapSize() - * @pre heigth <= MAX_TILE_HEIGHT + * @pre height <= MAX_TILE_HEIGHT */ static inline void SetTileHeight(TileIndex tile, uint height) { diff --git a/src/tile_type.h b/src/tile_type.h index 0d720925da..c02ba4fc45 100644 --- a/src/tile_type.h +++ b/src/tile_type.h @@ -18,6 +18,8 @@ static const uint TILE_PIXELS = 32; ///< Pixel distan static const uint TILE_HEIGHT = 8; ///< Height of a height level in world coordinate AND in pixels in #ZOOM_LVL_BASE. static const uint MAX_BUILDING_PIXELS = 200; ///< Maximum height of a building in pixels in #ZOOM_LVL_BASE. (Also applies to "bridge buildings" on the bridge floor.) +static const int MAX_VEHICLE_PIXEL_X = 192; ///< Maximum width of a vehicle in pixels in #ZOOM_LVL_BASE. +static const int MAX_VEHICLE_PIXEL_Y = 96; ///< Maximum height of a vehicle in pixels in #ZOOM_LVL_BASE. static const uint MAX_TILE_HEIGHT = 255; ///< Maximum allowed tile height diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 4724fb98ab..51e772b520 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -64,14 +64,14 @@ static int HighlightDragPosition(int px, int max_width, VehicleID selection, boo bool rtl = _current_text_dir == TD_RTL; assert(selection != INVALID_VEHICLE); - int dragged_width = WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; + int dragged_width = 0; for (Train *t = Train::Get(selection); t != NULL; t = chain ? t->Next() : (t->HasArticulatedPart() ? t->GetNextArticulatedPart() : NULL)) { dragged_width += t->GetDisplayImageWidth(NULL); } - int drag_hlight_left = rtl ? max(px -dragged_width, 0) : px; - int drag_hlight_right = rtl ? px : min(px + dragged_width, max_width); - int drag_hlight_width = max(drag_hlight_right - drag_hlight_left, 0); + int drag_hlight_left = rtl ? max(px - dragged_width + 1, 0) : px; + int drag_hlight_right = rtl ? px : min(px + dragged_width, max_width) - 1; + int drag_hlight_width = max(drag_hlight_right - drag_hlight_left + 1, 0); if (drag_hlight_width > 0) { GfxFillRect(drag_hlight_left + WD_FRAMERECT_LEFT, WD_FRAMERECT_TOP + 1, diff --git a/src/vehicle.cpp b/src/vehicle.cpp index e4a8c7bf1f..be11e05be3 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -57,7 +57,30 @@ #include "safeguards.h" -#define GEN_HASH(x, y) ((GB((y), 6 + ZOOM_LVL_SHIFT, 6) << 6) + GB((x), 7 + ZOOM_LVL_SHIFT, 6)) +/* Number of bits in the hash to use from each vehicle coord */ +static const uint GEN_HASHX_BITS = 6; +static const uint GEN_HASHY_BITS = 6; + +/* Size of each hash bucket */ +static const uint GEN_HASHX_BUCKET_BITS = 7; +static const uint GEN_HASHY_BUCKET_BITS = 6; + +/* Compute hash for vehicle coord */ +#define GEN_HASHX(x) GB((x), GEN_HASHX_BUCKET_BITS + ZOOM_LVL_SHIFT, GEN_HASHX_BITS) +#define GEN_HASHY(y) (GB((y), GEN_HASHY_BUCKET_BITS + ZOOM_LVL_SHIFT, GEN_HASHY_BITS) << GEN_HASHX_BITS) +#define GEN_HASH(x, y) (GEN_HASHY(y) + GEN_HASHX(x)) + +/* Maximum size until hash repeats */ +static const int GEN_HASHX_SIZE = 1 << (GEN_HASHX_BUCKET_BITS + GEN_HASHX_BITS + ZOOM_LVL_SHIFT); +static const int GEN_HASHY_SIZE = 1 << (GEN_HASHY_BUCKET_BITS + GEN_HASHY_BITS + ZOOM_LVL_SHIFT); + +/* Increments to reach next bucket in hash table */ +static const int GEN_HASHX_INC = 1; +static const int GEN_HASHY_INC = 1 << GEN_HASHX_BITS; + +/* Mask to wrap-around buckets */ +static const uint GEN_HASHX_MASK = (1 << GEN_HASHX_BITS) - 1; +static const uint GEN_HASHY_MASK = ((1 << GEN_HASHY_BITS) - 1) << GEN_HASHX_BITS; VehicleID _new_vehicle_id; uint16 _returned_refit_capacity; ///< Stores the capacity after a refit operation. @@ -618,7 +641,7 @@ static void UpdateVehicleTileHash(Vehicle *v, bool remove) v->hash_tile_current = new_hash; } -static Vehicle *_vehicle_viewport_hash[0x1000]; +static Vehicle *_vehicle_viewport_hash[1 << (GEN_HASHX_BITS + GEN_HASHY_BITS)]; static void UpdateVehicleViewportHash(Vehicle *v, int x, int y) { @@ -1088,26 +1111,26 @@ void ViewportAddVehicles(DrawPixelInfo *dpi) /* The hash area to scan */ int xl, xu, yl, yu; - if (dpi->width + (70 * ZOOM_LVL_BASE) < (1 << (7 + 6 + ZOOM_LVL_SHIFT))) { - xl = GB(l - (70 * ZOOM_LVL_BASE), 7 + ZOOM_LVL_SHIFT, 6); - xu = GB(r, 7 + ZOOM_LVL_SHIFT, 6); + if (dpi->width + (MAX_VEHICLE_PIXEL_X * ZOOM_LVL_BASE) < GEN_HASHX_SIZE) { + xl = GEN_HASHX(l - MAX_VEHICLE_PIXEL_X * ZOOM_LVL_BASE); + xu = GEN_HASHX(r); } else { /* scan whole hash row */ xl = 0; - xu = 0x3F; + xu = GEN_HASHX_MASK; } - if (dpi->height + (70 * ZOOM_LVL_BASE) < (1 << (6 + 6 + ZOOM_LVL_SHIFT))) { - yl = GB(t - (70 * ZOOM_LVL_BASE), 6 + ZOOM_LVL_SHIFT, 6) << 6; - yu = GB(b, 6 + ZOOM_LVL_SHIFT, 6) << 6; + if (dpi->height + (MAX_VEHICLE_PIXEL_Y * ZOOM_LVL_BASE) < GEN_HASHY_SIZE) { + yl = GEN_HASHY(t - MAX_VEHICLE_PIXEL_Y * ZOOM_LVL_BASE); + yu = GEN_HASHY(b); } else { /* scan whole column */ yl = 0; - yu = 0x3F << 6; + yu = GEN_HASHY_MASK; } - for (int y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) { - for (int x = xl;; x = (x + 1) & 0x3F) { + for (int y = yl;; y = (y + GEN_HASHY_INC) & GEN_HASHY_MASK) { + for (int x = xl;; x = (x + GEN_HASHX_INC) & GEN_HASHX_MASK) { const Vehicle *v = _vehicle_viewport_hash[x + y]; // already masked & 0xFFF while (v != NULL) { diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 86085da62e..564daefe0f 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -259,7 +259,11 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i @end /** Delegate for our NSWindow to send ask for quit on close */ -@interface OTTD_CocoaWindowDelegate : NSObject { +@interface OTTD_CocoaWindowDelegate : NSObject +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + +#endif +{ CocoaSubdriver *driver; } diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 4df7cb0035..f8412e3877 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -48,6 +48,9 @@ @interface OTTDMain : NSObject +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + +#endif @end @@ -212,8 +215,7 @@ static void setupApplication() #endif /* Become the front process, important when start from the command line. */ - OSErr err = SetFrontProcess(&psn); - if (err != 0) DEBUG(driver, 0, "Could not bring the application to front. Error %d", (int)err); + [ [ NSApplication sharedApplication ] activateIgnoringOtherApps:YES ]; /* Set up the menubar */ [ NSApp setMainMenu:[ [ NSMenu alloc ] init ] ]; @@ -235,22 +237,39 @@ static int CDECL ModeSorter(const OTTD_Point *p1, const OTTD_Point *p2) return 0; } -uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_id, int device_depth) +static void QZ_GetDisplayModeInfo(CFArrayRef modes, CFIndex i, int &bpp, uint16 &width, uint16 &height) { - CFArrayRef mode_list = CGDisplayAvailableModes(display_id); - CFIndex num_modes = CFArrayGetCount(mode_list); + bpp = 0; + width = 0; + height = 0; - /* Build list of modes with the requested bpp */ - uint count = 0; - for (CFIndex i = 0; i < num_modes && count < max_modes; i++) { - int intvalue, bpp; - uint16 width, height; +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + if (MacOSVersionIsAtLeast(10, 6, 0)) { + CGDisplayModeRef mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i); - CFDictionaryRef onemode = (const __CFDictionary*)CFArrayGetValueAtIndex(mode_list, i); - CFNumberRef number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayBitsPerPixel); - CFNumberGetValue(number, kCFNumberSInt32Type, &bpp); + width = (uint16)CGDisplayModeGetWidth(mode); + height = (uint16)CGDisplayModeGetHeight(mode); - if (bpp != device_depth) continue; +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11) + /* Extract bit depth from mode string. */ + CFStringRef pixEnc = CGDisplayModeCopyPixelEncoding(mode); + if (CFStringCompare(pixEnc, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 32; + if (CFStringCompare(pixEnc, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 16; + if (CFStringCompare(pixEnc, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 8; + CFRelease(pixEnc); +#else + /* CGDisplayModeCopyPixelEncoding is deprecated on OSX 10.11+, but there are no 8 bpp modes anyway... */ + bpp = 32; +#endif + } else +#endif + { + int intvalue; + + CFDictionaryRef onemode = (const __CFDictionary*)CFArrayGetValueAtIndex(modes, i); + CFNumberRef number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayBitsPerPixel); + CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue); + bpp = intvalue; number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayWidth); CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue); @@ -259,6 +278,29 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayHeight); CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue); height = (uint16)intvalue; + } +} + +uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_id, int device_depth) +{ +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) + CFArrayRef mode_list = MacOSVersionIsAtLeast(10, 6, 0) ? CGDisplayCopyAllDisplayModes(display_id, NULL) : CGDisplayAvailableModes(display_id); +#elif (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + CFArrayRef mode_list = CGDisplayCopyAllDisplayModes(display_id, NULL); +#else + CFArrayRef mode_list = CGDisplayAvailableModes(display_id); +#endif + CFIndex num_modes = CFArrayGetCount(mode_list); + + /* Build list of modes with the requested bpp */ + uint count = 0; + for (CFIndex i = 0; i < num_modes && count < max_modes; i++) { + int bpp; + uint16 width, height; + + QZ_GetDisplayModeInfo(mode_list, i, bpp, width, height); + + if (bpp != device_depth) continue; /* Check if mode is already in the list */ bool hasMode = false; @@ -280,6 +322,10 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i /* Sort list smallest to largest */ QSortT(modes, count, &ModeSorter); +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + if (MacOSVersionIsAtLeast(10, 6, 0)) CFRelease(mode_list); +#endif + return count; } @@ -575,9 +621,12 @@ void VideoDriver_Cocoa::EditBoxLostFocus() if (_cocoa_subdriver != NULL) { if ([ _cocoa_subdriver->cocoaview respondsToSelector:@selector(inputContext) ] && [ [ _cocoa_subdriver->cocoaview performSelector:@selector(inputContext) ] respondsToSelector:@selector(discardMarkedText) ]) { [ [ _cocoa_subdriver->cocoaview performSelector:@selector(inputContext) ] performSelector:@selector(discardMarkedText) ]; - } else { + } +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) + else { [ [ NSInputManager currentInputManager ] markedTextAbandoned:_cocoa_subdriver->cocoaview ]; } +#endif } /* Clear any marked string from the current edit box. */ HandleTextInput(NULL, true); @@ -604,7 +653,22 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel return; } - NSRunAlertPanel([ NSString stringWithUTF8String:title ], [ NSString stringWithUTF8String:message ], [ NSString stringWithUTF8String:buttonLabel ], nil, nil); +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3) + if (MacOSVersionIsAtLeast(10, 3, 0)) { + NSAlert *alert = [ [ NSAlert alloc ] init ]; + [ alert setAlertStyle: NSCriticalAlertStyle ]; + [ alert setMessageText:[ NSString stringWithUTF8String:title ] ]; + [ alert setInformativeText:[ NSString stringWithUTF8String:message ] ]; + [ alert addButtonWithTitle: [ NSString stringWithUTF8String:buttonLabel ] ]; + [ alert runModal ]; + [ alert release ]; + } else +#endif + { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3) + NSRunAlertPanel([ NSString stringWithUTF8String:title ], [ NSString stringWithUTF8String:message ], [ NSString stringWithUTF8String:buttonLabel ], nil, nil); +#endif + } if (!wasstarted && VideoDriver::GetInstance() != NULL) VideoDriver::GetInstance()->Stop(); @@ -1032,7 +1096,17 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count) { if (!EditBoxInGlobalFocus()) return NSNotFound; - NSPoint view_pt = [ self convertPoint:[ [ self window ] convertScreenToBase:thePoint ] fromView:nil ]; + NSPoint view_pt = NSZeroPoint; +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7) + if ([ [ self window ] respondsToSelector:@selector(convertRectFromScreen:) ]) { + view_pt = [ self convertRect:[ [ self window ] convertRectFromScreen:NSMakeRect(thePoint.x, thePoint.y, 0, 0) ] fromView:nil ].origin; + } else +#endif + { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7) + view_pt = [ self convertPoint:[ [ self window ] convertScreenToBase:thePoint ] fromView:nil ]; +#endif + } Point pt = { (int)view_pt.x, (int)[ self frame ].size.height - (int)view_pt.y }; @@ -1061,9 +1135,13 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count) } #endif +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 NSRect window_rect = [ self convertRect:view_rect toView:nil ]; NSPoint origin = [ [ self window ] convertBaseToScreen:window_rect.origin ]; return NSMakeRect(origin.x, origin.y, window_rect.size.width, window_rect.size.height); +#else + return NSMakeRect(0, 0, 0, 0);; +#endif } /** Get the bounding rect for the given range. */ @@ -1271,7 +1349,12 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count) NSPoint loc = [ driver->cocoaview convertPoint:[ [ aNotification object ] mouseLocationOutsideOfEventStream ] fromView:nil ]; BOOL inside = ([ driver->cocoaview hitTest:loc ] == driver->cocoaview); - if (inside) [ driver->cocoaview mouseEntered:NULL ]; + if (inside) { + /* We don't care about the event, but the compiler does. */ + NSEvent *e = [ [ NSEvent alloc ] init ]; + [ driver->cocoaview mouseEntered:e ]; + [ e release ]; + } } @end diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm index 1298961dce..f4a7c2b421 100644 --- a/src/video/cocoa/event.mm +++ b/src/video/cocoa/event.mm @@ -100,10 +100,10 @@ static void QZ_WarpCursor(int x, int y) NSPoint p = NSMakePoint(x, y); CGPoint cgp = _cocoa_subdriver->PrivateLocalToCG(&p); - /* this is the magic call that fixes cursor "freezing" after warp */ - CGSetLocalEventsSuppressionInterval(0.0); /* Do the actual warp */ CGWarpMouseCursorPosition(cgp); + /* this is the magic call that fixes cursor "freezing" after warp */ + CGAssociateMouseAndMouseCursorPosition(true); } diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index 795a311bc6..d42749bac5 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -333,7 +333,9 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) [ this->window setAcceptsMouseMovedEvents:YES ]; [ this->window setViewsNeedDisplay:NO ]; - [ this->window useOptimizedDrawing:YES ]; +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10 + if ([ this->window respondsToSelector:@selector(useOptimizedDrawing:) ]) [ this->window useOptimizedDrawing:YES ]; +#endif delegate = [ [ OTTD_CocoaWindowDelegate alloc ] init ]; [ delegate setDriver:this ]; @@ -517,7 +519,16 @@ CGPoint WindowQuartzSubdriver::PrivateLocalToCG(NSPoint *p) p->y = this->window_height - p->y; *p = [ this->cocoaview convertPoint:*p toView:nil ]; - *p = [ this->window convertBaseToScreen:*p ]; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if ([ this->window respondsToSelector:@selector(convertRectToScreen:) ]) { + *p = [ this->window convertRectToScreen:NSMakeRect(p->x, p->y, 0, 0) ].origin; + } else +#endif + { +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 + *p = [ this->window convertBaseToScreen:*p ]; +#endif + } p->y = this->device_height - p->y; CGPoint cgp; @@ -539,7 +550,9 @@ NSPoint WindowQuartzSubdriver::GetMouseLocation(NSEvent *event) else #endif { +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 pt = [ this->cocoaview convertPoint:[ [ this->cocoaview window ] convertScreenToBase:[ event locationInWindow ] ] fromView:nil ]; +#endif } } else { pt = [ event locationInWindow ]; diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 4a9861b643..4534b87bec 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -34,6 +34,13 @@ #define MAPVK_VK_TO_CHAR (2) #endif +#ifndef PM_QS_INPUT +#define PM_QS_INPUT 0x20000 +#endif + +typedef BOOL (WINAPI *PFNTRACKMOUSEEVENT)(LPTRACKMOUSEEVENT lpEventTrack); +static PFNTRACKMOUSEEVENT _pTrackMouseEvent = NULL; + static struct { HWND main_wnd; HBITMAP dib_sect; @@ -737,17 +744,36 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP case WM_MOUSEMOVE: { int x = (int16)LOWORD(lParam); int y = (int16)HIWORD(lParam); - POINT pt; /* If the mouse was not in the window and it has moved it means it has * come into the window, so start drawing the mouse. Also start * tracking the mouse for exiting the window */ if (!_cursor.in_window) { _cursor.in_window = true; - SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); + if (_pTrackMouseEvent != NULL) { + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hwnd; + + _pTrackMouseEvent(&tme); + } else { + SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); + } } - if (_cursor.UpdateCursorPosition(x, y, true)) { + if (_cursor.fix_at) { + /* Get all queued mouse events now in case we have to warp the cursor. In the + * end, we only care about the current mouse position and not bygone events. */ + MSG m; + while (PeekMessage(&m, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE | PM_NOYIELD | PM_QS_INPUT)) { + x = (int16)LOWORD(m.lParam); + y = (int16)HIWORD(m.lParam); + } + } + + if (_cursor.UpdateCursorPosition(x, y, false)) { + POINT pt; pt.x = _cursor.pos.x; pt.y = _cursor.pos.y; ClientToScreen(hwnd, &pt); @@ -1024,6 +1050,9 @@ static void RegisterWndClass() registered = true; if (!RegisterClass(&wnd)) usererror("RegisterClass failed"); + + /* Dynamically load mouse tracking, as it doesn't exist on Windows 95. */ + _pTrackMouseEvent = (PFNTRACKMOUSEEVENT)GetProcAddress(GetModuleHandle(_T("User32")), "TrackMouseEvent"); } } diff --git a/src/viewport.cpp b/src/viewport.cpp index df431ff3c0..6de827b4ee 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -84,6 +84,9 @@ #include "linkgraph/linkgraph_gui.h" #include "viewport_sprite_sorter.h" #include "bridge_map.h" +#include "company_base.h" +#include "command_func.h" +#include "network/network_func.h" #include @@ -3250,3 +3253,40 @@ void InitializeSpriteSorter() } assert(_vp_sprite_sorter != NULL); } + +/** + * Scroll players main viewport. + * @param tile tile to center viewport on + * @param flags type of operation + * @param p1 ViewportScrollTarget of scroll target + * @param p2 company or client id depending on the target + * @param text unused + * @return the cost of this operation or an error + */ +CommandCost CmdScrollViewport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + if (_current_company != OWNER_DEITY) return CMD_ERROR; + ViewportScrollTarget target = (ViewportScrollTarget)p1; + switch (target) { + case VST_EVERYONE: + break; + case VST_COMPANY: + if (_local_company != (CompanyID)p2) return CommandCost(); + break; + case VST_CLIENT: +#ifdef ENABLE_NETWORK + if (_network_own_client_id != (ClientID)p2) return CommandCost(); + break; +#else + return CommandCost(); +#endif + default: + return CMD_ERROR; + } + + if (flags & DC_EXEC) { + ResetObjectToPlace(); + ScrollMainWindowToTile(tile); + } + return CommandCost(); +} diff --git a/src/viewport_type.h b/src/viewport_type.h index 07485c3243..74cd88d95d 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -123,4 +123,14 @@ enum ViewportDragDropSelectionProcess { DDSP_REMOVE_TRUCKSTOP, ///< Road stop removal (trucks) }; + +/** + * Target of the viewport scrolling GS method + */ +enum ViewportScrollTarget { + VST_EVERYONE, ///< All players + VST_COMPANY, ///< All players in specific company + VST_CLIENT, ///< Single player +}; + #endif /* VIEWPORT_TYPE_H */ diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index edce4cda58..07b6a95507 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -73,7 +73,7 @@ static const uint8 _flood_from_dirs[] = { */ static inline void MarkTileDirtyIfCanalOrRiver(TileIndex tile) { - if (IsTileType(tile, MP_WATER) && (IsCanal(tile) || IsRiver(tile))) MarkTileDirtyByTile(tile); + if (IsValidTile(tile) && IsTileType(tile, MP_WATER) && (IsCanal(tile) || IsRiver(tile))) MarkTileDirtyByTile(tile); } /** @@ -1233,7 +1233,8 @@ void ConvertGroundTilesIntoWaterTiles() static TrackStatus GetTileTrackStatus_Water(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) { - static const byte coast_tracks[] = {0, 32, 4, 0, 16, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0}; + static const TrackBits coast_tracks[] = {TRACK_BIT_NONE, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, TRACK_BIT_NONE, TRACK_BIT_LEFT, TRACK_BIT_NONE, TRACK_BIT_NONE, + TRACK_BIT_NONE, TRACK_BIT_LOWER, TRACK_BIT_NONE, TRACK_BIT_NONE, TRACK_BIT_NONE, TRACK_BIT_NONE, TRACK_BIT_NONE, TRACK_BIT_NONE, TRACK_BIT_NONE}; TrackBits ts; @@ -1241,7 +1242,7 @@ static TrackStatus GetTileTrackStatus_Water(TileIndex tile, TransportType mode, switch (GetWaterTileType(tile)) { case WATER_TILE_CLEAR: ts = IsTileFlat(tile) ? TRACK_BIT_ALL : TRACK_BIT_NONE; break; - case WATER_TILE_COAST: ts = (TrackBits)coast_tracks[GetTileSlope(tile) & 0xF]; break; + case WATER_TILE_COAST: ts = coast_tracks[GetTileSlope(tile) & 0xF]; break; case WATER_TILE_LOCK: ts = DiagDirToDiagTrackBits(GetLockDirection(tile)); break; case WATER_TILE_DEPOT: ts = AxisToTrackBits(GetShipDepotAxis(tile)); break; default: return 0; diff --git a/src/window.cpp b/src/window.cpp index 2ce1124ed9..f4b7a1ca18 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1682,7 +1682,7 @@ static Point GetAutoPlacePosition(int width, int height) * of the closebox */ int left = rtl ? _screen.width - width : 0, top = toolbar_y; - int offset_x = rtl ? -NWidgetLeaf::closebox_dimension.width : NWidgetLeaf::closebox_dimension.width; + int offset_x = rtl ? -(int)NWidgetLeaf::closebox_dimension.width : (int)NWidgetLeaf::closebox_dimension.width; int offset_y = max(NWidgetLeaf::closebox_dimension.height, FONT_HEIGHT_NORMAL + WD_CAPTIONTEXT_TOP + WD_CAPTIONTEXT_BOTTOM); restart: