1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-13 17:49:10 +00:00

Compare commits

..

30 Commits

Author SHA1 Message Date
frosch
d356a0ca13 (svn r26719) -Release: 1.4.2-RC2 2014-08-03 15:36:07 +00:00
frosch
0db873d6da (svn r26718) [1.4] -Update documentation 2014-08-03 15:33:49 +00:00
frosch
17507b217c (svn r26717) [1.4] -Backport from trunk:
- Fix: CMD_CLEAR_ORDER_BACKUP should not be suppressed by pause modes (r26716)
- Fix: Discard incorrectly saved order backups when clients join [FS#6066] (r26700)
2014-08-03 15:04:09 +00:00
frosch
48bd683010 (svn r26715) [1.4] -Backport from trunk:
- Fix: [NewGRF] Parameters to SCC_NEWGRF_PUSH_WORD and SCC_NEWGRF_UNPRINT were not skipped during drawing (r26713)
- Fix: [OSX] Compilation fails with some lzo2 versions, if __LP64__ is defined to 0 instead of checking whether it is defined [FS#6069] (r26709)
- Codechange: Use awk instead of trying to convince cpp to preprocess nfo files (r26708)
- Fix: Wrong breakdown sound was played for ships [FS#6015] (r26706)
2014-08-03 14:06:04 +00:00
frosch
3614c4447f (svn r26714) [1.4] -Backport from trunk:
- Fix: Integer overflows in acceleration code causing either too low acceleration or too high acceleration [FS#6067] (r26702)
- Fix: Do not crash when trying to show an error about vehicle in a NewGRF and the NewGRF was not loaded at all (r26699)
- Fix: Tighten parameter bound checks on GSCargoMonitor functions, and return -1 on out-of-bound parameters (r26685)
2014-08-03 14:03:07 +00:00
rubidium
3630a2cc4e (svn r26710) [1.4] -Backport from trunk: language updates 2014-07-31 06:18:10 +00:00
frosch
26ed360ccd (svn r26673) [1.4] -Update documentation 2014-07-03 18:34:46 +00:00
frosch
8dc0522434 (svn r26670) [1.4] -Backport from trunk:
- Fix: CargoPacket::SourceStation() returns a StationID (r26660)
- Fix: Production cheat cannot be allowed to be active in multiplayer for desync reasons, even when activated in singleplayer previously [FS#6044] (r26656)
- Fix: Make sure an 'abs' is used that supports int64 when using 'abs' on those variables (r26651)
- Fix: Support save/load chunk lengths of up to (1 << 32) - 1 [FS#6041] (r26650)
2014-07-01 20:13:23 +00:00
rubidium
13378995d9 (svn r26668) [1.4] -Backport from trunk:
- Fix: Days in dates are not represented by ordinal numbers in all languages [FS#6047]
- Language updates
2014-06-29 17:58:58 +00:00
frosch
1708243e51 (svn r26653) [1.4] -Backport from trunk:
- Fix: Incorrect usage of string commands in the base language [FS#6037] (r26642, r26640, r26639, r26632)
2014-06-17 19:14:59 +00:00
frosch
324e17d827 (svn r26652) [1.4] -Backport from trunk:
- Fix: Segmentation fault when encountering a .obg/.obs/.obm with empty string/zero length MD5 checksums [FS#6038] (r26637)
- Fix: The 'Load' button was not properly enabled/disabled for old savegames without NewGRF information (r26634)
- Fix: If the video driver fails to supply a list of resolutions, display an error message [FS#6012] (r26629)
2014-06-17 19:08:07 +00:00
frosch
bcfc0ec957 (svn r26626) [1.4] -Update documentation 2014-06-02 18:19:54 +00:00
frosch
5702b3951c (svn r26625) [1.4] -Backport from trunk:
- Fix: First send packages about new company, then clients joining it to admin port [FS#6025] (r26616)
2014-06-02 18:18:35 +00:00
frosch
491b3e3efc (svn r26599) [1.4] -Update documentation 2014-05-18 18:30:18 +00:00
rubidium
2759e32451 (svn r26597) [1.4] -Backport from trunk: language updates 2014-05-18 15:21:31 +00:00
frosch
d3c41a9d0e (svn r26596) [1.4] -Backport from trunk:
- Fix: Save/load issues on big endian machines (r26593, r26590, r26589)
- Fix: Consider multiheaded trains in station refits [FS#5995] (r26586)
- Fix: Game script could be changed in game by double clicking [FS#5974] (r26583)
2014-05-18 11:26:09 +00:00
frosch
3cd96a459b (svn r26595) [1.4] -Backport from trunk:
- Fix: Transfer stations also should have a cargo rating [FS#5989] (r26581, r26580)
- Fix: [Network] AIs would not reset certain network state information upon creation of their company [FS#6003] (r26578, r26576)
- Fix: [Network] Client of non-dedicated server was not correctly put into the first company for all state variables [FS#6001] (r26577)
2014-05-18 11:21:59 +00:00
frosch
1d18ef48a4 (svn r26561) [1.4] -Update documentation 2014-05-04 18:24:43 +00:00
rubidium
a6e95ace5c (svn r26559) [1.4] -Backport from trunk: language updates 2014-05-04 16:17:25 +00:00
frosch
c57b316570 (svn r26544) [1.4] -Backport from trunk:
- Fix: [Windows] Crash when the operating system performs the "paint" callback during window creation [FS#5994] (r26539, r26538)
- Fix: OpenBSD compilation [FS#5992] (r26523)
- Fix: prevent from ever reading huge (or negative) amounts of data in strgen (r26521)
- Fix: Severity rating of dedicated server messages during world generation (r26518)
2014-04-29 18:41:19 +00:00
frosch
b720a16a1c (svn r26543) [1.4] -Backport from trunk:
- Fix: Buffer overruns in handling of symbolic links inside tars (r26514)
- Fix: Incorrect usage of strecpy (r26505, r26485)
- Fix: Reading console input on dedicated server relied on unspecified behaviour (r26496)
2014-04-29 18:35:01 +00:00
frosch
7a0b2bff18 (svn r26542) [1.4] -Backport from trunk:
- Change: Remove demand calculation based on tiles (r26484)
- Fix: Allow single-vehicle consists to station-refit in a meaningful way (r26483)
2014-04-29 18:21:49 +00:00
frosch
34bff06d8a (svn r26541) [1.4] -Backport from trunk:
- Fix: Prevent comparing to NULL when strndup could not allocate memory (r26476)
- Fix: Potentially undefined shifts in NewGRF code (r26475)
- Fix: Make sure there is no uninitialised sprite data (r26473)
- Fix: Draw text shadow for ellipses (r26467)
- Fix: Add special handling for PALETTE_CRASH to work for non-8bpp-mapped sprites (r26463)
2014-04-29 18:18:52 +00:00
rubidium
be4eae9456 (svn r26532) [1.4] -Backport: language updates 2014-04-27 20:01:21 +00:00
frosch
f8b956bc2c (svn r26461) [1.4] -Backport from trunk:
- Fix: Avoid division by 0 when scaling flow values [FS#5970] (r26448)
- Feature: Draw links to match _settings_game.vehicle.road_side [FS#5961] (r26445)
- Change: Use pkg-config for libpng as well (r26435, r26433, r26432)
- Feature: Load button for heightmap list [FS#5953] (r26428)
2014-04-13 10:52:19 +00:00
frosch
42c7cb38fa (svn r26460) [1.4] -Backport from trunk:
- Fix: Do not crash when supplying an invalid filename without extension to cmd parameter -q (r26423)
- Fix: Some road constructions used the rail sound effect [FS#5946] (r26422)
- Fix: Goal GUI failed to shade [FS#5948] (r26420)
- Fix: Shares button state was not appropriately updated when switching setting or company [FS#5947] (r26416)
- Change: Use better distance metric for link graph [FS#5941] (r26411)
2014-04-13 10:47:39 +00:00
frosch
9d2f06c42c (svn r26439) [1.4] -Update documentation 2014-04-01 18:29:34 +00:00
frosch
0c2be35fa1 (svn r26414) [1.4] -Update: documentation 2014-03-18 19:51:54 +00:00
planetmaker
80a3b5e78f (svn r26412) [1.4] -Change: We have a new titlegame (Fleashosio) 2014-03-18 18:13:33 +00:00
frosch
8ca5334562 (svn r26405) [1.4] -Branch: Less excuses to not do stuff in trunk. 2014-03-17 19:53:30 +00:00
1126 changed files with 59658 additions and 86752 deletions

View File

@@ -1,13 +0,0 @@
notifications:
push:
irc:
- openttd
- openttd.notice
pull-request:
irc:
- openttd
- openttd.notice
issue:
irc:
- openttd
- openttd.notice

View File

@@ -1,9 +0,0 @@
root = true
[*]
insert_final_newline = true
trim_trailing_whitespace = true
[*.{c,cpp,h,hpp}]
indent_style = tab
charset = utf-8

View File

@@ -1,7 +0,0 @@
## Version of OpenTTD
## Expected result
## Actual result
## Steps to reproduce

34
.github/stale.yml vendored
View File

@@ -1,34 +0,0 @@
daysUntilClose: 7
staleLabel: stale
closeComment: false
exemptMilestones: true
exemptAssignees: true
issues:
daysUntilStale: 60
exemptLabels:
- pinned
- security
- "good first issue"
- regression
markComment: >
This issue has been automatically marked as stale because it has not had any activity in the last two months.
If you believe the issue is still relevant, please test on the latest nightly and report back.
It will be closed if no further activity occurs within 7 days.
Thank you for your contributions.
pulls:
daysUntilStale: 30
exemptLabels:
- pinned
markComment: >
This pull request has been automatically marked as stale because it has not had any activity in the last month.
Please feel free to give a status update now, ping for review, or re-open when it's ready.
It will be closed if no further activity occurs within 7 days.
Thank you for your contributions.

8
.gitignore vendored
View File

@@ -7,7 +7,6 @@ bin/ai/*
bin/baseset/* bin/baseset/*
!bin/baseset/openttd.grf !bin/baseset/openttd.grf
!bin/baseset/opntitle.dat !bin/baseset/opntitle.dat
!bin/baseset/orig_extra.grf
!bin/baseset/orig_*.obg !bin/baseset/orig_*.obg
!bin/baseset/orig_*.obs !bin/baseset/orig_*.obs
!bin/baseset/no_sound.obs !bin/baseset/no_sound.obs
@@ -18,19 +17,14 @@ bin/scripts/*
!bin/scripts/*.example !bin/scripts/*.example
!bin/scripts/readme.txt !bin/scripts/readme.txt
*.aps
bundle/* bundle/*
bundles/* bundles/*
docs/aidocs/* docs/aidocs/*
docs/gamedocs/* docs/gamedocs/*
docs/source/* docs/source/*
.kdev4
.kdev4/*
*.kdev4
media/openttd.desktop media/openttd.desktop
media/openttd.desktop.install media/openttd.desktop.install
objs/* objs/*
projects/.vs
projects/Debug projects/Debug
projects/Release projects/Release
projects/*.ncb projects/*.ncb
@@ -39,8 +33,6 @@ projects/*.sdf
projects/*.opensdf projects/*.opensdf
projects/*.vcproj.*.user projects/*.vcproj.*.user
projects/*.vcxproj.user projects/*.vcxproj.user
projects/*.VC.db
projects/*.VC.opendb
src/rev.cpp src/rev.cpp
src/os/windows/ottdres.rc src/os/windows/ottdres.rc

View File

@@ -1,7 +1,6 @@
syntax: glob syntax: glob
.svn .svn
*.aps
bin/baseset/openttd.32.bmp bin/baseset/openttd.32.bmp
bin/lang/* bin/lang/*
bin/openttd* bin/openttd*
@@ -14,16 +13,12 @@ config.pwd
docs/aidocs/* docs/aidocs/*
docs/gamedocs/* docs/gamedocs/*
docs/source/* docs/source/*
.kdev4
.kdev4/*
*.kdev4
Makefile Makefile
Makefile.am Makefile.am
Makefile.bundle Makefile.bundle
media/openttd.desktop media/openttd.desktop
media/openttd.desktop.install media/openttd.desktop.install
objs/* objs/*
projects/.vs
projects/*.ncb projects/*.ncb
projects/*.suo projects/*.suo
projects/*.sdf projects/*.sdf

View File

@@ -1,181 +0,0 @@
# 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/<your-username>/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 ../../../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 <topic-branch-name>
```
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 <topic-branch-name>
```
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).
### Privacy Notice
We would like to make you aware that contributing to OpenTTD via git will permanently store the name and email address you provide as well as the actual changes and the time and date you made it inside git's version history.
This is inevitable, because it is a main feature of git. If you are concerned about your privacy, we strongly recommend to use "Anonymous &lt;anonymous@openttd.org&gt;" as the git commit author. We might refuse anonymous contributions if malicious intent is suspected.
Please note that the contributor identity, once given, is used for copyright verification and to provide proof should a malicious commit be made. As such, the [EU GDPR](https://www.eugdpr.org/key-changes.html) "right to be forgotten" does not apply, as this is an overriding legitimate interest.
Please also note that your commit is public and as such will potentially be processed by many third-parties. Git's distributed nature makes it impossible to track where exactly your commit, and thus your personal data, will be stored and be processed. If you would not like to accept this risk, please do either commit anonymously or refrain from contributing to the OpenTTD project.
### 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.
The GDPR notice is adapted from [rsyslog](https://github.com/rsyslog/rsyslog/blob/master/CONTRIBUTING.md) under the [GNU General Public License](https://github.com/rsyslog/rsyslog/blob/master/COPYING).

View File

@@ -1,5 +1,5 @@
This is the license which applies to OpenTTD with the exception of some This is the license which applies to OpenTTD with the exception of some
3rd party modules. See README.md for details 3rd party modules. See readme.txt for details
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE

173
Doxyfile
View File

@@ -8,14 +8,9 @@
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Project related configuration options # Project related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = OpenTTD PROJECT_NAME = OpenTTD
PROJECT_NUMBER =
PROJECT_BRIEF =
PROJECT_LOGO =
OUTPUT_DIRECTORY = docs/source/ OUTPUT_DIRECTORY = docs/source/
CREATE_SUBDIRS = YES CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES REPEAT_BRIEF = YES
@@ -37,42 +32,22 @@ STRIP_FROM_PATH = ./
STRIP_FROM_INC_PATH = STRIP_FROM_INC_PATH =
SHORT_NAMES = NO SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO DISTRIBUTE_GROUP_DOC = NO
TAB_SIZE = 2 TAB_SIZE = 2
ALIASES = ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 0
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Build related configuration options # Build related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
EXTRACT_ALL = NO EXTRACT_ALL = NO
EXTRACT_PRIVATE = YES EXTRACT_PRIVATE = YES
EXTRACT_PACKAGE = NO
EXTRACT_STATIC = YES EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = YES EXTRACT_LOCAL_METHODS = YES
EXTRACT_ANON_NSPACES = YES
HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO HIDE_FRIEND_COMPOUNDS = NO
@@ -80,17 +55,11 @@ HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO HIDE_SCOPE_NAMES = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES INLINE_INFO = YES
SORT_MEMBER_DOCS = YES SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES GENERATE_BUGLIST = YES
@@ -98,27 +67,22 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS = ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30 MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES SHOW_USED_FILES = YES
SHOW_FILES = YES SHOW_DIRECTORIES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER = FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to warning and progress messages # configuration options related to warning and progress messages
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
QUIET = NO QUIET = NO
WARNINGS = YES WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text" WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE = WARN_LOGFILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the input files # configuration options related to the input files
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
INPUT = ./src/ INPUT = ./src/
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.c \ FILE_PATTERNS = *.c \
*.cc \ *.cc \
*.cxx \ *.cxx \
@@ -129,38 +93,31 @@ FILE_PATTERNS = *.c \
RECURSIVE = YES RECURSIVE = YES
EXCLUDE = EXCLUDE =
EXCLUDE_SYMLINKS = NO EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = */3rdparty \ EXCLUDE_PATTERNS = */3rdparty */.svn */script/api
*/script/api
EXCLUDE_SYMBOLS =
EXAMPLE_PATH = EXAMPLE_PATH =
EXAMPLE_PATTERNS = * EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO EXAMPLE_RECURSIVE = NO
IMAGE_PATH = ./docs/ IMAGE_PATH =./docs/
INPUT_FILTER = INPUT_FILTER =
FILTER_PATTERNS = FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to source browsing # configuration options related to source browsing
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
SOURCE_BROWSER = YES SOURCE_BROWSER = YES
INLINE_SOURCES = NO INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES VERBATIM_HEADERS = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index # configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5 COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX = IGNORE_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the HTML output # configuration options related to the HTML output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_HTML = YES GENERATE_HTML = YES
HTML_OUTPUT = html HTML_OUTPUT = html
@@ -168,58 +125,19 @@ HTML_FILE_EXTENSION = .html
HTML_HEADER = HTML_HEADER =
HTML_FOOTER = HTML_FOOTER =
HTML_STYLESHEET = HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = HTML_ALIGN_MEMBERS = YES
HTML_EXTRA_FILES = GENERATE_HTMLHELP = YES
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
CHM_FILE = CHM_FILE =
HHC_LOCATION = HHC_LOCATION =
GENERATE_CHI = NO GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO BINARY_TOC = NO
TOC_EXPAND = YES TOC_EXPAND = YES
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO DISABLE_INDEX = NO
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4 ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
TREEVIEW_WIDTH = 250 TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = NO
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the LaTeX output # configuration options related to the LaTeX output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_LATEX = NO GENERATE_LATEX = NO
LATEX_OUTPUT = latex LATEX_OUTPUT = latex
@@ -229,18 +147,12 @@ COMPACT_LATEX = NO
PAPER_TYPE = a4wide PAPER_TYPE = a4wide
EXTRA_PACKAGES = EXTRA_PACKAGES =
LATEX_HEADER = LATEX_HEADER =
LATEX_FOOTER =
LATEX_EXTRA_STYLESHEET =
LATEX_EXTRA_FILES =
PDF_HYPERLINKS = NO PDF_HYPERLINKS = NO
USE_PDFLATEX = NO USE_PDFLATEX = NO
LATEX_BATCHMODE = NO LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the RTF output # configuration options related to the RTF output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_RTF = NO GENERATE_RTF = NO
RTF_OUTPUT = rtf RTF_OUTPUT = rtf
@@ -248,33 +160,27 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE = RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE = RTF_EXTENSIONS_FILE =
RTF_SOURCE_CODE = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the man page output # configuration options related to the man page output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_MAN = NO GENERATE_MAN = NO
MAN_OUTPUT = man MAN_OUTPUT = man
MAN_EXTENSION = .3 MAN_EXTENSION = .3
MAN_SUBDIR =
MAN_LINKS = NO MAN_LINKS = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the XML output # configuration options related to the XML output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_XML = NO GENERATE_XML = NO
XML_OUTPUT = xml XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES XML_PROGRAMLISTING = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output # configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO GENERATE_AUTOGEN_DEF = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the Perl module output # configuration options related to the Perl module output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_PERLMOD = NO GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO PERLMOD_LATEX = NO
@@ -289,67 +195,42 @@ EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES SEARCH_INCLUDES = YES
INCLUDE_PATH = INCLUDE_PATH =
INCLUDE_FILE_PATTERNS = INCLUDE_FILE_PATTERNS =
PREDEFINED = ENABLE_NETWORK \ PREDEFINED = ENABLE_NETWORK WITH_ZLIB WITH_LZO WITH_LZMA WITH_SDL WITH_PNG WITH_FONTCONFIG WITH_FREETYPE WITH_ICU UNICODE _UNICODE _GNU_SOURCE FINAL=
WITH_ZLIB \
WITH_LZO \
WITH_LZMA \
WITH_SDL \
WITH_PNG \
WITH_FONTCONFIG \
WITH_FREETYPE \
WITH_ICU_SORT \
WITH_ICU_LAYOUT \
UNICODE \
_UNICODE \
_GNU_SOURCE \
FINAL=
EXPAND_AS_DEFINED = EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES SKIP_FUNCTION_MACROS = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to external references # Configuration::additions related to external references
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
TAGFILES = TAGFILES =
GENERATE_TAGFILE = objs/openttd.tag GENERATE_TAGFILE = objs/openttd.tag
ALLEXTERNALS = NO ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
PERL_PATH = /usr/bin/perl PERL_PATH = /usr/bin/perl
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the dot tool # Configuration options related to the dot tool
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES CLASS_DIAGRAMS = YES
MSCGEN_PATH =
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES GROUP_GRAPHS = YES
UML_LOOK = NO UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = NO TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH = DOT_PATH =
DOTFILE_DIRS = DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000 MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES GENERATE_LEGEND = YES
DOT_CLEANUP = YES DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

View File

@@ -12,15 +12,15 @@
# The revision is needed for the bundle name and creating an OSX application bundle. # The revision is needed for the bundle name and creating an OSX application bundle.
# Detect the revision # Detect the revision
VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh")
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
# Make sure we have something in VERSION # Make sure we have something in REV
ifeq ($(VERSION),) ifeq ($(REV),)
VERSION := norev000 REV := norev000
endif endif
ifndef BUNDLE_NAME ifndef BUNDLE_NAME
BUNDLE_NAME = openttd-custom-$(VERSION)-$(OS) BUNDLE_NAME = openttd-custom-$(REV)-$(OS)
endif endif
# An OSX application bundle needs the data files, lang files and openttd executable in a different location. # An OSX application bundle needs the data files, lang files and openttd executable in a different location.
@@ -54,7 +54,7 @@ ifdef OSXAPP
$(Q)mkdir -p "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources" $(Q)mkdir -p "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources"
$(Q)echo "APPL????" > "$(BUNDLE_DIR)/$(OSXAPP)/Contents/PkgInfo" $(Q)echo "APPL????" > "$(BUNDLE_DIR)/$(OSXAPP)/Contents/PkgInfo"
$(Q)cp "$(ROOT_DIR)/os/macosx/openttd.icns" "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/openttd.icns" $(Q)cp "$(ROOT_DIR)/os/macosx/openttd.icns" "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/openttd.icns"
$(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(VERSION)" $(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(REV)"
$(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(BASESET_DIR)" $(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(BASESET_DIR)"
endif endif
ifeq ($(OS),UNIX) ifeq ($(OS),UNIX)
@@ -69,7 +69,7 @@ endif
$(Q)cp "$(BIN_DIR)/baseset/opntitle.dat" "$(BASESET_DIR)/" $(Q)cp "$(BIN_DIR)/baseset/opntitle.dat" "$(BASESET_DIR)/"
$(Q)cp "$(BIN_DIR)/baseset/"*.obm "$(BASESET_DIR)/" $(Q)cp "$(BIN_DIR)/baseset/"*.obm "$(BASESET_DIR)/"
$(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/" $(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/"
$(Q)cp "$(ROOT_DIR)/README.md" "$(BUNDLE_DIR)/" $(Q)cp "$(ROOT_DIR)/readme.txt" "$(BUNDLE_DIR)/"
$(Q)cp "$(ROOT_DIR)/COPYING" "$(BUNDLE_DIR)/" $(Q)cp "$(ROOT_DIR)/COPYING" "$(BUNDLE_DIR)/"
$(Q)cp "$(ROOT_DIR)/known-bugs.txt" "$(BUNDLE_DIR)/" $(Q)cp "$(ROOT_DIR)/known-bugs.txt" "$(BUNDLE_DIR)/"
$(Q)cp "$(ROOT_DIR)/docs/multiplayer.txt" "$(BUNDLE_DIR)/docs/" $(Q)cp "$(ROOT_DIR)/docs/multiplayer.txt" "$(BUNDLE_DIR)/docs/"
@@ -84,11 +84,11 @@ endif
$(Q)cp "$(BIN_DIR)/scripts/"* "$(BUNDLE_DIR)/scripts/" $(Q)cp "$(BIN_DIR)/scripts/"* "$(BUNDLE_DIR)/scripts/"
ifdef MENU_DIR ifdef MENU_DIR
$(Q)cp "$(ROOT_DIR)/media/openttd.desktop" "$(BUNDLE_DIR)/media/" $(Q)cp "$(ROOT_DIR)/media/openttd.desktop" "$(BUNDLE_DIR)/media/"
$(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | LC_ALL=C $(SORT) | $(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.filter.awk" >> "$(BUNDLE_DIR)/media/openttd.desktop" $(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | $(SORT) | $(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.filter.awk" >> "$(BUNDLE_DIR)/media/openttd.desktop"
$(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install" $(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install"
endif endif
ifeq ($(TTD), openttd.exe) ifeq ($(TTD), openttd.exe)
$(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/readme.txt" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt"
ifeq ($(OS), DOS) ifeq ($(OS), DOS)
$(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi/cwsdpmi.txt" "$(BUNDLE_DIR)/docs/" $(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi/cwsdpmi.txt" "$(BUNDLE_DIR)/docs/"
ifndef STRIP ifndef STRIP
@@ -151,15 +151,15 @@ bundle_lha: bundle
bundle_dmg: bundle bundle_dmg: bundle
@echo '[BUNDLE] Creating $(BUNDLE_NAME).dmg' @echo '[BUNDLE] Creating $(BUNDLE_NAME).dmg'
$(Q)mkdir -p "$(BUNDLES_DIR)/OpenTTD $(VERSION)" $(Q)mkdir -p "$(BUNDLES_DIR)/OpenTTD $(REV)"
$(Q)cp -R "$(BUNDLE_DIR)/" "$(BUNDLES_DIR)/OpenTTD $(VERSION)" $(Q)cp -R "$(BUNDLE_DIR)/" "$(BUNDLES_DIR)/OpenTTD $(REV)"
$(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLES_DIR)/OpenTTD $(VERSION)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg" $(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLES_DIR)/OpenTTD $(REV)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg"
$(Q)rm -fr "$(BUNDLES_DIR)/OpenTTD $(VERSION)" $(Q)rm -fr "$(BUNDLES_DIR)/OpenTTD $(REV)"
bundle_exe: all bundle_exe: all
@echo '[BUNDLE] Creating $(BUNDLE_NAME).exe' @echo '[BUNDLE] Creating $(BUNDLE_NAME).exe'
$(Q)mkdir -p "$(BUNDLES_DIR)" $(Q)mkdir -p "$(BUNDLES_DIR)"
$(Q)unix2dos "$(ROOT_DIR)/docs/"*.txt "$(ROOT_DIR)/README.md" "$(ROOT_DIR)/COPYING" "$(ROOT_DIR)/changelog.txt" "$(ROOT_DIR)/known-bugs.txt" $(Q)unix2dos "$(ROOT_DIR)/docs/"*.txt "$(ROOT_DIR)/readme.txt" "$(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)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" $(Q)mv $(ROOT_DIR)/os/windows/installer/*$(PLATFORM).exe "$(BUNDLES_DIR)/$(BUNDLE_NAME).exe"
@@ -172,7 +172,6 @@ install: bundle
$(Q)install -d "$(INSTALL_BINARY_DIR)" $(Q)install -d "$(INSTALL_BINARY_DIR)"
$(Q)install -d "$(INSTALL_ICON_DIR)" $(Q)install -d "$(INSTALL_ICON_DIR)"
$(Q)install -d "$(INSTALL_DATA_DIR)/ai" $(Q)install -d "$(INSTALL_DATA_DIR)/ai"
$(Q)install -d "$(INSTALL_DATA_DIR)/game"
$(Q)install -d "$(INSTALL_DATA_DIR)/baseset" $(Q)install -d "$(INSTALL_DATA_DIR)/baseset"
$(Q)install -d "$(INSTALL_DATA_DIR)/lang" $(Q)install -d "$(INSTALL_DATA_DIR)/lang"
$(Q)install -d "$(INSTALL_DATA_DIR)/scripts" $(Q)install -d "$(INSTALL_DATA_DIR)/scripts"
@@ -183,12 +182,11 @@ else
endif endif
$(Q)install -m 644 "$(BUNDLE_DIR)/lang/"* "$(INSTALL_DATA_DIR)/lang" $(Q)install -m 644 "$(BUNDLE_DIR)/lang/"* "$(INSTALL_DATA_DIR)/lang"
$(Q)install -m 644 "$(BUNDLE_DIR)/ai/"* "$(INSTALL_DATA_DIR)/ai" $(Q)install -m 644 "$(BUNDLE_DIR)/ai/"* "$(INSTALL_DATA_DIR)/ai"
$(Q)install -m 644 "$(BUNDLE_DIR)/game/"* "$(INSTALL_DATA_DIR)/game"
$(Q)install -m 644 "$(BUNDLE_DIR)/baseset/"* "$(INSTALL_DATA_DIR)/baseset" $(Q)install -m 644 "$(BUNDLE_DIR)/baseset/"* "$(INSTALL_DATA_DIR)/baseset"
$(Q)install -m 644 "$(BUNDLE_DIR)/scripts/"* "$(INSTALL_DATA_DIR)/scripts" $(Q)install -m 644 "$(BUNDLE_DIR)/scripts/"* "$(INSTALL_DATA_DIR)/scripts"
ifndef DO_NOT_INSTALL_DOCS ifndef DO_NOT_INSTALL_DOCS
$(Q)install -d "$(INSTALL_DOC_DIR)" $(Q)install -d "$(INSTALL_DOC_DIR)"
$(Q)install -m 644 "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/known-bugs.txt" "$(INSTALL_DOC_DIR)" $(Q)install -m 644 "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/readme.txt" "$(BUNDLE_DIR)/known-bugs.txt" "$(INSTALL_DOC_DIR)"
endif endif
ifndef DO_NOT_INSTALL_CHANGELOG ifndef DO_NOT_INSTALL_CHANGELOG
$(Q)install -d "$(INSTALL_DOC_DIR)" $(Q)install -d "$(INSTALL_DOC_DIR)"

View File

@@ -5,13 +5,16 @@
# 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. # OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. # See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
# #
# Building requires GRFCodec. # Building requires GRFCodec and NFORenum. Older versions of GRFCodec are
# known to miscompile the graphics.
# #
# Recent versions (including sources) can be found at: # Recent nightlies (including sources) of both can be found at:
# http://www.openttd.org/download-grfcodec # http://www.openttd.org/download-grfcodec
# http://www.openttd.org/download-nforenum
# #
# The mercurial repository can be found at: # The mercurial repository of both can be found at:
# http://hg.openttdcoop.org/grfcodec # http://hg.openttdcoop.org/grfcodec
# http://hg.openttdcoop.org/nforenum
# #
@@ -42,31 +45,24 @@ MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum")
NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo
PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png
# List of target files.
OBT_FILES := $(BIN_DIR)/orig_dos.obg
OBT_FILES += $(BIN_DIR)/orig_dos_de.obg
OBT_FILES += $(BIN_DIR)/orig_win.obg
OBT_FILES += $(BIN_DIR)/orig_dos.obs
OBT_FILES += $(BIN_DIR)/orig_win.obs
OBT_FILES += $(BIN_DIR)/no_sound.obs
OBT_FILES += $(BIN_DIR)/orig_dos.obm
OBT_FILES += $(BIN_DIR)/orig_win.obm
OBT_FILES += $(BIN_DIR)/no_music.obm
OBT_FILES += $(BIN_DIR)/orig_tto.obm
# Build the GRF. # Build the GRF.
all: $(OBT_FILES)
ifdef GRFCODEC ifdef GRFCODEC
all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm
else
all:
endif endif
# Make sure the sprites directory exists.
$(OBJS_DIR)/sprites:
$(Q)-mkdir "$@"
$(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt $(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt
$(E) '$(STAGE) Collecting baseset translations' $(E) '$(STAGE) Collecting baseset translations'
$(Q) cat $^ > $@ $(Q) cat $^ > $@
$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/orig_extra.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk $(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/openttd.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk
$(E) '$(STAGE) Updating $(notdir $@)' $(E) '$(STAGE) Updating $(notdir $@)'
$(Q) sed 's/^ORIG_EXTRA.GRF = *[0-9a-f]*$$/ORIG_EXTRA.GRF = '`$(MD5SUM) $(BIN_DIR)/orig_extra.grf | sed 's@ .*@@'`'/' $< > $@.tmp $(Q) sed 's/^OPENTTD.GRF = *[0-9a-f]*$$/OPENTTD.GRF = '`$(MD5SUM) $(BIN_DIR)/openttd.grf | sed 's@ .*@@'`'/' $< > $@.tmp
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $@.tmp >$@ $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $@.tmp >$@
$(Q) rm $@.tmp $(Q) rm $@.tmp
@@ -78,14 +74,9 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/
$(E) '$(STAGE) Updating $(notdir $@)' $(E) '$(STAGE) Updating $(notdir $@)'
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@
# Guard against trying to run GRFCODEC/NFORENUM without either being set.
ifdef GRFCODEC
ifdef NFORENUM
# Compile extra grf # Compile extra grf
$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk $(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR)/assemble_nfo.awk
$(E) '$(STAGE) Assembling openttd.nfo' $(E) '$(STAGE) Assembling openttd.nfo'
$(Q)-mkdir -p $(OBJS_DIR)/sprites
$(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null
$(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo
$(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo
@@ -93,23 +84,9 @@ $(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk
$(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf
$(Q)cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf $(Q)cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf
# The copy operation of PNG_FILES is duplicated from the target 'openttd.grf', thus those targets may not run in parallel.
$(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk | $(BIN_DIR)/openttd.grf
$(E) '$(STAGE) Assembling orig_extra.nfo'
$(Q)-mkdir -p $(OBJS_DIR)/sprites
$(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null
$(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/orig_extra.nfo > $(OBJS_DIR)/sprites/orig_extra.nfo
$(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/orig_extra.nfo
$(E) '$(STAGE) Compiling orig_extra.grf'
$(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf
$(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf
endif
endif
# Clean up temporary files. # Clean up temporary files.
clean: clean:
$(Q)rm -f *.bak *.grf $(OBT_FILES) $(Q)rm -f *.bak *.grf
# Clean up temporary files # Clean up temporary files
mrproper: clean mrproper: clean

View File

@@ -152,7 +152,7 @@ mrproper:
distclean: mrproper distclean: mrproper
maintainer-clean: distclean maintainer-clean: distclean
$(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/orig_extra.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm
depend: depend:
@for dir in $(SRC_DIRS); do \ @for dir in $(SRC_DIRS); do \

View File

@@ -6,6 +6,7 @@
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. # See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
STRGEN = !!STRGEN!! STRGEN = !!STRGEN!!
ENDIAN_CHECK = !!ENDIAN_CHECK!!
SRC_DIR = !!SRC_DIR!! SRC_DIR = !!SRC_DIR!!
LANG_DIR = !!LANG_DIR!! LANG_DIR = !!LANG_DIR!!
BIN_DIR = !!BIN_DIR!! BIN_DIR = !!BIN_DIR!!
@@ -24,6 +25,11 @@ ifeq ($(LANG_SUPPRESS), yes)
LANG_ERRORS = >/dev/null 2>&1 LANG_ERRORS = >/dev/null 2>&1
endif endif
# Make sure endian_host.h is reachable as if it was in the src/ dir
CFLAGS_BUILD += -I $(LANG_OBJS_DIR)
ENDIAN_TARGETS := endian_host.h endian_target.h $(ENDIAN_CHECK)
# Check if we want to show what we are doing # Check if we want to show what we are doing
ifdef VERBOSE ifdef VERBOSE
Q = Q =
@@ -37,23 +43,23 @@ RES := $(shell mkdir -p $(BIN_DIR)/lang )
all: table/strings.h $(LANGS) all: table/strings.h $(LANGS)
strgen_base.o: $(SRC_DIR)/strgen/strgen_base.cpp $(SRC_DIR)/strgen/strgen.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h strgen_base.o: $(SRC_DIR)/strgen/strgen_base.cpp $(SRC_DIR)/strgen/strgen.h endian_host.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
strgen.o: $(SRC_DIR)/strgen/strgen.cpp $(SRC_DIR)/strgen/strgen.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h strgen.o: $(SRC_DIR)/strgen/strgen.cpp $(SRC_DIR)/strgen/strgen.h endian_host.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
string.o: $(SRC_DIR)/string.cpp $(SRC_DIR)/safeguards.h string.o: $(SRC_DIR)/string.cpp endian_host.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp $(SRC_DIR)/safeguards.h alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
@@ -74,11 +80,21 @@ $(LANGS): %.lng: $(LANG_DIR)/%.txt $(STRGEN) lang/english.txt
$(E) '$(STAGE) Compiling language $(*F)' $(E) '$(STAGE) Compiling language $(*F)'
$(Q)./$(STRGEN) $(STRGEN_FLAGS) -s $(LANG_DIR) -d $(LANG_OBJS_DIR) $< $(LANG_ERRORS) && cp $@ $(BIN_DIR)/lang || true # Do not fail all languages when one fails $(Q)./$(STRGEN) $(STRGEN_FLAGS) -s $(LANG_DIR) -d $(LANG_OBJS_DIR) $< $(LANG_ERRORS) && cp $@ $(BIN_DIR)/lang || true # Do not fail all languages when one fails
# The targets to compile the endian-code
endian_host.h: $(ENDIAN_CHECK)
$(E) '$(STAGE) Testing endianness for host'
$(Q)./$(ENDIAN_CHECK) > $@
$(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
$(E) '$(STAGE) Compiling and Linking $@'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $< -o $@
depend: depend:
clean: clean:
$(E) '$(STAGE) Cleaning up language files' $(E) '$(STAGE) Cleaning up language files'
$(Q)rm -f strgen_base.o strgen.o string.o alloc_func.o getoptdata.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* $(Q)rm -f strgen.o string.o alloc_func.o getoptdata.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* $(ENDIAN_TARGETS)
mrproper: clean mrproper: clean
$(Q)rm -rf $(BIN_DIR)/lang $(Q)rm -rf $(BIN_DIR)/lang

View File

@@ -6,6 +6,7 @@
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. # See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
SETTINGSGEN = !!SETTINGSGEN!! SETTINGSGEN = !!SETTINGSGEN!!
ENDIAN_CHECK = !!ENDIAN_CHECK!!
SRC_DIR = !!SRC_DIR!! SRC_DIR = !!SRC_DIR!!
CXX_BUILD = !!CXX_BUILD!! CXX_BUILD = !!CXX_BUILD!!
CFLAGS_BUILD = !!CFLAGS_BUILD!! CFLAGS_BUILD = !!CFLAGS_BUILD!!
@@ -14,6 +15,8 @@ LDFLAGS_BUILD = !!LDFLAGS_BUILD!!
STAGE = !!STAGE!! STAGE = !!STAGE!!
SETTING_OBJS_DIR = !!SETTING_OBJS_DIR!! SETTING_OBJS_DIR = !!SETTING_OBJS_DIR!!
ENDIAN_TARGETS := endian_host.h endian_target.h $(ENDIAN_CHECK)
# Check if we want to show what we are doing # Check if we want to show what we are doing
ifdef VERBOSE ifdef VERBOSE
Q = Q =
@@ -25,23 +28,23 @@ endif
all: table/settings.h all: table/settings.h
settingsgen.o: $(SRC_DIR)/settingsgen/settingsgen.cpp $(SRC_DIR)/string_func.h $(SRC_DIR)/strings_type.h $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/ini_type.h $(SRC_DIR)/core/smallvec_type.hpp $(SRC_DIR)/safeguards.h settingsgen.o: $(SRC_DIR)/settingsgen/settingsgen.cpp $(SRC_DIR)/string_func.h $(SRC_DIR)/strings_type.h $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/ini_type.h $(SRC_DIR)/core/smallvec_type.hpp
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp $(SRC_DIR)/safeguards.h alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
string.o: $(SRC_DIR)/string.cpp $(SRC_DIR)/safeguards.h string.o: $(SRC_DIR)/string.cpp endian_host.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
ini_load.o: $(SRC_DIR)/ini_load.cpp $(SRC_DIR)/core/alloc_func.hpp $(SRC_DIR)/core/mem_func.hpp $(SRC_DIR)/ini_type.h $(SRC_DIR)/string_func.h $(SRC_DIR)/safeguards.h ini_load.o: $(SRC_DIR)/ini_load.cpp $(SRC_DIR)/core/alloc_func.hpp $(SRC_DIR)/core/mem_func.hpp $(SRC_DIR)/ini_type.h $(SRC_DIR)/string_func.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
@@ -54,11 +57,21 @@ table/settings.h: $(SETTINGSGEN) $(SRC_DIR)/table/settings.h.preamble $(SRC_DIR)
@mkdir -p table @mkdir -p table
$(Q)./$(SETTINGSGEN) -o table/settings.h -b $(SRC_DIR)/table/settings.h.preamble -a $(SRC_DIR)/table/settings.h.postamble $(SRC_DIR)/table/*.ini $(Q)./$(SETTINGSGEN) -o table/settings.h -b $(SRC_DIR)/table/settings.h.preamble -a $(SRC_DIR)/table/settings.h.postamble $(SRC_DIR)/table/*.ini
# The targets to compile the endian-code
endian_host.h: $(ENDIAN_CHECK)
$(E) '$(STAGE) Testing endianness for host'
$(Q)./$(ENDIAN_CHECK) > $@
$(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
$(E) '$(STAGE) Compiling and Linking $@'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $< -o $@
depend: depend:
clean: clean:
$(E) '$(STAGE) Cleaning up settings files' $(E) '$(STAGE) Cleaning up settings files'
$(Q)rm -f settingsgen.o alloc_func.o getoptdata.o string.o ini_load.o $(SETTINGSGEN) table/settings.h $(Q)rm -f settingsgen.o alloc_func.o getoptdata.o ini_load.o $(SETTINGSGEN) $(ENDIAN_TARGETS) table/settings.h
mrproper: clean mrproper: clean

View File

@@ -29,7 +29,9 @@ SCRIPT_SRC_DIR = !!SCRIPT_SRC_DIR!!
MEDIA_DIR = !!MEDIA_DIR!! MEDIA_DIR = !!MEDIA_DIR!!
TTD = !!TTD!! TTD = !!TTD!!
STRGEN = !!STRGEN!! STRGEN = !!STRGEN!!
ENDIAN_CHECK = !!ENDIAN_CHECK!!
DEPEND = !!DEPEND!! DEPEND = !!DEPEND!!
ENDIAN_FORCE = !!ENDIAN_FORCE!!
OS = !!OS!! OS = !!OS!!
STAGE = !!STAGE!! STAGE = !!STAGE!!
MAKEDEPEND = !!MAKEDEPEND!! MAKEDEPEND = !!MAKEDEPEND!!
@@ -38,6 +40,7 @@ SORT = !!SORT!!
AWK = !!AWK!! AWK = !!AWK!!
CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!! CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!!
CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!! CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!!
CONFIG_CACHE_ENDIAN = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_ENDIAN!!
CONFIG_CACHE_SOURCE = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_SOURCE!! CONFIG_CACHE_SOURCE = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_SOURCE!!
CONFIG_CACHE_VERSION = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_VERSION!! CONFIG_CACHE_VERSION = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_VERSION!!
@@ -49,16 +52,19 @@ OBJS := $(OBJS_C) $(OBJS_CPP) $(OBJS_MM) $(OBJS_RC)
SRCS := !!SRCS!! SRCS := !!SRCS!!
# All C-files depend on those 3 files # All C-files depend on those 3 files
FILE_DEP := $(CONFIG_CACHE_COMPILER) FILE_DEP := $(CONFIG_CACHE_COMPILER) endian_target.h
# Create all dirs and subdirs # Create all dirs and subdirs
RES := $(shell mkdir -p $(BIN_DIR) $(sort $(dir $(OBJS)))) RES := $(shell mkdir -p $(BIN_DIR) $(sort $(dir $(OBJS))))
# Make sure endian_target.h is reasable as if it was in the src/ dir
CFLAGS += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR) CFLAGS += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR)
CFLAGS_MAKEDEP += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR) CFLAGS_MAKEDEP += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR)
ifdef SCRIPT_SRC_DIR ifdef SCRIPT_SRC_DIR
CFLAGS_MAKEDEP += -I $(SCRIPT_SRC_DIR) CFLAGS_MAKEDEP += -I $(SCRIPT_SRC_DIR)
endif endif
ENDIAN_TARGETS := endian_target.h $(ENDIAN_CHECK)
# Check if we want to show what we are doing # Check if we want to show what we are doing
ifdef VERBOSE ifdef VERBOSE
Q = Q =
@@ -88,28 +94,26 @@ VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh")
MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
# Use autodetected revisions # Use autodetected revisions
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') REV_NR := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ')
ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ')
ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ')
# Make sure we have something in VERSION and ISODATE # Make sure we have something in REV and REV_NR
ifeq ($(VERSION),) ifeq ($(REV),)
VERSION := norev000 REV := norev000
endif endif
ifeq ($(ISODATE),) ifeq ($(REV_NR),)
ISODATE := 00000000 REV_NR := 0
endif endif
# This helps to recompile if flags change # This helps to recompile if flags change
RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CFLAGS) $(CXXFLAGS)" ]; then echo "$(CFLAGS) $(CXXFLAGS)" > $(CONFIG_CACHE_COMPILER); fi ) RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CFLAGS) $(CXXFLAGS)" ]; then echo "$(CFLAGS) $(CXXFLAGS)" > $(CONFIG_CACHE_COMPILER); fi )
RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi ) RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi )
RES := $(shell if [ "`cat $(CONFIG_CACHE_ENDIAN) 2>/dev/null`" != "$(ENDIAN_FORCE)" ]; then echo "$(ENDIAN_FORCE)" > $(CONFIG_CACHE_ENDIAN); fi )
# If there is a change in the source-file-list, make sure we recheck the deps # 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 ) 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 # If there is a change in the revision, make sure we recompile rev.cpp
RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(VERSION) $(MODIFIED)" ]; then echo "$(VERSION) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi ) RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(REV) $(MODIFIED)" ]; then echo "$(REV) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi )
ifndef MAKEDEPEND ifndef MAKEDEPEND
# The slow, but always correct, dep-check # The slow, but always correct, dep-check
@@ -117,7 +121,7 @@ DEP_MASK := %.d
DEPS := $(OBJS:%.o=%.d) DEPS := $(OBJS:%.o=%.d)
# Only include the deps if we are compiling everything # Only include the deps if we are compiling everything
ifeq ($(filter %.o clean mrproper, $(MAKECMDGOALS)),) ifeq ($(filter $(ENDIAN_TARGETS) %.o clean mrproper, $(MAKECMDGOALS)),)
-include $(DEPS) -include $(DEPS)
else else
# In case we want to compile a single target, include the .d file for it # In case we want to compile a single target, include the .d file for it
@@ -151,7 +155,7 @@ DEP_MASK :=
DEPS := Makefile.dep DEPS := Makefile.dep
# Only include the deps if we are not cleaning # Only include the deps if we are not cleaning
ifeq ($(filter depend clean mrproper, $(MAKECMDGOALS)),) ifeq ($(filter $(ENDIAN_TARGETS) depend clean mrproper, $(MAKECMDGOALS)),)
-include Makefile.dep -include Makefile.dep
endif endif
@@ -162,19 +166,6 @@ $(SRC_OBJS_DIR)/$(DEPEND): $(SRC_DIR)/depend/depend.cpp
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) -o $@ $< $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) -o $@ $<
endif endif
# Macro for invoking a command on groups of 100 words at a time
# (analogous to xargs(1)). The macro invokes itself recursively
# until the list of words is depleted.
#
# Usage: $(call xargs,COMMAND,LIST)
#
# COMMAND should be a shell command to which the words will be
# appended as arguments in groups of 100.
define xargs
$(1) $(wordlist 1,100,$(2))
$(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2))))
endef
# Make sure that only 'make depend' ALWAYS triggers a recheck # Make sure that only 'make depend' ALWAYS triggers a recheck
ifeq ($(filter depend, $(MAKECMDGOALS)),) ifeq ($(filter depend, $(MAKECMDGOALS)),)
Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) $(DEP) Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) $(DEP)
@@ -186,7 +177,14 @@ endif
$(Q)touch Makefile.dep.tmp $(Q)touch Makefile.dep.tmp
# Calculate the deps via makedepend # Calculate the deps via makedepend
$(call xargs,$(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -a -- $(CFLAGS_MAKEDEP) -- 2>/dev/null,$(SRCS:%=$(SRC_DIR)/%)) $(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -- $(CFLAGS_MAKEDEP) -- $(SRCS:%=$(SRC_DIR)/%) 2>/dev/null
# Convert x:/... paths to /x/... for mingw
ifeq ($(OS), MINGW)
@cat Makefile.dep.tmp | sed 's@/\([a-zA-Z]\):\/@\/\1\/@g' > Makefile.dep.tmp.mingw
@cp Makefile.dep.tmp.mingw Makefile.dep.tmp
@rm -f Makefile.dep.tmp.mingw
endif
# Remove all comments and includes that don't start with $(SRC_DIR) # Remove all comments and includes that don't start with $(SRC_DIR)
# Remove $(SRC_DIR) from object-file-name # Remove $(SRC_DIR) from object-file-name
@@ -212,7 +210,7 @@ endif
{ \ { \
print $$0 \ print $$0 \
} \ } \
' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | LC_ALL=C $(SORT) > Makefile.dep ' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | $(SORT) > Makefile.dep
$(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak $(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak
@@ -253,7 +251,7 @@ $(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP)
$(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP)
$(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)'
$(Q)$(WINDRES) -o $@ $< $(Q)$(WINDRES) -o $@ -I `basename $<` $<
$(BIN_DIR)/$(TTD): $(TTD) $(BIN_DIR)/$(TTD): $(TTD)
$(Q)cp $(TTD) $(BIN_DIR)/$(TTD) $(Q)cp $(TTD) $(BIN_DIR)/$(TTD)
@@ -266,7 +264,14 @@ endif
$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER) $(TTD): $(OBJS) $(CONFIG_CACHE_LINKER)
$(E) '$(STAGE) Linking $@' $(E) '$(STAGE) Linking $@'
ifeq ($(OS), PSP)
# Because of a bug in the PSP GCC tools, linking via CXX results
# in total chaos and more problems then you can handle. So we need
# CC to link OpenTTD for PSP
$(Q)+$(CC_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
else
$(Q)+$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ $(Q)+$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
endif
ifdef STRIP ifdef STRIP
$(Q)$(STRIP) $@ $(Q)$(STRIP) $@
endif endif
@@ -275,13 +280,23 @@ ifeq ($(OS), DOS)
$(Q)$(ROOT_DIR)/os/dos/make_dos_binary_selfcontained.sh $(SRC_OBJS_DIR)/$@ $(Q)$(ROOT_DIR)/os/dos/make_dos_binary_selfcontained.sh $(SRC_OBJS_DIR)/$@
endif endif
# The targets to compile the endian-code
endian_target.h: $(ENDIAN_CHECK) $(CONFIG_CACHE_ENDIAN)
$(E) '$(STAGE) Testing endianness for target'
$(Q)./$(ENDIAN_CHECK) $(ENDIAN_FORCE) > $@
$(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
$(E) '$(STAGE) Compiling and Linking $@'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $< -o $@
# Revision files # Revision files
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/rev.cpp $(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
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in $(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc $(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
FORCE: FORCE:
@@ -289,7 +304,7 @@ depend: $(DEPS)
clean: clean:
$(E) '$(STAGE) Cleaning up object files' $(E) '$(STAGE) Cleaning up object files'
$(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(DEPEND) $(TTD:%=$(BIN_DIR)/%) $(BIN_DIR)/baseset/openttd.32.bmp $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_SOURCE) $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(DEPEND) $(TTD:%=$(BIN_DIR)/%) $(BIN_DIR)/baseset/openttd.32.bmp $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS)
mrproper: clean mrproper: clean
$(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc $(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc

839
README.md
View File

@@ -1,839 +0,0 @@
# 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)
- 5.2) [Frame rate and performance metrics](#52-frame-rate-and-performance-metrics)
- 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.
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
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 https://www.openttd.org.
You can also find the OpenTTD forums at
[https://www.tt-forums.net](https://www.tt-forums.net/viewforum.php?f=55).
### 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 GitHub's issue tracker. You can find
the tracker at 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
nightly based on where you found the bug.
- 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
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
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 Git revision/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-bit Windows, 64-bit Windows,
Linux on an ARM, Mac OS X on a PowerPC, etc.)
- 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
next to your openttd.cfg. The crash handler will tell you the location.
### 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
on an automatic savegame will be made once the map has been constructed in
the 'save/autosave' directory, see OpenTTD directories to know where to find
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=<level>`' as
parameter or by typing '`debug_level desync=<level>`' 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
Restarting OpenTTD will overwrite 'commands-out.log'. OpenTTD will not remove
the savegames (dmp_cmds_*.sav) made by the desync debugging system, so you
have to occasionally remove them yourself!
The naming format of the desync savegames is as follows:
dmp_cmds_XXXXXXXX_YYYYYYYY.sav. The XXXXXXXX is the hexadecimal representation
of the generation seed of the game and YYYYYYYY is the hexadecimal
representation of the date of the game. This sorts the savegames by game and
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
'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'
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
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
we can easily find them ourselves via bananas or when they are in the
#openttdcoop pack.
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
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 (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
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
extract OpenTTD in the given directory.
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
section 4.2 'OpenTTD directories')
OpenTTD comes without AIs, so if you want to play with AIs you have to download
them. The easiest way is via the 'Check Online Content' button in the main menu.
You can select some AIs that you think are compatible with your playing style.
Another way is manually downloading the AIs from the forum although then you
need to make sure that you install all the required AI libraries too; they get
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
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.
For OpenTTD you need to acquire some third party data files. For this you have
the choice of using the original Transport Tycoon Deluxe data files or a set
of free data files.
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
The free data files, split into OpenGFX for graphics, OpenSFX for sounds and
OpenMSX for music can be found at:
- https://www.openttd.org/download-opengfx for OpenGFX
- https://www.openttd.org/download-opensfx for OpenSFX
- https://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
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
If you want the Transport Tycoon Deluxe music, copy the appropriate files from
the original game into the baseset folder.
- TTD for Windows: All files in the gm/ folder (gm_tt00.gm up to gm_tt21.gm)
- TTD for DOS: The GM.CAT file
- Transport Tycoon Original: The GM.CAT file, but rename it to GM-TTO.CAT
#### 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
AI needs libraries you will have to download those too and put them in the
ai/library/ directory. All AIs and AI Libraries that have been uploaded to
the content download system can be found at https://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
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
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
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)
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\<username>\My Documents\OpenTTD` (2000, XP)
- `C:\Users\<username>\Documents\OpenTTD` (Vista, 7, 8.1, 10)
- macOS: `~/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, 8.1, 10)
- macOS: `/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 (macOS 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:
| 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:
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)
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/).
Copy the binary (OpenTTD.exe, OpenTTD.app, openttd, etc), baseset/ and your
openttd.cfg to this directory.
You can copy binaries for any operating system into this directory, which will
allow you to play the game on nearly any computer you can attach the external
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)
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
file due to being played by external applications.
OpenTTD sees each tar archive as the 'root' of its search path. This means that
having a file with the same path in two different tar files means that one
cannot be opened, after all only one file will be found first. As such it is
advisable to put an uniquely named folder in the root of the tar and put all the
content in that folder. For example, all downloaded content has a path that
concatenates the name of the content and the version, which makes the path
unique. For custom tar files it is advised to do this as well.
The normal files are also referred to by their relative path from the search
directory, this means that also normal files could hide files in a tar as
long as the relative path from the search path of the normal file is the
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
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](https://www.ttdpatch.net).
Several important non-standard controls:
- 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 https://wiki.openttd.org/Hidden_features
for a non-comprehensive list or look at the tooltips.
- Ingame console. More information at https://wiki.openttd.org/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
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
solving these problems, these potentially unsafe actions are logged in
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 /
original Transport Tycoon version
- 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.
### 5.2) Frame rate and performance metrics
The Help menu in-game has a function to open the Frame rate window. This
window shows various real-time performance statistics, measuring what parts
of the game require the most processing power currently.
A summary of the statistics can also be retrieved from the console with the
`fps` command. This is especially useful on dedicated servers, where the
administrator might want to determine what's limiting performance in a slow
game.
The frame rate is given as two figures, the simulation rate and the graphics
frame rate. Usually these are identical, as the screen is rendered exactly
once per simulated tick, but in the future there might be support for graphics
and simulation running at different rates. When the game is paused, the
simulation rate drops to zero.
In addition to the simulation rate, a game speed factor is also calculated.
This is based on the target simulation speed, which is 30 milliseconds per
game tick. At that speed, the expected frame rate is 33.33 frames/second, and
the game speed factor is how close to that target the actual rate is. When
the game is in fast forward mode, the game speed factor shows how much
speed up is achieved.
The lower part of the window shows timing statistics for individual parts of
the game. The times shown are short-term and long-term averages of how long
it takes to process one tick of game time, all figures are in milliseconds.
Clicking a line in the lower part of the window opens a graph window, giving
detailed readings on each tick simulated by the game.
The following is an explanation of the different statistics:
- *Game loop* - Total processing time used per simulated "tick" in the game.
This includes all pathfinding, world updates, and economy handling.
- *Cargo handling* - Time spent loading/unloading cargo at stations, and
industries and towns sending/retrieving cargo from stations.
- *Train ticks*, *Road vehicle ticks*, *Ship ticks*, *Aircraft ticks* -
Time spent on pathfinding and other processing for each player vehicle type.
- *World ticks* - Time spent on other world/landscape processing. This
includes towns growing, building animations, updates of farmland and trees,
and station rating updates.
- *GS/AI total*, *Game script*, and *AI players* - Time spent running logic
for game scripts and AI players. The total may show as less than the current
sum of the individual scripts, this is because AI players at lower
difficulty settings do not run every game tick, and hence contribute less
to the average across all ticks. Keep in mind that the "Current" figure is
also an average, just only over short term.
- *Link graph delay* - Time overruns of the cargo distribution link graph
update thread. Usually the link graph is updated in a background thread,
but these updates need to synchronise with the main game loop occasionally,
if the time spent on link graph updates is longer than the time taken to
otherwise simulate the game while it was updating, these delays are counted
in this figure.
- *Graphics rendering* - Total time spent rendering all graphics, including
both GUI and world viewports. This typically spikes when panning the view
around, and when more things are happening on screen at once.
- *World viewport rendering* - Isolated time spent rendering just world
viewports. If this figure is significantly lower than the total graphics
rendering time, most time is spent rendering GUI than rendering world.
- *Video output* - Speed of copying the rendered graphics to the display
adapter. Usually this should be very fast (in the range of 0-3 ms), large
values for this can indicate a graphics driver problem.
- *Sound mixing* - Speed of mixing active audio samples together. Usually
this should be very fast (in the range of 0-3 ms), if it is slow, consider
switching to the NoSound set.
If the frame rate window is shaded, the title bar will instead show just the
current simulation rate and the game speed factor.
## 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.
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 2015 Update 3 or more recent. 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), ZLIB (WITH_ZLIB), LZO (WITH_LZO), Freetype (WITH_FREETYPE) and
LZMA (WITH_LZMA) support is enabled by default. For these to work you need their
development files. To get them just use vcpkg from https://github.com/Microsoft/vcpkg
using x86-windows-static and x64-windows-static triplets.
For more help with VS see docs/Readme_Windows_MSVC.md.
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:
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.
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
open most older savegames or use the content downloading system.
Without libSDL/liballegro on non-Windows and non-macOS machines you have
no graphical user interface; you would be building a dedicated server.
### 7.2) Supported compilers
The following compilers are known to compile OpenTTD:
- Microsoft Visual C++ (MSVC) 2015, 2017 and 2019.
- 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) 2013 and earlier.
These old versions do not support modern C++ language features.
- 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 https://github.com/OpenTTD/OpenTTD/issues/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
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 https://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`'.
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
modification of the base set files by the build process.
## 8.0) Translating
See https://www.openttd.org/development for up-to-date information.
The use of the online Translator service, located at
https://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 (https://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
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 Git 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
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
### 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
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
for english.txt in the lang subdirectory, which is where your language file
should also be.
That is all! You should now be able to select the language in the game options.
## 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.
If the game is acting strange and you feel adventurous you can try the
'`-d [[<name>=]<level>]`' 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 https://wiki.openttd.org/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.
Under certain circumstance, especially on Ubuntu OpenTTD can be extremely slow
and/or freeze. See known-bugs.txt for more information and how to solve this
problem on your computer.
Under Windows 98 and lower it is impossible to use a dedicated server; it will
fail to start. Perhaps this is for the better because those OSes are not known
for their stability.
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"
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](https://www.tt-forums.net/viewforum.php?f=66)
or [GRFCrawler](https://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
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.
The squirrel implementation in src/3rdparty/squirrel is licensed under
the Zlib license. See src/3rdparty/squirrel/COPYRIGHT for the complete
license text.
The md5 implementation in src/3rdparty/md5 is licensed under the Zlib
license. See the comments in the source files in src/3rdparty/md5 for
the complete license text.
The implementations of Posix getaddrinfo and getnameinfo for OS/2 in
src/3rdparty/os2 are distributed partly under the GNU Lesser General Public
License 2.1, and partly under the (3-clause) BSD license. The exact licensing
terms can be found in src/3rdparty/os2/getaddrinfo.c resp.
src/3rdparty/os2/getnameinfo.c.
The exe2coff implementation in os/dos/exe2coff is available under the
GPL, with a number of additional terms. See os/dos/exe2coff/copying and
os/dos/exe2coff/copying.dj for the exact licensing terms.
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.
CONTRIBUTING.md 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.
## 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)
- Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9)
- 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) - macOS 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) - macOS 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!

View File

@@ -1,69 +0,0 @@
trigger:
- master
- release/*
pr:
- master
- release/*
jobs:
- job: windows
displayName: 'Windows'
pool:
vmImage: 'VS2017-Win2016'
strategy:
matrix:
Win32:
BuildPlatform: 'Win32'
Win64:
BuildPlatform: 'x64'
steps:
- template: azure-pipelines/templates/ci-git-rebase.yml
- template: azure-pipelines/templates/windows-dependencies.yml
- template: azure-pipelines/templates/ci-opengfx.yml
- template: azure-pipelines/templates/windows-build.yml
parameters:
BuildPlatform: $(BuildPlatform)
- script: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86
cd projects
call regression.bat
displayName: 'Test'
- job: linux
displayName: 'Linux'
pool:
vmImage: 'ubuntu-16.04'
strategy:
matrix:
commit-checker: {}
linux-amd64-clang-3.8: {}
linux-amd64-gcc-6: {}
linux-i386-gcc-6: {}
steps:
- template: azure-pipelines/templates/ci-git-rebase.yml
# The dockers already have the dependencies installed
# The dockers already have OpenGFX installed
- template: azure-pipelines/templates/linux-build.yml
parameters:
Image: compile-farm-ci
Tag: $(Agent.JobName)
- job: macos
displayName: 'MacOS'
pool:
vmImage: 'macOS-10.13'
variables:
MACOSX_DEPLOYMENT_TARGET: 10.9
steps:
- template: azure-pipelines/templates/ci-git-rebase.yml
- template: azure-pipelines/templates/osx-dependencies.yml
- template: azure-pipelines/templates/ci-opengfx.yml
- template: azure-pipelines/templates/osx-build.yml
- script: 'make regression'
displayName: 'Test'

View File

@@ -1,10 +0,0 @@
trigger:
branches:
include:
- refs/tags/*
pr: none
jobs:
- template: azure-pipelines/templates/release.yml
parameters:
IsStableRelease: true

View File

@@ -1,7 +0,0 @@
trigger: none
pr: none
jobs:
- template: azure-pipelines/templates/release.yml
parameters:
IsStableRelease: false

View File

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

View File

@@ -1,60 +0,0 @@
#!/bin/sh
set -ex
if [ -z "$1" ]; then
echo "Usage: $0 <folder-with-bundles>"
exit 1
fi
FOLDER=$1
if [ ! -e .version ] || [ ! -e .release_date ]; then
echo "This script should be executed in the root of an extracted source tarball"
exit 1
fi
# Find the name based on the version
if [ -e .is_stable ]; then
isTesting=$(cat .version | grep "RC\|beta" || true)
if [ -z "${isTesting}" ]; then
NAME="stable"
else
NAME="testing"
fi
else
NAME=$(cat .version | cut -d- -f2 | cut -d- -f-2)
fi
# Convert the date to a YAML date
DATE=$(cat .release_date | tr ' ' T | sed 's/TUTC/:00-00:00/')
VERSION=$(cat .version)
BASE="openttd-${VERSION}"
echo "name: ${NAME}" >> manifest.yaml
echo "date: ${DATE}" >> manifest.yaml
echo "base: ${BASE}-" >> manifest.yaml
echo "files:" >> manifest.yaml
error=""
for i in $(ls ${FOLDER} | grep -v ".txt$\|.md$\|sum$" | sort); do
if [ -n "$(echo $i | grep pdb.xz)" ]; then continue; fi
if [ -n "$(echo $i | grep dbg.deb)" ]; then continue; fi
if [ ! -e ${FOLDER}/$i.md5sum ] || [ ! -e ${FOLDER}/$i.sha1sum ] || [ ! -e ${FOLDER}/$i.sha256sum ]; then
echo "ERROR: missing checksum file for ${i}" 1>&2
error="y"
continue
fi
echo "- id: $i" >> manifest.yaml
echo " size: $(stat -c"%s" ${FOLDER}/$i)" >> manifest.yaml
echo " md5sum: $(cat ${FOLDER}/$i.md5sum | cut -d\ -f1)" >> manifest.yaml
echo " sha1sum: $(cat ${FOLDER}/$i.sha1sum | cut -d\ -f1)" >> manifest.yaml
echo " sha256sum: $(cat ${FOLDER}/$i.sha256sum | cut -d\ -f1)" >> manifest.yaml
done
if [ -n "${error}" ]; then
echo "ERROR: exiting due to earlier errors" 1>&2
exit 1
fi

View File

@@ -1,10 +0,0 @@
steps:
# Rebase to target branch for every PR. This means users don't have to
# rebase every time target branch changes. As long as the PR applies cleanly, we
# will validate it.
- bash: |
git config user.email 'info@openttd.org'
git config user.name 'OpenTTD CI'
git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH}
displayName: 'Rebase to target branch'
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))

View File

@@ -1,8 +0,0 @@
steps:
- bash: |
set -ex
cd bin/baseset
curl -L https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip > opengfx-0.5.2-all.zip
unzip opengfx-0.5.2-all.zip
rm -f opengfx-0.5.2-all.zip
displayName: 'Install OpenGFX'

View File

@@ -1,36 +0,0 @@
parameters:
Image: ''
Tag: ''
ContainerCommand: ''
steps:
# 'envVars' in the 'Docker@1' task is a bit funky. When you want to use a
# variable, you have to quote it. But the quote is also sent directly to
# Docker and ends up in the variable, which you don't want. To work around
# this, we set the correct variable first (which becomes an env-variable), and
# pass that env-variable through to Docker. We cannot use the normal
# 'variables' entry, as we are a template. So that results in this bit of
# Bash code. Not because it is pretty, but it is the only way we found that
# works.
- bash: |
echo "##vso[task.setvariable variable=TARGET_BRANCH]${SYSTEM_PULLREQUEST_TARGETBRANCH}"
echo "Target branch is ${SYSTEM_PULLREQUEST_TARGETBRANCH}"
displayName: "Set target branch"
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- task: Docker@1
${{ if eq(parameters.Image, 'compile-farm') }}:
displayName: 'Build'
${{ if eq(parameters.Image, 'compile-farm-ci') }}:
displayName: 'Build and test'
# Run the commit-checker only if it is a Pull Request
condition: and(succeeded(), or(ne(variables['Agent.JobName'], 'commit-checker'), eq(variables['Build.Reason'], 'PullRequest')))
inputs:
command: 'Run an image'
imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }}
volumes: '$(Build.SourcesDirectory):$(Build.SourcesDirectory)'
workingDirectory: '$(Build.SourcesDirectory)'
containerCommand: ${{ parameters.ContainerCommand }}
runInBackground: false
envVars: |
TARGET_BRANCH

View File

@@ -1,5 +0,0 @@
steps:
# Because we run the compile in a docker (under root), we are not owner
# of the 'bundles' folder. Fix that by executing a chown on it.
- bash: sudo chown -R $(id -u):$(id -g) bundles
displayName: 'Claim bundles folder back'

View File

@@ -1,5 +0,0 @@
steps:
- script: './configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-static'
displayName: 'Configure'
- script: 'make -j2'
displayName: 'Build'

View File

@@ -1,12 +0,0 @@
steps:
- script: |
set -ex
HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng freetype
# Remove the dynamic libraries of these libraries, to ensure we use
# the static versions. That is important, as it is unlikely any
# end-user has these brew libraries installed.
rm /usr/local/Cellar/lzo/*/lib/*.dylib
rm /usr/local/Cellar/xz/*/lib/*.dylib
rm /usr/local/Cellar/libpng/*/lib/*.dylib
rm /usr/local/Cellar/freetype/*/lib/*.dylib
displayName: 'Install dependencies'

View File

@@ -1,19 +0,0 @@
parameters:
CalculateChecksums: true
steps:
- ${{ if eq(parameters.CalculateChecksums, true) }}:
- bash: |
set -ex
cd bundles
for i in $(ls); do
openssl dgst -r -md5 -hex $i > $i.md5sum
openssl dgst -r -sha1 -hex $i > $i.sha1sum
openssl dgst -r -sha256 -hex $i > $i.sha256sum
done
displayName: 'Calculate checksums'
- task: PublishBuildArtifacts@1
displayName: 'Publish bundles'
inputs:
PathtoPublish: bundles/
ArtifactName: bundles

View File

@@ -1,20 +0,0 @@
# Fetch the source tarball as prepared by an earlier job. In there is the
# version predefined. This ensures we are all going to compile the same
# source with the same version.
steps:
- checkout: none
- task: DownloadBuildArtifacts@0
displayName: 'Download source'
inputs:
downloadType: specific
itemPattern: 'bundles/openttd-*-source.tar.xz'
downloadPath: '$(Build.ArtifactStagingDirectory)'
- bash: tar --xz -xf ../a/bundles/openttd-*-source.tar.xz --strip-components=1
displayName: 'Extracting source'
- bash: |
set -e
VERSION=$(cat .version)
echo "${VERSION}"
echo "##vso[build.updatebuildnumber]${VERSION}"
displayName: 'Change BuildNumber to version'

View File

@@ -1,20 +0,0 @@
parameters:
IsStableRelease: false
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download all bundles'
inputs:
downloadType: specific
itemPattern: 'bundles/*'
downloadPath: '$(Build.ArtifactStagingDirectory)'
- ${{ if eq(parameters.IsStableRelease, true) }}:
- script: |
touch .is_stable
displayName: 'Mark as stable release'
- script: |
set -ex
./azure-pipelines/manifest.sh ../a/bundles/
mkdir -p bundles
mv manifest.yaml bundles/
displayName: 'Create manifest.yaml'

View File

@@ -1,35 +0,0 @@
# Set the revisions, and remove the VCS files.
# This ensures everything else picks up on the predefined versions, and not
# that because of some build process the version all of a sudden changes.
steps:
- script: |
set -ex
if [ -n "${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}" ]; then
# We are triggered from a GitHub Pull Request
git checkout -B pr${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}
elif [ "${BUILD_SOURCEBRANCHNAME}" = "merge" ] || [ "${BUILD_SOURCEBRANCHNAME}" = "head" ]; then
# We are manually triggered based on a GitHub Pull Request
PULLREQUESTNUMBER=$(echo ${BUILD_SOURCEBRANCH} | cut -d/ -f3)
git checkout -B pr${PULLREQUESTNUMBER}
else
git checkout -B ${BUILD_SOURCEBRANCHNAME}
fi
./findversion.sh > .ottdrev
./azure-pipelines/changelog.sh > .changelog
TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date
cat .ottdrev | cut -f 1 -d$'\t' > .version
echo "Release Date: $(cat .release_date)"
echo "Revision: $(cat .ottdrev)"
echo "Version: $(cat .version)"
displayName: 'Create version files'
- script: |
set -e
VERSION=$(cat .version)
echo "${VERSION}"
echo "##vso[build.updatebuildnumber]${VERSION}"
displayName: 'Change BuildNumber to version'
- script: find . -iname .hg -or -iname .git -or -iname .svn | xargs rm -rf
displayName: 'Remove VCS information'

View File

@@ -1,175 +0,0 @@
parameters:
# If this is false, not all targets are triggered. For example:
# The NSIS installer for Windows and the creation of debs only work for
# releases. Not for any other type of binary. So they are skilled if this
# is set to false.
IsStableRelease: false
jobs:
- job: source
displayName: 'Source'
pool:
vmImage: 'ubuntu-16.04'
steps:
- template: release-prepare-source.yml
- script: |
set -ex
# Rename the folder to openttd-NNN-source
mkdir openttd-$(Build.BuildNumber)
find . -maxdepth 1 -not -name . -not -name openttd-$(Build.BuildNumber) -exec mv {} openttd-$(Build.BuildNumber)/ \;
# Copy back release_date, as it is needed for the template 'release-bundles'
cp openttd-$(Build.BuildNumber)/.release_date .release_date
mkdir bundles
tar --xz -cf bundles/openttd-$(Build.BuildNumber)-source.tar.xz openttd-$(Build.BuildNumber)
zip -9 -r -q bundles/openttd-$(Build.BuildNumber)-source.zip openttd-$(Build.BuildNumber)
displayName: 'Create bundle'
- template: release-bundles.yml
- job: meta
displayName: 'Metadata'
pool:
vmImage: 'ubuntu-16.04'
dependsOn: source
steps:
- template: release-fetch-source.yml
- script: |
set -ex
mkdir -p bundles
cp .changelog bundles/changelog.txt
cp .release_date bundles/released.txt
cp README.md bundles/README.md
displayName: 'Copy meta files'
- template: release-bundles.yml
parameters:
CalculateChecksums: false
- job: docs
displayName: 'Docs'
pool:
vmImage: 'ubuntu-16.04'
dependsOn: source
steps:
- template: release-fetch-source.yml
- template: linux-build.yml
parameters:
Image: compile-farm
ContainerCommand: '$(Build.BuildNumber)'
Tag: docs
- template: linux-claim-bundles.yml
- template: release-bundles.yml
- job: windows
displayName: 'Windows'
pool:
vmImage: 'VS2017-Win2016'
dependsOn: source
strategy:
matrix:
Win32:
BuildPlatform: 'Win32'
BundlePlatform: 'win32'
Win64:
BuildPlatform: 'x64'
BundlePlatform: 'win64'
steps:
- template: release-fetch-source.yml
- template: windows-dependencies.yml
- template: windows-dependency-zip.yml
- ${{ if eq(parameters.IsStableRelease, true) }}:
- template: windows-dependency-nsis.yml
- template: windows-build.yml
parameters:
BuildPlatform: $(BuildPlatform)
- bash: |
set -ex
make -f Makefile.msvc bundle_pdb bundle_zip PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform)
displayName: 'Create bundles'
- ${{ if eq(parameters.IsStableRelease, true) }}:
- bash: |
set -ex
# NSIS will be part of the Hosted image in the next update. Till then, we set the PATH ourself
export PATH="${PATH}:/c/Program Files (x86)/NSIS"
make -f Makefile.msvc bundle_exe PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform)
displayName: 'Create installer bundle'
- template: release-bundles.yml
- ${{ if eq(parameters.IsStableRelease, true) }}:
- job: linux_stable
displayName: 'Linux'
pool:
vmImage: 'ubuntu-16.04'
dependsOn: source
strategy:
matrix:
linux-ubuntu-xenial-i386-gcc: {}
linux-ubuntu-xenial-amd64-gcc: {}
linux-ubuntu-bionic-i386-gcc: {}
linux-ubuntu-bionic-amd64-gcc: {}
linux-debian-jessie-i386-gcc: {}
linux-debian-jessie-amd64-gcc: {}
linux-debian-stretch-i386-gcc: {}
linux-debian-stretch-amd64-gcc: {}
steps:
- template: release-fetch-source.yml
- template: linux-build.yml
parameters:
Image: compile-farm
ContainerCommand: '$(Build.BuildNumber)'
Tag: $(Agent.JobName)
- template: linux-claim-bundles.yml
- template: release-bundles.yml
- job: macos
displayName: 'MacOS'
pool:
vmImage: 'macOS-10.13'
dependsOn: source
variables:
MACOSX_DEPLOYMENT_TARGET: 10.9
steps:
- template: release-fetch-source.yml
- template: osx-dependencies.yml
- template: osx-build.yml
- script: 'make bundle_zip bundle_dmg BUNDLE_NAME=openttd-$(Build.BuildNumber)-macosx'
displayName: 'Create bundles'
- template: release-bundles.yml
- job: manifest
displayName: 'Manifest'
pool:
vmImage: 'ubuntu-16.04'
dependsOn:
- source
- docs
- windows
- ${{ if eq(parameters.IsStableRelease, true) }}:
- linux_stable
- macos
# "Skipped" is not a status, and is not succeeded. So it seems to be
# considered failed. So we trigger if all the earlier jobs are done (which
# might be succeeded, failed, or skipped), and run this job. This is not
# optimal, but given the rules, it is the only way to get this to work (as
# some jobs might be skipped).
condition: succeededOrFailed()
steps:
- template: release-fetch-source.yml
- template: release-manifest.yml
${{ if eq(parameters.IsStableRelease, true) }}:
parameters:
IsStableRelease: true
- template: release-bundles.yml
parameters:
CalculateChecksums: false

View File

@@ -1,11 +0,0 @@
parameters:
BuildPlatform: ''
steps:
- task: VSBuild@1
displayName: 'Build'
inputs:
solution: 'projects/openttd_vs141.sln'
platform: ${{ parameters.BuildPlatform }}
configuration: Release
maximumCpuCount: true

View File

@@ -1,14 +0,0 @@
steps:
- bash: |
set -ex
curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip
unzip windows-dependencies.zip
rm -f windows-dependencies.zip
mv windows-dependencies/installed /c/vcpkg/
rm -rf windows-dependencies
displayName: 'Install dependencies'
workingDirectory: $(Build.ArtifactStagingDirectory)
- script: c:\vcpkg\vcpkg.exe integrate install
displayName: 'Integrate vcpkg'

View File

@@ -1,26 +0,0 @@
parameters:
condition: true
steps:
- bash: |
set -ex
mkdir nsis-plugin; cd nsis-plugin
curl -L https://devs.openttd.org/~truebrain/nsis-plugins/Nsis7z.zip > Nsis7z.zip
unzip Nsis7z.zip
cp -R Plugins/* "/c/Program Files (x86)/NSIS/Plugins/"
cd ..; rm -rf nsis-plugin
mkdir nsis-plugin; cd nsis-plugin
curl -L https://devs.openttd.org/~truebrain/nsis-plugins/NsisGetVersion.zip > NsisGetVersion.zip
unzip NsisGetVersion.zip
cp -R Plugins/* "/c/Program Files (x86)/NSIS/Plugins/x86-ansi/"
cd ..; rm -rf nsis-plugin
mkdir nsis-plugin; cd nsis-plugin
curl -L https://devs.openttd.org/~truebrain/nsis-plugins/NsisFindProc.zip > NsisFindProc.zip
unzip NsisFindProc.zip
cp -R *.dll "/c/Program Files (x86)/NSIS/Plugins/x86-ansi/"
cd ..; rm -rf nsis-plugin
displayName: 'Install NSIS with the 7z, GetVersion, and FindProc plugins'
condition: and(succeeded(), ${{ parameters.condition }})

View File

@@ -1,5 +0,0 @@
steps:
- bash: |
set -ex
choco install zip
displayName: 'Install zip'

View File

@@ -7,7 +7,7 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
AILog.Info("0.7 API compatibility in effect:"); AILog.Info("0.7 API compatability in effect:");
AILog.Info(" - AITown::GetLastMonthProduction's behaviour has slightly changed."); AILog.Info(" - AITown::GetLastMonthProduction's behaviour has slightly changed.");
AILog.Info(" - AISubsidy::GetDestination returns STATION_INVALID for awarded subsidies."); AILog.Info(" - AISubsidy::GetDestination returns STATION_INVALID for awarded subsidies.");
AILog.Info(" - AISubsidy::GetSource returns STATION_INVALID for awarded subsidies."); AILog.Info(" - AISubsidy::GetSource returns STATION_INVALID for awarded subsidies.");
@@ -367,17 +367,3 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS
AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS
AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS
AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -7,7 +7,7 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
AILog.Info("1.0 API compatibility in effect."); AILog.Info("1.0 API compatability in effect.");
AIRoad._BuildRoadStation <- AIRoad.BuildRoadStation; AIRoad._BuildRoadStation <- AIRoad.BuildRoadStation;
AIRoad.BuildRoadStation <- function(tile, front, road_veh_type, station_id) AIRoad.BuildRoadStation <- function(tile, front, road_veh_type, station_id)
@@ -119,17 +119,3 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS
AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS
AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS
AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -7,7 +7,7 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
AILog.Info("1.1 API compatibility in effect."); AILog.Info("1.1 API compatability in effect.");
AICompany.GetCompanyValue <- function(company) AICompany.GetCompanyValue <- function(company)
{ {
@@ -56,17 +56,3 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS
AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS
AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS
AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -7,18 +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 <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
AILog.Info("1.2 API compatibility in effect."); AILog.Info("1.2 API compatability in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -7,18 +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 <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
AILog.Info("1.3 API compatibility in effect."); AILog.Info("1.3 API compatability in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -1,4 +1,4 @@
/* $Id$ */ /* $Id: compat_1.3.nut 23969 2012-02-19 19:14:17Z rubidium $ */
/* /*
* This file is part of OpenTTD. * This file is part of OpenTTD.
@@ -6,19 +6,3 @@
* 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. * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
AILog.Info("1.4 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -1,24 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
AILog.Info("1.5 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -1,24 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
AILog.Info("1.6 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -1,24 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
AILog.Info("1.7 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -1,24 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
AILog.Info("1.8 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
AIBridge._GetName <- AIBridge.GetName;
AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -1,8 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/

View File

@@ -2,12 +2,12 @@
# $Id$ # $Id$
if ! [ -f ai/regression/completeness.sh ]; then if ! [ -f ai/regression/regression.nut ]; then
echo "Make sure you are in the root of OpenTTD before starting this script." echo "Make sure you are in the root of OpenTTD before starting this script."
exit 1 exit 1
fi fi
cat ai/regression/tst_*/main.nut | tr ';' '\n' | awk ' cat ai/regression/regression.nut | tr ';' '\n' | awk '
/^function/ { /^function/ {
for (local in locals) { for (local in locals) {
delete locals[local] delete locals[local]
@@ -61,7 +61,7 @@ cat ai/regression/tst_*/main.nut | tr ';' '\n' | awk '
} }
' | sed 's/ //g' | sort | uniq > tmp.in_regression ' | sed 's/ //g' | sort | uniq > tmp.in_regression
grep 'DefSQ.*Method' ../src/script/api/ai/*.hpp.sq | grep -v 'AIError::' | grep -v 'AIAbstractList::Valuate' | grep -v '::GetClassName' | sed 's/^[^,]*, &//g;s/,[^,]*//g' | sort > tmp.in_api grep 'DefSQ.*Method' ../src/ai/api/*.hpp.sq | grep -v 'AIError::' | grep -v 'AIAbstractList::Valuate' | grep -v '::GetClassName' | sed 's/^[^,]*, &//g;s/,[^,]*//g' | sort > tmp.in_api
diff -u tmp.in_regression tmp.in_api | grep -v '^+++' | grep '^+' | sed 's/^+//' diff -u tmp.in_regression tmp.in_api | grep -v '^+++' | grep '^+' | sed 's/^+//'

View File

@@ -253,11 +253,7 @@ function Regression::Bridge()
if (AIBridge.IsValidBridge(i)) j++; if (AIBridge.IsValidBridge(i)) j++;
print(" Bridge " + i); print(" Bridge " + i);
print(" IsValidBridge(): " + AIBridge.IsValidBridge(i)); print(" IsValidBridge(): " + AIBridge.IsValidBridge(i));
print(" GetName():"); print(" GetName(): " + AIBridge.GetName(i));
print(" VT_RAIL: " + AIBridge.GetName(i, AIVehicle.VT_RAIL));
print(" VT_ROAD: " + AIBridge.GetName(i, AIVehicle.VT_ROAD));
print(" VT_WATER: " + AIBridge.GetName(i, AIVehicle.VT_WATER));
print(" VT_AIR: " + AIBridge.GetName(i, AIVehicle.VT_AIR));
print(" GetMaxSpeed(): " + AIBridge.GetMaxSpeed(i)); print(" GetMaxSpeed(): " + AIBridge.GetMaxSpeed(i));
print(" GetPrice(): " + AIBridge.GetPrice(i, 5)); print(" GetPrice(): " + AIBridge.GetPrice(i, 5));
print(" GetMaxLength(): " + AIBridge.GetMaxLength(i)); print(" GetMaxLength(): " + AIBridge.GetMaxLength(i));
@@ -574,7 +570,7 @@ function Regression::Group()
local vehicle = AIVehicle.BuildVehicle(10000, 116); local vehicle = AIVehicle.BuildVehicle(10000, 116);
print(" AIVehicle.BuildVehicle(): " + vehicle); print(" AIVehicle.BuildVehicle(): " + vehicle);
print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116)); print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116));
local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD, AIGroup.GROUP_INVALID); local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD);
print(" CreateGroup(): " + group); print(" CreateGroup(): " + group);
print(" MoveVehicle(): " + AIGroup.MoveVehicle(group, vehicle)); print(" MoveVehicle(): " + AIGroup.MoveVehicle(group, vehicle));
print(" GetNumEngines(): " + AIGroup.GetNumEngines(group, 116)); print(" GetNumEngines(): " + AIGroup.GetNumEngines(group, 116));
@@ -976,7 +972,48 @@ function Regression::Order()
print(" SetStopLocation(): " + AIOrder.SetStopLocation(20, 0, AIOrder.STOPLOCATION_MIDDLE)); print(" SetStopLocation(): " + AIOrder.SetStopLocation(20, 0, AIOrder.STOPLOCATION_MIDDLE));
print(" GetStopLocation(): " + AIOrder.GetStopLocation(20, 0)); print(" GetStopLocation(): " + AIOrder.GetStopLocation(20, 0));
local list = AIVehicleList_Station(3); local list = AIStationList_Vehicle(12);
print("");
print("--StationList_Vehicle--");
print(" Count(): " + list.Count());
list.Valuate(AIStation.GetLocation);
print(" Location ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoWaiting, 0);
print(" CargoWaiting(0) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoWaiting, 1);
print(" CargoWaiting(1) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoRating, 1);
print(" CargoRating(1) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetDistanceManhattanToTile, 30000);
print(" DistanceManhattanToTile(30000) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetDistanceSquareToTile, 30000);
print(" DistanceSquareToTile(30000) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.IsWithinTownInfluence, 0);
print(" IsWithinTownInfluence(0) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list = AIVehicleList_Station(3);
print(""); print("");
print("--VehicleList_Station--"); print("--VehicleList_Station--");
@@ -1022,36 +1059,7 @@ function Regression::Rail()
print(" BuildRail(): " + AIRail.BuildRail(10002, 10003, 10006)); print(" BuildRail(): " + AIRail.BuildRail(10002, 10003, 10006));
print(" HasTransportType(): " + AITile.HasTransportType(10005, AITile.TRANSPORT_RAIL)); print(" HasTransportType(): " + AITile.HasTransportType(10005, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(10006, AITile.TRANSPORT_RAIL)); print(" HasTransportType(): " + AITile.HasTransportType(10006, AITile.TRANSPORT_RAIL));
print(" RemoveRail(): " + AIRail.RemoveRail(10006, 10005, 10002)); print(" RemoveRail(): " + AIRail.RemoveRail(10005, 10004, 10001));
print(" HasTransportType(): " + AITile.HasTransportType(10004, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(10005, AITile.TRANSPORT_RAIL));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(6200, AIRail.RAILTRACK_NE_SW));
print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(6200, AIRail.RAILTRACK_NW_NE));
print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(6200, AIRail.RAILTRACK_NE_SW));
print(" BuildRail(): " + AIRail.BuildRail(6200, 6200 + 256, 6200 + (256 * 4)));
print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 3), AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 4), AITile.TRANSPORT_RAIL));
print(" RemoveRail(): " + AIRail.RemoveRail(6200 + (256 * 3), 6200 + (256 * 2), 6200 - 256));
print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 3), AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 4), AITile.TRANSPORT_RAIL));
print(" BuildRailTrack(): " + AIRail.BuildRail(14706, 14705, 12907));
print(" HasTransportType(): " + AITile.HasTransportType(13421, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(14191, AITile.TRANSPORT_RAIL));
print(" RemoveRail(): " + AIRail.RemoveRail(12907, 13163, 14706));
print(" HasTransportType(): " + AITile.HasTransportType(13421, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(14191, AITile.TRANSPORT_RAIL));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_SW));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NE_SE));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_NE));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_SW_SE));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NE_SW));
print(" DemolishTile(): " + AITile.DemolishTile(61533));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NE_SW));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_SE));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_NE));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_SW_SE));
print(" DemolishTile(): " + AITile.DemolishTile(61533));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_SE));
print(" Depot"); print(" Depot");
print(" IsRailTile(): " + AIRail.IsRailTile(33411)); print(" IsRailTile(): " + AIRail.IsRailTile(33411));
@@ -1086,31 +1094,6 @@ function Regression::Rail()
print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7957)); print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7957));
print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7958)); print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7958));
print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7959)); print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7959));
print(" Waypoint");
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(12646, AIRail.RAILTRACK_NW_SE));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(12648, AIRail.RAILTRACK_NE_SW));
print(" BuildRailTrack(): " + AIRail.BuildRailTrack(12650, AIRail.RAILTRACK_NW_NE));
print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12644));
print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12646));
print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12648));
print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12650));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12644));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12646));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12648));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12650));
print(" RemoveRailWaypointTileRectangle():" + AIRail.RemoveRailWaypointTileRectangle(12644, 12646, false));
print(" RemoveRailWaypointTileRectangle():" + AIRail.RemoveRailWaypointTileRectangle(12648, 12650, true));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12644));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12646));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12648));
print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12650));
print(" HasTransportType(): " + AITile.HasTransportType(12644, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(12646, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(12648, AITile.TRANSPORT_RAIL));
print(" HasTransportType(): " + AITile.HasTransportType(12650, AITile.TRANSPORT_RAIL));
print(" DemolishTile(): " + AITile.DemolishTile(12648));
print(" DemolishTile(): " + AITile.DemolishTile(12650));
} }
function Regression::Road() function Regression::Road()
@@ -1251,6 +1234,10 @@ function Regression::Station()
print(" GetLocation(1000): " + AIStation.GetLocation(1000)); print(" GetLocation(1000): " + AIStation.GetLocation(1000));
print(" GetStationID(33411): " + AIStation.GetStationID(33411)); print(" GetStationID(33411): " + AIStation.GetStationID(33411));
print(" GetStationID(34411): " + AIStation.GetStationID(34411)); print(" GetStationID(34411): " + AIStation.GetStationID(34411));
print(" GetCargoWaiting(0, 0): " + AIStation.GetCargoWaiting(0, 0));
print(" GetCargoWaiting(1000, 0): " + AIStation.GetCargoWaiting(1000, 0));
print(" GetCargoWaiting(0, 1000): " + AIStation.GetCargoWaiting(0, 1000));
print(" GetStationID(33411): " + AIStation.GetStationID(33411)); print(" GetStationID(33411): " + AIStation.GetStationID(33411));
print(" HasRoadType(3, TRAM): " + AIStation.HasRoadType(3, AIRoad.ROADTYPE_TRAM)); print(" HasRoadType(3, TRAM): " + AIStation.HasRoadType(3, AIRoad.ROADTYPE_TRAM));
print(" HasRoadType(3, ROAD): " + AIStation.HasRoadType(3, AIRoad.ROADTYPE_ROAD)); print(" HasRoadType(3, ROAD): " + AIStation.HasRoadType(3, AIRoad.ROADTYPE_ROAD));
@@ -1267,42 +1254,25 @@ function Regression::Station()
print(" GetNearestTown(): " + AIStation.GetNearestTown(10000)); print(" GetNearestTown(): " + AIStation.GetNearestTown(10000));
print(" GetNearestTown(): " + AIStation.GetNearestTown(3)); print(" GetNearestTown(): " + AIStation.GetNearestTown(3));
print(""); local list = AIStationList(AIStation.STATION_BUS_STOP + AIStation.STATION_TRUCK_STOP);
print("--CargoWaiting--");
for (local cargo = 0; cargo <= 1000; cargo += 1000) {
for (local station0 = 0; station0 <= 1000; station0 += 1000) {
print(" GetCargoWaiting(" + station0 + ", " + cargo + "): " +
AIStation.GetCargoWaiting(station0, cargo));
for (local station1 = 0; station1 <= 1000; station1 += 1000) {
print(" GetCargoWaitingFrom(" + station0 + ", " + station1 + ", " + cargo + "): " +
AIStation.GetCargoWaitingFrom(station0, station1, cargo));
print(" GetCargoWaitingVia(" + station0 + ", " + station1 + ", " + cargo + "): " +
AIStation.GetCargoWaitingFrom(station0, station1, cargo));
for (local station2 = 0; station2 <= 1000; station2 += 1000) {
print(" GetCargoWaitingFromVia(" + station0 + ", " + station1 + ", " + station2 + ", " + cargo + "): " +
AIStation.GetCargoWaitingFromVia(station0, station1, station2, cargo));
}
}
}
}
print(""); print("");
print("--CargoPlanned--"); print("--StationList--");
for (local cargo = 0; cargo <= 1000; cargo += 1000) { print(" Count(): " + list.Count());
for (local station0 = 0; station0 <= 1000; station0 += 1000) { list.Valuate(AIStation.GetLocation);
print(" GetCargoPlanned(" + station0 + ", " + cargo + "): " + print(" Location ListDump:");
AIStation.GetCargoPlanned(station0, cargo)); for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
for (local station1 = 0; station1 <= 1000; station1 += 1000) { print(" " + i + " => " + list.GetValue(i));
print(" GetCargoPlannedFrom(" + station0 + ", " + station1 + ", " + cargo + "): " + }
AIStation.GetCargoPlannedFrom(station0, station1, cargo)); list.Valuate(AIStation.GetCargoWaiting, 0);
print(" GetCargoPlannedVia(" + station0 + ", " + station1 + ", " + cargo + "): " + print(" CargoWaiting(0) ListDump:");
AIStation.GetCargoPlannedFrom(station0, station1, cargo)); for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
for (local station2 = 0; station2 <= 1000; station2 += 1000) { print(" " + i + " => " + list.GetValue(i));
print(" GetCargoPlannedFromVia(" + station0 + ", " + station1 + ", " + station2 + ", " + cargo + "): " + }
AIStation.GetCargoPlannedFromVia(station0, station1, station2, cargo)); list.Valuate(AIStation.GetCargoWaiting, 1);
} print(" CargoWaiting(1) ListDump:");
} for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
} print(" " + i + " => " + list.GetValue(i));
} }
} }
@@ -1499,7 +1469,7 @@ function Regression::TileList()
print(" " + i + " => " + list.GetValue(i)); print(" " + i + " => " + list.GetValue(i));
} }
list = AITileList_StationType(6, AIStation.STATION_BUS_STOP); list = AITileList_StationType(4, AIStation.STATION_BUS_STOP);
print(""); print("");
print("--TileList_StationType--"); print("--TileList_StationType--");
print(" Count(): " + list.Count()); print(" Count(): " + list.Count());

View File

@@ -867,165 +867,105 @@ ERROR: IsEnd() is invalid as Begin() is never called
--Bridge-- --Bridge--
Bridge -1 Bridge -1
IsValidBridge(): false IsValidBridge(): false
GetName(): GetName(): (null : 0x00000000)
VT_RAIL: (null : 0x00000000)
VT_ROAD: (null : 0x00000000)
VT_WATER: (null : 0x00000000)
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1 GetMaxSpeed(): -1
GetPrice(): -1 GetPrice(): -1
GetMaxLength(): -1 GetMaxLength(): -1
GetMinLength(): -1 GetMinLength(): -1
Bridge 0 Bridge 0
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Wooden rail bridge
VT_RAIL: Wooden rail bridge
VT_ROAD: Wooden road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 32 GetMaxSpeed(): 32
GetPrice(): 450 GetPrice(): 450
GetMaxLength(): 66 GetMaxLength(): 66
GetMinLength(): 2 GetMinLength(): 2
Bridge 1 Bridge 1
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Concrete rail bridge
VT_RAIL: Concrete rail bridge
VT_ROAD: Concrete road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 48 GetMaxSpeed(): 48
GetPrice(): 630 GetPrice(): 630
GetMaxLength(): 4 GetMaxLength(): 4
GetMinLength(): 2 GetMinLength(): 2
Bridge 2 Bridge 2
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel girder rail bridge
VT_RAIL: Steel girder rail bridge
VT_ROAD: Steel girder road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 64 GetMaxSpeed(): 64
GetPrice(): 811 GetPrice(): 811
GetMaxLength(): 7 GetMaxLength(): 7
GetMinLength(): 2 GetMinLength(): 2
Bridge 3 Bridge 3
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Reinforced concrete suspension rail bridge
VT_RAIL: Reinforced concrete suspension rail bridge
VT_ROAD: Reinforced concrete suspension road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 80 GetMaxSpeed(): 80
GetPrice(): 946 GetPrice(): 946
GetMaxLength(): 12 GetMaxLength(): 12
GetMinLength(): 4 GetMinLength(): 4
Bridge 4 Bridge 4
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel suspension rail bridge
VT_RAIL: Steel suspension rail bridge
VT_ROAD: Steel suspension road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 96 GetMaxSpeed(): 96
GetPrice(): 1042 GetPrice(): 1042
GetMaxLength(): 66 GetMaxLength(): 66
GetMinLength(): 5 GetMinLength(): 5
Bridge 5 Bridge 5
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel suspension rail bridge
VT_RAIL: Steel suspension rail bridge
VT_ROAD: Steel suspension road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 112 GetMaxSpeed(): 112
GetPrice(): 1081 GetPrice(): 1081
GetMaxLength(): 66 GetMaxLength(): 66
GetMinLength(): 5 GetMinLength(): 5
Bridge 6 Bridge 6
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel cantilever rail bridge
VT_RAIL: Steel cantilever rail bridge
VT_ROAD: Steel cantilever road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 160 GetMaxSpeed(): 160
GetPrice(): 1261 GetPrice(): 1261
GetMaxLength(): 9 GetMaxLength(): 9
GetMinLength(): 5 GetMinLength(): 5
Bridge 7 Bridge 7
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel cantilever rail bridge
VT_RAIL: Steel cantilever rail bridge
VT_ROAD: Steel cantilever road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 208 GetMaxSpeed(): 208
GetPrice(): 1306 GetPrice(): 1306
GetMaxLength(): 10 GetMaxLength(): 10
GetMinLength(): 5 GetMinLength(): 5
Bridge 8 Bridge 8
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel cantilever rail bridge
VT_RAIL: Steel cantilever rail bridge
VT_ROAD: Steel cantilever road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 240 GetMaxSpeed(): 240
GetPrice(): 1396 GetPrice(): 1396
GetMaxLength(): 11 GetMaxLength(): 11
GetMinLength(): 5 GetMinLength(): 5
Bridge 9 Bridge 9
IsValidBridge(): true IsValidBridge(): true
GetName(): GetName(): Steel girder rail bridge
VT_RAIL: Steel girder rail bridge
VT_ROAD: Steel girder road bridge
VT_WATER: Aqueduct
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): 256 GetMaxSpeed(): 256
GetPrice(): 1351 GetPrice(): 1351
GetMaxLength(): 4 GetMaxLength(): 4
GetMinLength(): 2 GetMinLength(): 2
Bridge 10 Bridge 10
IsValidBridge(): false IsValidBridge(): false
GetName(): GetName(): (null : 0x00000000)
VT_RAIL: (null : 0x00000000)
VT_ROAD: (null : 0x00000000)
VT_WATER: (null : 0x00000000)
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1 GetMaxSpeed(): -1
GetPrice(): -1 GetPrice(): -1
GetMaxLength(): -1 GetMaxLength(): -1
GetMinLength(): -1 GetMinLength(): -1
Bridge 11 Bridge 11
IsValidBridge(): false IsValidBridge(): false
GetName(): GetName(): (null : 0x00000000)
VT_RAIL: (null : 0x00000000)
VT_ROAD: (null : 0x00000000)
VT_WATER: (null : 0x00000000)
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1 GetMaxSpeed(): -1
GetPrice(): -1 GetPrice(): -1
GetMaxLength(): -1 GetMaxLength(): -1
GetMinLength(): -1 GetMinLength(): -1
Bridge 12 Bridge 12
IsValidBridge(): false IsValidBridge(): false
GetName(): GetName(): (null : 0x00000000)
VT_RAIL: (null : 0x00000000)
VT_ROAD: (null : 0x00000000)
VT_WATER: (null : 0x00000000)
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1 GetMaxSpeed(): -1
GetPrice(): -1 GetPrice(): -1
GetMaxLength(): -1 GetMaxLength(): -1
GetMinLength(): -1 GetMinLength(): -1
Bridge 13 Bridge 13
IsValidBridge(): false IsValidBridge(): false
GetName(): GetName(): (null : 0x00000000)
VT_RAIL: (null : 0x00000000)
VT_ROAD: (null : 0x00000000)
VT_WATER: (null : 0x00000000)
VT_AIR: (null : 0x00000000)
GetMaxSpeed(): -1 GetMaxSpeed(): -1
GetPrice(): -1 GetPrice(): -1
GetMaxLength(): -1 GetMaxLength(): -1
@@ -1352,7 +1292,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRunningCost(): 820 GetRunningCost(): 820
GetPower(): 300 GetPower(): 300
GetWeight(): 47 GetWeight(): 47
GetMaxTractiveEffort(): 136 GetMaxTractiveEffort(): 139
GetVehicleType(): 0 GetVehicleType(): 0
GetRailType(): 0 GetRailType(): 0
GetRoadType(): -1 GetRoadType(): -1
@@ -1496,7 +1436,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRunningCost(): 1968 GetRunningCost(): 1968
GetPower(): 1000 GetPower(): 1000
GetWeight(): 131 GetWeight(): 131
GetMaxTractiveEffort(): 381 GetMaxTractiveEffort(): 388
GetVehicleType(): 0 GetVehicleType(): 0
GetRailType(): 0 GetRailType(): 0
GetRoadType(): -1 GetRoadType(): -1
@@ -1514,7 +1454,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetRunningCost(): 2296 GetRunningCost(): 2296
GetPower(): 1200 GetPower(): 1200
GetWeight(): 162 GetWeight(): 162
GetMaxTractiveEffort(): 471 GetMaxTractiveEffort(): 480
GetVehicleType(): 0 GetVehicleType(): 0
GetRailType(): 0 GetRailType(): 0
GetRoadType(): -1 GetRoadType(): -1
@@ -7313,7 +7253,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false IsBuoyTile(): false
IsLockTile(): false IsLockTile(): false
IsCanalTile(): false IsCanalTile(): false
GetBankBalance(): 479664 GetBankBalance(): 479851
BuildWaterDepot(): true BuildWaterDepot(): true
BuildDock(): true BuildDock(): true
BuildBuoy(): true BuildBuoy(): true
@@ -7326,7 +7266,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): true IsBuoyTile(): true
IsLockTile(): true IsLockTile(): true
IsCanalTile(): true IsCanalTile(): true
GetBankBalance(): 465070 GetBankBalance(): 465257
--AIWaypointList(BUOY)-- --AIWaypointList(BUOY)--
Count(): 1 Count(): 1
@@ -7345,7 +7285,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false IsBuoyTile(): false
IsLockTile(): false IsLockTile(): false
IsCanalTile(): false IsCanalTile(): false
GetBankBalance(): 459675 GetBankBalance(): 459862
BuildWaterDepot(): true BuildWaterDepot(): true
BuildDock(): true BuildDock(): true
@@ -7394,35 +7334,6 @@ ERROR: IsEnd() is invalid as Begin() is never called
HasTransportType(): true HasTransportType(): true
HasTransportType(): false HasTransportType(): false
RemoveRail(): true RemoveRail(): true
HasTransportType(): false
HasTransportType(): false
BuildRailTrack(): true
RemoveRailTrack(): false
RemoveRailTrack(): true
BuildRail(): true
HasTransportType(): true
HasTransportType(): false
RemoveRail(): true
HasTransportType(): true
HasTransportType(): false
BuildRailTrack(): true
HasTransportType(): true
HasTransportType(): true
RemoveRail(): true
HasTransportType(): false
HasTransportType(): false
BuildRailTrack(): false
BuildRailTrack(): false
BuildRailTrack(): true
BuildRailTrack(): true
BuildRailTrack(): false
DemolishTile(): true
BuildRailTrack(): true
BuildRailTrack(): false
BuildRailTrack(): false
BuildRailTrack(): false
DemolishTile(): true
BuildRailTrack(): true
Depot Depot
IsRailTile(): false IsRailTile(): false
BuildRailDepot(): false BuildRailDepot(): false
@@ -7451,30 +7362,6 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsRailStationTile(): false IsRailStationTile(): false
IsRailStationTile(): false IsRailStationTile(): false
IsRailStationTile(): false IsRailStationTile(): false
Waypoint
BuildRailTrack(): true
BuildRailTrack(): true
BuildRailTrack(): true
BuildRailWaypoint(): false
BuildRailWaypoint(): true
BuildRailWaypoint(): true
BuildRailWaypoint(): false
IsRailWaypointTile(): false
IsRailWaypointTile(): true
IsRailWaypointTile(): true
IsRailWaypointTile(): false
RemoveRailWaypointTileRectangle():true
RemoveRailWaypointTileRectangle():true
IsRailWaypointTile(): false
IsRailWaypointTile(): false
IsRailWaypointTile(): false
IsRailWaypointTile(): false
HasTransportType(): false
HasTransportType(): false
HasTransportType(): true
HasTransportType(): true
DemolishTile(): true
DemolishTile(): true
--RailTypeList-- --RailTypeList--
Count(): 1 Count(): 1
@@ -7598,9 +7485,12 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetName(0): Look, a station GetName(0): Look, a station
GetLocation(1): 29253 GetLocation(1): 29253
GetLocation(1000): -1 GetLocation(1000): -1
GetStationID(33411): 6 GetStationID(33411): 4
GetStationID(34411): 65535 GetStationID(34411): 65535
GetStationID(33411): 6 GetCargoWaiting(0, 0): 0
GetCargoWaiting(1000, 0): -1
GetCargoWaiting(0, 1000): -1
GetStationID(33411): 4
HasRoadType(3, TRAM): false HasRoadType(3, TRAM): false
HasRoadType(3, ROAD): false HasRoadType(3, ROAD): false
HasRoadType(33411, TRAM): false HasRoadType(33411, TRAM): false
@@ -7614,81 +7504,17 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetNearestTown(): 65535 GetNearestTown(): 65535
GetNearestTown(): 10 GetNearestTown(): 10
--CargoWaiting-- --StationList--
GetCargoWaiting(0, 0): 0 Count(): 2
GetCargoWaitingFrom(0, 0, 0): 0 Location ListDump:
GetCargoWaitingVia(0, 0, 0): 0 5 => 33421
GetCargoWaitingFromVia(0, 0, 0, 0): 0 4 => 33411
GetCargoWaitingFromVia(0, 0, 1000, 0): -1 CargoWaiting(0) ListDump:
GetCargoWaitingFrom(0, 1000, 0): -1 5 => 0
GetCargoWaitingVia(0, 1000, 0): -1 4 => 0
GetCargoWaitingFromVia(0, 1000, 0, 0): -1 CargoWaiting(1) ListDump:
GetCargoWaitingFromVia(0, 1000, 1000, 0): -1 5 => 0
GetCargoWaiting(1000, 0): -1 4 => 0
GetCargoWaitingFrom(1000, 0, 0): -1
GetCargoWaitingVia(1000, 0, 0): -1
GetCargoWaitingFromVia(1000, 0, 0, 0): -1
GetCargoWaitingFromVia(1000, 0, 1000, 0): -1
GetCargoWaitingFrom(1000, 1000, 0): -1
GetCargoWaitingVia(1000, 1000, 0): -1
GetCargoWaitingFromVia(1000, 1000, 0, 0): -1
GetCargoWaitingFromVia(1000, 1000, 1000, 0): -1
GetCargoWaiting(0, 1000): -1
GetCargoWaitingFrom(0, 0, 1000): -1
GetCargoWaitingVia(0, 0, 1000): -1
GetCargoWaitingFromVia(0, 0, 0, 1000): -1
GetCargoWaitingFromVia(0, 0, 1000, 1000): -1
GetCargoWaitingFrom(0, 1000, 1000): -1
GetCargoWaitingVia(0, 1000, 1000): -1
GetCargoWaitingFromVia(0, 1000, 0, 1000): -1
GetCargoWaitingFromVia(0, 1000, 1000, 1000): -1
GetCargoWaiting(1000, 1000): -1
GetCargoWaitingFrom(1000, 0, 1000): -1
GetCargoWaitingVia(1000, 0, 1000): -1
GetCargoWaitingFromVia(1000, 0, 0, 1000): -1
GetCargoWaitingFromVia(1000, 0, 1000, 1000): -1
GetCargoWaitingFrom(1000, 1000, 1000): -1
GetCargoWaitingVia(1000, 1000, 1000): -1
GetCargoWaitingFromVia(1000, 1000, 0, 1000): -1
GetCargoWaitingFromVia(1000, 1000, 1000, 1000): -1
--CargoPlanned--
GetCargoPlanned(0, 0): 0
GetCargoPlannedFrom(0, 0, 0): 0
GetCargoPlannedVia(0, 0, 0): 0
GetCargoPlannedFromVia(0, 0, 0, 0): 0
GetCargoPlannedFromVia(0, 0, 1000, 0): -1
GetCargoPlannedFrom(0, 1000, 0): -1
GetCargoPlannedVia(0, 1000, 0): -1
GetCargoPlannedFromVia(0, 1000, 0, 0): -1
GetCargoPlannedFromVia(0, 1000, 1000, 0): -1
GetCargoPlanned(1000, 0): -1
GetCargoPlannedFrom(1000, 0, 0): -1
GetCargoPlannedVia(1000, 0, 0): -1
GetCargoPlannedFromVia(1000, 0, 0, 0): -1
GetCargoPlannedFromVia(1000, 0, 1000, 0): -1
GetCargoPlannedFrom(1000, 1000, 0): -1
GetCargoPlannedVia(1000, 1000, 0): -1
GetCargoPlannedFromVia(1000, 1000, 0, 0): -1
GetCargoPlannedFromVia(1000, 1000, 1000, 0): -1
GetCargoPlanned(0, 1000): -1
GetCargoPlannedFrom(0, 0, 1000): -1
GetCargoPlannedVia(0, 0, 1000): -1
GetCargoPlannedFromVia(0, 0, 0, 1000): -1
GetCargoPlannedFromVia(0, 0, 1000, 1000): -1
GetCargoPlannedFrom(0, 1000, 1000): -1
GetCargoPlannedVia(0, 1000, 1000): -1
GetCargoPlannedFromVia(0, 1000, 0, 1000): -1
GetCargoPlannedFromVia(0, 1000, 1000, 1000): -1
GetCargoPlanned(1000, 1000): -1
GetCargoPlannedFrom(1000, 0, 1000): -1
GetCargoPlannedVia(1000, 0, 1000): -1
GetCargoPlannedFromVia(1000, 0, 0, 1000): -1
GetCargoPlannedFromVia(1000, 0, 1000, 1000): -1
GetCargoPlannedFrom(1000, 1000, 1000): -1
GetCargoPlannedVia(1000, 1000, 1000): -1
GetCargoPlannedFromVia(1000, 1000, 0, 1000): -1
GetCargoPlannedFromVia(1000, 1000, 1000, 1000): -1
--Tile-- --Tile--
HasTreeOnTile(): false HasTreeOnTile(): false
@@ -9280,6 +9106,30 @@ ERROR: IsEnd() is invalid as Begin() is never called
SetStopLocation(): true SetStopLocation(): true
GetStopLocation(): 1 GetStopLocation(): 1
--StationList_Vehicle--
Count(): 2
Location ListDump:
5 => 33421
4 => 33411
CargoWaiting(0) ListDump:
5 => 0
4 => 0
CargoWaiting(1) ListDump:
5 => 0
4 => 0
CargoRating(1) ListDump:
5 => -1
4 => -1
DistanceManhattanToTile(30000) ListDump:
5 => 106
4 => 96
DistanceSquareToTile(30000) ListDump:
5 => 8818
4 => 7058
IsWithinTownInfluence(0) ListDump:
5 => 0
4 => 0
--VehicleList_Station-- --VehicleList_Station--
Count(): 1 Count(): 1
Location ListDump: Location ListDump:

View File

@@ -4,9 +4,9 @@ class Regression extends AIInfo {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; } function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Regression"; } function GetName() { return "Regression"; }
function GetShortName() { return "REGR"; } 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 GetDescription() { return "This runs regression-tests on all commands. On the same map the result should always be the same."; }
function GetVersion() { return 1; } function GetVersion() { return 1; }
function GetAPIVersion() { return "1.9"; } function GetAPIVersion() { return "1.3"; }
function GetDate() { return "2007-03-18"; } function GetDate() { return "2007-03-18"; }
function CreateInstance() { return "Regression"; } function CreateInstance() { return "Regression"; }
} }

View File

@@ -2,11 +2,14 @@
# $Id$ # $Id$
if ! [ -f ai/regression/run.sh ]; then if ! [ -f ai/regression/regression.nut ]; then
echo "Make sure you are in the root of OpenTTD before starting this script." echo "Make sure you are in the root of OpenTTD before starting this script."
exit 1 exit 1
fi fi
cp ai/regression/regression.nut ai/regression/main.nut
cp ai/regression/regression_info.nut ai/regression/info.nut
if [ -f scripts/game_start.scr ]; then if [ -f scripts/game_start.scr ]; then
mv scripts/game_start.scr scripts/game_start.scr.regression mv scripts/game_start.scr scripts/game_start.scr.regression
fi fi
@@ -19,53 +22,34 @@ fi
if [ "$1" = "-g" ]; then if [ "$1" = "-g" ]; then
gdb="gdb --ex run --args " gdb="gdb --ex run --args "
fi fi
if [ -n "$gdb" ]; then
if [ -d "ai/regression/tst_$1" ]; then $gdb ./openttd -x -c ai/regression/regression.cfg $params -g ai/regression/regression.sav
tests="ai/regression/tst_$1"
elif [ -d "ai/regression/tst_$2" ]; then
tests="ai/regression/tst_$2"
else else
tests=ai/regression/tst_* ./openttd -x -c ai/regression/regression.cfg $params -g ai/regression/regression.sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > tmp.regression
fi fi
ret=0 ret=0
for tst in $tests; do if [ -z "$gdb" ]; then
echo -n "Running $tst... " res="`diff -ub ai/regression/regression.txt tmp.regression`"
if [ -z "$res" ]; then
# Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused. echo "Regression test passed!"
cp ai/regression/regression_info.nut $tst/info.nut
sav=$tst/test.sav
if ! [ -f $sav ]; then
sav=ai/regression/empty.sav
fi
if [ -n "$gdb" ]; then
$gdb ./openttd -x -c ai/regression/regression.cfg $params -g $sav
else else
./openttd -x -c ai/regression/regression.cfg $params -g $sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > $tst/tmp.regression echo "Regression test failed! Difference:"
echo "$res"
ret=1
fi fi
echo ""
echo "Regression test done"
fi
if [ -z "$gdb" ]; then rm -f ai/regression/main.nut ai/regression/info.nut
res="`diff -ub $tst/result.txt $tst/tmp.regression`"
if [ -z "$res" ]; then
echo "passed!"
else
echo "failed! Difference:"
echo "$res"
ret=1
fi
fi
rm $tst/info.nut
if [ "$1" != "-k" ]; then
rm -f $tst/tmp.regression
fi
done
if [ -f scripts/game_start.scr.regression ]; then if [ -f scripts/game_start.scr.regression ]; then
mv scripts/game_start.scr.regression scripts/game_start.scr mv scripts/game_start.scr.regression scripts/game_start.scr
fi fi
if [ "$1" != "-k" ]; then
rm -f tmp.regression
fi
exit $ret exit $ret

View File

@@ -1,154 +0,0 @@
Option Explicit
' $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 <http://www.gnu.org/licenses/>.
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Function GetTestList()
Dim retests, i, tests, dir
Set retests = New RegExp
Set GetTestList = CreateObject("Scripting.Dictionary")
retests.Pattern = "ai/regression/tst_*"
retests.Global = True
For i = 0 To WScript.Arguments.Count - 1
Dim test
test = "ai/regression/tst_" & WScript.Arguments.Item(i)
If FSO.FolderExists(test) Then
retests.Pattern = test
Exit For
End If
Next
For Each dir In FSO.GetFolder("ai/regression/").SubFolders
Dim name
name = "ai/regression/" & dir.Name
If retests.Test(name) Then
GetTestList.Add name, name
End If
Next
End Function
Function GetParams()
GetParams = "-snull -mnull -vnull:ticks=30000"
If WScript.Arguments.Count = 0 Then Exit Function
If WScript.Arguments.Item(0) <> "-r" Then Exit Function
GetParams = ""
End Function
Sub FilterFile(filename)
Dim lines, filter, file
Set file = FSO.OpenTextFile(filename, 1)
If Not file.AtEndOfStream Then
lines = file.ReadAll
End If
file.Close
Set filter = New RegExp
filter.Global = True
filter.Multiline = True
filter.Pattern = "0x(\(nil\)|0+)(x0)?"
lines = filter.Replace(lines, "0x00000000")
filter.Pattern = "^dbg: \[script\]"
lines = filter.Replace(lines, "")
filter.Pattern = "^ "
lines = filter.Replace(lines, "ERROR: ")
filter.Pattern = "ERROR: \[1\] \[P\] "
lines = filter.Replace(lines, "")
filter.Pattern = "^dbg: .*\r\n"
lines = filter.Replace(lines, "")
Set file = FSO.OpenTextFile(filename, 2)
file.Write lines
file.Close
End Sub
Function CompareFiles(filename1, filename2)
Dim file, lines1, lines2
Set file = FSO.OpenTextFile(filename1, 1)
If Not file.AtEndOfStream Then
lines1 = file.ReadAll
End IF
file.Close
Set file = FSO.OpenTextFile(filename2, 1)
If Not file.AtEndOfStream Then
lines2 = file.ReadAll
End IF
file.Close
CompareFiles = (lines1 = lines2)
End Function
Function RunTest(test, params, ret)
Dim WshShell, oExec, sav, command
Set WshShell = CreateObject("WScript.Shell")
' Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused.
FSO.CopyFile "ai/regression/regression_info.nut", test & "/info.nut"
sav = test & "/test.sav"
If Not FSO.FileExists(sav) Then
sav = "ai/regression/empty.sav"
End If
command = ".\openttd -x -c ai/regression/regression.cfg " & params & " -g " & sav & " -d script=2 -d misc=9"
' 2>&1 must be after >tmp.regression, else stderr is not redirected to the file
WshShell.Run "cmd /c " & command & " >"& test & "/tmp.regression 2>&1", 0, True
FilterFile test & "/tmp.regression"
If CompareFiles(test & "/result.txt", test & "/tmp.regression") Then
RunTest = "passed!"
Else
RunTest = "failed!"
ret = 1
End If
FSO.DeleteFile test & "/info.nut"
If WScript.Arguments.Count > 0 Then
If WScript.Arguments.Item(0) = "-k" Then
Exit Function
End If
End If
FSO.DeleteFile test & "/tmp.regression"
End Function
On Error Resume Next
WScript.StdOut.WriteLine ""
If Err.Number <> 0 Then
WScript.Echo "This script must be started with cscript."
WScript.Quit 1
End If
On Error Goto 0
If Not FSO.FileExists("ai/regression/run.vbs") Then
WScript.Echo "Make sure you are in the root of OpenTTD before starting this script."
WScript.Quit 1
End If
If FSO.FileExists("scripts/game_start.scr") Then
FSO.MoveFile "scripts/game_start.scr", "scripts/game_start.scr.regression"
End If
Dim params, test, ret
params = GetParams()
ret = 0
For Each test in GetTestList()
WScript.StdOut.Write "Running " & test & "... "
WScript.StdOut.WriteLine RunTest(test, params, ret)
Next
If FSO.FileExists("scripts/game_start.scr.regression") Then
FSO.MoveFile "scripts/game_start.scr.regression", "scripts/game_start.scr"
End If
WScript.Quit ret

View File

@@ -1,216 +0,0 @@
/* $Id$ */
class Regression extends AIController {
function Start();
};
function Regression::StationList()
{
local list = AIStationList(AIStation.STATION_BUS_STOP + AIStation.STATION_TRUCK_STOP);
print("");
print("--StationList--");
print(" Count(): " + list.Count());
list.Valuate(AIStation.GetLocation);
print(" Location ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoWaiting, 0);
print(" CargoWaiting(0) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoWaiting, 1);
print(" CargoWaiting(1) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_Cargo()
{
print("");
print("--StationList_Cargo--");
for (local mode = AIStationList_Cargo.CM_WAITING; mode <= AIStationList_Cargo.CM_PLANNED; ++mode) {
print(" " + mode);
for (local selector = AIStationList_Cargo.CS_BY_FROM; selector <= AIStationList_Cargo.CS_FROM_BY_VIA ; ++selector) {
print(" " + selector);
local list = AIStationList_Cargo(mode, selector, 6, 0, 7);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
}
}
};
function Regression::StationList_CargoPlanned()
{
print("");
print("--StationList_CargoPlanned--");
for (local selector = AIStationList_Cargo.CS_BY_FROM; selector <= AIStationList_Cargo.CS_FROM_BY_VIA; ++selector) {
print(" " + selector);
local list = AIStationList_CargoPlanned(selector, 6, 0, 7);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
}
};
function Regression::StationList_CargoPlannedByFrom()
{
print("");
print("--StationList_CargoPlannedByFrom--");
local list = AIStationList_CargoPlannedByFrom(2, 0);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoPlannedByVia()
{
print("");
print("--StationList_CargoPlannedByVia--");
local list = AIStationList_CargoPlannedByVia(2, 0);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoPlannedViaByFrom()
{
print("");
print("--StationList_CargoPlannedViaByFrom--");
local list = AIStationList_CargoPlannedViaByFrom(6, 0, 7);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoPlannedFromByVia()
{
print("");
print("--StationList_CargoPlannedFromByVia--");
local list = AIStationList_CargoPlannedFromByVia(6, 0, 7);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoWaiting()
{
print("");
print("--StationList_CargoWaiting--");
for (local selector = AIStationList_Cargo.CS_BY_FROM; selector <= AIStationList_Cargo.CS_FROM_BY_VIA; ++selector) {
print(" " + selector);
local list = AIStationList_CargoWaiting(selector, 6, 0, 7);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
}
};
function Regression::StationList_CargoWaitingByFrom()
{
print("");
print("--StationList_CargoWaitingByFrom--");
local list = AIStationList_CargoWaitingByFrom(2, 0);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoWaitingByVia()
{
print("");
print("--StationList_CargoWaitingByVia--");
local list = AIStationList_CargoWaitingByVia(2, 0);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoWaitingViaByFrom()
{
print("");
print("--StationList_CargoWaitingViaByFrom--");
local list = AIStationList_CargoWaitingViaByFrom(6, 0, 7);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_CargoWaitingFromByVia()
{
print("");
print("--StationList_CargoWaitingFromByVia--");
local list = AIStationList_CargoWaitingFromByVia(2, 0, 2);
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
};
function Regression::StationList_Vehicle()
{
local list = AIStationList_Vehicle(12);
print("");
print("--StationList_Vehicle--");
print(" Count(): " + list.Count());
list.Valuate(AIStation.GetLocation);
print(" Location ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoWaiting, 0);
print(" CargoWaiting(0) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoWaiting, 1);
print(" CargoWaiting(1) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetCargoRating, 1);
print(" CargoRating(1) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetDistanceManhattanToTile, 30000);
print(" DistanceManhattanToTile(30000) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.GetDistanceSquareToTile, 30000);
print(" DistanceSquareToTile(30000) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIStation.IsWithinTownInfluence, 0);
print(" IsWithinTownInfluence(0) ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
}
function Regression::Start()
{
StationList();
StationList_Cargo();
StationList_CargoPlanned();
StationList_CargoPlannedByFrom();
StationList_CargoPlannedByVia();
StationList_CargoPlannedViaByFrom();
StationList_CargoPlannedFromByVia();
StationList_CargoWaiting();
StationList_CargoWaitingByFrom();
StationList_CargoWaitingByVia();
StationList_CargoWaitingViaByFrom();
StationList_CargoWaitingFromByVia();
StationList_Vehicle();
}

View File

@@ -1,127 +0,0 @@
--StationList--
Count(): 5
Location ListDump:
6 => 42341
2 => 41831
7 => 41825
5 => 33421
4 => 33411
CargoWaiting(0) ListDump:
7 => 6
6 => 6
2 => 3
5 => 0
4 => 0
CargoWaiting(1) ListDump:
7 => 0
6 => 0
5 => 0
4 => 0
2 => 0
--StationList_Cargo--
0
0
6 => 6
1
6 => 2
2
2 => 4
7 => 2
3
1
0
7 => 18
6 => 16
2 => 7
1
6 => 8
2 => 3
2
2 => 16
6 => 14
7 => 11
3
6 => 10
2 => 8
--StationList_CargoPlanned--
0
7 => 18
6 => 16
2 => 7
1
6 => 8
2 => 3
2
2 => 16
6 => 14
7 => 11
3
6 => 10
2 => 8
--StationList_CargoPlannedByFrom--
7 => 8
6 => 8
2 => 7
--StationList_CargoPlannedByVia--
2 => 16
6 => 7
--StationList_CargoPlannedViaByFrom--
6 => 8
2 => 3
--StationList_CargoPlannedFromByVia--
6 => 10
2 => 8
--StationList_CargoWaiting--
0
6 => 6
1
6 => 2
2
2 => 4
7 => 2
3
--StationList_CargoWaitingByFrom--
2 => 3
--StationList_CargoWaitingByVia--
6 => 3
--StationList_CargoWaitingViaByFrom--
6 => 2
--StationList_CargoWaitingFromByVia--
6 => 3
--StationList_Vehicle--
Count(): 2
Location ListDump:
5 => 33421
4 => 33411
CargoWaiting(0) ListDump:
5 => 0
4 => 0
CargoWaiting(1) ListDump:
5 => 0
4 => 0
CargoRating(1) ListDump:
5 => -1
4 => -1
DistanceManhattanToTile(30000) ListDump:
5 => 106
4 => 96
DistanceSquareToTile(30000) ListDump:
5 => 8818
4 => 7058
IsWithinTownInfluence(0) ListDump:
5 => 0
4 => 0
ERROR: The script died unexpectedly.

97
bin/baseset/no_music.obm Normal file
View File

@@ -0,0 +1,97 @@
; $Id$
;
; This represents more or less nothingness
;
[metadata]
name = NoMusic
shortname = NULL
version = 0
fallback = true
description = A music pack without actual music.
description.af_ZA = 'n Musiek stel sonder enige musiek.
description.ar_EG = مجموعة موسيقى بدون موسيقى
description.be_BY = "Пусты" набор музычнага афармлення, які не зьмяшчае ніякай музыкі.
description.bg_BG = Празен музикален пакет.
description.ca_ES = Un joc de música sense cap música.
description.cs_CZ = Prázná hudební sada.
description.cy_GB = Pecyn cerddoriaeth heb unrhyw gerddoriaeth ynddo.
description.da_DK = En musikpakke uden musik.
description.de_DE = Ein Musikset ohne Musik.
description.el_GR = Ένα πάκετο μουσικής χωρίς πραγματική μουσική.
description.en_AU = A music pack without actual music.
description.en_US = A music pack without actual music.
description.es_ES = Un conjunto de música vacío.
description.et_EE = Muusikakogu ilma muusikata.
description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia.
description.fr_FR = Un pack de musiques sans musiques.
description.gd_GB = Pacaid ciùil anns nach eil fonn sam bith.
description.gl_ES = Un conxunto de músicas sen ningunha música.
description.hr_HR = Muzički paket bez ikakve muzike.
description.hu_HU = Zenei alapcsomag zene nélkül.
description.id_ID = Paket musik tanpa musik sungguhan.
description.is_IS = Tónlistarpakki sem er í raun án tónlistar.
description.it_IT = Un pacchetto musicale non contenente alcuna musica.
description.ja_JP = 空の音楽パック
description.ko_KR = 실제 음악이 없는 음악 목록입니다.
description.lb_LU = E Musikpack ouni aktuell Musik.
description.lt_LT = Muzikos pakas be muzikos.
description.lv_LV = Mūzikas kopa bez mūzikas
description.nb_NO = En musikkpakke uten noe musikk.
description.nl_NL = Een muziekset zonder muziek.
description.nn_NO = Ei musikkpakke utan noko musikk.
description.pl_PL = Zestaw utworów muzycznych nie zawierający żadnej muzyki.
description.pt_BR = Um pacote de músicas sem músicas.
description.pt_PT = Um conjunto de música vazio.
description.ro_RO = Un set de muzică fără muzică inclusă.
description.ru_RU = "Пустой" набор музыкального оформления, не содержащий никакой музыки.
description.sk_SK = Sada hudby neobsahujúca hudbu.
description.sl_SI = Glasbeni paket z vključeno glasbo.
description.sr_RS = Prazan skup muzičkih numera.
description.sv_SE = Ett musikpaket utan någon musik.
description.ta_IN = இசை இல்லாத இசைத்தொகுப்பு.
description.th_TH = ชุดเพลงประกอบแบบไม่มีเสียงเพลง
description.tr_TR = Müzik içermeyen boş bir müzik paketi.
description.uk_UA = Порожній набір музики.
description.vi_VN = Gói âm nhạc này không có nhạc nào.
description.zh_CN = 一个没有实际内容的音乐包.
description.zh_TW = 不含任何音樂的音樂集。
[files]
theme =
old_0 =
old_1 =
old_2 =
old_3 =
old_4 =
old_5 =
old_6 =
old_7 =
old_8 =
old_9 =
new_0 =
new_1 =
new_2 =
new_3 =
new_4 =
new_5 =
new_6 =
new_7 =
new_8 =
new_9 =
ezy_0 =
ezy_1 =
ezy_2 =
ezy_3 =
ezy_4 =
ezy_5 =
ezy_6 =
ezy_7 =
ezy_8 =
ezy_9 =
[md5s]
[names]
[origin]
default = This file was part of your OpenTTD installation.

65
bin/baseset/no_sound.obs Normal file
View File

@@ -0,0 +1,65 @@
; $Id$
;
; This represents more or less nothingness
;
[metadata]
name = NoSound
shortname = NULL
version = 2
fallback = true
description = A sound pack without any sounds.
description.af_ZA = 'n Klank stel sonder enige klanke.
description.ar_EG = مجموعة صوت بدوت اصوات مضافة
description.be_BY = "Пусты" набор гукавога афармленьня, які не зьмяшчае ніякіх гукаў.
description.bg_BG = Празен звуков пакет.
description.ca_ES = Un joc de sons sense cap so.
description.cs_CZ = Prázdná sada zvuků.
description.cy_GB = Pecyn sain heb unrhyw effeithiau sain ynddo.
description.da_DK = En lydpakke uden lyde.
description.de_DE = Basissounds ohne Sound.
description.el_GR = Ένα πάκετο ήχων χώρις ήχους.
description.en_AU = A sound pack without any sounds.
description.en_US = A sound pack without any sounds.
description.es_ES = Un conjunto de sonidos vacío.
description.et_EE = Helikogu ilma helideta.
description.eu_ES = Soinurik gabeko soinu pakete bat
description.fi_FI = Äänipaketti, jossa ei ole ääniä.
description.fr_FR = Un pack de sons sans sons.
description.gd_GB = Pacaid fhuaimean anns nach eil fuaim sam bith.
description.gl_ES = Un conxunto de sons sen ningún son
description.hr_HR = Zvučni paket bez ikakvih zvukova.
description.hu_HU = Hang alapcsomag hangok nélkül.
description.id_ID = Paket efek suara tanpa suara apapun.
description.is_IS = Hljóðpakki án hljóðs.
description.it_IT = Un pacchetto sonoro non contenente alcun suono.
description.ja_JP = 空の効果音パック
description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다.
description.lb_LU = En Soundpack mat all den Sounds.
description.lt_LT = Garsų pakas be jokių garsų.
description.nb_NO = En lydpakke uten noen lyder.
description.nl_NL = Een geluidset zonder geluid.
description.nn_NO = Ei lydpakke utan nokon lydar.
description.pl_PL = Zestaw dźwięków nie zawierający żadnych dźwięków.
description.pt_BR = Um pacote de sons sem sons.
description.pt_PT = Um conjunto de sons vazio.
description.ro_RO = Un set de sunete fără nici un sunet inclus.
description.ru_RU = "Пустой" набор звукового оформления, не содержащий никаких звуков.
description.sk_SK = Zvuková sada neobsahujúca zvuky.
description.sl_SI = Zvočni paket brez zvoka.
description.sr_RS = Prazan skup zvukova.
description.sv_SE = Ett ljudpaket utan några ljud.
description.ta_IN = ஒலிகள் இல்லாத ஒலி தொகுப்பு.
description.th_TH = ชุดเสียงแบบไร้เสียง
description.tr_TR = Ses içermeyen boş bir ses kümesi.
description.uk_UA = Порожній набір звуків.
description.vi_VN = Gói âm thanh này không có âm thanh nào.
description.zh_CN = 一个空的音效包.
description.zh_TW = 不含任何音效的音效集。
[files]
samples =
[md5s]
[origin]
default = This file was part of your OpenTTD installation.

Binary file not shown.

Binary file not shown.

77
bin/baseset/orig_dos.obg Normal file
View File

@@ -0,0 +1,77 @@
; $Id$
;
; This represents the original graphics as on the non-German Transport
; Tycoon Deluxe DOS CD.
;
[metadata]
name = original_dos
shortname = TTDD
version = 1
palette = DOS
description = Original Transport Tycoon Deluxe DOS edition graphics.
description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe grafieke.
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة الدوس
description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для DOS.
description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS.
description.ca_ES = Gràfics originals de Transport Tycoon Deluxe per a DOS.
description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro DOS).
description.cy_GB = Graffeg gwreiddiol fersiwn DOS o Transport Tycoon Deluxe.
description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS-version.
description.de_DE = Original Transport Tycoon Deluxe DOS Basisgrafiken.
description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS.
description.en_AU = Original Transport Tycoon Deluxe DOS edition graphics.
description.en_US = Original Transport Tycoon Deluxe DOS edition graphics.
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS.
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni graafika.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version grafiikat.
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS).
description.gd_GB = Grafaigeachd aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para DOS.
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának grafikája.
description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS.
description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS útgáfunni.
description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS.
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS)
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 그래픽입니다.
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Grafik.
description.lt_LT = Originali Transport Tycoon Deluxe DOS leidimo grafika.
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS.
description.nl_NL = Originele graphics van de Transport Tycoon Deluxe DOS-versie.
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS.
description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS.
description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS.
description.pt_PT = Gráficos originais da edição DOS de Transport Tycoon Deluxe.
description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS.
description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для DOS.
description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS).
description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico DOS.
description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe DOS izdanja.
description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan.
description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு அசைவூட்டங்கள்.
description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS edition
description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü grafikleri.
description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition.
description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS
description.zh_CN = 运输大亨DOS豪华版原版图形包.
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的圖形。
[files]
base = TRG1.GRF
logos = TRGI.GRF
arctic = TRGC.GRF
tropical = TRGH.GRF
toyland = TRGT.GRF
extra = OPENTTD.GRF
[md5s]
TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
OPENTTD.GRF = 75a93cea2ed455c2fd5dcbda39e53538
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
OPENTTD.GRF = This file was part of your OpenTTD installation.

65
bin/baseset/orig_dos.obs Normal file
View File

@@ -0,0 +1,65 @@
; $Id$
;
; This represents the original sounds as on the Transport
; Tycoon Deluxe DOS CD.
;
[metadata]
name = original_dos
shortname = TTDO
version = 0
description = Original Transport Tycoon Deluxe DOS edition sounds.
description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe klanke.
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة الدوس
description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для DOS.
description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за DOS.
description.ca_ES = Sons originals de Transport Tycoon Deluxe per a DOS.
description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro DOS).
description.cy_GB = Effeithiau sain gwreiddiol fersiwn DOS o Transport Tycoon Deluxe.
description.da_DK = Originallyd fra Transport Tycoon Deluxe DOS-version.
description.de_DE = Original Transport Tycoon Deluxe DOS Basissounds.
description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση DOS.
description.en_AU = Original Transport Tycoon Deluxe DOS edition sounds.
description.en_US = Original Transport Tycoon Deluxe DOS edition sounds.
description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión DOS.
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni helid.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version äänet.
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version DOS).
description.gd_GB = Fuaimean aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para DOS.
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának hangjai.
description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi DOS.
description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe DOS útgáfunni.
description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS.
description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (DOS)
description.ko_KR = 오리지널 트랜스포트 타이쿤 도스 에디션의 효과음입니다.
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Sound.
description.lt_LT = Originalūs Transport Tycoon Deluxe DOS leidimo garsai.
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS.
description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe DOS-versie.
description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for DOS.
description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe DOS.
description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição DOS.
description.pt_PT = Sons originais da edição DOS de Transport Tycoon Deluxe.
description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru DOS.
description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для DOS.
description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (DOS).
description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice DOS.
description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe DOS izdanja.
description.sv_SE = Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan.
description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு ஒலிகள்.
description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe DOS edition
description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü sesleri.
description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe DOS edition.
description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên DOS
description.zh_CN = 运输大亨DOS豪华版原版音效包.
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的音效。
[files]
samples = SAMPLE.CAT
[md5s]
SAMPLE.CAT = 422ea3dd074d2859bb51639a6e0e85da
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -0,0 +1,77 @@
; $Id$
;
; This represents the original graphics as on the German Transport
; Tycoon Deluxe DOS CD. It contains one broken sprite.
;
[metadata]
name = original_dos_de
shortname = TTDD
version = 0
palette = DOS
description = Original Transport Tycoon Deluxe DOS (German) edition graphics.
description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS (German) uitgawe grafieke.
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الالمانية نسخة الدوس
description.be_BY = Арыґінальная ґрафіка зь нямецкай версіі Transport Tycoon Deluxe для DOS.
description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS (немски) .
description.ca_ES = Gràfics originals de Transport Tycoon Deluxe per a DOS (Alemany).
description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (německá verze pro DOS).
description.cy_GB = Graffeg gwreiddiol fersiwn DOS (Almaenig) o Transport Tycoon Deluxe.
description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS (Tysk) version.
description.de_DE = Original Transport Tycoon Deluxe DOS (Deutsch) Basisgrafiken.
description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS (Γερμανικό).
description.en_AU = Original Transport Tycoon Deluxe DOS (German) edition graphics.
description.en_US = Original Transport Tycoon Deluxe DOS (German) edition graphics.
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS (Alemán).
description.et_EE = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika.
description.fi_FI = Alkuperäiset Saksassa julkaistun Transport Tycoon Deluxen DOS-version grafiikat.
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande).
description.gd_GB = Grafaigeachd aig an deasachadh DOS (Gearmailteach) tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Graficos da edición orixinal (alemá) de Transport Tycoon Deluxe para DOS.
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS (német) verziójának grafikája.
description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS (Jerman).
description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS (þýsku) útgáfunni.
description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), edizione DOS.
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS・ドイツ版)
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션(독일)의 그래픽입니다.
description.lb_LU = Original Transport Tycoon Deluxe DOS (Däitsch) Editioun Grafik.
description.lt_LT = Originali Transport Tycoon Deluxe DOS (Vokiečių) leidimo grafika.
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk).
description.nl_NL = Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie.
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS (tysk).
description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS (German).
description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS alemã.
description.pt_PT = Gráficos originais da edição DOS (Alemã) de Transport Tycoon Deluxe.
description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS (ediţia germană).
description.ru_RU = Оригинальная графика из немецкой версии Transport Tycoon Deluxe для DOS.
description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS) (v jazyku nemčina).
description.sl_SI = Originalna grafika Transport Tycoon Deluxe za nemško različico DOS.
description.sr_RS = Originalni skup grafika nemačkog Transport Tycoon Deluxe DOS izdanja.
description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska).
description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS (செருமன்) பதிப்பு அசைவூட்டங்கள்.
description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS (German) edition
description.tr_TR = Özgün Transport Tycoon Deluxe DOS (Almanca) sürümü grafikleri.
description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition (німецького).
description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS (tiếng Đức)
description.zh_CN = 运输大亨DOS豪华德语版原版图形包.
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版 (德國版) 的圖形。
[files]
base = TRG1.GRF
logos = TRGI.GRF
arctic = TRGC.GRF
tropical = TRGH.GRF
toyland = TRGT.GRF
extra = OPENTTD.GRF
[md5s]
TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
OPENTTD.GRF = 75a93cea2ed455c2fd5dcbda39e53538
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
OPENTTD.GRF = This file was part of your OpenTTD installation.

Binary file not shown.

77
bin/baseset/orig_win.obg Normal file
View File

@@ -0,0 +1,77 @@
; $Id$
;
; This represents the original graphics as on the Transport
; Tycoon Deluxe for Windows CD.
;
[metadata]
name = original_windows
shortname = TTDW
version = 0
palette = Windows
description = Original Transport Tycoon Deluxe Windows edition graphics.
description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe grafieke.
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة وندوز
description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для Windows.
description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за Windows.
description.ca_ES = Gràfics originals de Transport Tycoon Deluxe per a Windows.
description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro Windows).
description.cy_GB = Graffeg gwreiddiol fersiwn Windows o Transport Tycoon Deluxe.
description.da_DK = Originalgrafik fra Transport Tycoon Deluxe Windows-version.
description.de_DE = Original Transport Tycoon Deluxe Windows Basisgrafiken.
description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση Windows.
description.en_AU = Original Transport Tycoon Deluxe Windows edition graphics.
description.en_US = Original Transport Tycoon Deluxe Windows edition graphics.
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión Windows.
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni graafika.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version grafiikat.
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows).
description.gd_GB = Grafaigeachd aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para Windows.
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának grafikája.
description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi Windows.
description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe Windows útgáfunni.
description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windows.
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (Windows)
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 그래픽입니다.
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Grafik.
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo grafika.
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows.
description.nl_NL = Originele graphics van de Transport Tycoon Deluxe Windows-versie.
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for Windows.
description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe Windows.
description.pt_BR = Gráficos Originais do Transport Tycoon, Edição Windows.
description.pt_PT = Gráficos originais da edição Windows de Transport Tycoon Deluxe.
description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru Windows.
description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для Windows.
description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (Windows).
description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico oken(windows).
description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe Windows izdanja.
description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan.
description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு அசைவூட்டங்கள்.
description.th_TH = กราฟฟิกต้ำตำหรับของ Transport Tycoon Deluxe Windows edition
description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü grafikleri.
description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe Windows edition.
description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên Windows
description.zh_CN = 运输大亨Windows豪华版原版图形包.
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的圖形。
[files]
base = TRG1R.GRF
logos = TRGIR.GRF
arctic = TRGCR.GRF
tropical = TRGHR.GRF
toyland = TRGTR.GRF
extra = OPENTTD.GRF
[md5s]
TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
OPENTTD.GRF = 75a93cea2ed455c2fd5dcbda39e53538
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
OPENTTD.GRF = This file was part of your OpenTTD installation.

141
bin/baseset/orig_win.obm Normal file
View File

@@ -0,0 +1,141 @@
; $Id$
;
; This represents the original music as on the Transport
; Tycoon Deluxe for Windows CD.
;
[metadata]
name = original_windows
shortname = TTDW
version = 1
description = Original Transport Tycoon Deluxe Windows edition music.
description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe musiek.
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الموسيقية نسخة وندوز
description.be_BY = Арыґінальны набор музычнага афармленьня з гульні Transport Tycoon Deluxe для Windows.
description.bg_BG = Оригинална музика на Transport Tycoon Deluxe за Windows.
description.ca_ES = Música Original de Transport Tycoon Deluxe per a Windows.
description.cs_CZ = Původní hudba Transport Tycoon Deluxe (verze pro Windows).
description.cy_GB = Cerddoriaeth gwreiddiol fersion Windows o Transport Tycoon Deluxe.
description.da_DK = Originalmusik fra Transport Tycoon Deluxe Windows-version.
description.de_DE = Original Transport Tycoon Deluxe Windows Musikset.
description.el_GR = Αρχική μουσική από το Transport Tycoon Deluxe έκδοση Windows.
description.en_AU = Original Transport Tycoon Deluxe Windows edition music.
description.en_US = Original Transport Tycoon Deluxe Windows edition music.
description.es_ES = Música original de Transport Tycoon Deluxe versión Windows.
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni muusika.
description.fi_FI = Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki.
description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows).
description.gd_GB = Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Música da edición orixinal de Transport Tycoon Deluxe para Windows.
description.hr_HR = Originalna muzika za Transport Tycoon Deluxe Windows izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának zenéje.
description.id_ID = Musik pengiring orisinil Transport Tycoon Deluxe versi Windows.
description.is_IS = Upprunalega tónlistin úr Transport Tycoon Deluxe Windows útgáfunni.
description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Windows.
description.ja_JP = Transport Tycoon Deluxe オリジナル版 音楽 (Windows)
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 음악입니다.
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Music.
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo muzika.
description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika.
description.nb_NO = Original musikk fra Transport Tycoon Deluxe for Windows.
description.nl_NL = Originele muziek van de Transport Tycoon Deluxe Windows-versie.
description.nn_NO = Original musikk frå Transport Tycoon Deluxe for Windows.
description.pl_PL = Oryginalna edycja utworów muzycznych w Transport Tycoon Deluxe Windows.
description.pt_BR = Música Original do Transport Tycoon Deluxe, Edição Windows
description.pt_PT = Música original da edição Windows de Transport Tycoon Deluxe.
description.ro_RO = Setul de muzică original al Transport Tycoon Deluxe pentru Windows.
description.ru_RU = Оригинальный набор музыкального оформления из игры Transport Tycoon Deluxe для Windows.
description.sk_SK = Pôvodná hudba z Transport Tycoon Deluxe (Windows).
description.sl_SI = Originalna glasba Transport Tycoon Deluxe različice oken(windows).
description.sr_RS = Originalni skup muzičkih numera Transport Tycoon Deluxe Windows izdanja.
description.sv_SE = Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan.
description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு இசை.
description.th_TH = เพลงต้นตำหรับชอง Transport Tycoon Deluxe Windows edition
description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü müzikleri.
description.uk_UA = Оригінальна музика з Transport Tycoon Deluxe Windows edition.
description.vi_VN = Nhạc gốc từ phiên bản Transport Tycoon Deluxe trên Windows
description.zh_CN = Transport Tycoon Deluxe运输大亨Windows豪华版的原版音乐包
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音樂。
[files]
theme = GM_TT00.GM
old_0 = GM_TT02.GM
old_1 = GM_TT06.GM
old_2 = GM_TT03.GM
old_3 = GM_TT12.GM
old_4 = GM_TT08.GM
old_5 = GM_TT13.GM
old_6 = GM_TT14.GM
old_7 = GM_TT10.GM
old_8 =
old_9 =
new_0 = GM_TT04.GM
new_1 = GM_TT01.GM
new_2 = GM_TT05.GM
new_3 = GM_TT15.GM
new_4 = GM_TT11.GM
new_5 = GM_TT16.GM
new_6 = GM_TT09.GM
new_7 =
new_8 =
new_9 =
ezy_0 = GM_TT18.GM
ezy_1 = GM_TT19.GM
ezy_2 = GM_TT21.GM
ezy_3 = GM_TT17.GM
ezy_4 = GM_TT20.GM
ezy_5 = GM_TT07.GM
ezy_6 =
ezy_7 =
ezy_8 =
ezy_9 =
[md5s]
GM_TT00.GM = 45cfec1b9d8c7a0ad45e755833cbf221
GM_TT01.GM = ab14ed3392d848abd2a2e90a9d75d121
GM_TT02.GM = dd4f696e4be5987ce738257b08b50171
GM_TT03.GM = a1bfde23343df9e4063419bf29c166b8
GM_TT04.GM = 4e6943aa0c455203d76c79389054747d
GM_TT05.GM = cee281cb85a2e2343552d97640545a47
GM_TT06.GM = 26d1de5efa8675f94065784e9d539e49
GM_TT07.GM = 6f2691e17558f552ec4c565e4ab7139c
GM_TT08.GM = a42bf2cb3340a822f1a69646fc7a487d
GM_TT09.GM = eb35761a58a8df3c59ed8929cce13916
GM_TT10.GM = 42fecd686720a785d20a78590c466a82
GM_TT11.GM = 50ef1ef02e49d2112786dd45e69dc3ee
GM_TT12.GM = 4ce707a0e0e72419f0681dd9bd95271b
GM_TT13.GM = e765753be29d889ec818f38009103619
GM_TT14.GM = 270e2d63bd32b95a4d007ce15a6ce45f
GM_TT15.GM = 89e116a1c0c69f1845cc903a9bfbe460
GM_TT16.GM = f824e2371b3bedfe61aad4b9c62dd6be
GM_TT17.GM = 1b23eebb0796c1ab99cd97fa7082cf7b
GM_TT18.GM = 15650de3bad645d0e88c4f5c7a2df92a
GM_TT19.GM = 7aec079e15bd09588660b85545ac4dfc
GM_TT20.GM = 1509097889dee617aa1e9a1738a5a930
GM_TT21.GM = a8d0aaad02e1a762d8d54cf81da56bab
[names]
GM_TT00.GM = Tycoon DELUXE Theme
GM_TT01.GM = Snarl Up
GM_TT02.GM = Easy Driver
GM_TT03.GM = Little Red Diesel
GM_TT04.GM = City Groove
GM_TT05.GM = Aliens Ate My Railway
GM_TT06.GM = Stoke It
GM_TT07.GM = Don't Walk!
GM_TT08.GM = Sawyer's Tune
GM_TT09.GM = Fell Apart On Me
GM_TT10.GM = Can't Get There From Here
GM_TT11.GM = Hard Drivin'
GM_TT12.GM = Road Hog
GM_TT13.GM = Hold That Train!
GM_TT14.GM = Broomer's Oil Rag
GM_TT15.GM = Goss Groove
GM_TT16.GM = Small Town
GM_TT17.GM = Cruise Control
GM_TT18.GM = Stroll On
GM_TT19.GM = Funk Central
GM_TT20.GM = Jammit
GM_TT21.GM = Movin' On
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

65
bin/baseset/orig_win.obs Normal file
View File

@@ -0,0 +1,65 @@
; $Id$
;
; This represents the original sounds as on the Transport
; Tycoon Deluxe for Windows CD.
;
[metadata]
name = original_windows
shortname = TTDO
version = 0
description = Original Transport Tycoon Deluxe Windows edition sounds.
description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe klanke.
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة وندوز
description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для Windows.
description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за Windows.
description.ca_ES = Sons originals de Transport Tycoon Deluxe per a Windows.
description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro Windows).
description.cy_GB = Effeithiau sain gwreiddiol fersiwn Windows o Transport Tycoon Deluxe.
description.da_DK = Originallyd fra Transport Tycoon Deluxe Windows-version.
description.de_DE = Original Transport Tycoon Deluxe Windows Basissounds.
description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση Windows.
description.en_AU = Original Transport Tycoon Deluxe Windows edition sounds.
description.en_US = Original Transport Tycoon Deluxe Windows edition sounds.
description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión Windows.
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni helid.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version äänet.
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version Windows).
description.gd_GB = Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para Windows.
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának hangjai.
description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi Windows.
description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe Windows útgáfunni.
description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows.
description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (Windows)
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 효과음입니다.
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Sound.
description.lt_LT = Originalūs Transport Tycoon Deluxe Windows leidimo garsai.
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows.
description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe Windows-versie.
description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for Windows.
description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe Windows.
description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição Windows.
description.pt_PT = Sons originais da edição Windows de Transport Tycoon Deluxe.
description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru Windows.
description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для Windows.
description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (Windows).
description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice oken(windows).
description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe Windows izdanja.
description.sv_SE = Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan.
description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு ஒலிகள்.
description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe Windows edition
description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü sesleri.
description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe Windows edition.
description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên Windows
description.zh_CN = Transport Tycoon Deluxe Windows (运输大亨Windows豪华版)的原版音效包.
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音效。
[files]
samples = SAMPLE.CAT
[md5s]
SAMPLE.CAT = 9212e81e72badd4bbe1eaeae66458e10
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -7,7 +7,7 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
GSLog.Info("1.2 API compatibility in effect."); GSLog.Info("1.2 API compatability in effect.");
GSTown._SetGrowthRate <- GSTown.SetGrowthRate; GSTown._SetGrowthRate <- GSTown.SetGrowthRate;
GSTown.SetGrowthRate <- function(town_id, days_between_town_growth) GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
@@ -16,17 +16,3 @@ GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL; if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL;
return GSTown._SetGrowthRate(town_id, days_between_town_growth); return GSTown._SetGrowthRate(town_id, days_between_town_growth);
} }
/* 1.5 adds a game element reference to the news. */
GSNews._Create <- GSNews.Create;
GSNews.Create <- function(type, text, company)
{
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
}
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -7,7 +7,7 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
GSLog.Info("1.3 API compatibility in effect."); GSLog.Info("1.3 API compatability in effect.");
GSTown._SetGrowthRate <- GSTown.SetGrowthRate; GSTown._SetGrowthRate <- GSTown.SetGrowthRate;
GSTown.SetGrowthRate <- function(town_id, days_between_town_growth) GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
@@ -16,17 +16,3 @@ GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL; if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL;
return GSTown._SetGrowthRate(town_id, days_between_town_growth); return GSTown._SetGrowthRate(town_id, days_between_town_growth);
} }
/* 1.5 adds a game element reference to the news. */
GSNews._Create <- GSNews.Create;
GSNews.Create <- function(type, text, company)
{
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
}
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -1,4 +1,4 @@
/* $Id$ */ /* $Id: compat_1.3.nut 24469 2012-08-13 19:33:17Z yexo $ */
/* /*
* This file is part of OpenTTD. * This file is part of OpenTTD.
@@ -6,19 +6,3 @@
* 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. * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/ */
GSLog.Info("1.4 API compatibility in effect.");
/* 1.5 adds a game element reference to the news. */
GSNews._Create <- GSNews.Create;
GSNews.Create <- function(type, text, company)
{
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
}
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -1,17 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
GSLog.Info("1.5 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -1,17 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
GSLog.Info("1.6 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -1,17 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
GSLog.Info("1.7 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -1,17 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/
GSLog.Info("1.8 API compatibility in effect.");
/* 1.9 adds a vehicle type parameter. */
GSBridge._GetName <- GSBridge.GetName;
GSBridge.GetName <- function(bridge_id)
{
return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL);
}

View File

@@ -1,8 +0,0 @@
/* $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 <http://www.gnu.org/licenses/>.
*/

View File

@@ -1,565 +1,3 @@
1.9.1 (2019-04-08)
------------------------------------------------------------------------
- Fix #6564: Enforce types of arguments for station name strings (#7419)
- Fix #7433: Don't use AirportSpec substitute if it's not enabled (#7435)
- Fix #7447, #7466, #7476: Missing NewGRF strings due to Action 4 feature check skipping pseudo-feature 48 (#7449)
- Fix #6222: Advanced sprite layout sometimes showed incorrect railtype ground tile. (#7460)
- Fix #7439: CompanyRemoveReason overwritten by ClientID (#7465)
- Fix: [Windows] Incorrect error handling could lead to cascading error windows (#7482)
- Fix #7478: Don't remove NewGRF objects on company take-over. (#7483)
1.9.0 (2019-04-01)
------------------------------------------------------------------------
- Fix #7411: Use industry production callback (if used) on initial industry cargo generation (#7412)
1.9.0-RC2 (2019-03-24)
------------------------------------------------------------------------
- Fix #7400: WaterClass for tree tiles was not converted for old saves preventing industry creation (#7405)
- Fix: Filtered file list did not scroll properly (#7402)
- Fix #7391: Don't invalidate go to depot orders of non-aircraft when invalidating hangar orders that happen to share IDs (#7392)
- Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered (#7389)
- Fix: Wrong company performance rating when money exceeds INT_MAX (#7382)
- Fix: Permit loading of industry production callback with invalid cargo type (#7364)
- Fix: Spelling for a few real town names (#7338)
- Fix: Runway too short for large aircraft message should not depend on plane crashes setting (#7325)
- Fix #7334: Ship lost after crossing bridge due to path cache not being consumed while on final bridge end (#7335)
1.9.0-RC1 (2019-03-03)
------------------------------------------------------------------------
- Add: Various AI/GS functions for vehicle groups (#7225)
- Change: Synchronise introduction date and reliability randomness across vehicles with the same base introduction date (#7147)
- Change: Allow towns to build bridges over rails and one-way roads (#7291)
- Fix: Detection of coast tiles with trees on them (#7309)
- Fix: Emergency netsave saved the title game instead of the broken game in question (#7298)
- Fix: Company livery window showed incorrect groups when opened in multiplayer (#7288)
- Fix: Unable to select last group in open livery window (#7283)
- Fix: Goto hangar orders were not invalidated when rebuilding airports (#7100)
1.9.0-beta3 (2019-02-24)
------------------------------------------------------------------------
- Feature: Option to adjust font size separately from GUI size (#7003)
- Feature: Increase maximum number of orders from 64000 to ~16.7m (#7220)
- Add: Show performance of AI and GS in framerate window
- Add: News menu entry and shortcut for deleting all messages (#7240)
- Change: [OSX] Improved scrolling behaviour when using touchpads
- Change: Add scrollbar to cargo legend in cargo payment rates window
- Change: Owner of vehicle with exclusive transport rights may now load cargo from neutral stations (#7256)
- Change: Improved UI behaviour when dragging sound volume sliders with the mouse (#7227)
- Change: Use selected vehicle group as parent when creating a new group (#7224)
- Change: Use SlErrorCorrupt() on pool index error when loading a savegame, instead of terminating (#7219)
- Change: Skip reliability decay if servicing is disabled
- Fix: Remove desert around lakes upon generation
- Fix: Re-sorting file list did not update filtered rows
- Fix #7159: Waiting time at red one-way signals was too short
- Fix #7189: Fluidsynth volume gain too high
- Fix #7004: Cargo flow legend was not properly refreshed after zooming (#7265)
- Fix: Possibility to modify wrong AI/GS settings when switching AI/GS scripts around (#7090, #7091)
- Fix: Use more descriptive "spectator" strings for story book and goal dropdown menus
- Fix #6599: Disable build and rename button in build vehicle window when no vehicle is selected
- Fix: Do not mangle tagged revision strings for network revision strings
- Fix #7151: AI start date deviation was still applied when not set to a random AI (#7223)
- Fix #7197: Invalidate depot buttons when necessary (#7212)
- Doc: [AI] UnshareOrders empties the orders list of the vehicle
1.9.0-beta2 (2019-02-09)
------------------------------------------------------------------------
- Fix: Non-Windows builds did not get correct git hash
1.9.0-beta1 (2019-02-09)
------------------------------------------------------------------------
Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers
- Feature: Group liveries, and livery window usability enhancements (#7108)
- Feature: Overhaul of music system, support MPSMIDI music files (TTD DOS/TTO) (#6839)
- Feature: [Win32] Rewritten DMusic and WinMM music drivers
- Feature: [Win32] New XAudio2 sound driver
- Feature: [Linux] New Fluidsynth music driver
- Feature: Framerate display window (#6822)
- Feature: [NewGRF] Ability for industries & houses to produce and/or accept up to 16 different cargoes
- Feature #6610: Allow towns to build houses on road turns (#6758)
- Feature: Replace independent map scrolling GUI settings with single option, and add choice to not lock cursor position when scrolling (#6756)
- Feature #6459: API for querying network clients from GS (#6736)
- Feature: New Russian Ruble & Mexican Peso as currencies (#6678, #7035)
- Feature #4186: Append '(City)' after city names in the town directory
- Feature #986: Automatic save when losing connection to a network game
- Add: [NewGRF] Flag to hide rail types from construction (#7118)
- Add: [NewGRF] Airport animation trigger for plane landing (#6334)
- Add #4115: Default starting company colour setting (#6998)
- Add: Mixer feature for streaming sampled music
- Add #6460: [AI] start_date parameter for Random AIs on new game
- Add: BACKSPACE can be mapped as a hotkey
- Add: 32bpp SSE2 blitter palette animator (#6795)
- Change: Make ships turn slowly when changing direction and stop when going up or down a lock (#7065, #7150)
- Change: Improve ship pathfinder performance
- Change: Decouple GUI timing from game ticks (#6780)
- Change: Desert tiles are now half-desert if a neighboured tile is non-desert or sea/coast (#4754)
- Change: Gradually slow down aircraft speed on breakdown (#6932)
- Change: [NewGRF] Increase rail type & cargo type limits to 64
- Change: [NewGRF] Increase size of persistent storage to 256
- Change: [NewGRF] Use last OpenTTD SVN revision in NewGRF version number (#6843)
- Change: Clone tool in depot window now behaves like clone button in vehicle window (#6754)
- Change #6397: Keep town growth rate in sync with house count
- Change: Scale default FreeType font size selection by UI zoom level
- Change: [OSX] Reversed pinch to zoom behaviour
- Change: Switch town growth rate and counter to actual game ticks (#6763)
- Change: Non-tag revisions are now named '<commitdate>-<branch>-g<shorthash><modified>'
- Change: Rewrite several bits of documentation in markdown
- Fix: Reinitialise graph GUI on game restart (#7191)
- Fix: Potential crash during shutdown after unpacking downloaded content (#7185)
- Fix #6584: Text layout in engine preview dialogue
- Fix #6636: Airplanes could be sent to helicopter station depots
- Fix: Deadlock when launched with -n switch (#7103)
- Fix: Various corrections to town names in non-English languages (#7038, 7141)
- Fix: Only consider airport tiles when placing (for non-rectangular airports) (#6613)
- Fix: Spelling fixes on some Latin American town names
- Fix #7001: Pathfinders should see standard road stations as tiles where to reverse
- Fix #6676: Prevent helicopters from stopping in midair during some kinds of landing
- Fix: Remove need to use Ctrl+Click when building stations next to competitors (#6906)
- Fix: [NewGRF] Make VA2 operator 11 (ror) behave well-defined when rotating by 0 bits
- Fix #4109: Add more water checks to the Oil Rig layout
- Fix #6938: Incorrect value for "Cost to Clear" was displayed for Company Headquarters in tile inspector (#6939)
- Fix #6920: Make 9.8m/s^2 a common constant for TE-calculation
- Fix #6892: [Script] CONFIG_RANDOM did not use the full parameter range (#6902)
- Fix #6622: News message when GS constructs a town had empty company name
- Fix: [NewGRF] Action7 variable 0x85 had no bounds checks
- Fix #6875: Depot building cost did not include foundation build cost (#6883)
- Fix: Some pixels in ship autoreplace icon (sprite 106) were transparent
- Fix: Poor contrast in cargo dest flow legend window cargo labels
- Fix #6553: Make viewport button text unambiguous
- Fix: [OSX] Setting mouse-wheel to scroll the map does not disable pinch to zoom
- Fix #6969: Account for BOM when reading script files
- Fix #6898: Ability to use seeds above INT_MAX (#6936)
- Fix #6659: Bus stations could be demolished when not in demolish mode (#6815)
- Fix: One-way roads could be over-built by road stops regardless of road owner
- Fix: Use name of cargo instead of Passengers/Mail in town statistics (#6801)
- Fix: Prevent ships moving into docks after finishing (un)loading (#6791)
- Fix: Tractive effort was slightly too high as per NewGRF spec (#6785)
- Fix #6465: Add {NORMAL_FONT} and {MONO_FONT} control codes to GS strings (#6726)
- Fix: Four group action icons were misplaced and cropped
- Remove: PSP, WinCE support
1.8.0 (2018-04-01)
------------------------------------------------------------------------
(None)
1.8.0-RC1 (2018-03-21)
------------------------------------------------------------------------
- Feature: [GFX] Climate-specific Action5 extra airport sprites [FS#6664] (r27976)
- Feature: Draw vertical separators at tile distance in the train depot GUI (r27938, r27899)
- Feature: [Build] MSVC 2017 project file generator. Most noticeable, std:c++latest is enabled (r27920, r27919, r27918, r27917)
- Feature: [Build] Project file generator for kdevelop 4/5 [FS#6577] (r27897)
- Feature: Add option to close windows with right click [FS#4950] (r27826, r27825)
- Feature: Vehicle Group Info: Add profits and occupancy display to group vehicle list (r27822)
- Feature: Display aircraft type in vehicle preview/purchase/detail windows (r27802, r27799, r27797)
- Change: [NewGRF] Various performance improvements to resolving VA2 (r27989, r27985, r27984, r27983, r27982)
- Change: [NewGRF] Increase maximum allowed vehicle sprite size to reduce clipping of ships (r27987)
- Change: Check companies for bankruptcy before subtracting reoccuring monthly costs [FS#6679] (r27981)
- Change: [GFX] Replace the office building sprite on various toyland airports with a better fitting sprite [FS#6664] (r27977)
- Change: [GFX] The switch-toolbar icon contained pixels from the fire cycle. Replace the whole icon with a new version [FS#6654] (r27961)
- Change: Reword texts in industry view, when stockpiling is used (r27952)
- Change: Remove the gap between windows when positioning them after opening [FS#6568] (r27934, r27900)
- Change: [Build] Enable usage of static_assert for MSVC (r27916)
- Change: [Build] Preserve PKG_CONFIG_PATH and PKG_CONFIG_LIBDIR environment variables in config.cache file [FS#6614] (r27902)
- Change: Do not cancel headquarter construction and engine-preview-query when shift-clicking (r27889)
- Change: Parse extmidi command string for parameters to pass on (r27834)
- Change: Draw images in centre of buttons (r27829, r27821)
- Fix: Store the map variety setting in the savegame like the other mapgen settings, so restarting maps considers it [FS#6673] (r27978)
- Fix: Hair selection was missing one option [FS#6642] (r27975)
- Fix: Avoid tile operations outside map border when building lock [FS#6662] (r27973)
- Fix: Catenary sprites got mixed up for depots [FS#6670] (r27972)
- Fix: Make automatic window-positioning RTL-aware (r27934, r27900)
- Fix: Automatic window-positioning now uses GUI-scale/style dependent sizes/distances instead of fixed pixel values (r27934, r27900)
- Fix: [NewGRF] While executing random triggers, var 5F should include the new triggers (r27928)
- Fix: [NewGRF] Reset used random triggers only after all A123 chains have been resolved, so that all RA2 in all chains can test the shared triggers (r27928)
- Fix: [NewGRF] Industry random triggers are stored per tile, even when randomising the shared random bits of the parent industry (r27928)
- Fix: [NPF] Reserved track bits were not accounted for when trying to find any safe position (r27912)
- Fix: Do not modify argv[0] [FS#6575] (r27886)
- Fix: Do not search directories when opening ini files as we already have their full path [FS#6421] (r27816)
- Fix: Road tunnel/bridge heads have no trackbits wrt. catenary drawing (r27812)
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)
- Fix: Compilation with --disable-network [FS#6481] (r27602)
- Fix: [NewGRF] shift-and-add-divide/modulo varadjusts use signed division/modulo (r27600)
- Fix: Company 0 could accept engine previews before they were offered (r27598)
1.6.1-RC1 (2016-06-01)
------------------------------------------------------------------------
- Feature: Mexican Spanish (r27564, r27553, r27552)
- Change: Performance improvement for dedicated servers by skipping drawing calls earlier in the process [FS#6402] (r27579)
- Fix: Automatic servicing of road vehicles compared path finder costs with tile distances, thus vehicles went to depots which were factor 100 too far away [FS#6410] (r27586)
- Fix: Enforce a non-zero load amount for all vehicles, so that vehicles can process their cargo reservations [FS#6437] (r27585, r27584)
- Fix: Do not decrease the column width of depot windows when vehicles with high unitnumbers leave [FS#6415] (r27583)
- Fix: Button size computation in script configuration window [FS#6461] (r27581)
- Fix: [NewGRF] Set date of last service on construction also for wagons and articulated parts [FS#6395] (r27580)
- Fix: Vehicles could not be hidden from the purchase list when they were in exclusive preview [FS#6454] (r27578)
- Fix: Dock and roadstop picker, client list and town authority window did not auto-resize according to their content when they were positioned at the bottom of the screen [FS#6386] (r27577)
- Fix: Various incorrect but uncritical size computations in the content client [FS#6449] (r27576, r27570)
- Fix: Memory leak when disabling palette animation [FS#6404] (r27575)
- Fix: [NewGRF] The house id as returned by house variable 66 was incorrect when querying neighboured tiles [FS#6432] (r27574)
- Fix: [Build] Compilation failure with gcc 6.1 due to headers included after safeguards.h [FS#6467] (r27573)
- Fix: Convenience savegame bump to distinguish 1.6 savegames from 1.5 savegames [FS#6442] (r27572)
- Fix: [Build] Force sorting to be locale independent, so files are always ordered the same and by that token better diff-able (r27562, r27558)
- Fix: Typos in comments and string (r27561, r27560)
- Fix: [Build] bashism that caused different CFLAGS with bash vs dash (r27557)
- Fix: Use a more appropiate sound effect for convert-rail (r27547)
- Fix: Remove SetFill from vehicle GUI buttons, so that the viewport is resized instead of them in case of long window titles (r27546)
- Fix: [Script] Generation of API wrappers (r27545, r27544, r27543)
- Fix: [Windows] ICU got disabled for Windows builds, breaking RTL support [FS#6427] (r27542)
- Fix: [NewGRF] Station spritelayouts did not accept the var10 flag for the palette [FS#6435] (r27534)
1.6.0 (2016-04-01)
------------------------------------------------------------------------
(None)
1.6.0-RC1 (2016-03-01)
------------------------------------------------------------------------
- Feature: [NewGRF] Allow custom sound IDs in RV property 0x12, ship property 0x10 and aircraft property 0x12 (r27507)
- Feature: When viewing online content of a particular type, hide content of other types unless they have been (auto)selected for download (r27469, r27468, r27444)
- Feature: [NewGRF] Move sprite 8 positions in sprite aligner with ctrl+click [FS#6241] (r27451)
- Feature: Lower the sell-vehicle and sell-chain buttons in the train depot GUI while dragging a vehicle over it [FS#6391] (r27450, r27446)
- Feature: Make the object placement GUI an independent window (r27438, r27397, r27346)
- Feature: [Build] Project files and compilation with MSVC2015 (r27385, r27382, r27381, r27380, r27379)
- Feature: [NewGRF] Allow railtype NewGRF to define separate sprites for the fences on either track side [FS#6315] (r27354, r27343)
- Feature: [NewGRF] Increase the maximum amount of industry types to 128 per NewGRF and 240 in total (r27279)
- Feature: Make Ctrl+Remove-Roadstop also remove the road, just like for rail stations [FS#6252] (r27251)
- Change: [NewGRF] Allow static NewGRF to enable the second rocky tile set (r27497)
- Change: Round loading percentage in loading indicators and conditional orders towards 50%, so that 0% and 100% mean completely empty or full (r27426)
- Change: [Build] Rework the configure system to make more use of pkg-config (r27377:r27366, r27361, r27360)
- Change: Enable YAPF cache debugging with desync debug level 2 (r27332)
- Change: [strgen] Default plural subparameter position for CARGO_xxx string control codes is subparameter 1 (r27295)
- Change: [NewGRF] Translate industry variable A6 (r27267)
- Change: Do not consider cargo that is already being loaded as waiting cargo wrt. the station rating [FS#6165] (r27256)
- Change: Tune down terrain generation to reduce amount of long slopes (r27230)
- Change: Generate more detailed curves at the coast (r27229)
- Change: Slightly more water in the non-custom sea levels (r27228)
- Change: Be more lenient about road stop removal when at least one stop could be removed [FS#6262] (r27225)
- Fix: [Win32] Stdin/out/err need to be re-assigned differently if the runtime lib of MSVC2015 is used (r27481)
- Fix: [Haiku] On Haiku use the appropriate system variable to obtain the include dir [FS#6401] (r27472)
1.5.3 (2015-12-01)
------------------------------------------------------------------------
(None)
1.5.3-RC1 (2015-11-01)
------------------------------------------------------------------------
- Fix: When selecting a refit cargo for orders, do not check whether the vehicle is in a depot or station, and do not ask whether the vehicle currently allows station-refitting. Also hide the refit cost for orders, it is not predictable (r27428)
- Fix: Use the NewGRF railtype sorting order in the infrastructure window (r27427)
- Fix: Crash when switching to or taking over companies, when an order window of a vehicle of the new company was opened. Now close those windows [FS#5842] (r27425)
- Fix: Towns did not connect roads to existing roads, unless they had only a single roadbit. Otoh, towns also tried to connect to single roadbit tiles such as tunnels and depots, even though they were not connectable in the direction of interest [FS#6374] (r27424)
- Fix: When towns expanded single-bit roadtiles using a grid-layout, they used the layout position of the neighbouring tile (r27423)
- Fix: Aircraft picked the wrong airport entry point, if airports were rotated by 180 degree [FS#6341] (r27422)
- Fix: Consider text and icon sizes when drawing the client list [FS#6265] (r27421)
- Fix: GrowTownAtRoad sometimes returned false, even when a house was built [FS#6362] (r27420)
- Fix: CmdSellRailWagon did not revert all actions properly when no orderlist could be allocated [FS#6369] (r27419)
- Fix: Desync due to incorrect storage of segments with different railtype in the YAPF cache [FS#6329] [FS#6379] (r27418)
- Fix: When a dedicated server was paused with no clients, the master server advertisement interval was slowed, causing deadvertisement of the server [FS#6368] (r27400)
- Fix: [Makefile] Game script directory and compat*.nut were never installed on *nix (r27399)
- Fix: There are two different availability conditions for fdatasync in the manpage. Use them both, since at least on some MinGW versions one is not enough (r27389)
- Fix: win32 sound driver failed to report errors (r27383)
- Fix: Clickareas in settings tree were misaligned when the filter warning was displayed, if the setting height was defined by the icons instead of the font [FS#6358] (r27366)
- Fix: Center settings filter warning also vertically, and also in case of multiple lines (r27365)
1.5.2 (2015-09-01)
------------------------------------------------------------------------
(None)
1.5.2-RC1 (2015-08-01)
------------------------------------------------------------------------
- Change: Auto-complete partial roads when building level-crossings [FS#6283] (r27309)
- Fix: Do not rerandomise the town name when only cost-estimating the founding [FS#6332] (r27341)
- Fix: Make variety distribution not assume that sea level is at height 0.2 / 3 * TGPGetMaxHeight() [FS#6335] (r27331, r27330, r27329, r27328)
- Fix: Remove corner-case optimisation for line drawing, which failed for dashed lines (r27324)
- Fix: Clipping of inclined lines did not account for the 'horizontal width' being bigger than the 'real width' (r27323, r27322)
- Fix: Incorrect owner assignment when adding/removing road/tram to/from bridges [FS#6317] (r27313, r27312)
- Fix: Mark infrastructure window dirty in more cases (r27311)
- Fix: Prevent breaking of tram-reversal points by adding more road pieces [FS#6283] (r27308)
- Fix: Error message window with manager face failed with GUI zoom [FS#6259] (r27307)
- Fix: Account for road-bridges and drive-through-stops in CanFollowRoad [FS#6320] (r27306, r27305)
- Fix: Password window layout with GUI zoom [FS#6321] (r27304, r27303)
- Fix: Speed-only timetables got assigned times in stations [FS#6313] (r27302, r27301)
- Fix: Enforce the company's default service intervals when purchasing another company [FS#6254] (r27282, r27281)
- Fix: Cloning/autoreplace/autorenew did not copy custom service intervals (r27280)
1.5.1 (2015-06-01)
------------------------------------------------------------------------
(None)
1.5.1-RC1 (2015-05-08)
------------------------------------------------------------------------
- Fix: Do not consider road junctions with trivial dead ends as branch points during town growth [FS#6245] (r27260, r27259, r27244)
- Fix: ScriptList::RemoveList failed to remove a list from itself [FS#6287] (r27258)
- Fix: Combined button+dropdown widgets in order and autoreplace GUI had incorrect hitbox when using GUI zoom [FS#6270] (r27255)
- Fix: When building a lock on DC_AUTO-removable water-based objects, the water class was always set to canal [FS#6264] (r27254)
- Fix: When crossing tram tracks with railroads, cost of extra roads was not being counted [FS#6282] (r27253)
- Fix: Invalid infrastructure counting when crossing tram tracks with railroads [FS#6281] (r27252)
- Fix: Broken error message in configure [FS#6286] (r27250)
- Fix: In some cases town growth failure was considered as success [FS#6240] (r27249, r27247)
- Fix: Town labels on smallmap and zoomed-out viewports were not centered [FS#6257] (r27248)
- Fix: Removing a rail waypoint used the remove-rail-station cost [FS#6251] (r27245)
- Fix: Duplicate frees due to pool item classes not having copy constructors [FS#6285] (r27243)
- Fix: Crash when no AIs were installed due to improper handling of non-ASCII characters by the string pointer lexer [FS#6272] (r27233)
- Fix: Compilation on DragonflyBSD [FS#6274] (r27224, r27223)
- Fix: Use the current maximum speed as limited by bridges, orders etc. for all vehicle types alike when considering increased smoke emissions of vehicles [FS#6278] (r27222)
- Fix: Multi-value keys in the desktop entry shall end with a trailing separator (r27221)
- Fix: Draw path reservation on the whole bridge, not only on the bridge heads (r27209)
- Fix: Draw correct overlay sprites for path reservations on bridges and tunnels (r27208)
1.5.0 (2015-04-01)
------------------------------------------------------------------------
- Fix: [NewGRF] Add Misc. GRF Feature Flag 6 to enable the second rocky tile set [FS#6260] (r27200)
1.5.0-RC1 (2015-03-18)
------------------------------------------------------------------------
- Feature: [NewGRF] Display relative offset changes in the sprite aligner [FS#6236] (r27174)
- Fix: Original road vehicle acceleration crashed for vehicles taking over [FS#6255] (r27190)
- Fix: GCC 5 compilation (r27185, r27183)
- Fix: Data race due to lazy initialisation of objects [FS#5969] (r27178)
- Fix: Compilation with MinGW64 (r27176)
- Fix: Use the regular clipping functions in the sprite aligner instead of some magic [FS#6237] (r27173)
- Fix: Windows randomly drops SetCursorPos calls, breaking the RMB-scrolling [FS#6238] (r27172)
1.5.0-beta2 (2015-02-24)
------------------------------------------------------------------------
- Feature: [NoGo] Game scripts can point to a location, station, industry, or town when publishing news (r27164)
- Feature: Allow changing max heightlevel in scenario editor (r27151)
- Feature: Make use of both rocky tile sets from the base graphics (r27117)
- Change: Scale (non-custom) default window sizes according to GUI zoom (r27147)
- Change: Make statusbar and chat-entry window use the same width as the toolbar (r27146)
- Change: The chatbox-width setting now uses percent of screen width instead of pixels (r27144)
- Change: [NewGRF] Interpret negative positions in industry layouts depending on GRF version (r27138)
- Fix: [SDL, Windows] Right-mouse-button scrolling scrolled/jumped too far, when OpenTTD lagged during mouse event processing (r27167)
- Fix: Toolbars were not invalidated when changing max-vehicles settings [FS#6204] (r27163)
- Fix: Tile selection was drawn outside of map in some cases [FS#6208] (r27162)
- Fix: Reimplement the viewport drawing algorithm [FS#6156] [FS#6206] (r27161)
- Fix: Issues with smallmap and viewport coordinates and transformations (r27160, r27159, r27158)
- Fix: Mark bridge middle tiles dirty when building/removing/changing bridges (r27157)
- Fix: Rounding and unit-conversion inconsistencies in calls to MarkAllViewportsDirty (r27148)
- Fix: Oilrig empty-tile checks were incorrect due to wrong TileIndexDiff->TileIndexDiffC conversion (r27137)
- Fix: Misalignment in generate world window in case of small fonts (r27135)
- Fix: Dragging of free wagons in depot failed with GUI zoom (r27133)
- Fix: Reduce memory footprint of map array by shuffling its members [FS#6218] (r27132, r27126)
- Fix: Dropdown- and tooltip-windows should not steal the focus (r27131)
- Fix: [NewGRF] Action 7/9 condition 0A failed for present, but disabled, NewGRF (r27119)
- Fix: Road vehicles could not reverse to be sent to depots when the following tile has the right type to run on, but could not be entered [FS#6183] (r27107)
- Fix: Use the actual max speed of the vehicle in front when determining if a RV can overtake [FS#6176] (r27106)
- Fix: grow_counter was not properly bounded by growth_rate, but by some other value used to calculate growth_rate [FS#6195] (r27105)
- Fix: [Script] Support 64 bits integers in ScriptLists [FS#6194] (r27104)
- Fix: [Script] Money values would end up wrong in strings when outside the bounds of a 32 bits integer [FS#6194] (r27102)
1.5.0-beta1 (2014-12-24)
------------------------------------------------------------------------
- Feature: Support .txt.gz and -txt.xz changelog, readme and license files in basesets, NewGRFs, etc (r27035, r27034)
- Feature: More height levels [FS#4126] (r27010)
- Feature: Latin translation (r26993)
- Feature: Add option to choose normal, double or quad-size interface (r26990)
- Feature: [Script] Swap method for script lists (r26894)
- Feature: [Script] ScriptStationList_Cargo for sorting cargo by from and via (r26893)
- Feature: [Script] API for retrieving planned flow (r26892)
- Feature: [CargoDist] Predict links for station-autorefitting vehicles (r26889)
- Feature: Setting for limiting the height of bridges (r26882)
- Feature: Make aircraft ascend/descend when they are too close to the ground or too far away (r26866)
- Feature: Allow hiding of non-interesting engines in the GUI (r26805, r26804)
- Feature: Vehicle sorting in autoreplace GUI [FS#1640] (r26800)
- Feature: [NewGRF] Advanced visual effects with multiple effect sprites independent of spawning model (r26988, r26747)
- Feature: Warn about missing industries after generating a map (r26729)
- Feature: Upgrade currently active NewGRFs to newest installed version (r26613)
- Feature: Save and load grfid and md5sum of NewGRFs in config file (r26611)
- Feature: Select an editable preset name for saving (r26610)
- Feature: Cancel cargo delivery from industries/houses to stations after about 21 months of not having picked up any of the cargo (r26582)
- Feature: Give a warning when a plane's orders tell it to use a runway which is too short for it [FS#6009] (r26566)
- Feature: [Script] Extended API for CargoDist (r26557)
- Feature: Show measured order times in timetable GUI also when not timetabled (r26550)
- Feature: Prompt for confirmation when deleting a vehicle group (r26455)
- Feature: Hierarchical vehicle subgroups (r26450)
- Feature: Allow more sound sleep for dedicated servers when there's nothing to do and nobody paying attention (r26449)
- Feature: [NewGRF] Add vehicle modflag 1 (unloading in progress) (r26430)
- Change: Improvements to the man page (r27091, r27012)
- Change: Allow to set the granularity of the tooltip hover time in milliseconds instead of seconds. New default value is 250ms (r26815)
- Change: Follow SI recommendation about spaces between numbers and units [FS#6086] (r26733)
- Change: [CargoDist] Save locations instead of distances in link graphs to reduce size (r26646)
- Change: [Squirrel] Make the internal integer for scripts always 64 bits, so scripts behave the same on 32 and 64 bit architectures and money can be represented properly (r26585, r26584)
- Change: Reshuffle advanced settings tree (r26614, r26536)
- Change: Add backend-independent config-file setting to disable 8bpp video modes, and disable 8bpp by default (r26522)
- Fix: [OS/2] Compile again [FS#6186] (r27092)
- Fix: Compilation with freetype2 version 2.5.4 and newer [FS#6185] (r27079)
- Fix: Variable 47 used the carge translation table of the wrong GRF in case of callback 1D [FS#6182] (r27075)
- Fix: Some lists did not use natural string sorting [FS#6172] (r27063)
- Fix: Mercurial version detection failed if personal presets were configured (r27059)
- Fix: [OSX] Don't require double-press from non-dead console hotkeys [FS#5812] (r27046)
- Fix: Crash when having the vehicle list opened from a buoy or oil rig when the buoy/oil rig is removed (r27030)
- Fix: Unit number was not always fully shown in depots [FS#6102] (r27014)
- Fix: [CargoDist] Reserve cargo only after unloading finished or if the vehicle has the desired cargo already [FS#6110] (r26918)
- Fix: [Squirrel] Loading a value saved as boolean caused it to be of type integer instead of boolean (r26785)
- Fix: [Squirrel] Harden string handling (r26777)
- Fix: [OSX] Implement more of the text editing API to prevent crashes and improve IME support [FS#5972] (r26758)
- Fix: Incorrect saving of order backups [FS#6066] (r26700)
- Fix: Ordering a vehicle to a competitor's rail waypoint displayed an error message. Ignore the click as is done for the other order types to competitor's stuff [FS#6059] (r26692)
- Fix: [Script] Loading/parsing of info .nuts was done in the same VM, causing e.g. constants to break the loading of info of other scripts [FS#5973] (r26617)
- Fix: [CargoDist] Improve estimation of link capacitites (r26549)
- Remove: A bunch of archaic settings from the GUI (r26528, r26526, r26525)
1.4.4 (2014-10-21)
------------------------------------------------------------------------
(None)
1.4.4-RC1 (2014-10-08)
------------------------------------------------------------------------
- Fix: Image widgets stored 32bit SpriteID in uint16 (r26971)
- Fix: Owner of road depot road types were not properly changed upon bankruptcy [FS#6126] (r26955)
- Fix: Compilation on HAIKU (r26922)
- Fix: Crash when enabling 'Full animation' if multiplayer chat text is on screen [FS#6096] (r26919)
- Fix: Height computation of game script text in town GUI did not consider margins [FS#6119] (r26859)
- Fix: [Squirrel] Debian lintian issues (r26853)
- Fix: Compilation of strgen on various platforms like Solaris (r26850)
- Fix: Better display of refit information for articulated vehicles [FS#6113] (r26849, r26848)
- Fix: Do not assign a next hop when returning cargo [FS#6110] (r26847)
- Fix: The ok-button in the OSK for the signs list should just close the OSK [FS#6116] (r26827)
1.4.3 (2014-09-23)
------------------------------------------------------------------------
(None)
1.4.3-RC2 (2014-09-14)
------------------------------------------------------------------------
- Fix: Crashes on joining a server with pending order backups [FS#6112] (r26819)
- Fix: Crashes on start due to dereferencing the -1 index of the file names array of music files (r26809)
1.4.3-RC1 (2014-09-07)
------------------------------------------------------------------------
- Fix: TC_NO_SHADE did not work for 32bpp text rendering (r26792)
- Fix: Loading a game with order backups leaked Orders and left unreachable items in the pool (r26787)
- Fix: Buffer overrun in SQCompiler::Error (r26764)
- Fix: Desync due to not always properly restoring game state from the savegame (r26753)
- Fix: [Script] Crashes and infinite loops when using lists in item-descending order [FS#6085] (r26744)
- Fix: Incorrect CFLAGS when enabling gprof profiling (r26737, r26735)
- Fix: Do not reset the last selected airport or layout, unless it is really necessary [FS#6083] (r26732)
- Fix: Use the normal search path to look for xdg-open at Unix [FS#6077] (r26724)
- Fix: Properly check for cargo acceptance of houses [FS#5997] (r26723)
1.4.2 (2014-08-16)
------------------------------------------------------------------------
(None)
1.4.2-RC2 (2014-08-03) 1.4.2-RC2 (2014-08-03)
------------------------------------------------------------------------ ------------------------------------------------------------------------
- Change: Use awk instead of trying to convince cpp to preprocess nfo files (r26708) - Change: Use awk instead of trying to convince cpp to preprocess nfo files (r26708)

File diff suppressed because it is too large Load Diff

8
configure vendored
View File

@@ -75,12 +75,13 @@ save_params
make_cflags_and_ldflags make_cflags_and_ldflags
EXE="" EXE=""
if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "DOS" ]; then if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "DOS" ] || [ "$os" = "WINCE" ]; then
EXE=".exe" EXE=".exe"
fi fi
TTD="openttd$EXE" TTD="openttd$EXE"
STRGEN="strgen$EXE" STRGEN="strgen$EXE"
ENDIAN_CHECK="endian_check$EXE"
DEPEND="depend$EXE" DEPEND="depend$EXE"
SETTINGSGEN="settings_gen$EXE" SETTINGSGEN="settings_gen$EXE"
@@ -113,6 +114,7 @@ AWKCOMMAND='
if ($0 == "PNG" && "'$png_config'" == "") { next; } if ($0 == "PNG" && "'$png_config'" == "") { next; }
if ($0 == "OSX" && "'$os'" != "OSX") { next; } if ($0 == "OSX" && "'$os'" != "OSX") { next; }
if ($0 == "OS2" && "'$os'" != "OS2") { next; } if ($0 == "OS2" && "'$os'" != "OS2") { next; }
if ($0 == "PSP" && "'$os'" != "PSP") { next; }
if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; }
if ($0 == "AI" && "'$enable_ai'" == "0") { next; } if ($0 == "AI" && "'$enable_ai'" == "0") { next; }
if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; }
@@ -122,10 +124,10 @@ AWKCOMMAND='
if ($0 == "WIN32" && "'$os'" != "MINGW" && if ($0 == "WIN32" && "'$os'" != "MINGW" &&
"'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; }
if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; } if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; }
if ($0 == "WINCE" && "'$os'" != "WINCE") { next; }
if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; }
if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; }
if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; }
if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; }
if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; }
if ($0 == "SSE" && "'$with_sse'" != "1") { next; } if ($0 == "SSE" && "'$with_sse'" != "1") { next; }
@@ -147,7 +149,7 @@ AWKCOMMAND='
# Read the source.list and process it # Read the source.list and process it
# Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations
SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | LC_ALL=C $PIPE_SORT`" SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | $PIPE_SORT`"
OBJS_C="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", $0); print $0; }'`" OBJS_C="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", $0); print $0; }'`"
OBJS_CPP="`echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.cpp$/ { gsub(\".cpp$\", \".o\", $0); print $0; }'`" OBJS_CPP="`echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.cpp$/ { gsub(\".cpp$\", \".o\", $0); print $0; }'`"

View File

@@ -29,7 +29,7 @@ english.txt to work. Below are some examples of strgen usage.
1.1) Examples 1.1) Examples
---- -------- ---- --------
Example 1: Example 1:
if you are in the root of your working copy (git repository), you should type if you are in the root of your working copy (svn code), you should type
strgen/strgen -s lang lang/english.txt strgen/strgen -s lang lang/english.txt
to compile englist.txt into english.lng. It will be placed in the lang dir to compile englist.txt into english.lng. It will be placed in the lang dir
@@ -50,7 +50,7 @@ You can interchange english.txt to whichever language you want to generate a
1.2) strgen command switches 1.2) strgen command switches
---- ----------------------- ---- -----------------------
-v | --version -v | --version
strgen will tell what git revision it was last modified strgen will tell what svn revision it was last modified
-t | --todo -t | --todo
strgen will add <TODO> to any untranslated/missing strings and use the english strgen will add <TODO> to any untranslated/missing strings and use the english

View File

@@ -1,71 +0,0 @@
# Compiling OpenTTD using Microsoft Visual C++
Last updated: 2018-12-27
## Supported MSVC compilers
OpenTTD includes projects for Visual Studio 2015 Update 3 or more recent.
You can download the free Visual Studio Community Edition from Microsoft at
https://visualstudio.microsoft.com/vs/community/.
## Required files
### Microsoft platform files
OpenTTD needs the Platform SDK, if it isn't installed already. This can be
done during installing Visual Studio, by selecting
`Visual C++ MFC for x86 and x64` (and possibly
`Visual C++ ATL for x86 and x64` depending on your version). If not, you
can get it at this location:
- [MS Windows Platform SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk)
Install the SDK by following the instructions as given.
### OpenTTD dependencies
Dependencies for OpenTTD on Windows are handled via
[vcpkg](https://github.com/Microsoft/vcpkg/). First you need to install vcpkg
by following the `Quick Start` intructions of their
[README](https://github.com/Microsoft/vcpkg/blob/master/README.md).
After this, you can install the dependencies OpenTTD needs. We advise to use
the `static` versions, and OpenTTD currently needs the following dependencies:
- freetype
- liblzma
- libpng
- lzo
- zlib
To install both the x64 (64bit) and x86 (32bit) variants, you can use:
```ps
.\vcpkg install freetype:x64-windows-static liblzma:x64-windows-static libpng:x64-windows-static lzo:x64-windows-static zlib:x64-windows-static
.\vcpkg install freetype:x86-windows-static liblzma:x86-windows-static libpng:x86-windows-static lzo:x86-windows-static zlib:x86-windows-static
```
## TTD Graphics files
See section 4.1 of README.md for the required 3rdparty files and how to install them.
## Compiling
Open the appropriate `sln` (Solution) file for your version of Visual Studio:
- VS 2015: projects/openttd_vs140.sln
- VS 2017: projects/openttd_vs141.sln
- VS 2019: projects/openttd_vs142.sln
Set the build mode to `Release` in
`Build > Configuration manager > Active solution configuration`.
You can now compile.
If everything works well the binary should be in `objs\Win[32|64]\Release\openttd.exe`
and in `bin\openttd.exe`
## Problems
If compilation fails, double-check that you are using the latest github
source. If it still doesn't work, check in on IRC (irc://irc.oftc.net/openttd),
to ask for help.

View File

@@ -0,0 +1,108 @@
Compiling OpenTTD using Microsoft Visual C++
Last updated: 2010-01-03
--------------------------------------------
PLEASE READ THE ENTIRE DOCUMENT BEFORE DOING ANY ACTUAL CHANGES!!
SUPPORTED MSVC COMPILERS
------------------------
OpenTTD includes projects for MSVC 2005.NET and MSVC 2008.NET. Both will
compile out of the box, providing you have the required libraries/headers;
which ones, see below. There is no support for VS6 or MSVC 2002, or
MSVC 2003.NET. You are therefore strongly encouraged to either upgrade to
MSVC 2008 Express (free) or use GCC.
1) REQUIRED FILES
-----------------
You might already have some of the files already installed, so check before
downloading; mostly because the DirectX SDK and Platform SDK are about
500MB each.
Download the following files:
* openttd-useful.zip (http://binaries.openttd.org/extra/openttd-useful/)
* DirectX 8.1 SDK (http://neuron.tuke.sk/~mizanin/eng/Dx81sdk-include-lib.rar) (or alternatively the latest DirectX SDK from Microsoft)
* MS Windows Platform SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en)
* afxres.h (http://www-d0.fnal.gov/d0dist/dist/packages/d0ve/devel/windows/AFXRES.H)
...and of course the newest source from svn://svn.openttd.org/trunk
You need an SVN-client to download the source from subversion:
* CLI Subversion (http://subversion.tigris.org/)
* GUI TortoiseSVN (http://tortoisesvn.tigris.org/)
2) INCLUDES AND LIBRARIES
-------------------------
Put the newly downloaded files in the VC lib\ and include\ directories; where
"C:\Program Files\Microsoft Visual Studio 9.0\VC" is your location of Visual C.
If you are compiling for an x64 system, use the include\ and lib\ directories
from the win64/ folder.
* openttd-useful.zip\include\*
* afxresh.h
to > C:\Program Files\Microsoft Visual Studio 9.0\VC\Include
* openttd-useful.zip\lib\*
to > C:\Program Files\Microsoft Visual Studio 9.0\VC\Lib
Custom directories might be recommended, check 2.2)
2.1) INCLUDES AND LIBRARIES - DIRECTX/PLATFORM SDK
--------------------------------------------------
Basically the same procedure as with the useful zip file, providing
you are not using the Microsoft installer. Put the include files in the
include\ directory and the library files to the Lib\ directory.
It is recommended to use custom directories so you don't overwrite any
default header or library files.
2.2) CUSTOM DIRECTORIES
-----------------------
If you have put the above include and/or library files into custom folders,
MSVC will not find them by default. You need to add these paths to VC through:
Tools > Options > Projects and Solutions > VC++ Directories > show directories for
* Include files: Add the DirectX/Platform SDK include dir you've created
* Library files: Add the path to the SDK custom lib dir
NOTE: make sure that the directory for the DirectX SDK is the first one in the
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.
4) COMPILING
------------
Open trunk/openttd_vs[89]0.sln
Set the build mode to 'Release' in
Build > Configuration manager > Active solution configuration > select "Release"
Compile...
If everything works well the binary should be in trunk/objs/Win[32|64]/Release/openttd.exe
5) EDITING, CHANGING SOURCE CODE
--------------------------------
Set the build mode (back to) 'Debug'
Change the startup project to openttd by right-clicking the 'openttd' project
in the Solution Explorer and selecting 'Set as Startup Project'. The 'openttd'
project should now show up bold instead of 'strgen'.
6) PROBLEMS?
------------
If compilation fails, double-check that you are using the latest SVN (!)
source. If it still doesn't work, check in on IRC (irc://irc.oftc.net/openttd),
to ask about reasons; or just wait. The problem will most likely solve itself
within a few days as the problem is noticed and fixed.
An up-to-date version of this README can be found on the wiki:
http://wiki.openttd.org/Microsoft_Visual_C%2B%2B_2008_Express_Editions

View File

@@ -106,7 +106,7 @@ Table of contents
The important thing here is: The detection of the Desync is The important thing here is: The detection of the Desync is
only an ultimate failure detection. It does not give any only an ultimate failure detection. It does not give any
indication on when the Desync happened. The Desync may after indication on when the Desync happened. The Desync may after
all have occurred long ago, and just did not affect the checksum all have occured long ago, and just did not affect the checksum
up to now. The checksum may have matched 10 times or more up to now. The checksum may have matched 10 times or more
since the Desync happend, and only now the Desync has spiraled since the Desync happend, and only now the Desync has spiraled
enough to finally affect the checksum. (There was once a desync enough to finally affect the checksum. (There was once a desync
@@ -194,7 +194,6 @@ Table of contents
- Get the same version of OpenTTD as the original server was running. - Get the same version of OpenTTD as the original server was running.
- Uncomment/enable the define 'DEBUG_DUMP_COMMANDS' in - Uncomment/enable the define 'DEBUG_DUMP_COMMANDS' in
'src/network/network_func.h'. 'src/network/network_func.h'.
(DEBUG_FAILED_DUMP_COMMANDS is explained later)
- Put the 'commands-out.log' into the root save folder, and rename - Put the 'commands-out.log' into the root save folder, and rename
it to 'commands.log'. it to 'commands.log'.
- Run 'openttd -D -d desync=3 -g startsavegame.sav'. - Run 'openttd -D -d desync=3 -g startsavegame.sav'.
@@ -218,11 +217,6 @@ Table of contents
the last dmp_cmds that reproduces the replay and the first one the last dmp_cmds that reproduces the replay and the first one
that fails. that fails.
If the replay does not succeed without mismatch, you can check the logs
whether there were failed commands. Then you may try to replay with
DEBUG_FAILED_DUMP_COMMANDS enabled. If the replay then fails, the
command test-run of the failed command modified the game state.
If you have the original 'dmp_cmds_*.sav', you can also compare those If you have the original 'dmp_cmds_*.sav', you can also compare those
savegames with your own ones from the replay. You can also comment/disable savegames with your own ones from the replay. You can also comment/disable
the 'NOT_REACHED' mentioned above, to get another 'dmp_cmds_*.sav' from the 'NOT_REACHED' mentioned above, to get another 'dmp_cmds_*.sav' from

View File

@@ -15,60 +15,20 @@
For a graphical representation of the tile-layout have a look at For a graphical representation of the tile-layout have a look at
<a href="landscape_grid.html">Landscape grid</a> page. <a href="landscape_grid.html">Landscape grid</a> page.
</p> </p>
<p>Nine attributes (counting &quot;<span style="font-weight: bold;">type</span>&quot; and <p>Eight attributes (counting &quot;<span style="font-weight: bold;">type_height</span>&quot;) hold the informations about a tile.<BR>
&quot;<span style="font-weight: bold;">height</span>&quot;) hold the informations about a tile.<BR>
These attributes are referred to as These attributes are referred to as
&quot;<span style="font-weight: bold;">type</span>", &quot;<span style="font-weight: bold;">type_height</span>",
&quot;<span style="font-weight: bold;">height</span>",
&quot;<span style="font-weight: bold;">m1</span>&quot;, &quot;<span style="font-weight: bold;">m2</span>&quot;, &quot;<span style="font-weight: bold;">m1</span>&quot;, &quot;<span style="font-weight: bold;">m2</span>&quot;,
&quot;<span style="font-weight: bold;">m3</span>&quot;, &quot;<span style="font-weight: bold;">m4</span>&quot;, &quot;<span style="font-weight: bold;">m3</span>&quot;, &quot;<span style="font-weight: bold;">m4</span>&quot;,
&quot;<span style="font-weight: bold;">m5</span>&quot;, &quot;<span style="font-weight: bold;">m6</span>&quot; &quot;<span style="font-weight: bold;">m5</span>&quot;, &quot;<span style="font-weight: bold;">m6</span>&quot;
and "<span style="font-weight: bold;">m7</span>".<br> and "<span style="font-weight: bold;">m7</span>".<br>
The most important value is the class of a tile, stored in the upper 4 bits The most important value is the class of a tile, stored in the upper 4 bits
of the <span style="font-weight: bold;">type</span> attribute. of the <span style="font-weight: bold;">type_height</span> attribute. The lower 4 bits are used to encode the height and
slope data.
</p> </p>
Frequently repeating patterns: Frequently repeating patterns:
<ul> <ul>
<li><span style="font-weight: bold;">type</span>
<ul>
<li>
<a name="type"></a>
Bits 7..4:
<table border="1" style="width: 30em;">
<tr bgcolor="#CCCCCC"><td colspan="2">The tile type.</td></tr>
<tr><td style="width: 5em;"><tt>00</tt></td><td>Ground</td></tr>
<tr><td><tt>01</tt></td><td>Railway tracks</td></tr>
<tr><td><tt>02</tt></td><td>Roads</td></tr>
<tr><td><tt>03</tt></td><td>Town building</td></tr>
<tr><td><tt>04</tt></td><td>Trees</td></tr>
<tr><td><tt>05</tt></td><td>Station tiles</td></tr>
<tr><td><tt>06</tt></td><td>Water</td></tr>
<tr><td><tt>07</tt></td><td>Void</td></tr>
<tr><td><tt>08</tt></td><td>Industries</td></tr>
<tr><td><tt>09</tt></td><td>Tunnel / bridge</td></tr>
<tr><td><tt>0A</tt></td><td>Objects</td></tr>
</table>
</li>
Bits 3..2:
<table border="1" style="width: 30em;">
<tr bgcolor="#CCCCCC"><td colspan="2">Presence and direction of bridge above.</td></tr>
<tr><td style="width: 5em;"><tt>00</tt></td><td>no bridge</td></tr>
<tr><td><tt>01</tt></td><td>Axis X (North-East)</td></tr>
<tr><td><tt>02</tt></td><td>Axis Y (South-West)</td></tr>
</table>
<li>
<a name="tropic_zone"></a>
Bits 1..0:
<table border="1" style="width: 30em;">
<tr bgcolor="#CCCCCC"><td colspan="2">Only meaningfull in tropic climate. It contains the definition of the available zones</td></tr>
<tr><td style="width: 5em;"><tt>00</tt></td><td>normal</td></tr>
<tr><td><tt>01</tt></td><td>desert</td></tr>
<tr><td><tt>02</tt></td><td>rain forest</td></tr>
</table>
In any other climate these 2 bits are theoretically free of use, however using them does not seem useful.
</li>
</ul>
<li><span style="font-weight: bold;">m1</span> <li><span style="font-weight: bold;">m1</span>
<ul> <ul>
<li> <li>
@@ -98,6 +58,32 @@
</li> </li>
</ul> </ul>
</li> </li>
<li><span style="font-weight: bold;">m6</span>
<ul>
<li>
<a name="bridge_direction"></a>
Bits 7..6:
<table border="1" style="width: 30em;">
<tr bgcolor="#CCCCCC"><td colspan="2">Presence and direction of bridge above, for tiles that support this.</td></tr>
<tr><td style="width: 5em;"><tt>00</tt></td><td>no bridge</td></tr>
<tr><td><tt>01</tt></td><td>Axis X (North-East)</td></tr>
<tr><td><tt>02</tt></td><td>Axis Y (South-West)</td></tr>
</table>
Some tiles, such as houses do not support bridges over them and use these bits for other purposes.
</li>
<li>
<a name="tropic_zone"></a>
Bits 1..0:
<table border="1" style="width: 30em;">
<tr bgcolor="#CCCCCC"><td colspan="2">Only meaningfull in tropic climate. It contains the definition of the available zones</td></tr>
<tr><td style="width: 5em;"><tt>00</tt></td><td>normal</td></tr>
<tr><td><tt>01</tt></td><td>desert</td></tr>
<tr><td><tt>02</tt></td><td>rain forest</td></tr>
</table>
In any other climate these 2 bits are theoretically free of use, however using them does not seem useful.
</li>
</ul>
</li>
<li><span style="font-weight: bold;">m7:</span><br> <li><span style="font-weight: bold;">m7:</span><br>
Animation frame/state. Used for houses, industries, objects and stations. Animation frame/state. Used for houses, industries, objects and stations.
</li> </li>
@@ -210,7 +196,9 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 4..2: type of hedge on NW border of the tile</li> <li>m6 bits 4..2: type of hedge on NW border of the tile</li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -226,7 +214,7 @@
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the tile</li> <li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the tile</li>
<li>m2: see signals</li> <li>m2: see signals</li>
<li>m3 bits 7..4: see signals</li> <li>m3 bits 7..4: see signals</li>
<li>m8 bits 5..0 = <a name="TrackType">track type</a>: <li>m3 bits 3..0 = <a name="TrackType">track type</a>:
<table> <table>
<tr> <tr>
<td><tt>0</tt>&nbsp; </td> <td><tt>0</tt>&nbsp; </td>
@@ -522,6 +510,8 @@
<li>m5 bit 4: pbs reservation state</li> <li>m5 bit 4: pbs reservation state</li>
</ul> </ul>
</li> </li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -549,7 +539,6 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of road type 1 (tram); OWNER_NONE (<tt>10</tt>) is stored as OWNER_TOWN (<tt>0F</tt>)
<li>m5 bits 7 clear: road or level-crossing <li>m5 bits 7 clear: road or level-crossing
<ul> <ul>
<li>m6 bits 5..3: <li>m6 bits 5..3:
@@ -584,6 +573,7 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of road type 1 (tram); OWNER_NONE (<tt>10</tt>) is stored as OWNER_TOWN (<tt>0F</tt>)
<li>m5 bit 6 clear: road <li>m5 bit 6 clear: road
<ul> <ul>
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li> <li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li>
@@ -626,8 +616,7 @@
<li>m5 bit 6 set: level crossing <li>m5 bit 6 set: level crossing
<ul> <ul>
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the railway track</li> <li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the railway track</li>
<li>m5 bit 5: set if crossing lights are on</li> <li>m3 bits 3..0: <a href="#TrackType">railway track type</a></li>
<li>m5 bit 4: pbs reservation state</li>
<li>m5 bit 0: direction <li>m5 bit 0: direction
<table> <table>
<tr> <tr>
@@ -640,8 +629,9 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m5 bit 5: set if crossing lights are on</li>
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li> <li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li>
<li>m8 bits 5..0: <a href="#TrackType">railway track type</a></li> <li>m5 bit 4: pbs reservation state</li>
</ul> </ul>
</li> </li>
</ul> </ul>
@@ -673,9 +663,10 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li>
</ul> </ul>
</li> </li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -722,6 +713,7 @@
<li>bits 7..2 : lift position (for houses type 04 and 05)</li> <li>bits 7..2 : lift position (for houses type 04 and 05)</li>
</ul> </ul>
</li> </li>
<li>bits 1..0 : tropic zone specifier</li>
</ul> </ul>
</li> </li>
<li>m7 : <li>m7 :
@@ -759,7 +751,6 @@
<td valign=top nowrap>&nbsp;</td> <td valign=top nowrap>&nbsp;</td>
<td> <td>
<ul> <ul>
<li>m1 bits 6..5: water class (sea or land)</li>
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> (normally <tt>10</tt>)</li> <li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> (normally <tt>10</tt>)</li>
<li>m2 bits 8..6: ground <li>m2 bits 8..6: ground
<table> <table>
@@ -844,6 +835,7 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -861,6 +853,7 @@
<li>m2: index into the array of stations</li> <li>m2: index into the array of stations</li>
<li>m3 bits 7..4: persistent random data for railway stations/waypoints and airports)</li> <li>m3 bits 7..4: persistent random data for railway stations/waypoints and airports)</li>
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of tram tracks (road stop)</li> <li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of tram tracks (road stop)</li>
<li>m3 bits 3..0: <a href="#TrackType">track type</a> for railway stations/waypoints</li>
<li>m4: custom station id; 0 means standard graphics</li> <li>m4: custom station id; 0 means standard graphics</li>
<li>m5: graphics index (range from 0..255 for each station type): <li>m5: graphics index (range from 0..255 for each station type):
<table> <table>
@@ -976,10 +969,10 @@
<li>m6 bits 5..3: the station type (rail, airport, truck, bus, oilrig, dock, buoy, waypoint)</li> <li>m6 bits 5..3: the station type (rail, airport, truck, bus, oilrig, dock, buoy, waypoint)</li>
<li>m6 bit 2: pbs reservation state for railway stations/waypoints</li> <li>m6 bit 2: pbs reservation state for railway stations/waypoints</li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road (road stops)</li> <li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road (road stops)</li>
<li>m7 bits 7..6: present road types (road stops)</li> <li>m7 bits 7..6: present road types (road stops)</li>
<li>m7: animation frame (railway stations/waypoints, airports)</li> <li>m7: animation frame (railway stations/waypoints, airports)</li>
<li>m8 bits 5..0: <a href="#TrackType">track type</a> for railway stations/waypoints</li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -1089,6 +1082,8 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -1106,7 +1101,7 @@
<tr bgcolor="#CCCCCC"> <tr bgcolor="#CCCCCC">
<td valign=top nowrap><strong><a name="Class8"><tt> 8</tt></a></strong></td> <td valign=top nowrap><strong><a name="Class8"><tt> 8</tt></a></strong></td>
<td><strong>Industries </strong></td> <td><strong>Industry tile </strong></td>
</tr> </tr>
<tr> <tr>
<td valign=top nowrap>&nbsp;</td> <td valign=top nowrap>&nbsp;</td>
@@ -1430,6 +1425,7 @@
</li> </li>
<li>m6 bits 5..3: random triggers (NewGRF)</li> <li>m6 bits 5..3: random triggers (NewGRF)</li>
<li>m6 bit 2: bit 8 of type (see m5)</li> <li>m6 bit 2: bit 8 of type (see m5)</li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
<li>m7: animation frame</li> <li>m7: animation frame</li>
</ul> </ul>
</td> </td>
@@ -1445,6 +1441,7 @@
<ul> <ul>
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a></li> <li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a></li>
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of tram</li> <li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of tram</li>
<li>m3 bits 3..0: <a href="#TrackType">track type</a> for railway</li>
<li>m5 bit 4: pbs reservation state for railway</li> <li>m5 bit 4: pbs reservation state for railway</li>
<li>m5 bits 7 clear: tunnel entrance/exit</li> <li>m5 bits 7 clear: tunnel entrance/exit</li>
<li>m5 bit 7 set: bridge ramp <li>m5 bit 7 set: bridge ramp
@@ -1579,10 +1576,11 @@
</tr> </tr>
</table> </table>
</li> </li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road</li> <li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road</li>
<li>m7 bit 5 set = on snow or desert</li> <li>m7 bit 5 set = on snow or desert</li>
<li>m7 bits 7..6: present road types for road</li> <li>m7 bits 7..6: present road types for road</li>
<li>m8 bits 5..0: <a href="#TrackType">track type</a> for railway</li>
</ul> </ul>
</td> </td>
</tr> </tr>
@@ -1600,6 +1598,8 @@
<li>m2: index into the array of objects, bits 0 to 15 (upper bits in m5)</li> <li>m2: index into the array of objects, bits 0 to 15 (upper bits in m5)</li>
<li>m3: random bits</li> <li>m3: random bits</li>
<li>m5: index into the array of objects, bits 16 to 23 (lower bits in m2)</li> <li>m5: index into the array of objects, bits 16 to 23 (lower bits in m2)</li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
<li>m7: animation counter</li> <li>m7: animation counter</li>
</ul> </ul>
</td> </td>

View File

@@ -17,7 +17,7 @@
</head> </head>
<body style="direction: ltr;"> <body style="direction: ltr;">
<h3 style="font-weight: bold;">Landscape</h3> <h3 style="font-weight: bold;">Landscape</h3>
<span style="font-weight: bold;"></span>Nine attributes hold the information about a tile. <span style="font-weight: bold;"></span>Six attributes hold the information about a tile.
This can be seen in the <a href="landscape.html">Landscape</a> document. This page tries to give an overview of used and free bits of This can be seen in the <a href="landscape.html">Landscape</a> document. This page tries to give an overview of used and free bits of
the array so you can quickly see what is used and what is not. the array so you can quickly see what is used and what is not.
<ul> <ul>
@@ -28,24 +28,21 @@ the array so you can quickly see what is used and what is not.
</ul> </ul>
<p> <p>
<ul> <ul>
<li><span style="font-weight: bold;">type</span> - 8 bits in size, tile class (bits 4..7), bridge (bits 2..3) tropic zone (bits 0..1, only valid in tropic climate)</li> <li><span style="font-weight: bold;">type_height</span> - 8 bits in size, stores tile height (lower 4 bits) and tile class (upper 4 bits)</li>
<li><span style="font-weight: bold;">height</span> - 8 bits in size, stores tile height</li>
<li><span style="font-weight: bold;">m1</span> - 8 bits in size, used to identify the owner of that tile (eg piece of rail, bridge, etc.)</li> <li><span style="font-weight: bold;">m1</span> - 8 bits in size, used to identify the owner of that tile (eg piece of rail, bridge, etc.)</li>
<li><span style="font-weight: bold;">m2</span> - 16 bits in size, used to identify the index of the given tile (object) in the (object-)array</li> <li><span style="font-weight: bold;">m2</span> - 16 bits in size, used to identify the index of the given tile (object) in the (object-)array</li>
<li><span style="font-weight: bold;">m3</span> - 8 bits in size, is used for general storage</li> <li><span style="font-weight: bold;">m3</span> - 8 bits in size, is used for general storage</li>
<li><span style="font-weight: bold;">m4</span> - 8 bits in size, is used for general storage</li> <li><span style="font-weight: bold;">m4</span> - 8 bits in size, is used for general storage</li>
<li><span style="font-weight: bold;">m5</span> - 8 bits in size, is used for general storage</li> <li><span style="font-weight: bold;">m5</span> - 8 bits in size, is used for general storage</li>
<li><span style="font-weight: bold;">m6</span> - 8 bits in size, is used for general storage</li> <li><span style="font-weight: bold;">m6</span> - 8 bits in size, special meaning : lower 2 bits only valid in tropic climate, upper 2 bits for bridges</li>
<li><span style="font-weight: bold;">m7</span> - 8 bits in size, is used for general storage</li> <li><span style="font-weight: bold;">m7</span> - 8 bits in size, is used for general storage</li>
<li><span style="font-weight: bold;">m8</span> - 16 bits in size, is used for general storage</li>
</ul> </ul>
<table align=center border="1" cellpadding="2" cellspacing="2"> <table align=center border="1" cellpadding="2" cellspacing="2">
<tbody> <tbody>
<tr> <tr>
<th colspan=2>class</th> <th colspan=2>class</th>
<th>type (8)</th> <th>type_height (8)</th>
<th>height (8)</th>
<th>m1 (8)</th> <th>m1 (8)</th>
<th>m2 (16)</th> <th>m2 (16)</th>
<th>m3 (8)</th> <th>m3 (8)</th>
@@ -53,169 +50,144 @@ the array so you can quickly see what is used and what is not.
<th>m5 (8)</th> <th>m5 (8)</th>
<th>m6 (8)</th> <th>m6 (8)</th>
<th>m7 (8)</th> <th>m7 (8)</th>
<th>m8 (16)</th>
</tr> </tr>
<tr> <tr>
<td colspan=2 class="caption">bits</td> <td colspan=2 class="caption">bits</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">7654 3210</td>
<td class="bits">FEDC BA98 7654 3210</td> <td class="bits">FEDC BA98 7654 3210</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">7654 3210</td> <td class="bits">7654 3210</td>
<td class="bits">FEDC BA98 7654 3210</td>
</tr> </tr>
<tr> <tr>
<td rowspan="2">0</td> <td rowspan="2">0</td>
<td class="caption">ground</td> <td class="caption">ground</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td> <td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits">XXXX <span class="free">OOOO</span></td> <td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits">XXXX XX<span class="free">OO</span></td> <td class="bits">XXXX XX<span class="free">OO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span>X XX<span class="free">OO</span></td> <td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">farmland</td> <td class="caption">farmland</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOO</span>X XX<span class="free">OO</span></td> <td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td rowspan=3>1</td> <td rowspan=3>1</td>
<td class="caption">rail</td> <td class="caption">rail</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span>X XXXX</td> <td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX <span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO</span> XXXX <span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td> <td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OO</span>XX XXXX</td>
</tr> </tr>
<tr> <tr>
<td class="caption">rail with signals</td> <td class="caption">rail with signals</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO</span> XXXX XXXX XXXX</td> <td class="bits"><span class="free">OOOO</span> XXXX XXXX XXXX</td>
<td class="bits">XXXX <span class="free">OOOO</span></td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td>
</tr> </tr>
<tr> <tr>
<td class="caption">depot</td> <td class="caption">depot</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">-inherit-</td> <td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td> <td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">XX<span class="free">O</span>X <span class="free">OO</span>XX</td> <td class="bits">XX<span class="free">O</span>X <span class="free">OO</span>XX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td>
</tr> </tr>
<tr> <tr>
<td rowspan=3>2</td> <td rowspan=3>2</td>
<td class="caption">road</td> <td class="caption">road</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span>X XXXX</td> <td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td> <td class="bits">XXXX X<span class="free">O</span>XX</td>
<td class="bits">XXX<span class="free">O</span> XXXX</td> <td class="bits">XXX<span class="free">O</span> XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">level crossing</td> <td class="caption">level crossing</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX <span class="free">OOO</span>X</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OO</span>XX XXXX</td> <td class="bits">-inherit-</td>
<td class="bits">XXXX<span class="free"> OOO</span>X</td>
<td class="bits">XXXX X<span class="free">O</span>XX</td>
<td class="bits">XXXX XXXX</td>
</tr> </tr>
<tr> <tr>
<td class="caption">road depot</td> <td class="caption">road depot</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XX<span class="free">OO OO</span>XX</td> <td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XXX<span class="free">O</span> XXXX</td> <td class="bits">XXX<span class="free">O OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td>3</td> <td>3</td>
<td class="caption">house</td> <td class="caption">house</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XX<span class="free">O</span><span class="option">~ ~~</span>XX</td> <td class="bits">XX<span class="free">O</span><span class="option">~ ~~</span>XX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXX<span class="abuse">X XXXX</span></td> <td class="bits">XXX<span class="abuse">X XXXX</span></td>
<td class="bits"><span class="abuse">XXXX XX</span><span class="free">OO</span></td> <td class="bits"><span class="abuse">XXXX XX</span>XX</td>
<td class="bits">XXXX <span class="abuse">XXXX</span></td> <td class="bits">XXXX <span class="abuse">XXXX</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td>4</td> <td>4</td>
<td class="caption">trees</td> <td class="caption">trees</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">O</span>XX<span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td> <td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td>
<td class="bits"><span class="option">~~</span>XX XXXX</td> <td class="bits"><span class="option">~~</span>XX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XX<span class="free">OO O</span>XXX</td> <td class="bits">XX<span class="free">OO O</span>XXX</td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td rowspan=7>5</td> <td rowspan=7>5</td>
<td class="caption">rail station</td> <td class="caption">rail station</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">O</span>XXX XXXX</td> <td class="bits"><span class="free">O</span>XXX XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX XX<span class="free">OO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OO</span>XX XXXX</td> <td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits">XXXX XXXX</td>
</tr> </tr>
<tr> <tr>
<td class="caption">rail waypoint</td> <td class="caption">rail waypoint</td>
@@ -227,168 +199,142 @@ the array so you can quickly see what is used and what is not.
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
</tr> </tr>
<tr> <tr>
<td class="caption">road stop</td> <td class="caption">road stop</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX <span class="free">OOOO</span></td> <td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="option">~~~~ ~</span>XXX</td> <td class="bits"><span class="option">~~~~ ~</span>XXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td> <td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits">XX<span class="free">O</span>X XXXX</td> <td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">dock</td> <td class="caption">dock</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="option">~~~~ ~</span>XXX</td> <td class="bits"><span class="option">~~~~ ~</span>XXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td> <td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">airport</td> <td class="caption">airport</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX <span class="free">OOOO</span></td> <td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td> <td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">buoy</td> <td class="caption">buoy</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td> <td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td> <td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">oilrig</td> <td class="caption">oilrig</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td> <td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td> <td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td rowspan=3>6</td> <td rowspan=3>6</td>
<td class="caption">sea, shore</td> <td class="caption">sea, shore</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">O</span>XXX XXXX</td> <td class="bits"><span class="free">O</span>XXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">X<span class="option">~~</span>X XXXX</td> <td class="bits">X<span class="option">~~</span>X XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">canal, river</td> <td class="caption">canal, river</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td class="caption">shipdepot</td> <td class="caption">shipdepot</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td>8</td> <td>8</td>
<td class="caption">industry</td> <td class="caption">industry</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXX<span class="free">O</span> <span class="abuse">XXXX</span></td> <td class="bits">XXX<span class="free">O</span> <span class="abuse">XXXX</span></td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX XX<span class="free">OO</span></td> <td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
<td rowspan=2>9</td> <td rowspan=2>9</td>
<td class="caption">tunnel entrance</td> <td class="caption">tunnel entrance</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span>X XXXX</td> <td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits">XXXX <span class="free">OOOO</span></td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">X<span class="free">OO</span>X XXXX</td> <td class="bits">X<span class="free">OO</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OO</span>XX XXXX</td>
</tr> </tr>
<tr> <tr>
<td>bridge ramp</td> <td>bridge ramp</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits"><span class="free">OO</span>XX XX<span class="free">OO</span></td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
</tr> </tr>
<tr> <tr>
<td rowspan=2>A</td> <td rowspan=2>A</td>
<td class="caption">objects</td> <td class="caption">objects</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">O</span>XXX XXXX</td> <td class="bits"><span class="free">O</span>XXX XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -90,7 +90,7 @@ Table of contents
- [network] sync_freq: - [network] sync_freq:
change it in console with: 'set network.sync_freq <number>' change it in console with: 'set network.sync_freq <number>'
the number should be between the 50 and 1000, not much lower, not much the number should be between the 50 and 1000, not much lower, not much
higher. It indicates the time between sync-frames. A sync-frame is a frame higer. It indicates the time between sync-frames. A sync-frame is a frame
which checks if all clients are still in sync. When the value it too high, which checks if all clients are still in sync. When the value it too high,
clients can desync in 1960, but the server detects it in 1970. Not really clients can desync in 1960, but the server detects it in 1970. Not really
handy. The lower the value, the more bandwidth it uses. handy. The lower the value, the more bandwidth it uses.
@@ -104,7 +104,7 @@ Table of contents
- In UNIX like systems, you can fork your dedicated server by adding -f as - In UNIX like systems, you can fork your dedicated server by adding -f as
parameter. parameter.
- You can automatically clean companies that do not have a client connected to - You can automaticly clean companies that do not have a client connected to
them, for, let's say, 3 years. You can do this via: 'set autoclean_companies' them, for, let's say, 3 years. You can do this via: 'set autoclean_companies'
and 'set autoclean_protected' and 'set autoclean_unprotected'. Unprotected and 'set autoclean_protected' and 'set autoclean_unprotected'. Unprotected
removes a password from a company when it is not used for more then the removes a password from a company when it is not used for more then the
@@ -113,7 +113,7 @@ Table of contents
- You can also do this manually via the console: 'reset_company'. - You can also do this manually via the console: 'reset_company'.
- You can let your server automatically restart a map when, let's say, year 2030 - You can let your server automaticly restart a map when, let's say, year 2030
is reached. See 'set restart_game_date' for detail. is reached. See 'set restart_game_date' for detail.
- If you want to be on the server-list, enable Advertising. To do this, select - If you want to be on the server-list, enable Advertising. To do this, select

View File

@@ -45,15 +45,12 @@ description.en_US = howdie
; The file names are case sensitive. ; The file names are case sensitive.
; You can have empty file names; in that case no song will be loaded ; You can have empty file names; in that case no song will be loaded
; for that 'entry'. ; for that 'entry'.
; If you want to load music from the MPS DOS music driver "cat" format,
; specify just the name of the .cat file the song is located in, then
; fill out the "catindex" section.
[files] [files]
; The theme song for OpenTTD ; The theme song for OpenTTD
theme = THEME_SONG.GM theme = THEME_SONG.GM
; The songs in the 'old style' category ; The songs in the 'old style' category
old_0 = GM.CAT old_0 =
old_1 = GM.CAT old_1 =
old_2 = old_2 =
old_3 = old_3 =
old_4 = old_4 =
@@ -89,17 +86,9 @@ ezy_9 =
; Note that the list of files is case sensitive. Each file listed in the ; Note that the list of files is case sensitive. Each file listed in the
; files section must be listed here with it's song name, otherwise you ; files section must be listed here with it's song name, otherwise you
; will get a lot of warnings when starting OpenTTD. ; will get a lot of warnings when starting OpenTTD.
; You don't need to fill this out for "cat" format music, the song names
; are loaded directly from the file in that case.
[names] [names]
THEME_SONG.GM = Tycoon DELUXE Theme THEME_SONG.GM = Tycoon DELUXE Theme
; If you are loading music from the DOS version "cat" format, specify
; which index into the file the song has.
[catindex]
old_0 = 1
old_1 = 3
; The md5s section lists the MD5 checksum for the files that replace them. ; The md5s section lists the MD5 checksum for the files that replace them.
; Note that the list of files is case sensitive. Each file listed in the ; Note that the list of files is case sensitive. Each file listed in the
; files section must be listed here with it's MD5 checksum, otherwise you ; files section must be listed here with it's MD5 checksum, otherwise you
@@ -107,13 +96,6 @@ old_1 = 3
[md5s] [md5s]
THEME_SONG.GM = 45cfec1b9d8c7a0ad45e755833cbf221 THEME_SONG.GM = 45cfec1b9d8c7a0ad45e755833cbf221
; If a song needs to have parts of the start or end cut off to avoid long
; silences, you can specify MIDI tick codes for start:end of the actual
; music part for each file here.
; Not all music drivers might support this feature.
[timingtrim]
THEME_SONG.GM = 768:53760
; The origin section provides the possibility to put and extra line into ; The origin section provides the possibility to put and extra line into
; the warning that a file is missing/corrupt. This can be used to tell ; the warning that a file is missing/corrupt. This can be used to tell
; them where to find it. It works on the filename specified in the ; them where to find it. It works on the filename specified in the

View File

@@ -1,152 +1,112 @@
.\" Hey, EMACS: -*- nroff -*- .\" Hey, EMACS: -*- nroff -*-
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.Dd October 13, 2014 .Dd May 31, 2011
.Dt OPENTTD 6 .Dt OPENTTD 6
.Os
.Sh NAME .Sh NAME
.Nm openttd .Nm openttd
.Nd open source clone of the Microprose game \(lqTransport Tycoon Deluxe\(rq .Nd An open source clone of the Microprose game "Transport Tycoon Deluxe"
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl efhx .Op Fl efhx
.Op Fl b Ar blitter .Op Fl b Ar blitter
.Op Fl c Ar config_file .Op Fl c Ar config_file
.Op Fl d Op Ar level | Ar cat Ns = Ns Ar lvl Ns Op , Ns Ar ... .Op Fl d Ar [level | cat=lvl[,...]]
.Op Fl D Oo Ar host Oc Ns Op : Ns Ar port .Op Fl D Ar [host][:port]
.Op Fl g Op Ar savegame .Op Fl g Ar [savegame]
.Op Fl G Ar seed .Op Fl G Ar seed
.Op Fl I Ar graphicsset .Op Fl I Ar graphicsset
.Op Fl l Ar host Ns Op : Ns Ar port .Op Fl l Ar host[:port]
.Op Fl m Ar driver .Op Fl m Ar driver
.Op Fl M Ar musicset .Op Fl M Ar musicset
.Op Fl n Ar host Ns Oo : Ns Ar port Oc Ns Op # Ns Ar player .Op Fl n Ar host[:port][#player]
.Op Fl p Ar password .Op Fl p Ar password
.Op Fl P Ar password .Op Fl P Ar password
.Op Fl q Ar savegame .Op Fl q Ar savegame
.Op Fl r Ar width Ns x Ns Ar height .Op Fl r Ar widthxheight
.Op Fl s Ar driver .Op Fl s Ar driver
.Op Fl S Ar soundset .Op Fl S Ar soundset
.Op Fl t Ar year .Op Fl t Ar year
.Op Fl v Ar driver .Op Fl v Ar driver
.Sh OPTIONS .Sh OPTIONS
.Bl -tag -width "-n host[:port][#player]" .Bl -tag -width ".Fl n Ar host[:port][#player]"
.It Fl b Ar blitter .It Fl b Ar blitter
Select the blitter Set the blitter, see
.Ar blitter ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl c Ar config_file .It Fl c Ar config_file
Use Use 'config_file' instead of 'openttd.cfg'
.Ar config_file
instead of
.Pa openttd.cfg .
.It Fl d Ar [level] .It Fl d Ar [level]
Set debug verbosity for all categories to Set debug verbosity for all categories to
.Ar level , .Ar level
or 1 if omitted. or 1 if omitted
.It Fl d Ar cat Ns = Ns Ar lvl Ns Op , Ns Ar ... .It Fl d Ar cat=level[,...]
Set debug verbosity to Set debug verbosity for a specific category
.Ar lvl .It Fl D Ar [host][:port]
for a specific category Start a dedicated server. Sets network debug level to 6. If you want to change this, use
.Ar cat .
.It Fl D Oo Ar host Oc Ns Op : Ns Ar port
Start a dedicated server.
.Pp
Network debug level will be set to 6.
If you want to change this, set
.Fl d .Fl d
after setting after
.Fl D . .Fl D
.It Fl G Ar seed
Seed the pseudo random number generator
.It Fl e .It Fl e
Start in world editor mode. Start in world editor mode
.It Fl f .It Fl f
Fork into background (dedicated server only, see Fork into background (dedicated server only, see
.Fl D ) . .Fl D )
.It Fl g Op Ar savegame .It Fl g Ar [savegame]
Load Load
.Ar savegame .Ar savegame
at start or start a new game if omitted. at start or start a new game if omitted. The
.Ar savegame .Ar savegame
must be either an absolute path or one relative to the current path or one of must be either absolute or relative to the current path or one of the search paths.
the search paths.
.It Fl G Ar seed
Seed the pseudo random number generator with
.Ar seed .
.It Fl h .It Fl h
Display a summary of all options and list all the available AIs, blitters, Display a summary of all options and lists all the available AIs, blitters, sound, music and video drivers, graphics sets and sound sets.
sound, music and video drivers, graphics sets and sound sets.
.It Fl I Ar graphicsset .It Fl I Ar graphicsset
Select the graphics set Set the graphics set, see
.Ar graphicsset ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl l Ar host Ns Op : Ns Ar port .It Fl l Ar host[:port]
Redirect Redirect DEBUG(), See
.Fn DEBUG .Fl D
output; see
.Fl D .
.It Fl m Ar driver .It Fl m Ar driver
Select the music driver Set the music driver, see
.Ar driver ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl M Ar musicset .It Fl M Ar musicset
Select the music set Set the music set, see
.Ar musicset ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl n Ar host Ns Oo : Ns Ar port Oc Ns Op # Ns Ar player .It Fl n Ar host[:port][#player]
Join a network game, optionally specifying a port to connect to and player to Join a network game, optionally specify a port to connect to and player to play as
play as.
.It Fl p Ar password .It Fl p Ar password
Password used to join server. Password used to join server. Only useful with
Only useful with .Fl n
.Fl n .
.It Fl P Ar password .It Fl P Ar password
Password used to join company. Password used to join company. Only useful with
Only useful with .Fl n
.Fl n .
.It Fl q Ar savegame .It Fl q Ar savegame
Write some information about the specified savegame and exit. Write some information about the savegame and exit
.It Fl r Ar width Ns x Ns Ar height .It Fl r Ar widthxheight
Set the resolution to Set the resolution
.Ar width
\(mu
.Ar height
pixels.
.It Fl s Ar driver .It Fl s Ar driver
Select the sound driver Set the sound driver, see
.Ar driver ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl S Ar soundset .It Fl S Ar soundset
Select the sound set Set the sound set, see
.Ar soundset ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl t Ar year .It Fl t Ar year
Set the starting year to Set the starting year
.Ar year .
.It Fl v Ar driver .It Fl v Ar driver
Select the video driver Set the video driver, see
.Ar driver ;
see
.Fl h .Fl h
for a full list. for a full list
.It Fl x .It Fl x
Do not automatically save to config file on exit. Do not automatically save to config file on exit
.El .El
.Sh SEE ALSO .Sh SEE ALSO
.Lk https://wiki.openttd.org "Wiki" http://wiki.openttd.org/, http://www.openttd.org
(includes community maintained manual),
.Lk https://forum.openttd.org "Forum",
.Lk https://www.openttd.org "News"
.Sh HISTORY .Sh HISTORY
Transport Tycoon Deluxe was written by Chris Sawyer and published by Microprose. Transport Tycoon Deluxe was written by Chris Sawyer and published by Microprose.
.Nm .Nm

View File

@@ -14,31 +14,42 @@ if [ "$#" != "0" ]; then
Usage: ./findversion.sh Usage: ./findversion.sh
Finds the current revision and if the code is modified. Finds the current revision and if the code is modified.
Output: <VERSION>\t<ISODATE>\t<MODIFIED>\t<HASH> Output: <REV>\t<REV_NR>\t<MODIFIED>\t<CLEAN_REV>
VERSION REV
a string describing what version of the code the current checkout is a string describing what version of the code the current checkout is
based on. based on. The exact format of this string depends on the version
This also includes the commit date, an indication of whether the checkout control system in use, but it tries to identify the revision used as
was modified and which branch was checked out. This value is not 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
guaranteed to be sortable, but is mainly meant for identifying the guaranteed to be sortable, but is mainly meant for identifying the
revision and user display. revision and user display.
If no revision identifier could be found, this is left empty. If no revision identifier could be found, this is left empty.
ISODATE REV_NR
the commit date of the revision this checkout is based on. the revision number of the svn revision this checkout is based on.
The commit date may differ from the author date. This can be used to determine which functionality is present in this
This can be used to decide upon the age of the source. 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.
If no timestamp could be found, this is left empty. 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.
MODIFIED MODIFIED
Whether (the src directory of) this checkout is modified or not. A 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. 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 A value of 1 means that the modified status is unknown, because this
is not an git checkout for example. is not an svn/git/hg checkout for example.
HASH CLEAN_REV
the git revision hash the same as REV but without branch name
By setting the AWK environment variable, a caller can determine which By setting the AWK environment variable, a caller can determine which
version of "awk" is used. If nothing is set, this script defaults to version of "awk" is used. If nothing is set, this script defaults to
@@ -59,7 +70,21 @@ ROOT_DIR=`pwd`
# Determine if we are using a modified version # Determine if we are using a modified version
# Assume the dir is not modified # Assume the dir is not modified
MODIFIED="0" MODIFIED="0"
if [ -d "$ROOT_DIR/.git" ]; then 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
# We are a git checkout # We are a git checkout
# Refresh the index to make sure file stat info is in sync, then look for modifications # Refresh the index to make sure file stat info is in sync, then look for modifications
git update-index --refresh >/dev/null git update-index --refresh >/dev/null
@@ -67,33 +92,36 @@ if [ -d "$ROOT_DIR/.git" ]; then
MODIFIED="2" MODIFIED="2"
fi fi
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
SHORTHASH=`echo ${HASH} | cut -c1-10` REV="g`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@.*/@@;s@^master$@@'`"
BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`" 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
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`" TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`"
if [ "$MODIFIED" -eq "0" ]; then
hashprefix="-g"
elif [ "$MODIFIED" -eq "2" ]; then
hashprefix="-m"
else
hashprefix="-u"
fi
if [ -n "$TAG" ]; then if [ -n "$TAG" ]; then
VERSION="${TAG}" BRANCH=""
ISTAG="1" REV="$TAG"
if [ -n "`echo \"${TAG}\" | grep \"^[0-9.]*$\"`" ]; then fi
ISSTABLETAG="1" elif [ -d "$ROOT_DIR/.hg" ]; then
else # We are a hg checkout
ISSTABLETAG="0" if [ -n "`hg status | grep -v '^?'`" ]; then
fi MODIFIED="2"
else fi
VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}" HASH=`LC_ALL=C hg id -i | cut -c1-12`
ISTAG="0" REV="h`echo $HASH | cut -c1-8`"
ISSTABLETAG="0" BRANCH="`hg branch | sed 's@^default$@@'`"
TAG="`hg id -t | grep -v 'tip$'`"
if [ -n "$TAG" ]; then
BRANCH=""
REV="$TAG"
fi
REV_NR=`LC_ALL=C 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 hg parent --template="{svnrev}"`
fi fi
elif [ -f "$ROOT_DIR/.ottdrev" ]; then elif [ -f "$ROOT_DIR/.ottdrev" ]; then
# We are an exported source bundle # We are an exported source bundle
cat $ROOT_DIR/.ottdrev cat $ROOT_DIR/.ottdrev
@@ -101,14 +129,19 @@ elif [ -f "$ROOT_DIR/.ottdrev" ]; then
else else
# We don't know # We don't know
MODIFIED="1" MODIFIED="1"
HASH=""
SHORTHASH=""
BRANCH="" BRANCH=""
ISODATE="" REV=""
TAG="" REV_NR=""
VERSION=""
ISTAG="0"
ISSTABLETAG="0"
fi fi
echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG" if [ "$MODIFIED" -eq "2" ]; then
REV="${REV}M"
fi
CLEAN_REV=${REV}
if [ -n "$BRANCH" ]; then
REV="${REV}-$BRANCH"
fi
echo "$REV $REV_NR $MODIFIED $CLEAN_REV"

View File

@@ -1,6 +1,6 @@
OpenTTD's known bugs OpenTTD's known bugs
Last updated: 2019-04-08 Last updated: 2014-08-03
Release version: 1.9.1 Release version: 1.4.2-RC2
------------------------------------------------------------------------ ------------------------------------------------------------------------
@@ -14,12 +14,12 @@ Table of contents
---- ----- ---- -----
All bugs listed below are marked as known. Please do not submit any bugs All bugs listed below are marked as known. Please do not submit any bugs
that are the same as these. If you do, do not act surprised, because that are the same as these. If you do, do not act surprised, because
we WILL flame you! we WILL flame you!!
The current list of known bugs that we intend to fix can be found in our The current list of known bugs that we intend to fix can be found in our
bug tracking system at https://github.com/OpenTTD/OpenTTD/issues bug tracking system at: http://bugs.openttd.org
Also check the closed bugs when searching for your bug in this system as we Also check the closed bugs when searching for your bug in this system as
might have fixed the bug in the mean time. we might have fixed the bug in the mean time.
2.0) Known bugs 2.0) Known bugs
@@ -29,383 +29,427 @@ reasons why we think that fixing them is infeasible. We might make some
minor improvements that reduce the scope of these bugs, but we will not minor improvements that reduce the scope of these bugs, but we will not
be able to completely fix them. be able to completely fix them.
No suitable AI can be found: No suitable AI can be found
If you have no AIs and an AI is started the so-called 'dummy' AI will If you have no AIs and an AI is started the so-called 'dummy' AI will
be loaded. This AI does nothing but writing a message on the AI debug be loaded. This AI does nothing but writing a message on the AI debug
window and showing a red warning. There are basically two solutions window and showing a red warning. There are basically two solutions
for this problem: Either you set the number of AI players to 0 so that for this problem: Either you set the number of AI players to 0 so that
no AI is started. You find that setting at the top of the window in the no AI is started. You find that setting at the top of the window in the
"AI / Game Scripts Settings" window. "AI / Game Scripts Settings" window.
The other solution is acquiring (downloading) some AI. The easiest way The other solution is acquiring (downloading) some AI. The easiest way
to do this is via the "Check Online Content" button in the main (intro) to do this is via the "Check Online Content" button in the main (intro)
menu or directly in the "AI / Game Scripts Settings" dialogue via the menu or directly in the "AI / Game Scripts Settings" dialogue via the
"Check Online Content" button. "Check Online Content" button.
After a while of playing, colours get corrupted: After a while of playing, colours get corrupted
In Windows 7 the background slideshow corrupts the colour mapping In Windows 7 the background slideshow corrupts the colour mapping of
of OpenTTD's 8bpp screen modes. Workarounds for this are: OpenTTD's 8bpp screen modes. Workarounds for this are:
a) Switching to windowed mode, instead of fullscreen a) Switching to windowed mode, instead of fullscreen
b) Switching off background slideshow b) Switching off background slideshow
c) Setting up the 32bpp-anim or 32bpp-optimized blitter c) Setting up the 32bpp-anim or 32bpp-optimized blitter
Custom vehicle type name is incorrectly aligned: Long delay between switching songs/music
Some NewGRFs use sprites that are bigger than normal in the "buy On Windows there is a delay of a (few) second(s) between switching of
vehicle" window. Due to this they have to encode an offset for songs for the "win32" driver. This delay is caused by the fact that
the vehicle type name. Upon renaming the vehicle type this encoded opening a MIDI file via MCI is extremely slow.
offset is stripped from the name because the "edit box" cannot show
this encoding. As a result the custom vehicle type names will get
the default alignment. The only way to (partially) fix this is by
adding spaces to the custom name.
Clipping problems [#119]: DirectMusic, known as "dmusic" in OpenTTD, has a much shorter delay.
In some cases sprites are not drawn as one would expect. Examples of However, under some circumstances DirectMusic does not reset its
this are aircraft that might be hidden below the runway or trees that state properly causing wrongly pitched/bad sounding songs. This
in some cases are rendered over vehicles. problem is in DirectMusic as it is reproducable with Microsoft's
The primary cause of this problem is that OpenTTD does not have enough DirectMusic Producer. DirectMusic has been deprecated since 2004
data (like a 3D model) to properly determine what needs to be drawn in and as such has no support for 64 bits OpenTTD.
front of what. OpenTTD has bounding boxes but in lots of cases they
are either too big or too small and then cause problems with what
needs to be drawn in front of what. Also some visual tricks are used.
For example trains at 8 pixels high, the catenary needs to be drawn
above that. When you want to draw bridges on top of that, which are
only one height level (= 8 pixels) higher, you are getting into some
big problems.
We can not change the height levels; it would require us to either
redraw all vehicle or all landscape graphics. Doing so would mean we
leave the Transport Tycoon graphics, which in effect means OpenTTD
will not be a Transport Tycoon clone anymore.
Mouse scrolling not possible at the edges of the screen [#383] [#3966]: As a delay is favourable over bad sounding music the "win32" driver
Scrolling the viewport with the mouse cursor at the edges of the screen is the default driver for OpenTTD. You can change this default by
in the same direction of the edge will fail. If the cursor is near the setting the "musicdriver" in your openttd.cfg to "dmusic".
edge the scrolling will be very slow.
OpenTTD only receives cursor position updates when the cursor is inside
OpenTTD's window. It is not told how far you have moved the cursor
outside of OpenTTD's window.
Lost trains ignore (block) exit signals [#1473]: Custom vehicle type name is incorrectly aligned
If trains are lost they ignore block exit signals, blocking junctions Some NewGRFs use sprites that are bigger than normal in the "buy
with presignals. This is caused because the path finders cannot tell vehicle" window. Due to this they have to encode an offset for the
where the train needs to go. As such a random direction is chosen at vehicle type name. Upon renaming the vehicle type this encoded offset
each junction. This causes the trains to occasionally to make choices is stripped from the name because the "edit box" cannot show this
that are unwanted from a player's point of view. encoding. As a result the custom vehicle type names will get the
This will not be fixed because lost trains are in almost all cases a default alignment. The only way to (partly) fix this is by adding
network problem, e.g. a train can never reach a specific place. This spaces to the custom name.
makes the impact of fixing the bug enormously small against the amount
of work needed to write a system that prevents the lost trains from
taking the wrong direction.
Vehicle owner of last transfer leg gets paid for all [#2427]: Clipping problems [FS#119]
When you make a transfer system that switches vehicle owners. This In some cases sprites are not drawn as one would expect. Examples of
is only possible with 'industry stations', e.g. the oil rig station this are aircraft that might be hidden below the runway or trees that
the owner of the vehicle that does the final delivery gets paid for in some cases are rendered over vehicles.
the whole trip. It is not shared amongst the different vehicle The primary cause of this problem is that OpenTTD does not have enough
owners that have participated in transporting the cargo. data (like a 3D model) to properly determine what needs to be drawn in
This sharing is not done because it would enormously increase the front of what. OpenTTD has bounding boxes but in lots of cases they
memory and CPU usage in big games for something that is happening are either too big or too small and then cause problems with what
in only one corner case. We think it is not worth the effort until needs to be drawn in front of what. Also some visual tricks are used.
sharing of stations is an official feature. For example trains at 8 pixels high, the catenary needs to be drawn
above that. When you want to draw bridges on top of that, which are
only one height level (= 8 pixels) higher, you are getting into some
big problems.
We can not change the height levels; it would require us to either
redraw all vehicle or all landscape graphics. Doing so would mean we
leave the Transport Tycoon graphics, which in effect means OpenTTD
will not be a Transport Tycoon clone anymore.
Forbid 90 degree turns does not work for crossing PBS paths [#2737]: Mouse scrolling not possible at the edges of the screen [FS#383] [FS#3966]
When you run a train through itself on a X junction with PBS turned on Scrolling the viewport with the mouse cursor at the edges of the screen
the train will not obey the 'forbid 90 degree turns' setting. This is in the same direction of the edge will fail. If the cursor is near the
due to the fact that we can not be sure that the setting was turned edge the scrolling will be very slow.
off when the track was reserved, which means that we assume it was OpenTTD only receives cursor position updates when the cursor is inside
turned on and that the setting does not hold at the time. We made it OpenTTD's window. It is not told how far you have moved the cursor
this way to allow one to change the setting in-game, but it breaks outside of OpenTTD's window.
slightly when you are running your train through itself. Running a
train through means that your network is broken and is thus a user
error which OpenTTD tries to graciously handle.
Fixing this bug means that we need to record whether this particular
setting was turned on or off at the time the reservation was made. This
means adding quite a bit of data to the savegame for solving an issue
that is basically an user error. We think it is not worth the effort.
Duplicate (station) names after renaming [#3204]: Lost trains ignore (block) exit signals [FS#1473]
After renaming stations one can create duplicate station names. This If trains are lost they ignore block exit signals, blocking junctions
is done giving a station the same custom name as another station with with presignals. This is caused because the path finders cannot tell
an automatically generated name. where the train needs to go. As such a random direction is chosen at
The major part of this problem is that station names are translatable. each junction. This causes the trains to occasionally to make choices
Meaning that a station is called e.g. '<TOWN> Central' in English and that are unwanted from a player's point of view.
'<TOWN> Centraal' in Dutch. This means that in network games the This will not be fixed because lost trains are in almost all cases a
renaming of a town could cause the rename to succeed on some clients network problem, e.g. a train can never reach a specific place. This
and fail at others. This creates an inconsistent game state that will makes the impact of fixing the bug enormously small against the
be seen as a 'desync'. Secondly the custom names are intended to fall amount of work needed to write a system that prevents the lost trains
completely outside of the '<TOWN> <name>' naming of stations, so when from taking the wrong direction.
you rename a town all station names are updated accordingly.
As a result the decision has been made that all custom names are only
compared to the other custom names in the same class and not compared
to the automatically generated names.
Extreme CPU usage/hangs when using SDL and PulseAudio [#3294], Vehicle owner of last transfer leg gets paid for all [FS#2427]
OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU: When you make a transfer system that switches vehicle owners. This
OpenTTD can be extremely slow/use a lot of CPU when the sound is is only possible with 'industry stations', e.g. the oil rig station
played via SDL and then through PulseAudio's ALSA wrapper. Under the the owner of the vehicle that does the final delivery gets paid for
same configuration OpenTTD, or rather SDL, might hang when exiting the whole trip. It is not shared amongst the different vehicle
the game. This problem is seen most in Ubuntu 9.04 and higher. owners that have participated in transporting the cargo.
This sharing is not done because it would enormously increase the
memory and CPU usage in big games for something that is happening
in only one corner case. We think it is not worth the effort until
sharing of stations is an official feature.
This is because recent versions of the PulseAudio sound server Forbid 90 degree turns does not work for crossing PBS paths [FS#2737]
are configured to use timer-based audio scheduling rather than When you run a train through itself on a X junction with PBS turned on
interrupt-based audio scheduling. Configuring PulseAudio to force the train will not obey the 'forbid 90 degree turns' setting. This is
use of interrupt-based scheduling may resolve sound problems for due to the fact that we can not be sure that the setting was turned
some users. Under recent versions of Ubuntu Linux (9.04 and higher) off when the track was reserved, which means that we assume it was
this can be accomplished by changing the following line in the turned on and that the setting does not hold at the time. We made it
/etc/pulse/default.pa file: this way to allow one to change the setting in-game, but it breaks
load-module module-udev-detect slightly when you are running your train through itself. Running a
to train through means that your network is broken and is thus a user
load-module module-udev-detect tsched=0 error which OpenTTD tries to graciously handle.
Note that PulseAudio must be restarted for changes to take effect. Older Fixing this bug means that we need to record whether this particular
versions of PulseAudio may use the module-hal-detect module instead. setting was turned on or off at the time the reservation was made. This
Adding tsched=0 to the end of that line will have a similar effect. means adding quite a bit of data to the savegame for solving an issue
that is basically an user error. We think it is not worth the effort.
Another possible solution is selecting the "pulse" backend of SDL Duplicate (station) names after renaming [FS#3204]
by either using "SDL_AUDIODRIVER=pulse openttd" at the command After renaming stations one can create duplicate station names. This
prompt or installing the 'libsdl1.2debian-pulseaudio' package from is done giving a station the same custom name as another station with
Ubuntu's Universe repository. For other distributions a similar an automatically generated name.
package needs to be installed. The major part of this problem is that station names are translatable.
Meaning that a station is called e.g. '<TOWN> Central' in English and
'<TOWN> Centraal' in Dutch. This means that in network games the
renaming of a town could cause the rename to succeed on some clients
and fail at others. This creates an inconsistent game state that will
be seen as a 'desync'. Secondly the custom names are intended to fall
completely outside of the '<TOWN> <name>' naming of stations, so when
you rename a town all station names are updated accordingly.
As a result the decision has been made that all custom names are only
compared to the other custom names in the same class and not compared
to the automatically generated names.
OpenTTD not properly resizing with SDL on X [#3305]: Extreme CPU usage/hangs when using SDL and PulseAudio [FS#3294]
Under some X window managers OpenTTD's window does not properly OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU
resize. You will either end up with a black bar at the right/bottom OpenTTD can be extremely slow/use a lot of CPU when the sound is
side of the window or you cannot see the right/bottom of the window, played via SDL and then through PulseAudio's ALSA wrapper. Under the
e.g. you cannot see the status bar. The problem is that OpenTTD does same configuration OpenTTD, or rather SDL, might hang when exiting
not always receive a resize event from SDL making it impossible for the game. This problem is seen most in Ubuntu 9.04 and higher.
OpenTTD to know that the window was resized; sometimes moving the
window will solve the problem. This is because recent versions of the PulseAudio sound server are
Window managers that are known to exhibit this behaviour are GNOME's configured to use timer-based audio scheduling rather than
and KDE's. With the XFCE's and LXDE's window managers the resize interrupt-based audio scheduling. Configuring PulseAudio to force
event is sent when the user releases the mouse. use of interrupt-based scheduling may resolve sound problems for
some users. Under recent versions of Ubuntu Linux (9.04 and higher)
this can be accomplished by changing the following line in the
/etc/pulse/default.pa file:
load-module module-udev-detect
to
load-module module-udev-detect tsched=0
Note that PulseAudio must be restarted for changes to take effect.
Older versions of PulseAudio may use the module-hal-detect module
instead. Adding tsched=0 to the end of that line will have a similar
effect.
Another possible solution is selecting the "pulse" backend of SDL
by either using "SDL_AUDIODRIVER=pulse openttd" at the command
prompt or installing the 'libsdl1.2debian-pulseaudio' package from
Ubuntu's Universe repository. For other distributions a similar
package needs to be installed.
OpenTTD not properly resizing with SDL on X [FS#3305]
Under some X window managers OpenTTD's window does not properly
resize. You will either end up with a black bar at the right/bottom
side of the window or you cannot see the right/bottom of the window,
e.g you cannot see the status bar. The problem is that OpenTTD does
not always receive a resize event from SDL making it impossible for
OpenTTD to know that the window was resized; sometimes moving the
window will solve the problem.
Window managers that are known to exhibit this behaviour are KDE's
and GNOME's. With the XFCE's and LXDE's window managers the resize
event is sent when the user releases the mouse.
Incorrect colours, crashes upon exit, debug warnings and smears upon Incorrect colours, crashes upon exit, debug warnings and smears upon
window resizing with SDL on macOS [#3447]: window resizing with SDL on Mac OS X [FS#3447]
Video handling with (lib)SDL under macOS is known to fail on some Video handling with (lib)SDL under Mac OS X is known to fail on some
versions of macOS with some hardware configurations. Some of versions of Mac OS X with some hardware configurations. Some of the
the problems happen only under some circumstances whereas others problems happen only under some circumstances whereas others are
are always present. always present.
We suggest that the SDL video/sound backend is not used for OpenTTD We suggest that the SDL video/sound backend is not used for OpenTTD
in combinations with macOS. in combinations with Mac OS X.
Train crashes entering same junction from block and path signals [#3928]: Train crashes entering same junction from block and path signals [FS#3928]
When a train has reserved a path from a path signal to a two way When a train has reserved a path from a path signal to a two way
block signal and the reservation passes a path signal through the block signal and the reservation passes a path signal through the
back another train can enter the reserved path (only) via that back another train can enter the reserved path (only) via that same
same two way block signal. two way block signal.
The reason for this has to do with optimisation; to fix this issue The reason for this has to do with optimisation; to fix this issue
the signal update has to pass all path signals until it finds either the signal update has to pass all path signals until it finds either
a train or a backwards facing signal. This is a very expensive task. a train or a backwards facing signal. This is a very expensive task.
The (signal) setups that allow these crashes can furthermore be The (signal) setups that allow these crashes can furthermore be
considered incorrectly signalled; one extra safe waiting point for considered incorrectly signalled; one extra safe waiting point for
the train entering from path signal just after the backwards facing the train entering from path signal just after the backwards facing
signal (from the path signal train) resolves the issue. signal (from the path signal train) resolves the issue.
Crashes when run in a VM using Parallels Desktop [#4003]: Crashes when playing music [FS#3941]
When the Windows version of OpenTTD is executed in a VM under Mac OS X's QuickTime (default music driver) and Windows' MCI (win32
Parallels Desktop a privileged instruction exception may be thrown. music driver) crash on some songs from OpenMSX. OpenTTD cannot do
As OpenTTD works natively on macOS as well as natively on Windows and anything about this. Please report these crashes to the authors of
these native builds both don't exhibit this behaviour this crash is OpenMSX so the crash causing songs can be removed or fixed.
most likely due to a bug in the virtual machine, something out of
the scope of OpenTTD. Most likely this is due to Parallels Desktop
lacking support for RDTSC calls. The problem can be avoided by using
other VM-software, Wine, or running natively on macOS.
Entry- and exit signals are not dragged [#4378]: Crashes when run in a VM using Parallels Desktop [FS#4003]
Unlike all other signal types, the entry- and exit signals are not When the Windows version of OpenTTD is executed in a VM under
dragged but instead normal signals are placed on subsequent track Parallels Desktop a privileged instruction exception may be thrown.
sections. This is done on purpose as this is the usually more As OpenTTD works natively on OSX as well as natively on Windows and
convenient solution. There are little to no occasions where more these native builds both don't exhibit this behaviour this crash is
than one entry or exit signal in a row are useful. This is different most likely due to a bug in the virtual machine, something out of
for all other signal types where several in a row can serve one the scope of OpenTTD. Most likely this is due to Parallels Desktop
purpose or another. lacking support for RDTSC calls. The problem can be avoided by using
other VM-software, Wine, or running natively on OSX.
Station build date is incorrect [#4415]: OpenTTD hangs when started on 32 bits Windows [FS#4083]
The tile query tool will show the date of the last (re)construction Under some circumstances OpenTTD might hang for hours on the
at the station and not the date of the first construction. This is initialisation of the music driver. The exact circumstances are
due to compatability reasons with NewGRFs and the fact that it is unknown except that it is the "dmusic" music driver that has the
wrong to say that the station is built in a particular year when it problem and that the "win32" music driver does not.
was completely destroyed/rebuilt later on. As a result using the "win32" music driver will work around this
The tile query tool can be fixed by changing the "Build date" text issue.
to "Date at which the last (re)construction took place" but this is
deemed too specific and long for that window.
(Temporary) wrong colours when switching to full screen [#4511]: As the exact circumstances are unknown, and the obvious
On Windows it can happen that you temporarily see wrong colours configuration settings related to the music driver are at their
when switching to full screen OpenTTD, either by starting default we are not able to detect this failure, except when Windows'
OpenTTD in full screen mode, changing to full screen mode or by music initialisation function returns after several hours and then
ALT-TAB-ing into a full screen OpenTTD. This is caused by the there is no point in switching the music driver anymore.
fact that OpenTTD, by default, uses 8bpp paletted output. The The reason we still use the "win32" music driver as default are
wrong colours you are seeing is a temporary effect of the video described in the "Long delay between switching music/song" section
driver switching to 8bpp palette mode. of this document.
This issue can be worked around in two ways: Pre- and exit signals are not dragged [FS#4378]
a) Setting fullscreen_bpp to 32 Unlike all other signal types, the entry- and exit signals are not
b) Setting up the 32bpp-anim or 32bpp-optimized blitter dragged but instead normal signals are placed on subsequent track
sections. This is done on purpose as this is the usually more con-
venient solution. There are little to no occasions where more than
one entry or exit signal in a row are useful. This is different
for all other signal types where several in a row can serve one
purpose or another.
Can't run OpenTTD with the -d option from a MSYS console [#4587]: Station build date is incorrect [FS#4415]
The MSYS console does not allow OpenTTD to open an extra console for The tile query tool will show the date of the last (re)construction
debugging output. Compiling OpenTTD with the --enable-console at the station and not the date of the first construction. This is
configure option prevents this issue and allows the -d option to use due to compatability reasons with NewGRFs and the fact that it is
the MSYS console for its output. wrong to say that the station is built in a particular year when it
was completely destroyed/rebuilt later on.
The tile query tool can be fixed by changing the "Build date" text
to "Date at which the last (re)construction took place" but this is
deemed too specific and long for that window.
Unreadable characters for non-latin locales [#4607]: Can't change volume inside OpenTTD [FS#4416]
OpenTTD does not ship a non-latin font in its graphics files. As a Some backends do not provide a means to change the volume of sound
result OpenTTD needs to acquire the font from somewhere else. What effects or music. The mixing of music and sound is left to external
OpenTTD does is ask the operating system, or a system library, for libraries/the operating system we can't handle the volume control
the best font for a given language if the currently loaded font in OpenTTD. As a result you can't change the volume inside OpenTTD
does not provide all characters of the chosen translation. This for backends such as SDL; just use the volume control provided by
means that OpenTTD has no influence over the quality of the chosen your operating system.
font; it just does the best it can do.
If the text is unreadable there are several steps that you can take Can't run OpenTTD with the -d option from a MSYS console [FS#4587]
to improve this. The first step is finding a good font and configure The MSYS console does not allow OpenTTD to open an extra console for
this in the configuration file. See section 9.0 of README.md for debugging output. Compiling OpenTTD with the --enable-console
more information. You can also increase the font size to make the configure option prevents this issue and allows the -d option to use
characters bigger and possible better readable. the MSYS console for its output.
If the problem is with the clarity of the font you might want to Unreadable characters for non-latin locales [FS#4607]
enable anti-aliasing by setting the small_aa/medium_aa/large_aa OpenTTD does not ship a non-latin font in its graphics files. As a
settings to "true". However, anti-aliasing only works when a 32-bit result OpenTTD needs to acquire the font from somewhere else. What
blitter has been selected, e.g. blitter = "32bpp-anim", as with the OpenTTD does is ask the operating system, or a system library, for
8 bits blitter there are not enough colours to properly perform the the best font for a given language if the currently loaded font
anti-aliasing. does not provide all characters of the chosen translation. This
means that OpenTTD has no influence over the quality of the chosen
font; it just does the best it can do.
Train does not crash with itself [#4635]: If the text is unreadable there are several steps that you can take
When a train drives in a circle the front engine passes through to improve this. The first step is finding a good font and configure
wagons of the same train without crashing. This is intentional. this in the configuration file. See section 9.0 of readme.txt for
Signals are only aware of tracks, they do not consider the train more information. You can also increase the font size to make the
length and whether there would be enough room for a train in some characters bigger and possible better readable.
circle it might drive on. Also the path a train might take is not
necessarily known when passing a signal.
Checking all circumstances would take a lot of additional
computational power for signals, which is not considered worth
the effort, as it does not add anything to gameplay.
Nevertheless trains shall not crash in normal operation, so making
a train not crash with itself is the best solution for everyone.
Aircraft coming through wall in rotated airports [#4705]: If the problem is with the clarity of the font you might want to
With rotated airports, specifically hangars, you will see that the enable anti-aliasing by setting the small_aa/medium_aa/large_aa
aircraft will show a part through the back wall of the hangar. settings to "true". However, anti-aliasing only works when a 32 bits
This can be solved by only drawing a part of the plane when being blitter has been selected, e.g. blitter = "32bpp-anim", as with the
at the back of the hangar, however then with transparency turned on 8 bits blitter there are not enough colours to properly perform the
the aircraft would be shown partially which would be even weirder. anti-aliasing.
As such the current behaviour is deemed the least bad.
The same applies to overly long ships and their depots.
Vehicles not keeping their "maximum" speed [#4815]: (Temporary) wrong colours when switching to full screen [FS#4511]:
Vehicles that have not enough power to reach and maintain their On Windows it can happen that you temporarily see wrong colours
advertised maximum speed might be constantly jumping between two when switching to full screen OpenTTD, either by starting
speeds. This is due to the fact that speed and its calculations OpenTTD in full screen mode, changing to full screen mode or by
are done with integral numbers instead of floating point numbers. ALT-TAB-ing into a full screen OpenTTD. This is caused by the
As a result of this a vehicle will never reach its equilibrium fact that OpenTTD, by default, uses 8bpp paletted output. The
between the drag/friction and propulsion. So in effect it will be wrong colours you are seeing is a temporary effect of the video
in a vicious circle of speeding up and slowing down due to being driver switching to 8bpp palette mode.
just at the other side of the equilibrium.
Not speeding up when near the equilibrium will cause the vehicle to This issue can be worked around in two ways:
never come in the neighbourhood of the equilibrium and not slowing a) Setting fullscreen_bpp to 32
down when near the equilibrium will cause the vehicle to never slow b) Setting up the 32bpp-anim or 32bpp-optimized blitter
down towards the equilibrium once it has come down a hill.
It is possible to calculate whether the equilibrium will be passed, Train does not crash with itself [FS#4635]:
but then all acceleration calculations need to be done twice. When a train drives in a circle the front engine passes through
wagons of the same train without crashing. This is intentional.
Signals are only aware of tracks, they do not consider the train
length and whether there would be enough room for a train in some
circle it might drive on. Also the path a train might take is not
necessarily known when passing a signal.
Checking all circumstances would take a lot of additional computational
power for signals, which is not considered worth the effort, as
it does not add anything to gameplay.
Nevertheless trains shall not crash in normal operation, so making
a train not crash with itself is the best solution for everyone.
Settings not saved when OpenTTD crashes [#4846]: Aircraft coming through wall in rotated airports [FS#4705]:
The settings are not saved when OpenTTD crashes for several reasons. With rotated airports, specifically hangars, you will see that the
The most important is that the game state is broken and as such the aircraft will show a part through the back wall of the hangar.
settings might contain invalid values, or the settings have not even This can be solved by only drawing a part of the plane when being
been loaded yet. This would cause invalid or totally wrong settings at the back of the hangar, however then with transparency turned on
to be written to the configuration file. the aircraft would be shown partially which would be even weirder.
As such the current behaviour is deemed the least bad.
The same applies to overly long ships and their depots.
A solution to that would be saving the settings whenever one changes, Vehicles not keeping their "maximum" speed [FS#4815]:
however due to the way the configuration file is saved this requires Vehicles that have not enough power to reach and maintain their
a flush of the file to the disk and OpenTTD needs to wait till that advertised maximum speed might be constantly jumping between two
is finished. On some file system implementations this causes the speeds. This is due to the fact that speed and its calculations
flush of all 'write-dirty' caches, which can be a significant amount are done with integral numbers instead of floating point numbers.
of data to be written. This can further be aggravated by spinning As a result of this a vehicle will never reach its equilibrium
down disks to conserve power, in which case this disk needs to be between the drag/friction and propulsion. So in effect it will be
spun up first. This means that many seconds may pass before the in a vicious circle of speeding up and slowing down due to being
configuration file is actually written, and all that time OpenTTD just at the other side of the equilibrium.
will not be able to show any progress. Changing the way the
configuration file is saved is not an option as that leaves us more
vulnerable to corrupt configuration files.
Finally, crashes should not be happening. If they happen they should Not speeding up when near the equilibrium will cause the vehicle
be reported and fixed, so essentially fixing this is fixing the wrong to never come in the neighbourhood of the equilibrium and not
thing. If you really need the configuration changes to be saved, slowing down when near the equilibrium will cause the vehicle
and you need to run a version that crashes regularly, then you can to never slow down towards the equilibrium once it has come down
use the 'saveconfig' command in the console to save the settings. a hill.
Not all NewGRFs, AIs, game scripts are found [#4887]: It is possible to calculate whether the equilibrium will be
Under certain situations, where the path for the content within a passed, but then all acceleration calculations need to be done
tar file is the same as other content on the file system or in another twice.
tar file, it is possible that content is not found. A more thorough
explanation and solutions are described in section 4.4 of README.md.
Mouse cursor going missing with SDL [#4997]: Settings not saved when OpenTTD crashes [FS#4846]:
Under certain circumstances SDL does not notify OpenTTD of changes with The settings are not saved when OpenTTD crashes for several reasons.
respect to the mouse pointer, specifically whether the mouse pointer The most important is that the game state is broken and as such the
is within the bounds of OpenTTD or not. For example, if you "Alt-Tab" settings might contain invalid values, or the settings have not even
to another application the mouse cursor will still be shown in OpenTTD, been loaded yet. This would cause invalid or totally wrong settings
and when you move the mouse outside of the OpenTTD window so the cursor to be written to the configuration file.
gets hidden, open/move another application on top of the OpenTTD window
and then Alt-tab back into OpenTTD the cursor will not be shown.
We cannot fix this problem as SDL simply does not provide the required A solution to that would be saving the settings whenever one changes,
information in these corner cases. This is a bug in SDL and as such however due to the way the configuration file is saved this requires
there is little that we can do about it. a flush of the file to the disk and OpenTTD needs to wait till that
is finished. On some file system implementations this causes the
flush of all 'write-dirty' caches, which can be a significant amount
of data to be written. This can further be aggravated by spinning
down disks to conserve power, in which case this disk needs to be
spun up first. This means that many seconds may pass before the
configuration file is actually written, and all that time OpenTTD
will not be able to show any progress. Changing the way the
configuration file is saved is not an option as that leaves us more
vulnerable to corrupt configuration files.
Trains might not stop at platforms that are currently being changed [#5553]: Finally, crashes should not be happening. If they happen they should
If you add tiles to or remove tiles from a platform while a train is be reported and fixed, so essentially fixing this is fixing the
approaching to stop at the same platform, that train can miss the place wrong thing. If you really need the configuration changes to be
where it's supposed to stop and pass the station without stopping. saved, and you need to run a version that crashes regularly, then
This is caused by the fact that the train is considered to already you can use the 'saveconfig' command in the console to save the
have stopped if it's beyond its assigned stopping location. We can't settings.
let the train stop just anywhere in the station because then it would
never leave the station if you have the same station in the order
list multiple times in a row or if there is only one station
in theorder list (see #5684).
Inconsistent catchment areas [#5661]: Not all NewGRFs, AIs, game scripts are found [FS#4887]:
Due to performance decisions the catchment area for cargo accepted by a Under certain situations, where the path for the content within a
station for delivery to houses or industries differs from the catchment tar file is the same as other content on the file system or in another
area for cargo that is delivered to stations from houses or industries. tar file, it is possible that content is not found. A more thorough
explanation and solutions are described in section 4.4 of readme.txt.
Conceptually they work the same, but the effect in game differs. They Mouse cursor going missing with SDL [FS#4997]:
work by finding the closest destination "around" the source which is Under certain circumstances SDL does not notify OpenTTD of changes
within a certain distance. This distance depends on the type of station, with respect to the mouse pointer, specifically whether the mouse
e.g. road stops have a smaller catchment area than large airports. pointer is within the bounds of OpenTTD or not. For example, if you
In both cases the bounding box, the smallest rectangle that contains Alt-tab to another application the mouse cursor will still be shown
all tiles of something, is searched for the target of the cargo, in OpenTTD, and when you move the mouse outside of the OpenTTD
and then spiraling outwards finding the closest tile of the target. window so the cursor gets hidden, open/move another application on
top of the OpenTTD window and then Alt-tab back into OpenTTD the
cursor will not be shown.
In the case of a station with two tiles spread far apart with a house We cannot fix this problem as SDL simply does not provide the
that is within the station's bounding box, it would be possible that required information in these corner cases. This is a bug in SDL
the spiraling search from the house does not reach one of the station and as such there is little that we can do about it.
tiles before the search ends, i.e. all tiles within that distance
are searched. So the house does not deliver cargo to the station.
On the other hand, the station will deliver cargo because the house
falls within the bounding box, and thus search area.
It is possible to make these consistent, but then cargo from a house Inconsistent catchment areas [FS#5661]:
to a station needs to search up to 32 tiles around itself, i.e. 64 Due to performance decisions the catchment area for cargo accepted
by 64 tiles, to find all possible stations it could deliver to by a station for delivery to houses or industries differs from the
instead of 10 by 10 tiles (40 times more tiles). Alternatively the catchment area for cargo that is delivered to stations from houses
search from a station could be changed to use the actual tiles, but or industries.
that would require considering checking 10 by 10 tiles for each of
the tiles of a station, instead of just once.
Some houses and industries are not affected by transparency [#5817]: Conceptually they work the same, but the effect in game differs.
Some of the default houses and industries (f.e. the iron ore mine) are They work by finding the closest destination "around" the source
not affected by the transparency options. This is because the graphics which is within a certain distance. This distance depends on the
do not (completely) separate the ground from the building. type of station, e.g. road stops have a smaller catchment area than
This is a bug of the original graphics, and unfortunately cannot be large airports. In both cases the bounding box, the smallest
fixed with OpenGFX for the sake of maintaining compatibility with rectangle that contains all tiles of something, is searched for the
the original graphics. target of the cargo, and then spiraling outwards finding the closest
tile of the target.
Involuntary cargo exchange with cargodist via neutral station [#6114]: In the case of a station with two tiles spread far apart with a house
When two players serve a neutral station at an industry, a cross-company that is within the station's bounding box, it would be possible that
chain for cargo flow can and will be established which can only be the spiraling search from the house does not reach one of the station
interrupted if one of the players stops competing for the ressources of tiles before the search ends, i.e. all tiles within that distance
that industry. There is an easy fix for this: If you are loading at the are searched. So the house does not deliver cargo to the station. On
shared station make the order "no unload" and if you're unloading make the other hand, the station will deliver cargo because the house
it "no load". Cargodist will then figure out that it should not create falls within the bounding box, and thus search area.
such a route.
It is possible to make these consistent, but then cargo from a house
to a station needs to search up to 32 tiles around itself, i.e. 64
by 64 tiles, to find all possible stations it could deliver to
instead of 10 by 10 tiles (40 times more tiles). Alternatively the
search from a station could be changed to use the actual tiles, but
that would require considering checking 10 by 10 tiles for each of
the tiles of a station, instead of just once.
Trains might not stop at platforms that are currently being changed [FS#5553]:
If you add tiles to or remove tiles from a platform while a train is
approaching to stop at the same platform, that train can miss the place
where it's supposed to stop and pass the station without stopping. This
is caused by the fact that the train is considered to already have stopped
if it's beyond its assigned stopping location. We can't let the train stop
just anywhere in the station because then it would never leave the station
if you have the same station in the order list multiple times in a row or
if there is only one station in the order list (see FS#5684).
Some houses and industries are not affected by transparency [FS#5817]:
Some of the default houses and industries (f.e. the iron ore mine) are
not affected by the transparency options. This is because the graphics do
not (completely) separate the ground from the building.
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.

View File

@@ -11,21 +11,21 @@ palette = DOS
!! description STR_BASEGRAPHICS_DOS_DESCRIPTION !! description STR_BASEGRAPHICS_DOS_DESCRIPTION
[files] [files]
base = TRG1.GRF base = TRG1.GRF
logos = TRGI.GRF logos = TRGI.GRF
arctic = TRGC.GRF arctic = TRGC.GRF
tropical = TRGH.GRF tropical = TRGH.GRF
toyland = TRGT.GRF toyland = TRGT.GRF
extra = ORIG_EXTRA.GRF extra = OPENTTD.GRF
[md5s] [md5s]
TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
ORIG_EXTRA.GRF = OPENTTD.GRF =
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.
ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. OPENTTD.GRF = This file was part of your OpenTTD installation.

View File

@@ -1,76 +0,0 @@
; $Id$
;
; This represents the original music as on the Transport
; Tycoon Deluxe for DOS CD.
;
[metadata]
name = original_dos
shortname = TTDD
version = 1
!! description STR_BASEMUSIC_DOS_DESCRIPTION
[files]
theme = gm.cat
old_0 = gm.cat
old_1 = gm.cat
old_2 = gm.cat
old_3 = gm.cat
old_4 = gm.cat
old_5 = gm.cat
old_6 = gm.cat
old_7 = gm.cat
old_8 =
old_9 =
new_0 = gm.cat
new_1 = gm.cat
new_2 = gm.cat
new_3 = gm.cat
new_4 = gm.cat
new_5 = gm.cat
new_6 = gm.cat
new_7 =
new_8 =
new_9 =
ezy_0 = gm.cat
ezy_1 = gm.cat
ezy_2 = gm.cat
ezy_3 = gm.cat
ezy_4 = gm.cat
ezy_5 = gm.cat
ezy_6 =
ezy_7 =
ezy_8 =
ezy_9 =
[md5s]
gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb
[catindex]
theme = 0
old_0 = 1
old_1 = 8
old_2 = 2
old_3 = 9
old_4 = 14
old_5 = 15
old_6 = 19
old_7 = 13
new_0 = 6
new_1 = 11
new_2 = 10
new_3 = 17
new_4 = 21
new_5 = 18
new_6 = 5
ezy_0 = 12
ezy_1 = 7
ezy_2 = 16
ezy_3 = 3
ezy_4 = 20
ezy_5 = 4
[names]
; Names get read from the CAT file
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -11,21 +11,21 @@ palette = DOS
!! description STR_BASEGRAPHICS_DOS_DE_DESCRIPTION !! description STR_BASEGRAPHICS_DOS_DE_DESCRIPTION
[files] [files]
base = TRG1.GRF base = TRG1.GRF
logos = TRGI.GRF logos = TRGI.GRF
arctic = TRGC.GRF arctic = TRGC.GRF
tropical = TRGH.GRF tropical = TRGH.GRF
toyland = TRGT.GRF toyland = TRGT.GRF
extra = ORIG_EXTRA.GRF extra = OPENTTD.GRF
[md5s] [md5s]
TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
ORIG_EXTRA.GRF = OPENTTD.GRF =
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.
ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. OPENTTD.GRF = This file was part of your OpenTTD installation.

View File

@@ -1,71 +0,0 @@
; $Id$
;
; This represents the original music as on the Transport
; Tycoon (with World Editor) for DOS CD.
;
[metadata]
name = original_tto
shortname = TTOD
version = 1
!! description STR_BASEMUSIC_TTO_DESCRIPTION
[files]
theme = gm-tto.cat
old_0 = gm-tto.cat
old_1 = gm-tto.cat
old_2 = gm-tto.cat
old_3 = gm-tto.cat
old_4 = gm-tto.cat
old_5 = gm-tto.cat
old_6 = gm-tto.cat
old_7 = gm-tto.cat
old_8 =
old_9 =
new_0 = gm-tto.cat
new_1 = gm-tto.cat
new_2 = gm-tto.cat
new_3 = gm-tto.cat
new_4 = gm-tto.cat
new_5 = gm-tto.cat
new_6 = gm-tto.cat
new_7 = gm-tto.cat
new_8 =
new_9 =
ezy_0 =
ezy_1 =
ezy_2 =
ezy_3 =
ezy_4 =
ezy_5 =
ezy_6 =
ezy_7 =
ezy_8 =
ezy_9 =
[catindex]
theme = 0
old_0 = 1
old_1 = 6
old_2 = 2
old_3 = 7
old_4 = 11
old_5 = 12
old_6 = 15
old_7 = 10
new_0 = 4
new_1 = 5
new_2 = 9
new_3 = 8
new_4 = 13
new_5 = 16
new_6 = 14
new_7 = 3
[md5s]
gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e
[names]
; Names get read from the CAT file
[origin]
default = You can find it on your Transport Tycoon CD-ROM.

View File

@@ -11,21 +11,21 @@ palette = Windows
!! description STR_BASEGRAPHICS_WIN_DESCRIPTION !! description STR_BASEGRAPHICS_WIN_DESCRIPTION
[files] [files]
base = TRG1R.GRF base = TRG1R.GRF
logos = TRGIR.GRF logos = TRGIR.GRF
arctic = TRGCR.GRF arctic = TRGCR.GRF
tropical = TRGHR.GRF tropical = TRGHR.GRF
toyland = TRGTR.GRF toyland = TRGTR.GRF
extra = ORIG_EXTRA.GRF extra = OPENTTD.GRF
[md5s] [md5s]
TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358 TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
ORIG_EXTRA.GRF = OPENTTD.GRF =
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.
ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. OPENTTD.GRF = This file was part of your OpenTTD installation.

View File

@@ -90,17 +90,5 @@ GM_TT19.GM = Funk Central
GM_TT20.GM = Jammit GM_TT20.GM = Jammit
GM_TT21.GM = Movin' On GM_TT21.GM = Movin' On
; MIDI timecodes where the playback should attemp to start and stop short.
; This is to allow fixing undesired silences in original MIDI files.
; However not all music drivers may support this.
[timingtrim]
; Theme has two beats silence at the beginning which prevents clean looping.
GM_TT00.GM = 768:53760
; Can't Get There From Here from the Windows version has a long silence at the end,
; followed by a solo repeat. This isn't in the original DOS version music and is likely
; unintentional from the people who converted the music from the DOS version.
; Actual song ends after measure 152.
GM_TT10.GM = 0:235008
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -1,123 +0,0 @@
Option Explicit
' This file is part of OpenTTD.
' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim inputfile, outputfile, langpath, extra_grf
inputfile = WScript.Arguments(0)
outputfile = WScript.Arguments(1)
langpath = WScript.Arguments(2)
If WScript.Arguments.Length > 3 Then
extra_grf = WScript.Arguments(3)
End If
Function GetExtraGrfHash
Dim WSO, exe, line
Set WSO = WScript.CreateObject("WScript.Shell")
Set exe = WSO.Exec("certutil -hashfile " & extra_grf & " MD5")
Do Until exe.StdOut.AtEndOfStream
line = exe.StdOut.ReadLine
If Len(line) = 32 Then GetExtraGrfHash = line
Loop
Set WSO = Nothing
End Function
' Simple insertion sort, copied from translations.awk
Sub ISort(a)
Dim i, j, n, hold
n = UBound(a)
For i = 1 To n
j = i
hold = a(j)
Do While a(j - 1) > hold
j = j - 1
a(j + 1) = a(j)
If j = 0 Then Exit Do
Loop
a(j) = hold
Next
End Sub
Sub Lookup(ini_key, str_id, outfile)
Dim folder, file, line, p, lang, i
' Ensure only complete string matches
str_id = str_id & " "
Set folder = FSO.GetFolder(langpath)
Dim output()
ReDim output(folder.Files.Count)
For Each file In folder.Files
If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then
Dim f
Set f = FSO.OpenTextFile(file.Path)
Do Until f.atEndOfStream
line = f.ReadLine()
If InStr(1, line, "##isocode ") = 1 Then
p = Split(line)
lang = p(1)
ElseIf InStr(1, line, str_id) = 1 Then
p = Split(line, ":", 2)
If lang = "en_GB" Then
output(i) = ini_key & " = " & p(1)
Else
output(i) = ini_key & "." & lang & " = " & p(1)
End If
i = i + 1
End If
Loop
End If
Next
ReDim Preserve output(i - 1)
ISort output
For Each line In output
outfile.Write line & vbCrLf
Next
End Sub
Dim line, p
Dim infile
Set infile = FSO.OpenTextFile(inputfile)
Dim outfile
Set outfile = FSO.CreateTextFile(outputfile, True)
Do Until infile.atEndOfStream
line = infile.ReadLine()
If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then
p = Split(line, "=")
If Trim(p(1)) = "" Then
outfile.Write("ORIG_EXTRA.GRF = " & GetExtraGrfHash() & vbCrLf)
Else
outfile.Write(line & vbCrLf)
End If
ElseIf InStr(1, line, "!! ") = 1 Then
p = Split(line)
Lookup p(1), p(2), outfile
Else
outfile.Write(line & vbCrLf)
End If
Loop

View File

@@ -23,16 +23,3 @@
-1 sprites/airports.png 8bpp 82 88 64 31 -31 0 normal -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 162 88 64 31 -31 0 normal
-1 sprites/airports.png 8bpp 242 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Some files were not shown because too many files have changed in this diff Show More