From 68febec2a3e4d0361ce4367921bc52bd15268031 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Fri, 15 Feb 2019 02:26:04 +0300 Subject: [PATCH] Add all the missing files --HG-- branch : openttd --- .changelog | 4 + .dorpsgek.yml | 13 + .editorconfig | 9 + .github/ISSUE_TEMPLATE.md | 7 + .github/stale.yml | 34 + .gitignore | 52 + .hgignore | 38 +- .ottdrev | 1 + .release_date | 1 + .version | 1 + CONTRIBUTING.md | 181 + README.md | 833 ++ azure-pipelines-ci.yml | 64 + azure-pipelines-release-stable.yml | 10 + azure-pipelines-release.yml | 7 + azure-pipelines/changelog.sh | 20 + azure-pipelines/manifest.sh | 60 + azure-pipelines/templates/ci-git-rebase.yml | 9 + azure-pipelines/templates/ci-opengfx.yml | 8 + azure-pipelines/templates/linux-build.yml | 18 + .../templates/linux-claim-bundles.yml | 5 + azure-pipelines/templates/osx-build.yml | 5 + .../templates/osx-dependencies.yml | 11 + azure-pipelines/templates/release-bundles.yml | 19 + .../templates/release-fetch-source.yml | 20 + .../templates/release-manifest.yml | 20 + .../templates/release-prepare-source.yml | 35 + azure-pipelines/templates/release.yml | 172 + azure-pipelines/templates/windows-build.yml | 11 + .../templates/windows-dependencies.yml | 10 + .../templates/windows-dependency-nsis.yml | 26 + .../templates/windows-dependency-zip.yml | 5 + bin/ai/compat_1.5.nut | 17 + bin/ai/compat_1.6.nut | 17 + bin/ai/compat_1.7.nut | 17 + bin/ai/compat_1.8.nut | 17 + bin/ai/compat_1.9.nut | 8 + bin/ai/regression/empty.sav | Bin 0 -> 97731 bytes bin/ai/regression/run.vbs | 154 + bin/ai/regression/tst_regression/main.nut | 1921 ++++ bin/ai/regression/tst_regression/require.nut | 4 + bin/ai/regression/tst_regression/result.txt | 9335 +++++++++++++++++ bin/ai/regression/tst_stationlist/main.nut | 216 + bin/ai/regression/tst_stationlist/result.txt | 127 + bin/ai/regression/tst_stationlist/test.sav | Bin 0 -> 94348 bytes bin/baseset/orig_extra.grf | Bin 0 -> 328676 bytes bin/game/compat_1.5.nut | 17 + bin/game/compat_1.6.nut | 17 + bin/game/compat_1.7.nut | 17 + bin/game/compat_1.8.nut | 17 + bin/game/compat_1.9.nut | 8 + docs/Readme_Windows_MSVC.md | 71 + media/baseset/orig_dos.obm | 76 + media/baseset/orig_tto.obm | 71 + media/baseset/translations.vbs | 123 + media/extra_grf/airports_orig_extra.nfo | 12 + media/extra_grf/canals_extra.nfo | 101 + media/extra_grf/chars_orig_extra.nfo | 249 + media/extra_grf/openttdgui_group_livery.png | Bin 0 -> 1426 bytes media/extra_grf/orig_extra.nfo | 87 + projects/basesets_vs140.vcxproj | 99 + projects/basesets_vs140.vcxproj.filters | 40 + projects/basesets_vs140.vcxproj.filters.in | 11 + projects/basesets_vs140.vcxproj.in | 40 + projects/basesets_vs141.vcxproj | 99 + projects/basesets_vs141.vcxproj.filters | 40 + projects/basesets_vs141.vcxproj.filters.in | 11 + projects/basesets_vs141.vcxproj.in | 40 + projects/basesets_vs142.vcxproj | 99 + projects/basesets_vs142.vcxproj.filters | 40 + projects/basesets_vs142.vcxproj.filters.in | 11 + projects/basesets_vs142.vcxproj.in | 40 + projects/gen-kdev4.sh | 203 + projects/generate_vs141.vcxproj | 39 + projects/generate_vs142.vcxproj | 40 + projects/langs_vs141.vcxproj | 390 + projects/langs_vs141.vcxproj.filters | 176 + projects/langs_vs141.vcxproj.filters.in | 12 + projects/langs_vs141.vcxproj.in | 61 + projects/langs_vs142.vcxproj | 390 + projects/langs_vs142.vcxproj.filters | 176 + projects/langs_vs142.vcxproj.filters.in | 12 + projects/langs_vs142.vcxproj.in | 61 + projects/openttd_vs141.sln | 103 + projects/openttd_vs141.vcxproj | 1370 +++ projects/openttd_vs141.vcxproj.filters | 3101 ++++++ projects/openttd_vs141.vcxproj.filters.in | 13 + projects/openttd_vs141.vcxproj.in | 374 + projects/openttd_vs142.sln | 105 + projects/openttd_vs142.vcxproj | 1370 +++ projects/openttd_vs142.vcxproj.filters | 3101 ++++++ projects/openttd_vs142.vcxproj.filters.in | 13 + projects/openttd_vs142.vcxproj.in | 374 + projects/os_versions.manifest | 17 + projects/regression.bat | 6 + projects/regression_vs140.vcxproj | 41 + projects/regression_vs141.vcxproj | 41 + projects/regression_vs142.vcxproj | 41 + projects/settings_vs141.vcxproj | 60 + projects/settings_vs141.vcxproj.filters | 35 + projects/settings_vs141.vcxproj.filters.in | 15 + projects/settings_vs141.vcxproj.in | 54 + projects/settings_vs142.vcxproj | 60 + projects/settings_vs142.vcxproj.filters | 35 + projects/settings_vs142.vcxproj.filters.in | 15 + projects/settings_vs142.vcxproj.in | 54 + projects/settingsgen_vs141.vcxproj | 83 + projects/settingsgen_vs141.vcxproj.filters | 32 + projects/settingsgen_vs142.vcxproj | 84 + projects/settingsgen_vs142.vcxproj.filters | 32 + projects/strgen_vs141.vcxproj | 95 + projects/strgen_vs141.vcxproj.filters | 35 + projects/strgen_vs142.vcxproj | 96 + projects/strgen_vs142.vcxproj.filters | 35 + projects/version_vs141.vcxproj | 42 + projects/version_vs142.vcxproj | 42 + 116 files changed, 27506 insertions(+), 6 deletions(-) create mode 100644 .changelog create mode 100644 .dorpsgek.yml create mode 100644 .editorconfig create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/stale.yml create mode 100644 .gitignore create mode 100644 .ottdrev create mode 100644 .release_date create mode 100644 .version create mode 100644 CONTRIBUTING.md create mode 100644 README.md create mode 100644 azure-pipelines-ci.yml create mode 100644 azure-pipelines-release-stable.yml create mode 100644 azure-pipelines-release.yml create mode 100755 azure-pipelines/changelog.sh create mode 100755 azure-pipelines/manifest.sh create mode 100644 azure-pipelines/templates/ci-git-rebase.yml create mode 100644 azure-pipelines/templates/ci-opengfx.yml create mode 100644 azure-pipelines/templates/linux-build.yml create mode 100644 azure-pipelines/templates/linux-claim-bundles.yml create mode 100644 azure-pipelines/templates/osx-build.yml create mode 100644 azure-pipelines/templates/osx-dependencies.yml create mode 100644 azure-pipelines/templates/release-bundles.yml create mode 100644 azure-pipelines/templates/release-fetch-source.yml create mode 100644 azure-pipelines/templates/release-manifest.yml create mode 100644 azure-pipelines/templates/release-prepare-source.yml create mode 100644 azure-pipelines/templates/release.yml create mode 100644 azure-pipelines/templates/windows-build.yml create mode 100644 azure-pipelines/templates/windows-dependencies.yml create mode 100644 azure-pipelines/templates/windows-dependency-nsis.yml create mode 100644 azure-pipelines/templates/windows-dependency-zip.yml create mode 100644 bin/ai/compat_1.5.nut create mode 100644 bin/ai/compat_1.6.nut create mode 100644 bin/ai/compat_1.7.nut create mode 100644 bin/ai/compat_1.8.nut create mode 100644 bin/ai/compat_1.9.nut create mode 100644 bin/ai/regression/empty.sav create mode 100644 bin/ai/regression/run.vbs create mode 100644 bin/ai/regression/tst_regression/main.nut create mode 100644 bin/ai/regression/tst_regression/require.nut create mode 100644 bin/ai/regression/tst_regression/result.txt create mode 100644 bin/ai/regression/tst_stationlist/main.nut create mode 100644 bin/ai/regression/tst_stationlist/result.txt create mode 100644 bin/ai/regression/tst_stationlist/test.sav create mode 100644 bin/baseset/orig_extra.grf create mode 100644 bin/game/compat_1.5.nut create mode 100644 bin/game/compat_1.6.nut create mode 100644 bin/game/compat_1.7.nut create mode 100644 bin/game/compat_1.8.nut create mode 100644 bin/game/compat_1.9.nut create mode 100644 docs/Readme_Windows_MSVC.md create mode 100644 media/baseset/orig_dos.obm create mode 100644 media/baseset/orig_tto.obm create mode 100644 media/baseset/translations.vbs create mode 100644 media/extra_grf/airports_orig_extra.nfo create mode 100644 media/extra_grf/canals_extra.nfo create mode 100644 media/extra_grf/chars_orig_extra.nfo create mode 100644 media/extra_grf/openttdgui_group_livery.png create mode 100644 media/extra_grf/orig_extra.nfo create mode 100644 projects/basesets_vs140.vcxproj create mode 100644 projects/basesets_vs140.vcxproj.filters create mode 100644 projects/basesets_vs140.vcxproj.filters.in create mode 100644 projects/basesets_vs140.vcxproj.in create mode 100644 projects/basesets_vs141.vcxproj create mode 100644 projects/basesets_vs141.vcxproj.filters create mode 100644 projects/basesets_vs141.vcxproj.filters.in create mode 100644 projects/basesets_vs141.vcxproj.in create mode 100644 projects/basesets_vs142.vcxproj create mode 100644 projects/basesets_vs142.vcxproj.filters create mode 100644 projects/basesets_vs142.vcxproj.filters.in create mode 100644 projects/basesets_vs142.vcxproj.in create mode 100755 projects/gen-kdev4.sh create mode 100644 projects/generate_vs141.vcxproj create mode 100644 projects/generate_vs142.vcxproj create mode 100644 projects/langs_vs141.vcxproj create mode 100644 projects/langs_vs141.vcxproj.filters create mode 100644 projects/langs_vs141.vcxproj.filters.in create mode 100644 projects/langs_vs141.vcxproj.in create mode 100644 projects/langs_vs142.vcxproj create mode 100644 projects/langs_vs142.vcxproj.filters create mode 100644 projects/langs_vs142.vcxproj.filters.in create mode 100644 projects/langs_vs142.vcxproj.in create mode 100644 projects/openttd_vs141.sln create mode 100644 projects/openttd_vs141.vcxproj create mode 100644 projects/openttd_vs141.vcxproj.filters create mode 100644 projects/openttd_vs141.vcxproj.filters.in create mode 100644 projects/openttd_vs141.vcxproj.in create mode 100644 projects/openttd_vs142.sln create mode 100644 projects/openttd_vs142.vcxproj create mode 100644 projects/openttd_vs142.vcxproj.filters create mode 100644 projects/openttd_vs142.vcxproj.filters.in create mode 100644 projects/openttd_vs142.vcxproj.in create mode 100644 projects/os_versions.manifest create mode 100644 projects/regression.bat create mode 100644 projects/regression_vs140.vcxproj create mode 100644 projects/regression_vs141.vcxproj create mode 100644 projects/regression_vs142.vcxproj create mode 100644 projects/settings_vs141.vcxproj create mode 100644 projects/settings_vs141.vcxproj.filters create mode 100644 projects/settings_vs141.vcxproj.filters.in create mode 100644 projects/settings_vs141.vcxproj.in create mode 100644 projects/settings_vs142.vcxproj create mode 100644 projects/settings_vs142.vcxproj.filters create mode 100644 projects/settings_vs142.vcxproj.filters.in create mode 100644 projects/settings_vs142.vcxproj.in create mode 100644 projects/settingsgen_vs141.vcxproj create mode 100644 projects/settingsgen_vs141.vcxproj.filters create mode 100644 projects/settingsgen_vs142.vcxproj create mode 100644 projects/settingsgen_vs142.vcxproj.filters create mode 100644 projects/strgen_vs141.vcxproj create mode 100644 projects/strgen_vs141.vcxproj.filters create mode 100644 projects/strgen_vs142.vcxproj create mode 100644 projects/strgen_vs142.vcxproj.filters create mode 100644 projects/version_vs141.vcxproj create mode 100644 projects/version_vs142.vcxproj diff --git a/.changelog b/.changelog new file mode 100644 index 0000000000..d03f74779a --- /dev/null +++ b/.changelog @@ -0,0 +1,4 @@ +1.9.0-beta2 (2018-02-09) +------------------------------------------------------------------------ +- Fix: Non-Windows builds did not get correct git hash + diff --git a/.dorpsgek.yml b/.dorpsgek.yml new file mode 100644 index 0000000000..a8b976f5c7 --- /dev/null +++ b/.dorpsgek.yml @@ -0,0 +1,13 @@ +notifications: + push: + irc: + - openttd + - openttd.notice + pull-request: + irc: + - openttd + - openttd.notice + issue: + irc: + - openttd + - openttd.notice diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..787a1c76c1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{c,cpp,h,hpp}] +indent_style = tab +charset = utf-8 diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..ba365bfe4f --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,7 @@ +## Version of OpenTTD + +## Expected result + +## Actual result + +## Steps to reproduce diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000000..57d42d6921 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,34 @@ +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. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..e30aabe37c --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +bin/* +!bin/ai +bin/ai/* +!bin/ai/compat*.nut +!bin/ai/regression +!bin/data +bin/baseset/* +!bin/baseset/openttd.grf +!bin/baseset/opntitle.dat +!bin/baseset/orig_extra.grf +!bin/baseset/orig_*.obg +!bin/baseset/orig_*.obs +!bin/baseset/no_sound.obs +!bin/baseset/no_music.obm +!bin/baseset/orig_*.obm +!bin/scripts +bin/scripts/* +!bin/scripts/*.example +!bin/scripts/readme.txt + +*.aps +bundle/* +bundles/* +docs/aidocs/* +docs/gamedocs/* +docs/source/* +.kdev4 +.kdev4/* +*.kdev4 +media/openttd.desktop +media/openttd.desktop.install +objs/* +projects/.vs +projects/Debug +projects/Release +projects/*.ncb +projects/*.suo +projects/*.sdf +projects/*.opensdf +projects/*.vcproj.*.user +projects/*.vcxproj.user +projects/*.VC.db +projects/*.VC.opendb +src/rev.cpp +src/os/windows/ottdres.rc + +/Makefile* +!/Makefile.msvc +/config.* +!/config.lib +!*.in +*.tmp diff --git a/.hgignore b/.hgignore index b6abbe76f4..03d99c6f29 100644 --- a/.hgignore +++ b/.hgignore @@ -1,8 +1,34 @@ syntax: glob -objs -bin -Makefile* -config.* + +.svn +*.aps +bin/baseset/openttd.32.bmp +bin/lang/* +bin/openttd* +bin/*.cfg +bundle/* +bundles/* +config.cache* +config.log +config.pwd +docs/aidocs/* +docs/gamedocs/* +docs/source/* +.kdev4 +.kdev4/* +*.kdev4 +Makefile +Makefile.am +Makefile.bundle media/openttd.desktop -recordings/ -stats*/* +media/openttd.desktop.install +objs/* +projects/.vs +projects/*.ncb +projects/*.suo +projects/*.sdf +projects/*.opensdf +projects/*.vcproj.*.user +projects/*.vcxproj.user +src/rev.cpp +src/os/windows/ottdres.rc diff --git a/.ottdrev b/.ottdrev new file mode 100644 index 0000000000..e310f6c37d --- /dev/null +++ b/.ottdrev @@ -0,0 +1 @@ +1.9.0-beta2 20190209 0 6e211908588ab5272336d0d2db3bbb4020f7004f diff --git a/.release_date b/.release_date new file mode 100644 index 0000000000..04507e1af3 --- /dev/null +++ b/.release_date @@ -0,0 +1 @@ +2019-02-09 21:41 UTC diff --git a/.version b/.version new file mode 100644 index 0000000000..d0897e8548 --- /dev/null +++ b/.version @@ -0,0 +1 @@ +1.9.0-beta2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..2c7ce528c9 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,181 @@ + +# Contributing to OpenTTD + +Looking to contribute something to OpenTTD? **Here's how you can help.** + +Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved. + +Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue or assessing patches and features. + + +## Using the issue tracker + +The [issue tracker](https://github.com/OpenTTD/OpenTTD/issues) is the preferred channel for [bug reports](#bug-reports), but please respect the following restrictions: + +* Please **do not** use the issue tracker for help playing or using OpenTTD. Please try [irc](https://wiki.openttd.org/IRC_channel), or the [forums](https://www.tt-forums.net/) + +* Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. + +* Please **do not** post comments consisting solely of "+1" or ":thumbsup:". +Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) instead. We reserve the right to delete comments which violate this rule. + +* Please **do not** open issues or pull requests regarding add-on content in NewGRF, GameScripts, AIs, etc. These are created by third-parties. Please try [irc](https://wiki.openttd.org/IRC_channel) or the [forums](https://www.tt-forums.net/) to discuss these. + +## Bug reports + +A bug is a _demonstrable problem_ that is caused by the code in the repository. +Good bug reports are extremely helpful, so thanks! + +Guidelines for bug reports: + +0. Please don't report issues with games where you changed NewGRFs. + +1. Please don't report issues with modified versions of OpenTTD (patchpacks and similar). + +2. **Use the GitHub issue search** --- check if the issue has already been +reported. + +3. **Check if the issue has been fixed** --- try to reproduce it using the latest `nightly` build of OpenTTD, available from https://www.openttd.org + +4. **Isolate the problem** --- ideally create reproduceable steps with an attached savegame and screenshots. Try to use few or no NewGRFs, AIs etc if possible. + +A good bug report shouldn't leave others needing to chase you up for more information. +Please try to be as detailed as possible in your report. + +* What is your environment? +* What steps will reproduce the issue? +* Which operating system(s) experience the problem? +* What would you expect to be the outcome? + +All these details will help people to fix any potential bugs. + +Example: + +> Short and descriptive example bug report title +> +> A summary of the issue and the OS environment in which it occurs. If +> suitable, include the steps required to reproduce the bug. +> +> 1. This is the first step +> 2. This is the second step +> 3. Further steps, etc. +> +> Attached savegame +> Attached screenshots showing the issue +> Crashlogs if the bug causes a crash +> +> Any other information you want to share that is relevant to the issue being +> reported. This might include the lines of code that you have identified as +> causing the bug, and potential solutions (and your opinions on their +> merits). + +## Feature requests + +Before opening a feature request, please take a moment to find out whether your idea fits with the scope and aims of the project. + +It's up to *you* to make a strong case to convince the project's developers of the merits of this feature. + +Please provide as much detail and context as possible. This means don't request for a solution, but describe the problem you see and how/why you think it should be fixed. + +For feature request we have a strict policy. + +Keeping issues around with "a good idea" or "not really a bug but we should maybe fix it" turns out to have the reversed effect: nobody looks at it anymore. + +Although we really appreciate feedback and ideas, we will close feature requests that we don't expect to fulfill in the next year. + +Many of those ideas etc do have a place on the [forums](https://www.tt-forums.net); and if enough people like it, someone will stand up and make it. + +It's usually best discuss in [irc](https://wiki.openttd.org/IRC_channel) before opening a feature request or working on a large feature in a fork. +Discussion in irc can take time, but it can be productive and avoid disappointment :) + +## Pull requests + +Good pull requests—patches, improvements, new features—are a fantastic help. +They should remain focused in scope and avoid containing unrelated commits. + +**Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project. + +Please adhere to the [coding guidelines](#code-guidelines) used throughout the project (indentation, accurate comments, etc.) and any other requirements (such as test coverage). + +Adhering to the following process is the best way to get your work included in the project: + +1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: + +```bash +git clone https://github.com//OpenTTD.git openttd +git clone https://github.com/OpenTTD/OpenTTD-git-hooks.git openttd_hooks +cd openttd +git remote add upstream https://github.com/OpenTTD/OpenTTD.git +cd .git/hooks +ln -s ../../../openttd_hooks/hooks/* . +``` + +2. If you cloned a while ago, get the latest changes from upstream: + +```bash +git fetch upstream +``` + +3. Create a new topic branch (off the main project development branch) to +contain your feature, change, or fix: + +```bash +git checkout upstream/master -b +``` + +4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/Commit_style#Commit_message) or your code is unlikely to be merged into the main project. +Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. + +5. Locally rebase the upstream development branch into your topic branch: + +```bash +git fetch upstream +git rebase upstream/master +``` + +6. Push your topic branch up to your fork the first time: + +```bash +git push --set-upstream origin +``` + +And any time after that: + +```bash +git push +``` + +7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. + +**IMPORTANT**: By submitting a patch, you agree to the [License](#license). + +### 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 <anonymous@openttd.org>" 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). diff --git a/README.md b/README.md new file mode 100644 index 0000000000..7c842a1f86 --- /dev/null +++ b/README.md @@ -0,0 +1,833 @@ +# 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=`' as +parameter or by typing '`debug_level desync=`' in OpenTTD's internal +console. +The desync debug levels are: + +- 0: nothing. +- 1: dumping of commands to 'commands-out.log'. +- 2: same as 1 plus checking vehicle caches and dumping that too. +- 3: same as 2 plus monthly saves in autosave. +- 4 and higher: same as 3 + +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\\My Documents\OpenTTD` (2000, XP) + - `C:\Users\\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. +- *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 [[=]]`' 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! diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml new file mode 100644 index 0000000000..d624f8ce73 --- /dev/null +++ b/azure-pipelines-ci.yml @@ -0,0 +1,64 @@ +trigger: +- master +pr: +- master + +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' + + 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' diff --git a/azure-pipelines-release-stable.yml b/azure-pipelines-release-stable.yml new file mode 100644 index 0000000000..ee756ca9ee --- /dev/null +++ b/azure-pipelines-release-stable.yml @@ -0,0 +1,10 @@ +trigger: + branches: + include: + - refs/tags/* +pr: none + +jobs: +- template: azure-pipelines/templates/release.yml + parameters: + IsStableRelease: true diff --git a/azure-pipelines-release.yml b/azure-pipelines-release.yml new file mode 100644 index 0000000000..79e2da77ac --- /dev/null +++ b/azure-pipelines-release.yml @@ -0,0 +1,7 @@ +trigger: none +pr: none + +jobs: +- template: azure-pipelines/templates/release.yml + parameters: + IsStableRelease: false diff --git a/azure-pipelines/changelog.sh b/azure-pipelines/changelog.sh new file mode 100755 index 0000000000..71bc56fac7 --- /dev/null +++ b/azure-pipelines/changelog.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +tag=$(git describe --tags 2>/dev/null) + +# If we are a tag, show the part of the changelog that matches the tag. +# In case of a stable, also show all betas and RCs. +if [ -n "$tag" ]; then + grep="." + if [ "$(echo $tag | grep '-')" = "" ]; then + grep='^[0-9]\.[0-9]\.[0-9][^-]' + fi + 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 diff --git a/azure-pipelines/manifest.sh b/azure-pipelines/manifest.sh new file mode 100755 index 0000000000..d8f4f9aac9 --- /dev/null +++ b/azure-pipelines/manifest.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +set -ex + +if [ -z "$1" ]; then + echo "Usage: $0 " + 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 diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml new file mode 100644 index 0000000000..924302fee3 --- /dev/null +++ b/azure-pipelines/templates/ci-git-rebase.yml @@ -0,0 +1,9 @@ +steps: +# Rebase to origin/master for every PR. This means users don't have to +# rebase every time master changes. As long as the PR applies cleanly, we +# will validate it. +- script: | + git config user.email 'info@openttd.org' + git config user.name 'OpenTTD CI' + git rebase origin/master + displayName: 'Rebase to master' diff --git a/azure-pipelines/templates/ci-opengfx.yml b/azure-pipelines/templates/ci-opengfx.yml new file mode 100644 index 0000000000..098f0d2a69 --- /dev/null +++ b/azure-pipelines/templates/ci-opengfx.yml @@ -0,0 +1,8 @@ +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' diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml new file mode 100644 index 0000000000..0e4fffefb0 --- /dev/null +++ b/azure-pipelines/templates/linux-build.yml @@ -0,0 +1,18 @@ +parameters: + Image: '' + Tag: '' + ContainerCommand: '' + +steps: +- task: Docker@1 + ${{ if eq(parameters.Image, 'compile-farm') }}: + displayName: 'Build' + ${{ if eq(parameters.Image, 'compile-farm-ci') }}: + displayName: 'Build and test' + inputs: + command: 'Run an image' + imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }} + volumes: '$(Build.SourcesDirectory):$(Build.SourcesDirectory)' + workingDirectory: '$(Build.SourcesDirectory)' + containerCommand: ${{ parameters.ContainerCommand }} + runInBackground: false diff --git a/azure-pipelines/templates/linux-claim-bundles.yml b/azure-pipelines/templates/linux-claim-bundles.yml new file mode 100644 index 0000000000..4434dfcc7d --- /dev/null +++ b/azure-pipelines/templates/linux-claim-bundles.yml @@ -0,0 +1,5 @@ +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' diff --git a/azure-pipelines/templates/osx-build.yml b/azure-pipelines/templates/osx-build.yml new file mode 100644 index 0000000000..ae1724125d --- /dev/null +++ b/azure-pipelines/templates/osx-build.yml @@ -0,0 +1,5 @@ +steps: +- script: './configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-static' + displayName: 'Configure' +- script: 'make -j2' + displayName: 'Build' diff --git a/azure-pipelines/templates/osx-dependencies.yml b/azure-pipelines/templates/osx-dependencies.yml new file mode 100644 index 0000000000..c4b723c58b --- /dev/null +++ b/azure-pipelines/templates/osx-dependencies.yml @@ -0,0 +1,11 @@ +steps: +- script: | + set -ex + HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng + # 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 + displayName: 'Install dependencies' diff --git a/azure-pipelines/templates/release-bundles.yml b/azure-pipelines/templates/release-bundles.yml new file mode 100644 index 0000000000..9c5a48b966 --- /dev/null +++ b/azure-pipelines/templates/release-bundles.yml @@ -0,0 +1,19 @@ +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 diff --git a/azure-pipelines/templates/release-fetch-source.yml b/azure-pipelines/templates/release-fetch-source.yml new file mode 100644 index 0000000000..8b43983067 --- /dev/null +++ b/azure-pipelines/templates/release-fetch-source.yml @@ -0,0 +1,20 @@ +# 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' diff --git a/azure-pipelines/templates/release-manifest.yml b/azure-pipelines/templates/release-manifest.yml new file mode 100644 index 0000000000..9e8b486d5c --- /dev/null +++ b/azure-pipelines/templates/release-manifest.yml @@ -0,0 +1,20 @@ +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' diff --git a/azure-pipelines/templates/release-prepare-source.yml b/azure-pipelines/templates/release-prepare-source.yml new file mode 100644 index 0000000000..b20bf0b350 --- /dev/null +++ b/azure-pipelines/templates/release-prepare-source.yml @@ -0,0 +1,35 @@ +# 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' diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml new file mode 100644 index 0000000000..86f2be40ed --- /dev/null +++ b/azure-pipelines/templates/release.yml @@ -0,0 +1,172 @@ +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 + + 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 diff --git a/azure-pipelines/templates/windows-build.yml b/azure-pipelines/templates/windows-build.yml new file mode 100644 index 0000000000..5e12f2243f --- /dev/null +++ b/azure-pipelines/templates/windows-build.yml @@ -0,0 +1,11 @@ +parameters: + BuildPlatform: '' + +steps: +- task: VSBuild@1 + displayName: 'Build' + inputs: + solution: 'projects/openttd_vs141.sln' + platform: ${{ parameters.BuildPlatform }} + configuration: Release + maximumCpuCount: true diff --git a/azure-pipelines/templates/windows-dependencies.yml b/azure-pipelines/templates/windows-dependencies.yml new file mode 100644 index 0000000000..c6fc6e407c --- /dev/null +++ b/azure-pipelines/templates/windows-dependencies.yml @@ -0,0 +1,10 @@ +steps: +- bash: | + set -ex + curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip + unzip windows-dependencies.zip + rm -f windows-dependencies.zip + displayName: 'Download dependencies' + workingDirectory: $(Build.ArtifactStagingDirectory) +- script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install + displayName: 'Install dependencies' diff --git a/azure-pipelines/templates/windows-dependency-nsis.yml b/azure-pipelines/templates/windows-dependency-nsis.yml new file mode 100644 index 0000000000..9b54a3ac5f --- /dev/null +++ b/azure-pipelines/templates/windows-dependency-nsis.yml @@ -0,0 +1,26 @@ +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 }}) diff --git a/azure-pipelines/templates/windows-dependency-zip.yml b/azure-pipelines/templates/windows-dependency-zip.yml new file mode 100644 index 0000000000..e2ae06dbe7 --- /dev/null +++ b/azure-pipelines/templates/windows-dependency-zip.yml @@ -0,0 +1,5 @@ +steps: +- bash: | + set -ex + choco install zip + displayName: 'Install zip' diff --git a/bin/ai/compat_1.5.nut b/bin/ai/compat_1.5.nut new file mode 100644 index 0000000000..681a708bee --- /dev/null +++ b/bin/ai/compat_1.5.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/ai/compat_1.6.nut b/bin/ai/compat_1.6.nut new file mode 100644 index 0000000000..5242821d1d --- /dev/null +++ b/bin/ai/compat_1.6.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut new file mode 100644 index 0000000000..93884e6637 --- /dev/null +++ b/bin/ai/compat_1.7.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut new file mode 100644 index 0000000000..f3fa1bc0a6 --- /dev/null +++ b/bin/ai/compat_1.8.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/ai/compat_1.9.nut b/bin/ai/compat_1.9.nut new file mode 100644 index 0000000000..fe985b90d0 --- /dev/null +++ b/bin/ai/compat_1.9.nut @@ -0,0 +1,8 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/bin/ai/regression/empty.sav b/bin/ai/regression/empty.sav new file mode 100644 index 0000000000000000000000000000000000000000..cf97052c2e174d8203e2e190d3f98a2b067d7f3c GIT binary patch literal 97731 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%0D1=*@2G|9yDFKk7 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 I$J>4Z0A$aBVE_OC literal 0 HcmV?d00001 diff --git a/bin/ai/regression/run.vbs b/bin/ai/regression/run.vbs new file mode 100644 index 0000000000..930562ec68 --- /dev/null +++ b/bin/ai/regression/run.vbs @@ -0,0 +1,154 @@ +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 . + +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 diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut new file mode 100644 index 0000000000..8b92b6f881 --- /dev/null +++ b/bin/ai/regression/tst_regression/main.nut @@ -0,0 +1,1921 @@ +/* $Id$ */ + +class Regression extends AIController { + function Start(); +}; + + + +function Regression::TestInit() +{ + print(""); + print("--TestInit--"); + print(" Ops: " + this.GetOpsTillSuspend()); + print(" TickTest: " + this.GetTick()); + this.Sleep(1); + print(" TickTest: " + this.GetTick()); + print(" Ops: " + this.GetOpsTillSuspend()); + print(" SetCommandDelay: " + AIController.SetCommandDelay(1)); + print(" IsValid(vehicle.plane_speed): " + AIGameSettings.IsValid("vehicle.plane_speed")); + print(" vehicle.plane_speed: " + AIGameSettings.GetValue("vehicle.plane_speed")); + require("require.nut"); + print(" min(6, 3): " + min(6, 3)); + print(" min(3, 6): " + min(3, 6)); + print(" max(6, 3): " + max(6, 3)); + print(" max(3, 6): " + max(3, 6)); + + print(" AIList Consistency Tests"); + print(""); + print(" Value Descending"); + local list = AIList(); + list.AddItem( 5, 10); + list.AddItem(10, 10); + list.AddItem(15, 20); + list.AddItem(20, 20); + list.AddItem(25, 30); + list.AddItem(30, 30); + list.AddItem(35, 40); + list.AddItem(40, 40); + + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.RemoveItem(i - 10); + list.RemoveItem(i - 5); + list.RemoveItem(i); + print(" " + i); + } + + list.AddItem(10, 10); + list.AddItem(20, 20); + list.AddItem(30, 30); + list.AddItem(40, 40); + + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.SetValue(i, 2); + print(" " + i); + } + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i); + } + + list = AIList(); + list.Sort(AIList.SORT_BY_VALUE, AIList.SORT_ASCENDING); + print(""); + print(" Value Ascending"); + list.AddItem( 5, 10); + list.AddItem(10, 10); + list.AddItem(15, 20); + list.AddItem(20, 20); + list.AddItem(25, 30); + list.AddItem(30, 30); + list.AddItem(35, 40); + list.AddItem(40, 40); + + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.RemoveItem(i + 10); + list.RemoveItem(i + 5); + list.RemoveItem(i); + print(" " + i); + } + + list.AddItem(10, 10); + list.AddItem(20, 20); + list.AddItem(30, 30); + list.AddItem(40, 40); + + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.SetValue(i, 50); + print(" " + i); + } + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i); + } + + list = AIList(); + list.Sort(AIList.SORT_BY_ITEM, AIList.SORT_DESCENDING); + print(""); + print(" Item Descending"); + list.AddItem( 5, 10); + list.AddItem(10, 10); + list.AddItem(15, 20); + list.AddItem(20, 20); + list.AddItem(25, 30); + list.AddItem(30, 30); + list.AddItem(35, 40); + list.AddItem(40, 40); + + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.RemoveItem(i - 10); + list.RemoveItem(i - 5); + list.RemoveItem(i); + print(" " + i); + } + + list.AddItem(10, 10); + list.AddItem(20, 20); + list.AddItem(30, 30); + list.AddItem(40, 40); + + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.SetValue(i, 2); + print(" " + i); + } + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i); + } + + list = AIList(); + list.Sort(AIList.SORT_BY_ITEM, AIList.SORT_ASCENDING); + print(""); + print(" Item Ascending"); + list.AddItem( 5, 10); + list.AddItem(10, 10); + list.AddItem(15, 20); + list.AddItem(20, 20); + list.AddItem(25, 30); + list.AddItem(30, 30); + list.AddItem(35, 40); + list.AddItem(40, 40); + + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.RemoveItem(i + 10); + list.RemoveItem(i + 5); + list.RemoveItem(i); + print(" " + i); + } + + list.AddItem(10, 10); + list.AddItem(20, 20); + list.AddItem(30, 30); + list.AddItem(40, 40); + + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + list.SetValue(i, 50); + print(" " + i); + } + print(""); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i); + } + + list.Clear(); + foreach (idx, val in list) { + print(" " + idx); + } + + print(" Ops: " + this.GetOpsTillSuspend()); +} + +function Regression::Std() +{ + print(""); + print("--Std--"); + print(" abs(-21): " + abs(-21)); + print(" abs( 21): " + abs(21)); +} + +function Regression::Base() +{ + print(""); + print("--AIBase--"); + print(" Rand(): " + AIBase.Rand()); + print(" Rand(): " + AIBase.Rand()); + print(" Rand(): " + AIBase.Rand()); + print(" RandRange(0): " + AIBase.RandRange(0)); + print(" RandRange(0): " + AIBase.RandRange(0)); + print(" RandRange(0): " + AIBase.RandRange(0)); + print(" RandRange(1): " + AIBase.RandRange(1)); + print(" RandRange(1): " + AIBase.RandRange(1)); + print(" RandRange(1): " + AIBase.RandRange(1)); + print(" RandRange(2): " + AIBase.RandRange(2)); + print(" RandRange(2): " + AIBase.RandRange(2)); + print(" RandRange(2): " + AIBase.RandRange(2)); + print(" RandRange(1000000): " + AIBase.RandRange(1000000)); // 32 bit tests + print(" RandRange(1000000): " + AIBase.RandRange(1000000)); + print(" RandRange(1000000): " + AIBase.RandRange(1000000)); + print(" Chance(1, 2): " + AIBase.Chance(1, 2)); + print(" Chance(1, 2): " + AIBase.Chance(1, 2)); + print(" Chance(1, 2): " + AIBase.Chance(1, 2)); + + AIRoad.SetCurrentRoadType(AIRoad.ROADTYPE_ROAD); +} + +function Regression::Airport() +{ + print(""); + print("--AIAirport--"); + + print(" IsHangarTile(): " + AIAirport.IsHangarTile(32116)); + print(" IsAirportTile(): " + AIAirport.IsAirportTile(32116)); + print(" GetHangarOfAirport(): " + AIAirport.GetHangarOfAirport(32116)); + print(" GetAirportType(): " + AIAirport.GetAirportType(32116)); + + for (local i = -1; i < 10; i++) { + print(" IsAirportInformationAvailable(" + i + "): " + AIAirport.IsAirportInformationAvailable(i)); + print(" IsValidAirportType(" + i + "): " + AIAirport.IsValidAirportType(i)); + print(" GetAirportWidth(" + i + "): " + AIAirport.GetAirportWidth(i)); + print(" GetAirportHeight(" + i + "): " + AIAirport.GetAirportHeight(i)); + print(" GetAirportCoverageRadius(" + i + "): " + AIAirport.GetAirportCoverageRadius(i)); + } + + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" GetPrice(): " + AIAirport.GetPrice(0)); + print(" BuildAirport(): " + AIAirport.BuildAirport(32116, 0, AIStation.STATION_JOIN_ADJACENT)); + print(" IsHangarTile(): " + AIAirport.IsHangarTile(32116)); + print(" IsAirportTile(): " + AIAirport.IsAirportTile(32116)); + print(" GetAirportType(): " + AIAirport.GetAirportType(32119)); + print(" GetHangarOfAirport(): " + AIAirport.GetHangarOfAirport(32116)); + print(" IsHangarTile(): " + AIAirport.IsHangarTile(32119)); + print(" IsAirportTile(): " + AIAirport.IsAirportTile(32119)); + print(" GetAirportType(): " + AIAirport.GetAirportType(32119)); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + + print(" RemoveAirport(): " + AIAirport.RemoveAirport(32118)); + print(" IsHangarTile(): " + AIAirport.IsHangarTile(32119)); + print(" IsAirportTile(): " + AIAirport.IsAirportTile(32119)); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" BuildAirport(): " + AIAirport.BuildAirport(32116, 0, AIStation.STATION_JOIN_ADJACENT)); +} + +function Regression::Bridge() +{ + local j = 0; + + print(""); + print("--Bridge--"); + for (local i = -1; i < 14; i++) { + if (AIBridge.IsValidBridge(i)) j++; + print(" Bridge " + i); + print(" IsValidBridge(): " + AIBridge.IsValidBridge(i)); + print(" GetName():"); + 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(" GetPrice(): " + AIBridge.GetPrice(i, 5)); + print(" GetMaxLength(): " + AIBridge.GetMaxLength(i)); + print(" GetMinLength(): " + AIBridge.GetMinLength(i)); + } + print(" Valid Bridges: " + j); + + print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160)); + print(" GetBridgeID(): " + AIBridge.GetBridgeID(33160)); + print(" RemoveBridge(): " + AIBridge.RemoveBridge(33155)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" GetOtherBridgeEnd(): " + AIBridge.GetOtherBridgeEnd(33160)); + print(" BuildBridge(): " + AIBridge.BuildBridge(AIVehicle.VT_ROAD, 5, 33160, 33155)); + print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160)); + print(" GetBridgeID(): " + AIBridge.GetBridgeID(33160)); + print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33155)); + print(" GetBridgeID(): " + AIBridge.GetBridgeID(33155)); + print(" GetOtherBridgeEnd(): " + AIBridge.GetOtherBridgeEnd(33160)); + print(" BuildBridge(): " + AIBridge.BuildBridge(AIVehicle.VT_ROAD, 5, 33160, 33155)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" RemoveBridge(): " + AIBridge.RemoveBridge(33155)); + print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160)); +} + +function Regression::BridgeList() +{ + local list = AIBridgeList(); + + print(""); + print("--BridgeList--"); + print(" Count(): " + list.Count()); + list.Valuate(AIBridge.GetMaxSpeed); + print(" MaxSpeed ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIBridge.GetPrice, 5); + print(" Price ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIBridge.GetMaxLength); + print(" MaxLength ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIBridge.GetMinLength); + print(" MinLength ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AIBridgeList_Length(14); + + print(""); + print("--BridgeList_Length--"); + print(" Count(): " + list.Count()); + list.Valuate(AIBridge.GetMaxSpeed); + print(" MaxSpeed ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIBridge.GetPrice, 14); + print(" Price ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } +} + +function Regression::Cargo() +{ + print(""); + print("--AICargo--"); + for (local i = -1; i < 15; i++) { + print(" Cargo " + i); + print(" IsValidCargo(): " + AICargo.IsValidCargo(i)); + print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i)+ "'"); + print(" IsFreight(): " + AICargo.IsFreight(i)); + print(" HasCargoClass(): " + AICargo.HasCargoClass(i, AICargo.CC_PASSENGERS)); + print(" GetTownEffect(): " + AICargo.GetTownEffect(i)); + print(" GetCargoIncome(0, 0): " + AICargo.GetCargoIncome(i, 0, 0)); + print(" GetCargoIncome(10, 10): " + AICargo.GetCargoIncome(i, 10, 10)); + print(" GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(i, 100, 10)); + print(" GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(i, 10, 100)); + print(" GetRoadVehicleTypeForCargo(): " + AIRoad.GetRoadVehicleTypeForCargo(i)); + } +} + +function Regression::CargoList() +{ + local list = AICargoList(); + + print(""); + print("--CargoList--"); + print(" Count(): " + list.Count()); + list.Valuate(AICargo.IsFreight); + print(" IsFreight ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AICargo.GetCargoIncome, 100, 100); + print(" CargoIncomes(100, 100) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AICargoList_IndustryAccepting(8); + print(""); + print("--CargoList_IndustryAccepting--"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i); + } + + list = AICargoList_IndustryProducing(4); + print(""); + print("--CargoList_IndustryProducing--"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i); + } +} + +function Regression::Company() +{ + print(""); + print("--Company--"); + + /* Test AIXXXMode() in scopes */ + { + local test = AITestMode(); + print(" SetName(): " + AICompany.SetName("Regression")); + print(" SetName(): " + AICompany.SetName("Regression")); + { + local exec = AIExecMode(); + print(" SetName(): " + AICompany.SetName("Regression")); + print(" SetName(): " + AICompany.SetName("Regression")); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + } + } + + print(" GetName(): " + AICompany.GetName(AICompany.COMPANY_SELF)); + print(" GetPresidentName(): " + AICompany.GetPresidentName(AICompany.COMPANY_SELF)); + print(" SetPresidentName(): " + AICompany.SetPresidentName("Regression AI")); + print(" GetPresidentName(): " + AICompany.GetPresidentName(AICompany.COMPANY_SELF)); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" GetName(): " + AICompany.GetName(240)); + print(" GetLoanAmount(): " + AICompany.GetLoanAmount()); + print(" GetMaxLoanAmount(): " + AICompany.GetMaxLoanAmount()); + print(" GetLoanInterval(): " + AICompany.GetLoanInterval()); + print(" SetLoanAmount(1): " + AICompany.SetLoanAmount(1)); + print(" SetLoanAmount(100): " + AICompany.SetLoanAmount(100)); + print(" SetLoanAmount(10000): " + AICompany.SetLoanAmount(10000)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" GetLoanAmount(): " + AICompany.GetLoanAmount()); + print(" SetMinimumLoanAmount(31337): " + AICompany.SetMinimumLoanAmount(31337)); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" GetLoanAmount(): " + AICompany.GetLoanAmount()); + print(" SetLoanAmount(10000): " + AICompany.SetLoanAmount(AICompany.GetMaxLoanAmount())); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" GetLoanAmount(): " + AICompany.GetLoanAmount()); + print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF)); + print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(127, 129))); + print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF)); + print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 129))); + print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF)); + print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 128))); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); + print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); + print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); + print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); + print(" SetAutoRenewStatus(false); " + AICompany.SetAutoRenewStatus(false)); + print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); + print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); + print(" SetAutoRenewMonths(6); " + AICompany.SetAutoRenewMonths(6)); + print(" GetAutoRenewMoney(); " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMoney(200000); " + AICompany.SetAutoRenewMoney(200000)); + print(" GetAutoRenewMoney(); " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMoney(200000); " + AICompany.SetAutoRenewMoney(200000)); + print(" SetAutoRenewMoney(100000); " + AICompany.SetAutoRenewMoney(100000)); + for (local i = -1; i <= AICompany.EARLIEST_QUARTER; i++) { + print(" Quarter: " + i); + print(" GetQuarterlyIncome(); " + AICompany.GetQuarterlyIncome(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyExpenses(); " + AICompany.GetQuarterlyExpenses(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyCargoDelivered(); " + AICompany.GetQuarterlyCargoDelivered(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyPerformanceRating(); " + AICompany.GetQuarterlyPerformanceRating(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyCompanyValue(); " + AICompany.GetQuarterlyCompanyValue(AICompany.COMPANY_SELF, i)); + } +} + +function Regression::Engine() +{ + local j = 0; + + print(""); + print("--Engine--"); + for (local i = -1; i < 257; i++) { + if (AIEngine.IsValidEngine(i)) j++; + print(" Engine " + i); + print(" IsValidEngine(): " + AIEngine.IsValidEngine(i)); + print(" GetName(): " + AIEngine.GetName(i)); + print(" GetCargoType(): " + AIEngine.GetCargoType(i)); + print(" CanRefitCargo(): " + AIEngine.CanRefitCargo(i, 1)); + print(" GetCapacity(): " + AIEngine.GetCapacity(i)); + print(" GetReliability(): " + AIEngine.GetReliability(i)); + print(" GetMaxSpeed(): " + AIEngine.GetMaxSpeed(i)); + print(" GetPrice(): " + AIEngine.GetPrice(i)); + print(" GetMaxAge(): " + AIEngine.GetMaxAge(i)); + print(" GetRunningCost(): " + AIEngine.GetRunningCost(i)); + print(" GetPower(): " + AIEngine.GetPower(i)); + print(" GetWeight(): " + AIEngine.GetWeight(i)); + print(" GetMaxTractiveEffort(): " + AIEngine.GetMaxTractiveEffort(i)); + print(" GetVehicleType(): " + AIEngine.GetVehicleType(i)); + print(" GetRailType(): " + AIEngine.GetRailType(i)); + print(" GetRoadType(): " + AIEngine.GetRoadType(i)); + print(" GetPlaneType(): " + AIEngine.GetPlaneType(i)); + } + print(" Valid Engines: " + j); +} + +function Regression::EngineList() +{ + local list = AIEngineList(AIVehicle.VT_ROAD); + + print(""); + print("--EngineList--"); + print(" Count(): " + list.Count()); + list.Valuate(AIEngine.GetCargoType); + print(" CargoType ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIEngine.GetCapacity); + print(" Capacity ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIEngine.GetReliability); + print(" Reliability ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIEngine.GetMaxSpeed); + print(" MaxSpeed ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIEngine.GetPrice); + print(" Price ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } +} + +function Regression::Prices() +{ + print(""); + print("--Prices--"); + print(" -Rail-"); + print(" 0,BT_TRACK: " + AIRail.GetBuildCost(0, AIRail.BT_TRACK)); + print(" 0,BT_SIGNAL: " + AIRail.GetBuildCost(0, AIRail.BT_SIGNAL)); + print(" 0,BT_DEPOT: " + AIRail.GetBuildCost(0, AIRail.BT_DEPOT)); + print(" 0,BT_STATION: " + AIRail.GetBuildCost(0, AIRail.BT_STATION)); + print(" 0,BT_WAYPOINT: " + AIRail.GetBuildCost(0, AIRail.BT_WAYPOINT)); + print(" 1,BT_TRACK: " + AIRail.GetBuildCost(1, AIRail.BT_TRACK)); + print(" 1,BT_SIGNAL: " + AIRail.GetBuildCost(1, AIRail.BT_SIGNAL)); + print(" 1,BT_DEPOT: " + AIRail.GetBuildCost(1, AIRail.BT_DEPOT)); + print(" 1,BT_STATION: " + AIRail.GetBuildCost(1, AIRail.BT_STATION)); + print(" 1,BT_WAYPOINT: " + AIRail.GetBuildCost(1, AIRail.BT_WAYPOINT)); + print(" -Road-"); + print(" ROADTYPE_ROAD,BT_ROAD: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_ROAD, AIRoad.BT_ROAD)); + print(" ROADTYPE_ROAD,BT_DEPOT: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_ROAD, AIRoad.BT_DEPOT)); + print(" ROADTYPE_ROAD,BT_BUS_STOP: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_ROAD, AIRoad.BT_BUS_STOP)); + print(" ROADTYPE_ROAD,BT_TRUCK_STOP: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_ROAD, AIRoad.BT_TRUCK_STOP)); + print(" ROADTYPE_TRAM,BT_ROAD: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_TRAM, AIRoad.BT_ROAD)); + print(" ROADTYPE_TRAM,BT_DEPOT: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_TRAM, AIRoad.BT_DEPOT)); + print(" ROADTYPE_TRAM,BT_BUS_STOP: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_TRAM, AIRoad.BT_BUS_STOP)); + print(" ROADTYPE_TRAM,BT_TRUCK_STOP: " + AIRoad.GetBuildCost(AIRoad.ROADTYPE_TRAM, AIRoad.BT_TRUCK_STOP)); + print(" -Water-"); + print(" BT_DOCK: " + AIMarine.GetBuildCost(AIMarine.BT_DOCK)); + print(" BT_DEPOT: " + AIMarine.GetBuildCost(AIMarine.BT_DEPOT)); + print(" BT_BUOY: " + AIMarine.GetBuildCost(AIMarine.BT_BUOY)); + print(" -Tile-"); + print(" BT_FOUNDATION: " + AITile.GetBuildCost(AITile.BT_FOUNDATION)); + print(" BT_TERRAFORM: " + AITile.GetBuildCost(AITile.BT_TERRAFORM)); + print(" BT_BUILD_TREES: " + AITile.GetBuildCost(AITile.BT_BUILD_TREES)); + print(" BT_CLEAR_GRASS: " + AITile.GetBuildCost(AITile.BT_CLEAR_GRASS)); + print(" BT_CLEAR_ROUGH: " + AITile.GetBuildCost(AITile.BT_CLEAR_ROUGH)); + print(" BT_CLEAR_ROCKY: " + AITile.GetBuildCost(AITile.BT_CLEAR_ROCKY)); + print(" BT_CLEAR_FIELDS: " + AITile.GetBuildCost(AITile.BT_CLEAR_FIELDS)); + print(" BT_CLEAR_HOUSE: " + AITile.GetBuildCost(AITile.BT_CLEAR_HOUSE)); +} + +function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; } +function estimate_callback(tile, direction, goals, self) { return goals[0] - tile; } +function neighbours_callback(path, cur_tile, self) { return [[cur_tile + 1, 1]]; } +function check_direction_callback(tile, existing_direction, new_direction, self) { return false; } + +function Regression::Group() +{ + print (""); + print("--Group--"); + print(" SetAutoReplace(): " + AIGroup.SetAutoReplace(AIGroup.GROUP_ALL, 116, 117)); + print(" GetEngineReplacement(): " + AIGroup.GetEngineReplacement(AIGroup.GROUP_ALL, 116)); + print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116)); + print(" AIRoad.BuildRoadDepot(): " + AIRoad.BuildRoadDepot(10000, 10001)); + local vehicle = AIVehicle.BuildVehicle(10000, 116); + print(" AIVehicle.BuildVehicle(): " + vehicle); + print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116)); + local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD); + print(" CreateGroup(): " + group); + print(" MoveVehicle(): " + AIGroup.MoveVehicle(group, vehicle)); + print(" GetNumEngines(): " + AIGroup.GetNumEngines(group, 116)); + print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116)); + print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_DEFAULT, 116)); + print(" GetName(): " + AIGroup.GetName(0)); + print(" GetName(): " + AIGroup.GetName(1)); + print(" AIVehicle.SellVehicle(): " + AIVehicle.SellVehicle(vehicle)); + print(" AITile.DemolishTile(): " + AITile.DemolishTile(10000)); + print(" HasWagonRemoval(): " + AIGroup.HasWagonRemoval()); + print(" EnableWagonRemoval(): " + AIGroup.EnableWagonRemoval(true)); + print(" HasWagonRemoval(): " + AIGroup.HasWagonRemoval()); + print(" EnableWagonRemoval(): " + AIGroup.EnableWagonRemoval(false)); + print(" EnableWagonRemoval(): " + AIGroup.EnableWagonRemoval(false)); + print(" HasWagonRemoval(): " + AIGroup.HasWagonRemoval()); +} + +function Regression::Industry() +{ + local j = 0; + + print(""); + print("--Industry--"); + print(" GetIndustryCount(): " + AIIndustry.GetIndustryCount()); + local list = AIIndustryList(); + list.Sort(AIList.SORT_BY_ITEM, AIList.SORT_ASCENDING); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + if (AIIndustry.IsValidIndustry(i)) j++; + print(" Industry " + i); + print(" IsValidIndustry(): " + AIIndustry.IsValidIndustry(i)); + print(" GetName(): " + AIIndustry.GetName(i)); + print(" GetLocation(): " + AIIndustry.GetLocation(i)); + print(" IsCargoAccepted(): " + AIIndustry.IsCargoAccepted(i, 1)); + + local cargo_list = AICargoList(); + for (local j = cargo_list.Begin(); !cargo_list.IsEnd(); j = cargo_list.Next()) { + if (AIIndustry.IsCargoAccepted(i, j) || AIIndustry.GetLastMonthProduction(i,j) >= 0) { + print(" GetLastMonthProduction(): " + AIIndustry.GetLastMonthProduction(i, j)); + print(" GetLastMonthTransported(): " + AIIndustry.GetLastMonthTransported(i, j)); + print(" GetStockpiledCargo(): " + AIIndustry.GetStockpiledCargo(i, j)); + } + } + } + print(" Valid Industries: " + j); + print(" GetIndustryCount(): " + AIIndustry.GetIndustryCount()); + print(" GetIndustryID(): " + AIIndustry.GetIndustryID(19694)); + print(" GetIndustryID(): " + AIIndustry.GetIndustryID(19695)); +} + +function Regression::IndustryList() +{ + local list = AIIndustryList(); + + print(""); + print("--IndustryList--"); + print(" Count(): " + list.Count()); + list.Valuate(AIIndustry.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIIndustry.GetDistanceManhattanToTile, 30000); + print(" DistanceManhattanToTile(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIIndustry.GetDistanceSquareToTile, 30000); + print(" DistanceSquareToTile(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIIndustry.GetAmountOfStationsAround); + print(" GetAmountOfStationsAround(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIIndustry.IsCargoAccepted, 1); + print(" CargoAccepted(1) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AIIndustryList_CargoAccepting(1); + print("--IndustryList_CargoAccepting--"); + print(" Count(): " + list.Count()); + list.Valuate(AIIndustry.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AIIndustryList_CargoProducing(1); + print("--IndustryList_CargoProducing--"); + print(" Count(): " + list.Count()); + list.Valuate(AIIndustry.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } +} + +function Regression::IndustryTypeList() +{ + local list = AIIndustryTypeList(); + + print(""); + print("--IndustryTypeList--"); + print(" Count(): " + list.Count()); + list.Valuate(AIIndustry.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" Id: " + i); + print(" IsRawIndustry(): " + AIIndustryType.IsRawIndustry(i)); + print(" ProductionCanIncrease(): " + AIIndustryType.ProductionCanIncrease(i)); + print(" GetConstructionCost(): " + AIIndustryType.GetConstructionCost(i)); + print(" GetName(): " + AIIndustryType.GetName(i)); + print(" CanBuildIndustry(): " + AIIndustryType.CanBuildIndustry(i)); + print(" CanProspectIndustry(): " + AIIndustryType.CanProspectIndustry(i)); + print(" IsBuiltOnWater(): " + AIIndustryType.IsBuiltOnWater(i)); + print(" HasHeliport(): " + AIIndustryType.HasHeliport(i)); + print(" HasDock(): " + AIIndustryType.HasDock(i)); + } +} + +function CustomValuator(list_id) +{ + return list_id * 4343; +} + +function Regression::List() +{ + local list = AIList(); + + print(""); + print("--List--"); + + print(" IsEmpty(): " + list.IsEmpty()); + list.AddItem(1, 1); + list.AddItem(2, 2); + for (local i = 1000; i < 1100; i++) { + list.AddItem(i, i); + } + list.RemoveItem(1050); + list.RemoveItem(1150); + list.SetValue(1051, 12); + print(" Count(): " + list.Count()); + print(" HasItem(1050): " + list.HasItem(1050)); + print(" HasItem(1051): " + list.HasItem(1051)); + print(" IsEmpty(): " + list.IsEmpty()); + list.Sort(AIList.SORT_BY_ITEM, AIList.SORT_ASCENDING); + print(" List Dump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(CustomValuator); + print(" Custom ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(function (a) { return a * 42; }); + print(" Custom ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIBase.RandItem); + print(" Randomize ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.KeepTop(10); + print(" KeepTop(10):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.KeepBottom(8); + print(" KeepBottom(8):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.RemoveBottom(2); + print(" RemoveBottom(2):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.RemoveTop(2); + print(" RemoveTop(2):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + local list2 = AIList(); + list2.AddItem(1003, 0); + list2.AddItem(1004, 0); + list.RemoveList(list2); + print(" RemoveList({1003, 1004}):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list2.AddItem(1005, 0); + list.KeepList(list2); + print(" KeepList({1003, 1004, 1005}):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list2.Clear(); + for (local i = 4000; i < 4003; i++) { + list2.AddItem(i, i * 2); + } + list2.AddItem(1005, 1005); + list.AddList(list2); + print(" AddList({1005, 4000, 4001, 4002}):"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list[4000] = 50; + list[4006] = 12; + + print(" foreach():"); + foreach (idx, val in list) { + print(" " + idx + " => " + val); + } + print(" []:"); + print(" 4000 => " + list[4000]); + + list.Clear(); + print(" IsEmpty(): " + list.IsEmpty()); + + for (local i = 0; i < 10; i++) { + list.AddItem(i, 5 + i / 2); + } + + local it = list.Begin(); + print(" " + it + " => " + list.GetValue(it) + " (" + !list.IsEnd() + ")"); + list.Sort(list.SORT_BY_VALUE, list.SORT_ASCENDING); + it = list.Next(); + print(" " + it + " => " + list.GetValue(it) + " (" + !list.IsEnd() + ")"); + + it = list.Begin(); + print(" " + it + " => " + list.GetValue(it) + " (" + !list.IsEnd() + ")"); + + list.SetValue(it + 1, -5); + it = list.Next(); + print(" " + it + " => " + list.GetValue(it) + " (" + !list.IsEnd() + ")"); + + list.RemoveValue(list.GetValue(it) + 1); + it = list.Next(); + print(" " + it + " => " + list.GetValue(it) + " (" + !list.IsEnd() + ")"); + + list.RemoveAboveValue(list.GetValue(it)); + it = list.Next(); + print(" " + it + " => " + list.GetValue(it) + " (" + !list.IsEnd() + ")"); + + while (!list.IsEnd()) { + it = list.Next(); + print(" " + it + " => " + list.GetValue(it)); + } +} + +function Regression::Map() +{ + print(""); + print("--Map--"); + print(" GetMapSize(): " + AIMap.GetMapSize()); + print(" GetMapSizeX(): " + AIMap.GetMapSizeX()); + print(" GetMapSizeY(): " + AIMap.GetMapSizeY()); + print(" GetTileX(123): " + AIMap.GetTileX(123)); + print(" GetTileY(123): " + AIMap.GetTileY(123)); + print(" GetTileIndex(): " + AIMap.GetTileIndex(123, 0)); + print(" GetTileIndex(): " + AIMap.GetTileIndex(0, 123)); + print(" GetTileIndex(): " + AIMap.GetTileIndex(0, 0)); + print(" GetTileIndex(): " + AIMap.GetTileIndex(-1, -1)); + print(" GetTileIndex(): " + AIMap.GetTileIndex(10000, 10000)); + print(" IsValidTile(123): " + AIMap.IsValidTile(123)); + print(" GetTileX(124): " + AIMap.GetTileX(124)); + print(" GetTileY(124): " + AIMap.GetTileY(124)); + print(" IsValidTile(124): " + AIMap.IsValidTile(124)); + print(" IsValidTile(0): " + AIMap.IsValidTile(0)); + print(" IsValidTile(-1): " + AIMap.IsValidTile(-1)); + print(" IsValidTile(): " + AIMap.IsValidTile(AIMap.GetMapSize())); + print(" IsValidTile(): " + AIMap.IsValidTile(AIMap.GetMapSize() - AIMap.GetMapSizeX() - 2)); + print(" DemolishTile(): " + AITile.DemolishTile(19592)); + print(" DemolishTile(): " + AITile.DemolishTile(19335)); + print(" Distance"); + print(" DistanceManhattan(): " + AIMap.DistanceManhattan(1, 10000)); + print(" DistanceMax(): " + AIMap.DistanceMax(1, 10000)); + print(" DistanceSquare(): " + AIMap.DistanceSquare(1, 10000)); + print(" DistanceFromEdge(): " + AIMap.DistanceFromEdge(10000)); +} + +function Regression::Marine() +{ + print(""); + print("--AIMarine--"); + + print(" IsWaterDepotTile(): " + AIMarine.IsWaterDepotTile(32116)); + print(" IsDockTile(): " + AIMarine.IsDockTile(32116)); + print(" IsBuoyTile(): " + AIMarine.IsBuoyTile(32116)); + print(" IsLockTile(): " + AIMarine.IsLockTile(32116)); + print(" IsCanalTile(): " + AIMarine.IsCanalTile(32116)); + + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + print(" BuildWaterDepot(): " + AIMarine.BuildWaterDepot(28479, 28478)); + print(" BuildDock(): " + AIMarine.BuildDock(29253, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildBuoy(): " + AIMarine.BuildBuoy(28481)); + print(" BuildLock(): " + AIMarine.BuildLock(28487)); + print(" HasTransportType(): " + AITile.HasTransportType(32127, AITile.TRANSPORT_WATER)); + print(" BuildCanal(): " + AIMarine.BuildCanal(32127)); + print(" HasTransportType(): " + AITile.HasTransportType(32127, AITile.TRANSPORT_WATER)); + print(" IsWaterDepotTile(): " + AIMarine.IsWaterDepotTile(28479)); + print(" IsDockTile(): " + AIMarine.IsDockTile(29253)); + print(" IsBuoyTile(): " + AIMarine.IsBuoyTile(28481)); + print(" IsLockTile(): " + AIMarine.IsLockTile(28487)); + print(" IsCanalTile(): " + AIMarine.IsCanalTile(32127)); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + + local list = AIWaypointList(AIWaypoint.WAYPOINT_BUOY); + print(""); + print("--AIWaypointList(BUOY)--"); + print(" Count(): " + list.Count()); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + AIWaypoint.GetLocation(i)); + } + print(" HasWaypointType:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + AIWaypoint.HasWaypointType(i, AIWaypoint.WAYPOINT_RAIL) + " " + AIWaypoint.HasWaypointType(i, AIWaypoint.WAYPOINT_BUOY) + " " + AIWaypoint.HasWaypointType(i, AIWaypoint.WAYPOINT_ANY)); + } + print(""); + + print(" RemoveWaterDepot(): " + AIMarine.RemoveWaterDepot(28479)); + print(" RemoveDock(): " + AIMarine.RemoveDock(29253)); + print(" RemoveBuoy(): " + AIMarine.RemoveBuoy(28481)); + print(" RemoveLock(): " + AIMarine.RemoveLock(28487)); + print(" RemoveCanal(): " + AIMarine.RemoveCanal(32127)); + print(" IsWaterDepotTile(): " + AIMarine.IsWaterDepotTile(28479)); + print(" IsDockTile(): " + AIMarine.IsDockTile(29253)); + print(" IsBuoyTile(): " + AIMarine.IsBuoyTile(28481)); + print(" IsLockTile(): " + AIMarine.IsLockTile(28487)); + print(" IsCanalTile(): " + AIMarine.IsCanalTile(32127)); + print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF)); + + print(" BuildWaterDepot(): " + AIMarine.BuildWaterDepot(28479, 28480)); + print(" BuildDock(): " + AIMarine.BuildDock(29253, AIStation.STATION_JOIN_ADJACENT)); +} + +function Regression::Order() +{ + print(""); + print("--Order--"); + print(" GetOrderCount(): " + AIOrder.GetOrderCount(12)); + print(" GetOrderDestination(): " + AIOrder.GetOrderDestination(12, 1)); + print(" AreOrderFlagsValid(): " + AIOrder.AreOrderFlagsValid(33416, AIOrder.OF_TRANSFER)); + print(" AreOrderFlagsValid(): " + AIOrder.AreOrderFlagsValid(33416, AIOrder.OF_TRANSFER | AIOrder.OF_UNLOAD)); + print(" AreOrderFlagsValid(): " + AIOrder.AreOrderFlagsValid(33416, AIOrder.OF_TRANSFER | AIOrder.OF_FULL_LOAD)); + print(" AreOrderFlagsValid(): " + AIOrder.AreOrderFlagsValid(33417, AIOrder.OF_SERVICE_IF_NEEDED)); + print(" AreOrderFlagsValid(): " + AIOrder.AreOrderFlagsValid(33417, AIOrder.OF_STOP_IN_DEPOT)); + print(" AreOrderFlagsValid(): " + AIOrder.AreOrderFlagsValid(0, AIOrder.OF_SERVICE_IF_NEEDED | AIOrder.OF_GOTO_NEAREST_DEPOT)); + print(" IsValidConditionalOrder(): " + AIOrder.IsValidConditionalOrder(AIOrder.OC_LOAD_PERCENTAGE, AIOrder.CF_EQUALS)); + print(" IsValidConditionalOrder(): " + AIOrder.IsValidConditionalOrder(AIOrder.OC_RELIABILITY, AIOrder.CF_IS_TRUE)); + print(" IsValidConditionalOrder(): " + AIOrder.IsValidConditionalOrder(AIOrder.OC_REQUIRES_SERVICE, AIOrder.CF_IS_FALSE)); + print(" IsValidConditionalOrder(): " + AIOrder.IsValidConditionalOrder(AIOrder.OC_AGE, AIOrder.CF_INVALID)); + print(" IsValidVehicleOrder(): " + AIOrder.IsValidVehicleOrder(12, 1)); + print(" IsGotoStationOrder(): " + AIOrder.IsGotoStationOrder(12, 1)); + print(" IsGotoDepotOrder(): " + AIOrder.IsGotoDepotOrder(12, 1)); + print(" IsGotoWaypointOrder(): " + AIOrder.IsGotoWaypointOrder(12, 1)); + print(" IsConditionalOrder(): " + AIOrder.IsConditionalOrder(12, 1)); + print(" IsCurrentOrderPartOfOrderList(): " + AIOrder.IsCurrentOrderPartOfOrderList(12)); + print(" GetOrderFlags(): " + AIOrder.GetOrderFlags(12, 1)); + print(" AppendOrder(): " + AIOrder.AppendOrder(12, 33416, AIOrder.OF_TRANSFER)); + print(" InsertOrder(): " + AIOrder.InsertOrder(12, 0, 33416, AIOrder.OF_TRANSFER)); + print(" GetOrderCount(): " + AIOrder.GetOrderCount(12)); + print(" IsValidVehicleOrder(): " + AIOrder.IsValidVehicleOrder(12, 1)); + print(" IsGotoStationOrder(): " + AIOrder.IsGotoStationOrder(12, 1)); + print(" IsGotoDepotOrder(): " + AIOrder.IsGotoDepotOrder(12, 1)); + print(" IsGotoWaypointOrder(): " + AIOrder.IsGotoWaypointOrder(12, 1)); + print(" IsConditionalOrder(): " + AIOrder.IsConditionalOrder(12, 1)); + print(" IsCurrentOrderPartOfOrderList(): " + AIOrder.IsCurrentOrderPartOfOrderList(12)); + print(" GetOrderFlags(): " + AIOrder.GetOrderFlags(12, 0)); + print(" GetOrderFlags(): " + AIOrder.GetOrderFlags(12, 1)); + print(" GetOrderJumpTo(): " + AIOrder.GetOrderJumpTo(12, 1)); + print(" RemoveOrder(): " + AIOrder.RemoveOrder(12, 0)); + print(" SetOrderFlags(): " + AIOrder.SetOrderFlags(12, 0, AIOrder.OF_FULL_LOAD)); + print(" GetOrderFlags(): " + AIOrder.GetOrderFlags(12, 0)); + print(" GetOrderDestination(): " + AIOrder.GetOrderDestination(12, 0)); + print(" CopyOrders(): " + AIOrder.CopyOrders(12, 1)); + print(" CopyOrders(): " + AIOrder.CopyOrders(13, 12)); + print(" ShareOrders(): " + AIOrder.ShareOrders(13, 1)); + print(" ShareOrders(): " + AIOrder.ShareOrders(13, 12)); + print(" UnshareOrders(): " + AIOrder.UnshareOrders(13)); + print(" AppendOrder(): " + AIOrder.AppendOrder(12, 33421, AIOrder.OF_NONE)); + + print(" GetStopLocation(): " + AIOrder.GetStopLocation(13, 0)); + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(23596, 8)); + print(" BuildRailStation(): " + AIRail.BuildRailStation(7958, AIRail.RAILTRACK_NE_SW, 1, 1, AIStation.STATION_NEW)); + print(" AppendOrder(): " + AIOrder.AppendOrder(20, 7958, AIOrder.OF_NONE)); + print(" GetOrderCount(): " + AIOrder.GetOrderCount(20)); + print(" GetStopLocation(): " + AIOrder.GetStopLocation(20, 0)); + print(" SetStopLocation(): " + AIOrder.SetStopLocation(20, 0, AIOrder.STOPLOCATION_MIDDLE)); + print(" GetStopLocation(): " + AIOrder.GetStopLocation(20, 0)); + + local list = AIVehicleList_Station(3); + + print(""); + print("--VehicleList_Station--"); + print(" Count(): " + list.Count()); + list.Valuate(AIVehicle.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + print(" foreach():"); + foreach (idx, val in list) { + print(" " + idx + " => " + val); + } +} + +function Regression::RailTypeList() +{ + local list = AIRailTypeList(); + + print(""); + print("--RailTypeList--"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" RailType: " + i); + print(" GetName(): " + AIRail.GetName(i)); + print(" IsRailTypeAvailable(): " + AIRail.IsRailTypeAvailable(i)); + print(" GetMaxSpeed(): " + AIRail.GetMaxSpeed(i)); + } +} + +function Regression::Rail() +{ + AIRail.SetCurrentRailType(0); + + print(""); + print("--Rail--"); + print(" IsRailTile(): " + AIRail.IsRailTile(10002)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(10002, AIRail.RAILTRACK_NW_SE)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10258, AIRail.SIGNALTYPE_PBS)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_NE)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_SE)); + print(" BuildRail(): " + AIRail.BuildRail(10002, 10003, 10006)); + print(" HasTransportType(): " + AITile.HasTransportType(10005, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(10006, AITile.TRANSPORT_RAIL)); + print(" RemoveRail(): " + AIRail.RemoveRail(10006, 10005, 10002)); + 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(" IsRailTile(): " + AIRail.IsRailTile(33411)); + print(" BuildRailDepot(): " + AIRail.BuildRailDepot(0, 1)); + print(" BuildRailDepot(): " + AIRail.BuildRailDepot(33411, 33411)); + print(" BuildRailDepot(): " + AIRail.BuildRailDepot(33411, 33414)); + print(" BuildRailDepot(): " + AIRail.BuildRailDepot(33411, 33412)); + print(" GetRailDepotFrontTile(): " + AIRail.GetRailDepotFrontTile(33411)); + print(" IsBuildable(): " + AITile.IsBuildable(33411)); + local list = AIDepotList(AITile.TRANSPORT_RAIL); + print(" DepotList"); + print(" Count(): " + list.Count()); + list.Valuate(AITile.GetDistanceManhattanToTile, 0); + print(" Depot distance from (0,0) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + print(" RemoveDepot(): " + AITile.DemolishTile(33411)); + print(" BuildRailDepot(): " + AIRail.BuildRailDepot(23596, 23597)); + + print(" Station"); + print(" BuildRailStation(): " + AIRail.BuildRailStation(0, AIRail.RAILTRACK_NE_SW, 1, 1, AIStation.STATION_NEW)); + print(" BuildRailStation(): " + AIRail.BuildRailStation(7958, AIRail.RAILTRACK_NE_SW, 4, 5, AIStation.STATION_NEW)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7957)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7958)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7959)); + print(" RemoveRailStationTileRectangle():" + AIRail.RemoveRailStationTileRectangle(7959, 7959, false)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7957)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7958)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7959)); + print(" DemolishTile(): " + AITile.DemolishTile(7960)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7957)); + print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7958)); + 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() +{ + print(""); + print("--Road--"); + print(" Road"); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411)); + print(" BuildRoad(): " + AIRoad.BuildRoad(0, 1)); + print(" BuildRoad(): " + AIRoad.BuildRoad(33411, 33411)); + print(" HasTransportType(): " + AITile.HasTransportType(33413, AITile.TRANSPORT_ROAD)); + print(" BuildRoad(): " + AIRoad.BuildRoad(33411, 33414)); + print(" HasTransportType(): " + AITile.HasTransportType(33413, AITile.TRANSPORT_ROAD)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33412, 33413)); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411)); + print(" HasRoadType(Road): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_ROAD)); + print(" HasRoadType(Tram): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_TRAM)); + print(" GetNeighbourRoadCount(): " + AIRoad.GetNeighbourRoadCount(33412)); + print(" RemoveRoad(): " + AIRoad.RemoveRoad(33411, 33411)); + print(" RemoveRoad(): " + AIRoad.RemoveRoad(33411, 33412)); + print(" RemoveRoad(): " + AIRoad.RemoveRoad(19590, 19590)); + print(" RemoveRoad(): " + AIRoad.RemoveRoad(33411, 33414)); + print(" BuildOneWayRoad(): " + AIRoad.BuildOneWayRoad(33411, 33414)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33412, 33413)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33413, 33412)); + print(" BuildOneWayRoad(): " + AIRoad.BuildOneWayRoad(33413, 33412)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33412, 33413)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33413, 33412)); + print(" BuildOneWayRoad(): " + AIRoad.BuildOneWayRoad(33412, 33413)); + print(" BuildOneWayRoad(): " + AIRoad.BuildOneWayRoad(33413, 33412)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33412, 33413)); + print(" AreRoadTilesConnected(): " + AIRoad.AreRoadTilesConnected(33413, 33412)); + print(" RemoveRoad(): " + AIRoad.RemoveRoad(33411, 33412)); + print(" IsRoadTypeAvailable(Road): " + AIRoad.IsRoadTypeAvailable(AIRoad.ROADTYPE_ROAD)); + print(" IsRoadTypeAvailable(Tram): " + AIRoad.IsRoadTypeAvailable(AIRoad.ROADTYPE_TRAM)); + print(" SetCurrentRoadType(Tram): " + AIRoad.SetCurrentRoadType(AIRoad.ROADTYPE_TRAM)); + print(" GetCurrentRoadType(): " + AIRoad.GetCurrentRoadType()); + + print(" Depot"); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411)); + print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(0, 1)); + print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33411, 33411)); + print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33411, 33414)); + print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33411, 33412)); + print(" HasRoadType(Road): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_ROAD)); + print(" HasRoadType(Tram): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_TRAM)); + print(" GetLastError(): " + AIError.GetLastError()); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" GetErrorCategory(): " + AIError.GetErrorCategory()); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411)); + print(" GetRoadDepotFrontTile(): " + AIRoad.GetRoadDepotFrontTile(33411)); + print(" IsRoadDepotTile(): " + AIRoad.IsRoadDepotTile(33411)); + print(" IsBuildable(): " + AITile.IsBuildable(33411)); + local list = AIDepotList(AITile.TRANSPORT_ROAD); + print(" DepotList"); + print(" Count(): " + list.Count()); + list.Valuate(AITile.GetDistanceManhattanToTile, 0); + print(" Depot distance from (0,0) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + print(" RemoveRoadDepot(): " + AIRoad.RemoveRoadDepot(33411)); + print(" RemoveRoadDepot(): " + AIRoad.RemoveRoadDepot(33411)); + + print(" Station"); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411)); + print(" BuildRoadStation(): " + AIRoad.BuildRoadStation(0, 1, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(): " + AIRoad.BuildRoadStation(33411, 33411, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(): " + AIRoad.BuildRoadStation(33411, 33414, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(): " + AIRoad.BuildRoadStation(33411, 33412, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" IsStationTile(): " + AITile.IsStationTile(33411)); + print(" IsStationTile(): " + AITile.IsStationTile(33412)); + print(" HasRoadType(Road): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_ROAD)); + print(" HasRoadType(Tram): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_TRAM)); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411)); + print(" GetDriveThroughBackTile(): " + AIRoad.GetDriveThroughBackTile(33411)); + print(" GetRoadStationFrontTile(): " + AIRoad.GetRoadStationFrontTile(33411)); + print(" IsRoadStationTile(): " + AIRoad.IsRoadStationTile(33411)); + print(" IsDriveThroughRoadStationTile: " + AIRoad.IsDriveThroughRoadStationTile(33411)); + print(" RemoveRoadStation(): " + AIRoad.RemoveRoadStation(33411)); + print(" RemoveRoadStation(): " + AIRoad.RemoveRoadStation(33411)); + + print(" Station Types"); + print(" BuildRoadStation(bus): " + AIRoad.BuildRoadStation(33411, 33410, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(truck): " + AIRoad.BuildRoadStation(33421, 33422, AIRoad.ROADVEHTYPE_TRUCK, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(truck): " + AIRoad.BuildRoadStation(33412, 33413, AIRoad.ROADVEHTYPE_TRUCK, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(bus): " + AIRoad.BuildRoadStation(33411 + 256, 33411, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadStation(truck): " + AIRoad.BuildRoadStation(33412 + 256, 33412 + 256 + 256, AIRoad.ROADVEHTYPE_TRUCK, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildDriveThroughRoadStation(bus-drive): " + AIRoad.BuildDriveThroughRoadStation(33413, 33412, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildDriveThroughRoadStation(truck-drive): " + AIRoad.BuildDriveThroughRoadStation(33414, 33413, AIRoad.ROADVEHTYPE_TRUCK, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildDriveThroughRoadStation(bus-drive): " + AIRoad.BuildDriveThroughRoadStation(33415, 33414, AIRoad.ROADVEHTYPE_BUS, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildDriveThroughRoadStation(truck-drive): " + AIRoad.BuildDriveThroughRoadStation(33416, 33415, AIRoad.ROADVEHTYPE_TRUCK, AIStation.STATION_JOIN_ADJACENT)); + print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33417, 33418)); + print(" GetRoadStationFrontTile(): " + AIRoad.GetRoadStationFrontTile(33411 + 256)); + print(" GetRoadStationFrontTile(): " + AIRoad.GetRoadStationFrontTile(33412 + 256)); + print(" IsDriveThroughRoadStationTile: " + AIRoad.IsDriveThroughRoadStationTile(33415)); + print(" IsBuildable(): " + AITile.IsBuildable(33415)); + print(" GetDriveThroughBackTile(): " + AIRoad.GetDriveThroughBackTile(33415)); + print(" GetRoadStationFrontTile(): " + AIRoad.GetRoadStationFrontTile(33415)); + print(" IsRoadTile(): " + AIRoad.IsRoadTile(33415)); +} + +function Regression::Sign() +{ + local j = 0; + + print(""); + print("--Sign--"); + print(" BuildSign(33410, 'Some Sign'): " + AISign.BuildSign(33410, "Some Sign")); + print(" BuildSign(33411, 'Test'): " + AISign.BuildSign(33411, "Test")); + print(" SetName(1, 'Test2'): " + AISign.SetName(1, "Test2")); + local sign_id = AISign.BuildSign(33409, "Some other Sign"); + print(" BuildSign(33409, 'Some other Sign'): " + sign_id); + print(" RemoveSign(" + sign_id + "): " + AISign.RemoveSign(sign_id)); + print(""); + local list = AISignList(); + list.Sort(AIList.SORT_BY_ITEM, AIList.SORT_ASCENDING); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + j++; + print(" Sign " + i); + print(" IsValidSign(): " + AISign.IsValidSign(i)); + print(" GetName(): " + AISign.GetName(i)); + print(" GetLocation(): " + AISign.GetLocation(i)); + } + print(" Valid Signs: " + j); +} + +function Regression::Station() +{ + print(""); + print("--Station--"); + print(" IsValidStation(0): " + AIStation.IsValidStation(0)); + print(" IsValidStation(1000): " + AIStation.IsValidStation(1000)); + print(" GetName(0): " + AIStation.GetName(0)); + print(" SetName(0): " + AIStation.SetName(0, "Look, a station")); + print(" GetName(0): " + AIStation.GetName(0)); + print(" GetLocation(1): " + AIStation.GetLocation(1)); + print(" GetLocation(1000): " + AIStation.GetLocation(1000)); + print(" GetStationID(33411): " + AIStation.GetStationID(33411)); + print(" GetStationID(34411): " + AIStation.GetStationID(34411)); + print(" GetStationID(33411): " + AIStation.GetStationID(33411)); + print(" HasRoadType(3, TRAM): " + AIStation.HasRoadType(3, AIRoad.ROADTYPE_TRAM)); + print(" HasRoadType(3, ROAD): " + AIStation.HasRoadType(3, AIRoad.ROADTYPE_ROAD)); + print(" HasRoadType(33411, TRAM): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_TRAM)); + print(" HasRoadType(33411, ROAD): " + AIRoad.HasRoadType(33411, AIRoad.ROADTYPE_ROAD)); + print(" HasStationType(3, BUS): " + AIStation.HasStationType(3, AIStation.STATION_BUS_STOP)); + print(" HasStationType(3, TRAIN): " + AIStation.HasStationType(3, AIStation.STATION_TRAIN)); + + print(" GetCoverageRadius(BUS): " + AIStation.GetCoverageRadius(AIStation.STATION_BUS_STOP)); + print(" GetCoverageRadius(TRUCK): " + AIStation.GetCoverageRadius(AIStation.STATION_TRUCK_STOP)); + print(" GetCoverageRadius(TRAIN): " + AIStation.GetCoverageRadius(AIStation.STATION_TRAIN)); + + print(" GetNearestTown(): " + AIStation.GetNearestTown(0)); + print(" GetNearestTown(): " + AIStation.GetNearestTown(10000)); + print(" GetNearestTown(): " + AIStation.GetNearestTown(3)); + + print(""); + 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("--CargoPlanned--"); + for (local cargo = 0; cargo <= 1000; cargo += 1000) { + for (local station0 = 0; station0 <= 1000; station0 += 1000) { + print(" GetCargoPlanned(" + station0 + ", " + cargo + "): " + + AIStation.GetCargoPlanned(station0, cargo)); + for (local station1 = 0; station1 <= 1000; station1 += 1000) { + print(" GetCargoPlannedFrom(" + station0 + ", " + station1 + ", " + cargo + "): " + + AIStation.GetCargoPlannedFrom(station0, station1, cargo)); + print(" GetCargoPlannedVia(" + station0 + ", " + station1 + ", " + cargo + "): " + + AIStation.GetCargoPlannedFrom(station0, station1, cargo)); + for (local station2 = 0; station2 <= 1000; station2 += 1000) { + print(" GetCargoPlannedFromVia(" + station0 + ", " + station1 + ", " + station2 + ", " + cargo + "): " + + AIStation.GetCargoPlannedFromVia(station0, station1, station2, cargo)); + } + } + } + } +} + +function Regression::Tile() +{ + print(""); + print("--Tile--"); + print(" HasTreeOnTile(): " + AITile.HasTreeOnTile(33148)); + print(" IsFarmTile(): " + AITile.IsFarmTile(32892)); + print(" IsRockTile(): " + AITile.IsRockTile(31606)); + print(" IsRoughTile(): " + AITile.IsRoughTile(33674)); + print(" HasTreeOnTile(): " + AITile.HasTreeOnTile(33404)); + print(" IsFarmTile(): " + AITile.IsFarmTile(33404)); + print(" IsRockTile(): " + AITile.IsRockTile(33404)); + print(" IsRoughTile(): " + AITile.IsRoughTile(33404)); + print(" IsSnowTile(): " + AITile.IsSnowTile(33404)); + print(" IsDesertTile(): " + AITile.IsDesertTile(33404)); + print(" PlantTree(): " + AITile.PlantTree(33404)); + print(" HasTreeOnTile(): " + AITile.HasTreeOnTile(33404)); + print(" PlantTree(): " + AITile.PlantTree(33404)); + print(" HasTreeOnTile(): " + AITile.HasTreeOnTile(33661)); + print(" PlantTreeRectangle(): " + AITile.PlantTreeRectangle(33404, 2, 2)); + print(" HasTreeOnTile(): " + AITile.HasTreeOnTile(33661)); +} + +function Regression::TileList() +{ + local list = AITileList(); + + print(""); + print("--TileList--"); + print(" Count(): " + list.Count()); + list.AddRectangle(27631 - 256 * 1, 256 * 1 + 27631 + 2); + print(" Count(): " + list.Count()); + + list.Valuate(AITile.GetSlope); + print(" Slope(): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + print(" " + i + " => " + AITile.GetComplementSlope(list.GetValue(i))); + print(" " + i + " => " + AITile.IsSteepSlope(list.GetValue(i))); + print(" " + i + " => " + AITile.IsHalftileSlope(list.GetValue(i))); + } + list.Clear(); + + print(""); + print("--TileList--"); + print(" Count(): " + list.Count()); + list.AddRectangle(34436, 256 * 2 + 34436 + 8); + print(" Count(): " + list.Count()); + + list.Valuate(AITile.GetCornerHeight, AITile.CORNER_N); + print(" Height(): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AITile.GetCornerHeight, AITile.CORNER_N); + print(" CornerHeight(North): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AITile.GetMinHeight); + print(" MinHeight(): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AITile.GetMaxHeight); + print(" MaxHeight(): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AITile.GetSlope); + list.KeepValue(0); + print(" Slope(): done"); + print(" KeepValue(0): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Clear(); + list.AddRectangle(41895 - 256 * 2, 256 * 2 + 41895 + 8); + list.Valuate(AITile.IsBuildable); + list.KeepValue(1); + print(" Buildable(): done"); + print(" KeepValue(1): done"); + print(" Count(): " + list.Count()); + + list.Valuate(AITile.IsBuildableRectangle, 3, 3); + print(" BuildableRectangle(3, 3) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITile.GetDistanceManhattanToTile, 30000); + print(" DistanceManhattanToTile(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITile.GetDistanceSquareToTile, 30000); + print(" DistanceSquareToTile(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.AddRectangle(31895 - 256 * 5, 256 * 5 + 31895 + 8); + + list.Valuate(AITile.GetOwner); + print(" GetOwner() ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITile.GetTownAuthority); + print(" GetTownAuthority() ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITile.GetClosestTown); + print(" GetClosestTown() ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AITile.GetCargoAcceptance, 0, 1, 1, 3); + list.KeepAboveValue(10); + print(" CargoAcceptance(): done"); + print(" KeepAboveValue(10): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AIRoad.IsRoadTile); + list.KeepValue(1); + print(" RoadTile(): done"); + print(" KeepValue(1): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.Valuate(AIRoad.GetNeighbourRoadCount); + list.KeepValue(1); + print(" NeighbourRoadCount():done"); + print(" KeepValue(1): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list.AddRectangle(54421 - 256 * 2, 256 * 2 + 54421 + 8); + list.Valuate(AITile.IsWaterTile); + print(" Water(): done"); + print(" Count(): " + list.Count()); + print(" ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AITileList_IndustryAccepting(0, 3); + print(""); + print("--TileList_IndustryAccepting--"); + print(" Count(): " + list.Count()); + list.Valuate(AITile.GetCargoAcceptance, 3, 1, 1, 3); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AITileList_IndustryProducing(1, 3); + print(""); + print("--TileList_IndustryProducing--"); + print(" Count(): " + list.Count()); + list.Valuate(AITile.GetCargoProduction, 7, 1, 1, 3); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + list = AITileList_StationType(6, AIStation.STATION_BUS_STOP); + print(""); + print("--TileList_StationType--"); + print(" Count(): " + list.Count()); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } +} + +function Regression::Town() +{ + local j = 0; + + print(""); + print("--Town--"); + print(" GetTownCount(): " + AITown.GetTownCount()); + local list = AITownList(); + list.Sort(AIList.SORT_BY_ITEM, AIList.SORT_ASCENDING); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + if (AITown.IsValidTown(i)) j++; + print(" Town " + i); + print(" IsValidTown(): " + AITown.IsValidTown(i)); + print(" GetName(): " + AITown.GetName(i)); + print(" GetPopulation(): " + AITown.GetPopulation(i)); + print(" GetLocation(): " + AITown.GetLocation(i)); + print(" GetHouseCount(): " + AITown.GetHouseCount(i)); + print(" GetRating(): " + AITown.GetRating(i, AICompany.COMPANY_SELF)); + print(" IsCity(): " + AITown.IsCity(i)); + } + print(" Valid Towns: " + j); + print(" GetTownCount(): " + AITown.GetTownCount()); +} + +function Regression::TownList() +{ + local list = AITownList(); + + print(""); + print("--TownList--"); + print(" Count(): " + list.Count()); + list.Valuate(AITown.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITown.GetDistanceManhattanToTile, 30000); + print(" DistanceManhattanToTile(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITown.GetDistanceSquareToTile, 30000); + print(" DistanceSquareToTile(30000) ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITown.IsWithinTownInfluence, AITown.GetLocation(0)); + print(" IsWithinTownInfluence(" + AITown.GetLocation(0) + ") ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITown.GetAllowedNoise); + print(" GetAllowedNoise() ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AITown.GetPopulation); + list.KeepAboveValue(500); + print(" KeepAboveValue(500): done"); + print(" Count(): " + list.Count()); + print(" Population ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + + print(" HasStatue(): " + AITown.HasStatue(list.Begin())); + print(" GetRoadReworkDuration(): " + AITown.GetRoadReworkDuration(list.Begin())); + print(" GetExclusiveRightsCompany(): " + AITown.GetExclusiveRightsCompany(list.Begin())); + print(" GetExclusiveRightsDuration(): " + AITown.GetExclusiveRightsDuration(list.Begin())); + print(" IsActionAvailable(BUILD_STATUE): " + AITown.IsActionAvailable(list.Begin(), AITown.TOWN_ACTION_BUILD_STATUE)); + print(" PerformTownAction(BUILD_STATUE): " + AITown.PerformTownAction(list.Begin(), AITown.TOWN_ACTION_BUILD_STATUE)); + print(" IsActionAvailable(BUILD_STATUE): " + AITown.IsActionAvailable(list.Begin(), AITown.TOWN_ACTION_BUILD_STATUE)); + print(" HasStatue(): " + AITown.HasStatue(list.Begin())); +} + +function Regression::Tunnel() +{ + print(""); + print("--Tunnel--"); + print(" IsTunnelTile(): " + AITunnel.IsTunnelTile(29050)); + print(" RemoveTunnel(): " + AITunnel.RemoveTunnel(29050)); + print(" GetOtherTunnelEnd(): " + AITunnel.GetOtherTunnelEnd(29050)); + print(" BuildTunnel(): " + AITunnel.BuildTunnel(AIVehicle.VT_ROAD, 29050)); + print(" GetOtherTunnelEnd(): " + AITunnel.GetOtherTunnelEnd(29050)); + print(" IsTunnelTile(): " + AITunnel.IsTunnelTile(29050)); + print(" IsTunnelTile(): " + AITunnel.IsTunnelTile(28026)); + print(" RemoveTunnel(): " + AITunnel.RemoveTunnel(29050)); + print(" IsTunnelTile(): " + AITunnel.IsTunnelTile(29050)); + + print(" --Errors--"); + print(" BuildTunnel(): " + AITunnel.BuildTunnel(AIVehicle.VT_ROAD, 7529)); + print(" BuildTunnel(): " + AITunnel.BuildTunnel(AIVehicle.VT_ROAD, 8043)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" RemoveTunnel(): " + AITunnel.RemoveTunnel(7529)); +} + +function Regression::Vehicle() +{ + local accounting = AIAccounting(); + + print(""); + print("--Vehicle--"); + print(" IsValidVehicle(-1): " + AIVehicle.IsValidVehicle(-1)); + print(" IsValidVehicle(0): " + AIVehicle.IsValidVehicle(0)); + print(" IsValidVehicle(12): " + AIVehicle.IsValidVehicle(12)); + print(" ISValidVehicle(9999): " + AIVehicle.IsValidVehicle(9999)); + + local bank = AICompany.GetBankBalance(AICompany.COMPANY_SELF); + + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(33417, 153)); + print(" IsValidVehicle(12): " + AIVehicle.IsValidVehicle(12)); + print(" CloneVehicle(): " + AIVehicle.CloneVehicle(33417, 12, true)); + + local bank_after = AICompany.GetBankBalance(AICompany.COMPANY_SELF); + + print(" --Accounting--"); + print(" GetCosts(): " + accounting.GetCosts()); + print(" Should be: " + (bank - bank_after)); + print(" ResetCosts(): " + accounting.ResetCosts()); + + bank = AICompany.GetBankBalance(AICompany.COMPANY_SELF); + + print(" SellVehicle(13): " + AIVehicle.SellVehicle(13)); + print(" IsInDepot(): " + AIVehicle.IsInDepot(12)); + print(" IsStoppedInDepot(): " + AIVehicle.IsStoppedInDepot(12)); + print(" StartStopVehicle(): " + AIVehicle.StartStopVehicle(12)); + print(" IsInDepot(): " + AIVehicle.IsInDepot(12)); + print(" IsStoppedInDepot(): " + AIVehicle.IsStoppedInDepot(12)); + print(" SendVehicleToDepot(): " + AIVehicle.SendVehicleToDepot(12)); + print(" IsInDepot(): " + AIVehicle.IsInDepot(12)); + print(" IsStoppedInDepot(): " + AIVehicle.IsStoppedInDepot(12)); + + bank_after = AICompany.GetBankBalance(AICompany.COMPANY_SELF); + + print(" --Accounting--"); + print(" GetCosts(): " + accounting.GetCosts()); + print(" Should be: " + (bank - bank_after)); + + print(" GetName(): " + AIVehicle.GetName(12)); + print(" SetName(): " + AIVehicle.SetName(12, "MyVehicleName")); + print(" GetName(): " + AIVehicle.GetName(12)); + print(" CloneVehicle(): " + AIVehicle.CloneVehicle(33417, 12, true)); + + print(" --VehicleData--"); + print(" GetLocation(): " + AIVehicle.GetLocation(12)); + print(" GetEngineType(): " + AIVehicle.GetEngineType(12)); + print(" GetUnitNumber(): " + AIVehicle.GetUnitNumber(12)); + print(" GetAge(): " + AIVehicle.GetAge(12)); + print(" GetMaxAge(): " + AIVehicle.GetMaxAge(12)); + print(" GetAgeLeft(): " + AIVehicle.GetAgeLeft(12)); + print(" GetCurrentSpeed(): " + AIVehicle.GetCurrentSpeed(12)); + print(" GetRunningCost(): " + AIVehicle.GetRunningCost(12)); + print(" GetProfitThisYear(): " + AIVehicle.GetProfitThisYear(12)); + print(" GetProfitLastYear(): " + AIVehicle.GetProfitLastYear(12)); + print(" GetCurrentValue(): " + AIVehicle.GetCurrentValue(12)); + print(" GetVehicleType(): " + AIVehicle.GetVehicleType(12)); + print(" GetRoadType(): " + AIVehicle.GetRoadType(12)); + print(" GetCapacity(): " + AIVehicle.GetCapacity(12, 10)); + print(" GetCargoLoad(): " + AIVehicle.GetCargoLoad(12, 10)); + print(" IsInDepot(): " + AIVehicle.IsInDepot(12)); + print(" GetNumWagons(): " + AIVehicle.GetNumWagons(12)); + print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(12, 0)); + print(" GetWagonAge(): " + AIVehicle.GetWagonAge(12, 0)); + print(" GetLength(): " + AIVehicle.GetLength(12)); + + print(" GetOwner(): " + AITile.GetOwner(32119)); + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(32119, 219)); + print(" IsValidVehicle(14): " + AIVehicle.IsValidVehicle(14)); + print(" IsInDepot(14): " + AIVehicle.IsInDepot(14)); + print(" IsStoppedInDepot(14): " + AIVehicle.IsStoppedInDepot(14)); + print(" IsValidVehicle(15): " + AIVehicle.IsValidVehicle(15)); + print(" IsInDepot(15): " + AIVehicle.IsInDepot(15)); + print(" IsStoppedInDepot(15): " + AIVehicle.IsStoppedInDepot(15)); + + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(28479, 204)); + print(" IsValidVehicle(16): " + AIVehicle.IsValidVehicle(16)); + print(" IsInDepot(16): " + AIVehicle.IsInDepot(16)); + print(" IsStoppedInDepot(16): " + AIVehicle.IsStoppedInDepot(16)); + + print(" BuildRailDepot(): " + AIRail.BuildRailDepot(10008, 10000)); + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 9)); + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 27)); + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 27)); + print(" MoveWagonChain(): " + AIVehicle.MoveWagonChain(18, 0, 17, 0)); + print(" GetNumWagons(): " + AIVehicle.GetNumWagons(17)); + print(" GetLength(): " + AIVehicle.GetLength(17)); + print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17, 0)); + print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 0)); + print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17, 1)); + print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 1)); + print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17 2)); + print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 2)); + print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17 3)); + print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 3)); + + print(" --Errors--"); + print(" RefitVehicle(): " + AIVehicle.RefitVehicle(12, 0)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" SellVehicle(): " + AIVehicle.SellVehicle(12)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + print(" SendVehicleToDepot(): " + AIVehicle.SendVehicleToDepot(13)); + print(" GetLastErrorString(): " + AIError.GetLastErrorString()); + + local list = AIVehicleList(); + + print(""); + print("--VehicleList--"); + print(" Count(): " + list.Count()); + list.Valuate(AIVehicle.GetLocation); + print(" Location ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetEngineType); + print(" EngineType ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetUnitNumber); + print(" UnitNumber ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetAge); + print(" Age ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetMaxAge); + print(" MaxAge ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetAgeLeft); + print(" AgeLeft ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetCurrentSpeed); + print(" CurrentSpeed ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetRunningCost); + print(" RunningCost ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetProfitThisYear); + print(" ProfitThisYear ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetProfitLastYear); + print(" ProfitLastYear ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetCurrentValue); + print(" CurrentValue ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetVehicleType); + print(" VehicleType ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetRoadType); + print(" RoadType ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetCapacity, 10); + print(" VehicleType ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } + list.Valuate(AIVehicle.GetCargoLoad, 10); + print(" VehicleType ListDump:"); + for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { + print(" " + i + " => " + list.GetValue(i)); + } +} + +function Regression::PrintSubsidy(subsidy_id) +{ + print(" --Subsidy (" + subsidy_id + ") --"); + print(" IsValidSubsidy(): " + AISubsidy.IsValidSubsidy(subsidy_id)); + print(" IsAwarded(): " + AISubsidy.IsAwarded(subsidy_id)); + print(" GetAwardedTo(): " + AISubsidy.GetAwardedTo(subsidy_id)); + print(" GetExpireDate(): " + AISubsidy.GetExpireDate(subsidy_id)); + print(" GetSourceType(): " + AISubsidy.GetSourceType(subsidy_id)); + print(" GetSourceIndex(): " + AISubsidy.GetSourceIndex(subsidy_id)); + print(" GetDestinationType(): " + AISubsidy.GetDestinationType(subsidy_id)); + print(" GetDestinationIndex(): " + AISubsidy.GetDestinationIndex(subsidy_id)); + print(" GetCargoType(): " + AISubsidy.GetCargoType(subsidy_id)); +} + +function Regression::Math() +{ + print(""); + print("--Math--"); + print(" -2147483648 < -2147483647: " + (-2147483648 < -2147483647)); + print(" -2147483648 < -1 : " + (-2147483648 < -1 )); + print(" -2147483648 < 0 : " + (-2147483648 < 0 )); + print(" -2147483648 < 1 : " + (-2147483648 < 1 )); + print(" -2147483648 < 2147483647: " + (-2147483648 < 2147483647)); + + print(" -2147483647 < -2147483648: " + (-2147483647 < -2147483648)); + print(" -1 < -2147483648: " + (-1 < -2147483648)); + print(" 0 < -2147483648: " + ( 0 < -2147483648)); + print(" 1 < -2147483648: " + ( 1 < -2147483648)); + print(" 2147483647 < -2147483648: " + ( 2147483647 < -2147483648)); + + print(" -1 > 2147483647: " + (-1 > 2147483647)); + print(" -1 > 1 : " + (-1 > 1 )); + print(" -1 > 0 : " + (-1 > 0 )); + print(" -1 > -1 : " + (-1 > -1 )); + print(" -1 > -2147483648: " + (-1 > -2147483648)); + + print(" 1 > 2147483647: " + ( 1 > 2147483647)); + print(" 1 > 1 : " + ( 1 > 1 )); + print(" 1 > 0 : " + ( 1 > 0 )); + print(" 1 > -1 : " + ( 1 > -1 )); + print(" 1 > -2147483648: " + ( 1 > -2147483648)); + + print(" 2147483647 > 2147483646: " + ( 2147483647 > 2147483646)); + print(" 2147483647 > 1 : " + ( 2147483647 > 1 )); + print(" 2147483647 > 0 : " + ( 2147483647 > 0 )); + print(" 2147483647 > -1 : " + ( 2147483647 > -1 )); + print(" 2147483647 > -2147483648: " + ( 2147483647 > -2147483648)); + + print(" 2147483646 > 2147483647: " + ( 2147483646 > 2147483647)); + print(" 1 > 2147483647: " + ( 1 > 2147483647)); + print(" 0 > 2147483647: " + ( 0 > 2147483647)); + print(" -1 > 2147483647: " + (-1 > 2147483647)); + print(" -2147483648 > 2147483647: " + (-2147483648 > 2147483647)); + + print(" 13725 > -2147483648: " + ( 13725 > -2147483648)); +} + +function Regression::Start() +{ + this.TestInit(); + this.Std(); + this.Base(); + this.List(); + + /* Do this first as it gains maximum loan (which is faked to quite a lot). */ + this.Company(); + + this.Airport(); + this.Bridge(); + this.BridgeList(); + this.Cargo(); + this.CargoList(); + this.Engine(); + this.EngineList(); + this.Group(); + this.Industry(); + this.IndustryList(); + this.IndustryTypeList(); + this.Map(); + this.Marine(); + this.Prices(); + this.Rail(); + this.RailTypeList(); + this.Road(); + this.Sign(); + this.Station(); + this.Tile(); + this.TileList(); + this.Town(); + this.TownList(); + this.Tunnel(); + this.Vehicle(); + /* Order has to be after Vehicle */ + this.Order(); + print(""); + print(" First Subsidy Test"); + PrintSubsidy(0); + + while (AIEventController.IsEventWaiting()) { + local e = AIEventController.GetNextEvent(); + print(" GetNextEvent: " + (e == null ? "null" : "instance")); + print(" GetEventType: " + e.GetEventType()); + switch (e.GetEventType()) { + case AIEvent.ET_SUBSIDY_OFFER: { + local c = AIEventSubsidyOffer.Convert(e); + print(" EventName: SubsidyOffer"); + PrintSubsidy(c.GetSubsidyID()); + } break; + + case AIEvent.ET_VEHICLE_WAITING_IN_DEPOT: { + local c = AIEventVehicleWaitingInDepot.Convert(e); + print(" EventName: VehicleWaitingInDepot"); + print(" VehicleID: " + c.GetVehicleID()); + } break; + + default: + print(" Unknown Event"); + break; + } + } + print(" IsEventWaiting: false"); + + this.Math(); +} + diff --git a/bin/ai/regression/tst_regression/require.nut b/bin/ai/regression/tst_regression/require.nut new file mode 100644 index 0000000000..360e1c23b0 --- /dev/null +++ b/bin/ai/regression/tst_regression/require.nut @@ -0,0 +1,4 @@ +/* $Id$ */ + +print(" Required this file"); + diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt new file mode 100644 index 0000000000..e93b2e2343 --- /dev/null +++ b/bin/ai/regression/tst_regression/result.txt @@ -0,0 +1,9335 @@ + +--TestInit-- + Ops: 9988 + TickTest: 1 + TickTest: 2 + Ops: 9990 + SetCommandDelay: (null : 0x00000000) + IsValid(vehicle.plane_speed): true + vehicle.plane_speed: 2 + Required this file + min(6, 3): 3 + min(3, 6): 3 + max(6, 3): 6 + max(3, 6): 6 + AIList Consistency Tests + + Value Descending + 40 + 25 + 10 + + 40 + 30 + 20 + 10 + 40 + 30 + 20 + 10 + + 40 + 30 + 20 + 10 + + Value Ascending + 5 + 20 + 35 + + 10 + 20 + 30 + 40 + 10 + 20 + 30 + 40 + + 10 + 20 + 30 + 40 + + Item Descending + 40 + 25 + 10 + + 40 + 30 + 20 + 10 + + 40 + 30 + 20 + 10 + + Item Ascending + 5 + 20 + 35 + + 10 + 20 + 30 + 40 + + 10 + 20 + 30 + 40 + Ops: 8673 + +--Std-- + abs(-21): 21 + abs( 21): 21 + +--AIBase-- + Rand(): -54346916 + Rand(): -937374575 + Rand(): 823953997 + RandRange(0): 0 + RandRange(0): 0 + RandRange(0): 0 + RandRange(1): 0 + RandRange(1): 0 + RandRange(1): 0 + RandRange(2): 1 + RandRange(2): 1 + RandRange(2): 1 + RandRange(1000000): 966676 + RandRange(1000000): 289525 + RandRange(1000000): 170283 + Chance(1, 2): false + Chance(1, 2): true + Chance(1, 2): false + +--List-- + IsEmpty(): true + Count(): 101 + HasItem(1050): false + HasItem(1051): true + IsEmpty(): false + List Dump: + 1 => 1 + 2 => 2 + 1000 => 1000 + 1001 => 1001 + 1002 => 1002 + 1003 => 1003 + 1004 => 1004 + 1005 => 1005 + 1006 => 1006 + 1007 => 1007 + 1008 => 1008 + 1009 => 1009 + 1010 => 1010 + 1011 => 1011 + 1012 => 1012 + 1013 => 1013 + 1014 => 1014 + 1015 => 1015 + 1016 => 1016 + 1017 => 1017 + 1018 => 1018 + 1019 => 1019 + 1020 => 1020 + 1021 => 1021 + 1022 => 1022 + 1023 => 1023 + 1024 => 1024 + 1025 => 1025 + 1026 => 1026 + 1027 => 1027 + 1028 => 1028 + 1029 => 1029 + 1030 => 1030 + 1031 => 1031 + 1032 => 1032 + 1033 => 1033 + 1034 => 1034 + 1035 => 1035 + 1036 => 1036 + 1037 => 1037 + 1038 => 1038 + 1039 => 1039 + 1040 => 1040 + 1041 => 1041 + 1042 => 1042 + 1043 => 1043 + 1044 => 1044 + 1045 => 1045 + 1046 => 1046 + 1047 => 1047 + 1048 => 1048 + 1049 => 1049 + 1051 => 12 + 1052 => 1052 + 1053 => 1053 + 1054 => 1054 + 1055 => 1055 + 1056 => 1056 + 1057 => 1057 + 1058 => 1058 + 1059 => 1059 + 1060 => 1060 + 1061 => 1061 + 1062 => 1062 + 1063 => 1063 + 1064 => 1064 + 1065 => 1065 + 1066 => 1066 + 1067 => 1067 + 1068 => 1068 + 1069 => 1069 + 1070 => 1070 + 1071 => 1071 + 1072 => 1072 + 1073 => 1073 + 1074 => 1074 + 1075 => 1075 + 1076 => 1076 + 1077 => 1077 + 1078 => 1078 + 1079 => 1079 + 1080 => 1080 + 1081 => 1081 + 1082 => 1082 + 1083 => 1083 + 1084 => 1084 + 1085 => 1085 + 1086 => 1086 + 1087 => 1087 + 1088 => 1088 + 1089 => 1089 + 1090 => 1090 + 1091 => 1091 + 1092 => 1092 + 1093 => 1093 + 1094 => 1094 + 1095 => 1095 + 1096 => 1096 + 1097 => 1097 + 1098 => 1098 + 1099 => 1099 + Custom ListDump: + 1 => 4343 + 2 => 8686 + 1000 => 4343000 + 1001 => 4347343 + 1002 => 4351686 + 1003 => 4356029 + 1004 => 4360372 + 1005 => 4364715 + 1006 => 4369058 + 1007 => 4373401 + 1008 => 4377744 + 1009 => 4382087 + 1010 => 4386430 + 1011 => 4390773 + 1012 => 4395116 + 1013 => 4399459 + 1014 => 4403802 + 1015 => 4408145 + 1016 => 4412488 + 1017 => 4416831 + 1018 => 4421174 + 1019 => 4425517 + 1020 => 4429860 + 1021 => 4434203 + 1022 => 4438546 + 1023 => 4442889 + 1024 => 4447232 + 1025 => 4451575 + 1026 => 4455918 + 1027 => 4460261 + 1028 => 4464604 + 1029 => 4468947 + 1030 => 4473290 + 1031 => 4477633 + 1032 => 4481976 + 1033 => 4486319 + 1034 => 4490662 + 1035 => 4495005 + 1036 => 4499348 + 1037 => 4503691 + 1038 => 4508034 + 1039 => 4512377 + 1040 => 4516720 + 1041 => 4521063 + 1042 => 4525406 + 1043 => 4529749 + 1044 => 4534092 + 1045 => 4538435 + 1046 => 4542778 + 1047 => 4547121 + 1048 => 4551464 + 1049 => 4555807 + 1051 => 4564493 + 1052 => 4568836 + 1053 => 4573179 + 1054 => 4577522 + 1055 => 4581865 + 1056 => 4586208 + 1057 => 4590551 + 1058 => 4594894 + 1059 => 4599237 + 1060 => 4603580 + 1061 => 4607923 + 1062 => 4612266 + 1063 => 4616609 + 1064 => 4620952 + 1065 => 4625295 + 1066 => 4629638 + 1067 => 4633981 + 1068 => 4638324 + 1069 => 4642667 + 1070 => 4647010 + 1071 => 4651353 + 1072 => 4655696 + 1073 => 4660039 + 1074 => 4664382 + 1075 => 4668725 + 1076 => 4673068 + 1077 => 4677411 + 1078 => 4681754 + 1079 => 4686097 + 1080 => 4690440 + 1081 => 4694783 + 1082 => 4699126 + 1083 => 4703469 + 1084 => 4707812 + 1085 => 4712155 + 1086 => 4716498 + 1087 => 4720841 + 1088 => 4725184 + 1089 => 4729527 + 1090 => 4733870 + 1091 => 4738213 + 1092 => 4742556 + 1093 => 4746899 + 1094 => 4751242 + 1095 => 4755585 + 1096 => 4759928 + 1097 => 4764271 + 1098 => 4768614 + 1099 => 4772957 + Custom ListDump: + 1 => 42 + 2 => 84 + 1000 => 42000 + 1001 => 42042 + 1002 => 42084 + 1003 => 42126 + 1004 => 42168 + 1005 => 42210 + 1006 => 42252 + 1007 => 42294 + 1008 => 42336 + 1009 => 42378 + 1010 => 42420 + 1011 => 42462 + 1012 => 42504 + 1013 => 42546 + 1014 => 42588 + 1015 => 42630 + 1016 => 42672 + 1017 => 42714 + 1018 => 42756 + 1019 => 42798 + 1020 => 42840 + 1021 => 42882 + 1022 => 42924 + 1023 => 42966 + 1024 => 43008 + 1025 => 43050 + 1026 => 43092 + 1027 => 43134 + 1028 => 43176 + 1029 => 43218 + 1030 => 43260 + 1031 => 43302 + 1032 => 43344 + 1033 => 43386 + 1034 => 43428 + 1035 => 43470 + 1036 => 43512 + 1037 => 43554 + 1038 => 43596 + 1039 => 43638 + 1040 => 43680 + 1041 => 43722 + 1042 => 43764 + 1043 => 43806 + 1044 => 43848 + 1045 => 43890 + 1046 => 43932 + 1047 => 43974 + 1048 => 44016 + 1049 => 44058 + 1051 => 44142 + 1052 => 44184 + 1053 => 44226 + 1054 => 44268 + 1055 => 44310 + 1056 => 44352 + 1057 => 44394 + 1058 => 44436 + 1059 => 44478 + 1060 => 44520 + 1061 => 44562 + 1062 => 44604 + 1063 => 44646 + 1064 => 44688 + 1065 => 44730 + 1066 => 44772 + 1067 => 44814 + 1068 => 44856 + 1069 => 44898 + 1070 => 44940 + 1071 => 44982 + 1072 => 45024 + 1073 => 45066 + 1074 => 45108 + 1075 => 45150 + 1076 => 45192 + 1077 => 45234 + 1078 => 45276 + 1079 => 45318 + 1080 => 45360 + 1081 => 45402 + 1082 => 45444 + 1083 => 45486 + 1084 => 45528 + 1085 => 45570 + 1086 => 45612 + 1087 => 45654 + 1088 => 45696 + 1089 => 45738 + 1090 => 45780 + 1091 => 45822 + 1092 => 45864 + 1093 => 45906 + 1094 => 45948 + 1095 => 45990 + 1096 => 46032 + 1097 => 46074 + 1098 => 46116 + 1099 => 46158 + Randomize ListDump: + 1 => -200078348 + 2 => -29799264 + 1000 => 1630721656 + 1001 => 959306175 + 1002 => 1527421791 + 1003 => 1259692483 + 1004 => -1289244298 + 1005 => -1572996668 + 1006 => -2069479746 + 1007 => -1819131606 + 1008 => -1007163964 + 1009 => -1185394870 + 1010 => -1471365065 + 1011 => 364354366 + 1012 => -1478084253 + 1013 => 405281367 + 1014 => -11170062 + 1015 => 156767750 + 1016 => 1288924796 + 1017 => 1796884876 + 1018 => -1947073702 + 1019 => -1999614238 + 1020 => -231292809 + 1021 => 966621566 + 1022 => -606766557 + 1023 => -1138727825 + 1024 => -749544262 + 1025 => 2004771271 + 1026 => 686734186 + 1027 => 923274744 + 1028 => -1672035149 + 1029 => -1642064950 + 1030 => 1363389551 + 1031 => -559500928 + 1032 => 1656196991 + 1033 => 1655354425 + 1034 => -1027156689 + 1035 => 1952644328 + 1036 => 1217870217 + 1037 => 242274100 + 1038 => 201816080 + 1039 => 2127464758 + 1040 => 446043650 + 1041 => -319728455 + 1042 => 204701002 + 1043 => -571265398 + 1044 => -1422217131 + 1045 => -391208397 + 1046 => -1822628371 + 1047 => -1499755350 + 1048 => -1422137641 + 1049 => 1621693134 + 1051 => -1428728134 + 1052 => -147587573 + 1053 => 681719500 + 1054 => 1172011190 + 1055 => -1834344882 + 1056 => 1157634586 + 1057 => 1902133676 + 1058 => -1967780161 + 1059 => -1618025531 + 1060 => -810220453 + 1061 => 1582854921 + 1062 => -410004643 + 1063 => 1159917159 + 1064 => -1377804984 + 1065 => -738843914 + 1066 => -1578756103 + 1067 => -464090986 + 1068 => 1711504679 + 1069 => 545330655 + 1070 => 379462570 + 1071 => 514511099 + 1072 => -1813251176 + 1073 => 1424958266 + 1074 => -825255131 + 1075 => 539054595 + 1076 => -1764192010 + 1077 => -1243277769 + 1078 => 2017874281 + 1079 => -1972353607 + 1080 => 1879761467 + 1081 => 1638986560 + 1082 => -1832287507 + 1083 => -492411882 + 1084 => 658940812 + 1085 => -1044199400 + 1086 => 1586504918 + 1087 => -125492611 + 1088 => -1562883174 + 1089 => -1013778441 + 1090 => 1560228607 + 1091 => -550265689 + 1092 => 524767105 + 1093 => -713387661 + 1094 => 1425927738 + 1095 => 942653932 + 1096 => 1233220698 + 1097 => 1313602368 + 1098 => -140318584 + 1099 => 1199179892 + KeepTop(10): + 1 => -200078348 + 2 => -29799264 + 1000 => 1630721656 + 1001 => 959306175 + 1002 => 1527421791 + 1003 => 1259692483 + 1004 => -1289244298 + 1005 => -1572996668 + 1006 => -2069479746 + 1007 => -1819131606 + KeepBottom(8): + 1000 => 1630721656 + 1001 => 959306175 + 1002 => 1527421791 + 1003 => 1259692483 + 1004 => -1289244298 + 1005 => -1572996668 + 1006 => -2069479746 + 1007 => -1819131606 + RemoveBottom(2): + 1000 => 1630721656 + 1001 => 959306175 + 1002 => 1527421791 + 1003 => 1259692483 + 1004 => -1289244298 + 1005 => -1572996668 + RemoveTop(2): + 1002 => 1527421791 + 1003 => 1259692483 + 1004 => -1289244298 + 1005 => -1572996668 + RemoveList({1003, 1004}): + 1002 => 1527421791 + 1005 => -1572996668 + KeepList({1003, 1004, 1005}): + 1005 => -1572996668 + AddList({1005, 4000, 4001, 4002}): + 1005 => 1005 + 4000 => 8000 + 4001 => 8002 + 4002 => 8004 + foreach(): + 1005 => 1005 + 4000 => 50 + 4001 => 8002 + 4002 => 8004 + 4006 => 12 + []: + 4000 => 50 + IsEmpty(): true + 0 => 5 (true) +ERROR: Next() is invalid as Begin() is never called +ERROR: IsEnd() is invalid as Begin() is never called + 0 => 5 (false) + 0 => 5 (true) + 2 => 6 (true) + 3 => 6 (true) + 9 => 0 (false) + +--Company-- + SetName(): true + SetName(): true + SetName(): true + SetName(): false + GetLastErrorString(): ERR_NAME_IS_NOT_UNIQUE + GetName(): Regression + GetPresidentName(): E. McAlpine + SetPresidentName(): true + GetPresidentName(): Regression AI + GetBankBalance(): 100000 + GetName(): (null : 0x00000000) + GetLoanAmount(): 100000 + GetMaxLoanAmount(): 500000 + GetLoanInterval(): 10000 + SetLoanAmount(1): false + SetLoanAmount(100): false + SetLoanAmount(10000): true + GetLastErrorString(): ERR_NONE + GetBankBalance(): 10000 + GetLoanAmount(): 10000 + SetMinimumLoanAmount(31337): true + GetBankBalance(): 40000 + GetLoanAmount(): 40000 + SetLoanAmount(10000): true + GetBankBalance(): 500000 + GetLoanAmount(): 500000 + GetCompanyHQ(): -1 + BuildCompanyHQ(): true + GetCompanyHQ(): 33151 + BuildCompanyHQ(): true + GetCompanyHQ(): 33153 + BuildCompanyHQ(): false + GetLastErrorString(): ERR_AREA_NOT_CLEAR + GetAutoRenewStatus(); false + SetAutoRenewStatus(true); true + GetAutoRenewStatus(); true + SetAutoRenewStatus(true); true + SetAutoRenewStatus(false); true + GetAutoRenewMonths(); 6 + SetAutoRenewMonths(-12); true + GetAutoRenewMonths(); -12 + SetAutoRenewMonths(-12); true + SetAutoRenewMonths(6); true + GetAutoRenewMoney(); 100000 + SetAutoRenewMoney(200000); true + GetAutoRenewMoney(); 200000 + SetAutoRenewMoney(200000); true + SetAutoRenewMoney(100000); true + Quarter: -1 + GetQuarterlyIncome(); -1 + GetQuarterlyExpenses(); -1 + GetQuarterlyCargoDelivered(); -1 + GetQuarterlyPerformanceRating(); -1 + GetQuarterlyCompanyValue(); -1 + Quarter: 0 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); -210 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); -1 + GetQuarterlyCompanyValue(); 1 + Quarter: 1 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 2 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 3 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 4 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 5 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 6 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 7 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 8 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 9 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 10 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 11 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 12 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 13 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 14 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 15 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 16 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 17 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 18 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 19 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 20 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 21 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 22 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 23 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + Quarter: 24 + GetQuarterlyIncome(); 0 + GetQuarterlyExpenses(); 0 + GetQuarterlyCargoDelivered(); 0 + GetQuarterlyPerformanceRating(); 0 + GetQuarterlyCompanyValue(); 0 + +--AIAirport-- + IsHangarTile(): false + IsAirportTile(): false + GetHangarOfAirport(): -1 + GetAirportType(): 254 + IsAirportInformationAvailable(-1): false + IsValidAirportType(-1): false + GetAirportWidth(-1): -1 + GetAirportHeight(-1): -1 + GetAirportCoverageRadius(-1): -1 + IsAirportInformationAvailable(0): true + IsValidAirportType(0): true + GetAirportWidth(0): 4 + GetAirportHeight(0): 3 + GetAirportCoverageRadius(0): 4 + IsAirportInformationAvailable(1): true + IsValidAirportType(1): false + GetAirportWidth(1): 6 + GetAirportHeight(1): 6 + GetAirportCoverageRadius(1): 5 + IsAirportInformationAvailable(2): true + IsValidAirportType(2): false + GetAirportWidth(2): 1 + GetAirportHeight(2): 1 + GetAirportCoverageRadius(2): 4 + IsAirportInformationAvailable(3): true + IsValidAirportType(3): false + GetAirportWidth(3): 6 + GetAirportHeight(3): 6 + GetAirportCoverageRadius(3): 6 + IsAirportInformationAvailable(4): true + IsValidAirportType(4): false + GetAirportWidth(4): 7 + GetAirportHeight(4): 7 + GetAirportCoverageRadius(4): 8 + IsAirportInformationAvailable(5): true + IsValidAirportType(5): false + GetAirportWidth(5): 5 + GetAirportHeight(5): 4 + GetAirportCoverageRadius(5): 4 + IsAirportInformationAvailable(6): true + IsValidAirportType(6): false + GetAirportWidth(6): 2 + GetAirportHeight(6): 2 + GetAirportCoverageRadius(6): 4 + IsAirportInformationAvailable(7): true + IsValidAirportType(7): false + GetAirportWidth(7): 9 + GetAirportHeight(7): 11 + GetAirportCoverageRadius(7): 10 + IsAirportInformationAvailable(8): true + IsValidAirportType(8): false + GetAirportWidth(8): 4 + GetAirportHeight(8): 2 + GetAirportCoverageRadius(8): 4 + IsAirportInformationAvailable(9): false + IsValidAirportType(9): false + GetAirportWidth(9): -1 + GetAirportHeight(9): -1 + GetAirportCoverageRadius(9): -1 + GetBankBalance(): 499790 + GetPrice(): 5400 + BuildAirport(): true + IsHangarTile(): false + IsAirportTile(): true + GetAirportType(): 0 + GetHangarOfAirport(): 32119 + IsHangarTile(): true + IsAirportTile(): true + GetAirportType(): 0 + GetBankBalance(): 489890 + RemoveAirport(): true + IsHangarTile(): false + IsAirportTile(): false + GetBankBalance(): 489626 + BuildAirport(): true + +--Bridge-- + Bridge -1 + IsValidBridge(): false + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxLength(): -1 + GetMinLength(): -1 + Bridge 0 + IsValidBridge(): true + GetName(): + VT_RAIL: Wooden rail bridge + VT_ROAD: Wooden road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 32 + GetPrice(): 450 + GetMaxLength(): 66 + GetMinLength(): 2 + Bridge 1 + IsValidBridge(): true + GetName(): + VT_RAIL: Concrete rail bridge + VT_ROAD: Concrete road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 48 + GetPrice(): 630 + GetMaxLength(): 4 + GetMinLength(): 2 + Bridge 2 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel girder rail bridge + VT_ROAD: Steel girder road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 64 + GetPrice(): 811 + GetMaxLength(): 7 + GetMinLength(): 2 + Bridge 3 + IsValidBridge(): true + GetName(): + VT_RAIL: Reinforced concrete suspension rail bridge + VT_ROAD: Reinforced concrete suspension road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 80 + GetPrice(): 946 + GetMaxLength(): 12 + GetMinLength(): 4 + Bridge 4 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel suspension rail bridge + VT_ROAD: Steel suspension road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 96 + GetPrice(): 1042 + GetMaxLength(): 66 + GetMinLength(): 5 + Bridge 5 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel suspension rail bridge + VT_ROAD: Steel suspension road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 112 + GetPrice(): 1081 + GetMaxLength(): 66 + GetMinLength(): 5 + Bridge 6 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel cantilever rail bridge + VT_ROAD: Steel cantilever road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 160 + GetPrice(): 1261 + GetMaxLength(): 9 + GetMinLength(): 5 + Bridge 7 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel cantilever rail bridge + VT_ROAD: Steel cantilever road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 208 + GetPrice(): 1306 + GetMaxLength(): 10 + GetMinLength(): 5 + Bridge 8 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel cantilever rail bridge + VT_ROAD: Steel cantilever road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 240 + GetPrice(): 1396 + GetMaxLength(): 11 + GetMinLength(): 5 + Bridge 9 + IsValidBridge(): true + GetName(): + VT_RAIL: Steel girder rail bridge + VT_ROAD: Steel girder road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): 256 + GetPrice(): 1351 + GetMaxLength(): 4 + GetMinLength(): 2 + Bridge 10 + IsValidBridge(): false + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxLength(): -1 + GetMinLength(): -1 + Bridge 11 + IsValidBridge(): false + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxLength(): -1 + GetMinLength(): -1 + Bridge 12 + IsValidBridge(): false + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxLength(): -1 + GetMinLength(): -1 + Bridge 13 + IsValidBridge(): false + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxLength(): -1 + GetMinLength(): -1 + Valid Bridges: 10 + IsBridgeTile(): false + GetBridgeID(): -1 + RemoveBridge(): false + GetLastErrorString(): ERR_PRECONDITION_FAILED + GetOtherBridgeEnd(): -1 + BuildBridge(): true + IsBridgeTile(): true + GetBridgeID(): 5 + IsBridgeTile(): true + GetBridgeID(): 5 + GetOtherBridgeEnd(): 33155 + BuildBridge(): false + GetLastErrorString(): ERR_ALREADY_BUILT + RemoveBridge(): true + IsBridgeTile(): false + +--BridgeList-- + Count(): 10 + MaxSpeed ListDump: + 9 => 256 + 8 => 240 + 7 => 208 + 6 => 160 + 5 => 112 + 4 => 96 + 3 => 80 + 2 => 64 + 1 => 48 + 0 => 32 + Price ListDump: + 8 => 1396 + 9 => 1351 + 7 => 1306 + 6 => 1261 + 5 => 1081 + 4 => 1042 + 3 => 946 + 2 => 811 + 1 => 630 + 0 => 450 + MaxLength ListDump: + 5 => 66 + 4 => 66 + 0 => 66 + 3 => 12 + 8 => 11 + 7 => 10 + 6 => 9 + 2 => 7 + 9 => 4 + 1 => 4 + MinLength ListDump: + 8 => 5 + 7 => 5 + 6 => 5 + 5 => 5 + 4 => 5 + 3 => 4 + 9 => 2 + 2 => 2 + 1 => 2 + 0 => 2 + +--BridgeList_Length-- + Count(): 3 + MaxSpeed ListDump: + 5 => 112 + 4 => 96 + 0 => 32 + Price ListDump: + 5 => 6489 + 4 => 6252 + 0 => 2703 + +--AICargo-- + Cargo -1 + IsValidCargo(): false + GetCargoLabel(): '(null : 0x00000000)' + IsFreight(): false + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): -1 + GetCargoIncome(10, 10): -1 + GetCargoIncome(100, 10): -1 + GetCargoIncome(10, 100): -1 + GetRoadVehicleTypeForCargo(): 1 + Cargo 0 + IsValidCargo(): true + GetCargoLabel(): 'PASS' + IsFreight(): false + HasCargoClass(): true + GetTownEffect(): 1 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 3 + GetCargoIncome(100, 10): 38 + GetCargoIncome(10, 100): 3 + GetRoadVehicleTypeForCargo(): 0 + Cargo 1 + IsValidCargo(): true + GetCargoLabel(): 'COAL' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 7 + GetCargoIncome(100, 10): 71 + GetCargoIncome(10, 100): 6 + GetRoadVehicleTypeForCargo(): 1 + Cargo 2 + IsValidCargo(): true + GetCargoLabel(): 'MAIL' + IsFreight(): false + HasCargoClass(): false + GetTownEffect(): 2 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 5 + GetCargoIncome(100, 10): 55 + GetCargoIncome(10, 100): 5 + GetRoadVehicleTypeForCargo(): 1 + Cargo 3 + IsValidCargo(): true + GetCargoLabel(): 'OIL_' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 5 + GetCargoIncome(100, 10): 53 + GetCargoIncome(10, 100): 5 + GetRoadVehicleTypeForCargo(): 1 + Cargo 4 + IsValidCargo(): true + GetCargoLabel(): 'LVST' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 5 + GetCargoIncome(100, 10): 52 + GetCargoIncome(10, 100): 4 + GetRoadVehicleTypeForCargo(): 1 + Cargo 5 + IsValidCargo(): true + GetCargoLabel(): 'GOOD' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 3 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 7 + GetCargoIncome(100, 10): 74 + GetCargoIncome(10, 100): 6 + GetRoadVehicleTypeForCargo(): 1 + Cargo 6 + IsValidCargo(): true + GetCargoLabel(): 'GRAI' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 5 + GetCargoIncome(100, 10): 58 + GetCargoIncome(10, 100): 4 + GetRoadVehicleTypeForCargo(): 1 + Cargo 7 + IsValidCargo(): true + GetCargoLabel(): 'WOOD' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 6 + GetCargoIncome(100, 10): 60 + GetCargoIncome(10, 100): 5 + GetRoadVehicleTypeForCargo(): 1 + Cargo 8 + IsValidCargo(): true + GetCargoLabel(): 'IORE' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 6 + GetCargoIncome(100, 10): 62 + GetCargoIncome(10, 100): 5 + GetRoadVehicleTypeForCargo(): 1 + Cargo 9 + IsValidCargo(): true + GetCargoLabel(): 'STEL' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 6 + GetCargoIncome(100, 10): 69 + GetCargoIncome(10, 100): 6 + GetRoadVehicleTypeForCargo(): 1 + Cargo 10 + IsValidCargo(): true + GetCargoLabel(): 'VALU' + IsFreight(): true + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): 0 + GetCargoIncome(10, 10): 9 + GetCargoIncome(100, 10): 90 + GetCargoIncome(10, 100): 7 + GetRoadVehicleTypeForCargo(): 1 + Cargo 11 + IsValidCargo(): false + GetCargoLabel(): '(null : 0x00000000)' + IsFreight(): false + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): -1 + GetCargoIncome(10, 10): -1 + GetCargoIncome(100, 10): -1 + GetCargoIncome(10, 100): -1 + GetRoadVehicleTypeForCargo(): 1 + Cargo 12 + IsValidCargo(): false + GetCargoLabel(): '(null : 0x00000000)' + IsFreight(): false + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): -1 + GetCargoIncome(10, 10): -1 + GetCargoIncome(100, 10): -1 + GetCargoIncome(10, 100): -1 + GetRoadVehicleTypeForCargo(): 1 + Cargo 13 + IsValidCargo(): false + GetCargoLabel(): '(null : 0x00000000)' + IsFreight(): false + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): -1 + GetCargoIncome(10, 10): -1 + GetCargoIncome(100, 10): -1 + GetCargoIncome(10, 100): -1 + GetRoadVehicleTypeForCargo(): 1 + Cargo 14 + IsValidCargo(): false + GetCargoLabel(): '(null : 0x00000000)' + IsFreight(): false + HasCargoClass(): false + GetTownEffect(): 0 + GetCargoIncome(0, 0): -1 + GetCargoIncome(10, 10): -1 + GetCargoIncome(100, 10): -1 + GetCargoIncome(10, 100): -1 + GetRoadVehicleTypeForCargo(): 1 + +--CargoList-- + Count(): 11 + IsFreight ListDump: + 10 => 1 + 9 => 1 + 8 => 1 + 7 => 1 + 6 => 1 + 5 => 1 + 4 => 1 + 3 => 1 + 1 => 1 + 2 => 0 + 0 => 0 + CargoIncomes(100, 100) ListDump: + 10 => 74 + 5 => 62 + 1 => 62 + 9 => 60 + 8 => 54 + 7 => 54 + 3 => 50 + 2 => 50 + 6 => 49 + 4 => 41 + 0 => 30 + +--CargoList_IndustryAccepting-- + Count(): 1 + ListDump: + 7 + +--CargoList_IndustryProducing-- + Count(): 1 + ListDump: + 7 + +--Engine-- + Engine -1 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 0 + IsValidEngine(): true + GetName(): Kirby Paul Tank (Steam) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): 75 + GetMaxSpeed(): 64 + GetPrice(): 8203 + GetMaxAge(): 5490 + GetRunningCost(): 820 + GetPower(): 300 + GetWeight(): 47 + GetMaxTractiveEffort(): 136 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 1 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 2 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 3 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 4 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 5 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 6 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 7 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 8 + IsValidEngine(): true + GetName(): Chaney 'Jubilee' (Steam) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): 80 + GetMaxSpeed(): 112 + GetPrice(): 15234 + GetMaxAge(): 7686 + GetRunningCost(): 1968 + GetPower(): 1000 + GetWeight(): 131 + GetMaxTractiveEffort(): 381 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 9 + IsValidEngine(): true + GetName(): Ginzu 'A4' (Steam) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): 84 + GetMaxSpeed(): 128 + GetPrice(): 22265 + GetMaxAge(): 7320 + GetRunningCost(): 2296 + GetPower(): 1200 + GetWeight(): 162 + GetMaxTractiveEffort(): 471 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 10 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 11 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 12 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 13 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 14 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 15 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 16 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 17 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 18 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 19 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 20 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 21 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 22 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 23 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 24 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 25 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 26 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 27 + IsValidEngine(): true + GetName(): Passenger Carriage + GetCargoType(): 0 + CanRefitCargo(): false + GetCapacity(): 40 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1447 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 25 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 28 + IsValidEngine(): true + GetName(): Mail Van + GetCargoType(): 2 + CanRefitCargo(): false + GetCapacity(): 30 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1335 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 21 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 29 + IsValidEngine(): true + GetName(): Coal Truck + GetCargoType(): 1 + CanRefitCargo(): true + GetCapacity(): 30 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1031 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 18 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 30 + IsValidEngine(): true + GetName(): Oil Tanker + GetCargoType(): 3 + CanRefitCargo(): false + GetCapacity(): 30 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1171 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 24 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 31 + IsValidEngine(): true + GetName(): Livestock Van + GetCargoType(): 4 + CanRefitCargo(): false + GetCapacity(): 25 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1125 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 20 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 32 + IsValidEngine(): true + GetName(): Goods Van + GetCargoType(): 5 + CanRefitCargo(): false + GetCapacity(): 25 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1113 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 21 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 33 + IsValidEngine(): true + GetName(): Grain Hopper + GetCargoType(): 6 + CanRefitCargo(): false + GetCapacity(): 30 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1066 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 19 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 34 + IsValidEngine(): true + GetName(): Wood Truck + GetCargoType(): 7 + CanRefitCargo(): false + GetCapacity(): 30 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1060 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 16 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 35 + IsValidEngine(): true + GetName(): Iron Ore Hopper + GetCargoType(): 8 + CanRefitCargo(): false + GetCapacity(): 30 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1048 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 19 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 36 + IsValidEngine(): true + GetName(): Steel Truck + GetCargoType(): 9 + CanRefitCargo(): false + GetCapacity(): 20 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1148 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 18 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 37 + IsValidEngine(): true + GetName(): Armoured Van + GetCargoType(): 10 + CanRefitCargo(): false + GetCapacity(): 20 + GetReliability(): -1 + GetMaxSpeed(): 0 + GetPrice(): 1494 + GetMaxAge(): -1 + GetRunningCost(): 0 + GetPower(): -1 + GetWeight(): 30 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 0 + GetRailType(): 0 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 38 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 39 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 40 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 41 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 42 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 43 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 44 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 45 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 46 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 47 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 48 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 49 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 50 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 51 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 52 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 53 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 54 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 55 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 56 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 57 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 58 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 59 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 60 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 61 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 62 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 63 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 64 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 65 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 66 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 67 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 68 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 69 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 70 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 71 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 72 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 73 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 74 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 75 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 76 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 77 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 78 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 79 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 80 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 81 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 82 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 83 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 84 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 85 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 86 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 87 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 88 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 89 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 90 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 91 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 92 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 93 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 94 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 95 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 96 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 97 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 98 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 99 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 100 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 101 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 102 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 103 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 104 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 105 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 106 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 107 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 108 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 109 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 110 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 111 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 112 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 113 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 114 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 115 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 116 + IsValidEngine(): true + GetName(): MPS Regal Bus + GetCargoType(): 0 + CanRefitCargo(): false + GetCapacity(): 31 + GetReliability(): 78 + GetMaxSpeed(): 56 + GetPrice(): 4921 + GetMaxAge(): 4392 + GetRunningCost(): 426 + GetPower(): 90 + GetWeight(): 10 + GetMaxTractiveEffort(): 29 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 117 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 118 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 119 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 120 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 121 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 122 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 123 + IsValidEngine(): true + GetName(): Balogh Coal Truck + GetCargoType(): 1 + CanRefitCargo(): true + GetCapacity(): 20 + GetReliability(): 77 + GetMaxSpeed(): 48 + GetPrice(): 4429 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 124 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 125 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 126 + IsValidEngine(): true + GetName(): MPS Mail Truck + GetCargoType(): 2 + CanRefitCargo(): false + GetCapacity(): 22 + GetReliability(): 92 + GetMaxSpeed(): 48 + GetPrice(): 4716 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 127 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 128 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 129 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 130 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 131 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 132 + IsValidEngine(): true + GetName(): Witcombe Oil Tanker + GetCargoType(): 3 + CanRefitCargo(): false + GetCapacity(): 21 + GetReliability(): 98 + GetMaxSpeed(): 48 + GetPrice(): 4511 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 133 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 134 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 135 + IsValidEngine(): true + GetName(): Talbott Livestock Van + GetCargoType(): 4 + CanRefitCargo(): false + GetCapacity(): 14 + GetReliability(): 97 + GetMaxSpeed(): 48 + GetPrice(): 4306 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 136 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 137 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 138 + IsValidEngine(): true + GetName(): Balogh Goods Truck + GetCargoType(): 5 + CanRefitCargo(): false + GetCapacity(): 14 + GetReliability(): 87 + GetMaxSpeed(): 48 + GetPrice(): 4388 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 139 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 140 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 141 + IsValidEngine(): true + GetName(): Hereford Grain Truck + GetCargoType(): 6 + CanRefitCargo(): false + GetCapacity(): 20 + GetReliability(): 97 + GetMaxSpeed(): 48 + GetPrice(): 4675 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 142 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 143 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 144 + IsValidEngine(): true + GetName(): Witcombe Wood Truck + GetCargoType(): 7 + CanRefitCargo(): false + GetCapacity(): 20 + GetReliability(): 98 + GetMaxSpeed(): 48 + GetPrice(): 4839 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 145 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 146 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 147 + IsValidEngine(): true + GetName(): MPS Iron Ore Truck + GetCargoType(): 8 + CanRefitCargo(): false + GetCapacity(): 22 + GetReliability(): 97 + GetMaxSpeed(): 48 + GetPrice(): 4962 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 148 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 149 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 150 + IsValidEngine(): true + GetName(): Balogh Steel Truck + GetCargoType(): 9 + CanRefitCargo(): false + GetCapacity(): 15 + GetReliability(): 82 + GetMaxSpeed(): 48 + GetPrice(): 4593 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 151 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 152 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 153 + IsValidEngine(): true + GetName(): Balogh Armoured Truck + GetCargoType(): 10 + CanRefitCargo(): false + GetCapacity(): 12 + GetReliability(): 76 + GetMaxSpeed(): 48 + GetPrice(): 5947 + GetMaxAge(): 5490 + GetRunningCost(): 421 + GetPower(): 120 + GetWeight(): 9 + GetMaxTractiveEffort(): 26 + GetVehicleType(): 1 + GetRailType(): 255 + GetRoadType(): 0 + GetPlaneType(): -1 + Engine 154 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 155 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 156 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 157 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 158 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 159 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 160 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 161 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 162 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 163 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 164 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 165 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 166 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 167 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 168 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 169 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 170 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 171 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 172 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 173 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 174 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 175 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 176 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 177 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 178 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 179 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 180 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 181 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 182 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 183 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 184 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 185 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 186 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 187 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 188 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 189 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 190 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 191 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 192 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 193 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 194 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 195 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 196 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 197 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 198 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 199 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 200 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 201 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 202 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 203 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 204 + IsValidEngine(): true + GetName(): MPS Oil Tanker + GetCargoType(): 3 + CanRefitCargo(): false + GetCapacity(): 220 + GetReliability(): 99 + GetMaxSpeed(): 24 + GetPrice(): 30468 + GetMaxAge(): 10980 + GetRunningCost(): 2296 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 2 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 205 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 206 + IsValidEngine(): true + GetName(): MPS Passenger Ferry + GetCargoType(): 0 + CanRefitCargo(): false + GetCapacity(): 100 + GetReliability(): 88 + GetMaxSpeed(): 32 + GetPrice(): 18281 + GetMaxAge(): 10980 + GetRunningCost(): 1476 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 2 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 207 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 208 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 209 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 210 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 211 + IsValidEngine(): true + GetName(): Yate Cargo Ship + GetCargoType(): 5 + CanRefitCargo(): true + GetCapacity(): 160 + GetReliability(): 81 + GetMaxSpeed(): 24 + GetPrice(): 24375 + GetMaxAge(): 10980 + GetRunningCost(): 2460 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 2 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 212 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 213 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 214 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 215 + IsValidEngine(): true + GetName(): Sampson U52 + GetCargoType(): 0 + CanRefitCargo(): false + GetCapacity(): 25 + GetReliability(): 58 + GetMaxSpeed(): 236 + GetPrice(): 28710 + GetMaxAge(): 7320 + GetRunningCost(): 2390 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 3 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): 1 + Engine 216 + IsValidEngine(): true + GetName(): Coleman Count + GetCargoType(): 0 + CanRefitCargo(): false + GetCapacity(): 65 + GetReliability(): 95 + GetMaxSpeed(): 236 + GetPrice(): 30761 + GetMaxAge(): 8784 + GetRunningCost(): 2812 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 3 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): 1 + Engine 217 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 218 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 219 + IsValidEngine(): true + GetName(): Bakewell Cotswald LB-3 + GetCargoType(): 0 + CanRefitCargo(): false + GetCapacity(): 30 + GetReliability(): 77 + GetMaxSpeed(): 236 + GetPrice(): 30761 + GetMaxAge(): 10980 + GetRunningCost(): 2756 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 3 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): 1 + Engine 220 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 221 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 222 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 223 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 224 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 225 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 226 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 227 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 228 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 229 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 230 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 231 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 232 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 233 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 234 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 235 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 236 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 237 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 238 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 239 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 240 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 241 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 242 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 243 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 244 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 245 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 246 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 247 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 248 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 249 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 250 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 251 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 252 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 253 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 254 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 255 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Engine 256 + IsValidEngine(): false + GetName(): (null : 0x00000000) + GetCargoType(): 255 + CanRefitCargo(): false + GetCapacity(): -1 + GetReliability(): -1 + GetMaxSpeed(): -1 + GetPrice(): -1 + GetMaxAge(): -1 + GetRunningCost(): -1 + GetPower(): -1 + GetWeight(): -1 + GetMaxTractiveEffort(): -1 + GetVehicleType(): 255 + GetRailType(): 255 + GetRoadType(): -1 + GetPlaneType(): -1 + Valid Engines: 31 + +--EngineList-- + Count(): 11 + CargoType ListDump: + 153 => 10 + 150 => 9 + 147 => 8 + 144 => 7 + 141 => 6 + 138 => 5 + 135 => 4 + 132 => 3 + 126 => 2 + 123 => 1 + 116 => 0 + Capacity ListDump: + 116 => 31 + 147 => 22 + 126 => 22 + 132 => 21 + 144 => 20 + 141 => 20 + 123 => 20 + 150 => 15 + 138 => 14 + 135 => 14 + 153 => 12 + Reliability ListDump: + 144 => 98 + 132 => 98 + 147 => 97 + 141 => 97 + 135 => 97 + 126 => 92 + 138 => 87 + 150 => 82 + 116 => 78 + 123 => 77 + 153 => 76 + MaxSpeed ListDump: + 116 => 56 + 153 => 48 + 150 => 48 + 147 => 48 + 144 => 48 + 141 => 48 + 138 => 48 + 135 => 48 + 132 => 48 + 126 => 48 + 123 => 48 + Price ListDump: + 153 => 5947 + 147 => 4962 + 116 => 4921 + 144 => 4839 + 126 => 4716 + 141 => 4675 + 150 => 4593 + 132 => 4511 + 123 => 4429 + 138 => 4388 + 135 => 4306 + +--Group-- + SetAutoReplace(): false + GetEngineReplacement(): 65535 + GetNumEngines(): 0 + AIRoad.BuildRoadDepot(): true + AIVehicle.BuildVehicle(): 12 + GetNumEngines(): 1 + CreateGroup(): 0 + MoveVehicle(): true + GetNumEngines(): 1 + GetNumEngines(): 1 + GetNumEngines(): 0 + GetName(): Group 0 + GetName(): (null : 0x00000000) + AIVehicle.SellVehicle(): true + AITile.DemolishTile(): true + HasWagonRemoval(): false + EnableWagonRemoval(): true + HasWagonRemoval(): true + EnableWagonRemoval(): true + EnableWagonRemoval(): true + HasWagonRemoval(): false + +--Industry-- + GetIndustryCount(): 71 + Industry 0 + IsValidIndustry(): true + GetName(): Kennville Oil Refinery + GetLocation(): 19695 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 1 + IsValidIndustry(): true + GetName(): Satown Forest + GetLocation(): 45122 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 2 + IsValidIndustry(): true + GetName(): Fudhattan Forest + GetLocation(): 41929 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 108 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 3 + IsValidIndustry(): true + GetName(): Beningville Forest + GetLocation(): 44640 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 80 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 4 + IsValidIndustry(): true + GetName(): Nefingbridge Forest + GetLocation(): 8793 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 135 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 5 + IsValidIndustry(): true + GetName(): Hutford Forest + GetLocation(): 55429 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 99 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 6 + IsValidIndustry(): true + GetName(): Great Hinninghall Forest + GetLocation(): 6533 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 7 + IsValidIndustry(): true + GetName(): Tonston Forest + GetLocation(): 27609 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 115 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 8 + IsValidIndustry(): true + GetName(): Planfield Sawmill + GetLocation(): 17318 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 9 + IsValidIndustry(): true + GetName(): Hutford Sawmill + GetLocation(): 60050 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 10 + IsValidIndustry(): true + GetName(): Natborough Sawmill + GetLocation(): 54184 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 11 + IsValidIndustry(): true + GetName(): Prundinghall Sawmill + GetLocation(): 48499 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 12 + IsValidIndustry(): true + GetName(): Fratston Sawmill + GetLocation(): 51419 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 13 + IsValidIndustry(): true + GetName(): Fort Frindston Sawmill + GetLocation(): 15950 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 14 + IsValidIndustry(): true + GetName(): Grinnway Sawmill + GetLocation(): 20001 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 15 + IsValidIndustry(): true + GetName(): Trenningville Coal Mine + GetLocation(): 51854 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 126 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 16 + IsValidIndustry(): true + GetName(): Kennville Coal Mine + GetLocation(): 11734 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 99 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 17 + IsValidIndustry(): true + GetName(): Great Hinninghall Coal Mine + GetLocation(): 13947 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 171 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 18 + IsValidIndustry(): true + GetName(): Little Frutford Coal Mine + GetLocation(): 23682 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 126 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 19 + IsValidIndustry(): true + GetName(): Hutford Coal Mine + GetLocation(): 57429 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 99 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 20 + IsValidIndustry(): true + GetName(): Mendston Coal Mine + GetLocation(): 8562 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 171 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 21 + IsValidIndustry(): true + GetName(): Tonston Coal Mine + GetLocation(): 29147 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 117 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 22 + IsValidIndustry(): true + GetName(): Quarfingfield Coal Mine + GetLocation(): 27822 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 153 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 23 + IsValidIndustry(): true + GetName(): Muningville Coal Mine + GetLocation(): 43035 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 90 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 24 + IsValidIndustry(): true + GetName(): Grinnway Coal Mine + GetLocation(): 17943 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 40 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 25 + IsValidIndustry(): true + GetName(): Satown Power Station + GetLocation(): 48182 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 26 + IsValidIndustry(): true + GetName(): Tunford Power Station + GetLocation(): 33934 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 27 + IsValidIndustry(): true + GetName(): Quarfingfield Power Station + GetLocation(): 23714 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 28 + IsValidIndustry(): true + GetName(): Kennville Power Station + GetLocation(): 20170 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 29 + IsValidIndustry(): true + GetName(): Nuntburg Power Station + GetLocation(): 6685 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 30 + IsValidIndustry(): true + GetName(): Beburg Power Station + GetLocation(): 29022 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 31 + IsValidIndustry(): true + GetName(): Beningville Power Station + GetLocation(): 44160 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 32 + IsValidIndustry(): true + GetName(): Fort Frindston Oil Wells + GetLocation(): 14701 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 108 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 33 + IsValidIndustry(): true + GetName(): Nuntburg Oil Wells + GetLocation(): 5659 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 40 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 34 + IsValidIndustry(): true + GetName(): Beningville Oil Wells + GetLocation(): 36728 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 64 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 35 + IsValidIndustry(): true + GetName(): Grinnway Oil Wells + GetLocation(): 14361 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 63 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 36 + IsValidIndustry(): true + GetName(): Muningville Oil Wells + GetLocation(): 36908 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 37 + IsValidIndustry(): true + GetName(): Tonston Oil Wells + GetLocation(): 34237 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 108 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 38 + IsValidIndustry(): true + GetName(): Fort Frindston Iron Ore Mine + GetLocation(): 17742 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 108 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 39 + IsValidIndustry(): true + GetName(): Tonston Iron Ore Mine + GetLocation(): 25545 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 30 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 40 + IsValidIndustry(): true + GetName(): Fudhattan Iron Ore Mine + GetLocation(): 47838 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 41 + IsValidIndustry(): true + GetName(): Nuntburg Iron Ore Mine + GetLocation(): 8763 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 42 + IsValidIndustry(): true + GetName(): Larborough Iron Ore Mine + GetLocation(): 60866 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 81 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 43 + IsValidIndustry(): true + GetName(): Tunford Iron Ore Mine + GetLocation(): 41155 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 108 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 44 + IsValidIndustry(): true + GetName(): Chenfingbourne Iron Ore Mine + GetLocation(): 19529 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 135 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 45 + IsValidIndustry(): true + GetName(): Natborough Farm + GetLocation(): 52931 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 81 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 81 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 46 + IsValidIndustry(): true + GetName(): Larborough Farm + GetLocation(): 59604 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 81 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 50 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 47 + IsValidIndustry(): true + GetName(): Chenfingbourne Farm + GetLocation(): 24366 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 63 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 30 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 48 + IsValidIndustry(): true + GetName(): Wruntown Farm + GetLocation(): 36847 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 126 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 49 + IsValidIndustry(): true + GetName(): Little Frutford Farm + GetLocation(): 28287 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 90 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 50 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 50 + IsValidIndustry(): true + GetName(): Hutford Farm + GetLocation(): 57432 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 117 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 90 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 51 + IsValidIndustry(): true + GetName(): Tonston Farm + GetLocation(): 23519 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 81 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 54 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 52 + IsValidIndustry(): true + GetName(): Nuntburg Farm + GetLocation(): 10773 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 126 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 53 + IsValidIndustry(): true + GetName(): Satown Farm + GetLocation(): 48206 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 40 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 40 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 54 + IsValidIndustry(): true + GetName(): Quarfingfield Farm + GetLocation(): 24005 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 72 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): 81 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + Industry 55 + IsValidIndustry(): true + GetName(): Little Frutford Steel Mill + GetLocation(): 21107 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 56 + IsValidIndustry(): true + GetName(): Quarfingfield Steel Mill + GetLocation(): 23727 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 57 + IsValidIndustry(): true + GetName(): Beburg Steel Mill + GetLocation(): 41813 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 58 + IsValidIndustry(): true + GetName(): Franinghead Steel Mill + GetLocation(): 8852 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 59 + IsValidIndustry(): true + GetName(): Larborough Steel Mill + GetLocation(): 59867 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 60 + IsValidIndustry(): true + GetName(): Satown Steel Mill + GetLocation(): 55360 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 61 + IsValidIndustry(): true + GetName(): Fratston Steel Mill + GetLocation(): 52953 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 62 + IsValidIndustry(): true + GetName(): Chenfingbourne Factory + GetLocation(): 24893 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 63 + IsValidIndustry(): true + GetName(): Fort Frindston Factory + GetLocation(): 20819 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 64 + IsValidIndustry(): true + GetName(): Fudhattan Factory + GetLocation(): 46278 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 65 + IsValidIndustry(): true + GetName(): Prundinghall Factory + GetLocation(): 53096 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 66 + IsValidIndustry(): true + GetName(): Kennville Factory + GetLocation(): 14818 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 67 + IsValidIndustry(): true + GetName(): Muningville Factory + GetLocation(): 34375 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 68 + IsValidIndustry(): true + GetName(): Trenningville Factory + GetLocation(): 44181 + IsCargoAccepted(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 69 + IsValidIndustry(): true + GetName(): Wruntown Oil Refinery + GetLocation(): 39663 + IsCargoAccepted(): 0 + GetLastMonthProduction(): 0 + GetLastMonthTransported(): 0 + GetStockpiledCargo(): -1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Industry 70 + IsValidIndustry(): true + GetName(): Mendston Power Station + GetLocation(): 6498 + IsCargoAccepted(): 1 + GetLastMonthProduction(): -1 + GetLastMonthTransported(): -1 + GetStockpiledCargo(): 0 + Valid Industries: 71 + GetIndustryCount(): 71 + GetIndustryID(): 65535 + GetIndustryID(): 0 + +--IndustryList-- + Count(): 71 + Location ListDump: + 42 => 60866 + 9 => 60050 + 59 => 59867 + 46 => 59604 + 50 => 57432 + 19 => 57429 + 5 => 55429 + 60 => 55360 + 10 => 54184 + 65 => 53096 + 61 => 52953 + 45 => 52931 + 15 => 51854 + 12 => 51419 + 11 => 48499 + 53 => 48206 + 25 => 48182 + 40 => 47838 + 64 => 46278 + 1 => 45122 + 3 => 44640 + 68 => 44181 + 31 => 44160 + 23 => 43035 + 2 => 41929 + 57 => 41813 + 43 => 41155 + 69 => 39663 + 36 => 36908 + 48 => 36847 + 34 => 36728 + 67 => 34375 + 37 => 34237 + 26 => 33934 + 21 => 29147 + 30 => 29022 + 49 => 28287 + 22 => 27822 + 7 => 27609 + 39 => 25545 + 62 => 24893 + 47 => 24366 + 54 => 24005 + 56 => 23727 + 27 => 23714 + 18 => 23682 + 51 => 23519 + 55 => 21107 + 63 => 20819 + 28 => 20170 + 14 => 20001 + 0 => 19695 + 44 => 19529 + 24 => 17943 + 38 => 17742 + 8 => 17318 + 13 => 15950 + 66 => 14818 + 32 => 14701 + 35 => 14361 + 17 => 13947 + 16 => 11734 + 52 => 10773 + 58 => 8852 + 4 => 8793 + 41 => 8763 + 20 => 8562 + 29 => 6685 + 6 => 6533 + 70 => 6498 + 33 => 5659 + DistanceManhattanToTile(30000) ListDump: + 59 => 287 + 46 => 279 + 42 => 266 + 61 => 258 + 12 => 254 + 40 => 243 + 66 => 238 + 16 => 238 + 45 => 236 + 0 => 232 + 69 => 228 + 48 => 217 + 9 => 215 + 10 => 214 + 64 => 213 + 51 => 201 + 2 => 199 + 28 => 193 + 43 => 190 + 5 => 184 + 58 => 183 + 15 => 179 + 7 => 179 + 6 => 177 + 21 => 175 + 54 => 173 + 39 => 171 + 8 => 168 + 37 => 157 + 68 => 156 + 56 => 152 + 20 => 150 + 50 => 147 + 65 => 146 + 19 => 144 + 70 => 142 + 27 => 139 + 11 => 139 + 17 => 138 + 31 => 135 + 22 => 135 + 4 => 124 + 32 => 121 + 33 => 116 + 60 => 115 + 29 => 110 + 26 => 109 + 18 => 107 + 3 => 105 + 55 => 102 + 52 => 102 + 53 => 101 + 34 => 98 + 41 => 94 + 49 => 86 + 13 => 85 + 35 => 84 + 57 => 83 + 38 => 78 + 25 => 77 + 1 => 77 + 24 => 72 + 23 => 72 + 63 => 71 + 44 => 66 + 14 => 54 + 30 => 50 + 67 => 40 + 62 => 33 + 36 => 31 + 47 => 24 + DistanceSquareToTile(30000) ListDump: + 59 => 42697 + 46 => 40121 + 0 => 38162 + 69 => 37850 + 48 => 37157 + 61 => 36482 + 12 => 36130 + 42 => 35716 + 66 => 35284 + 40 => 35037 + 16 => 32740 + 51 => 31301 + 45 => 29530 + 21 => 29257 + 7 => 28661 + 64 => 26469 + 2 => 25525 + 28 => 25237 + 39 => 23733 + 43 => 23458 + 9 => 23293 + 10 => 23236 + 54 => 22777 + 37 => 20137 + 5 => 17026 + 58 => 16889 + 56 => 16754 + 8 => 16424 + 15 => 16061 + 22 => 15957 + 6 => 15689 + 27 => 13621 + 68 => 13226 + 50 => 13049 + 19 => 12818 + 20 => 11412 + 65 => 11236 + 70 => 10964 + 60 => 10057 + 11 => 9673 + 17 => 9594 + 33 => 9466 + 31 => 9425 + 26 => 9061 + 29 => 8642 + 4 => 8570 + 18 => 7349 + 32 => 7321 + 41 => 7010 + 52 => 6354 + 49 => 6290 + 53 => 5941 + 34 => 5860 + 55 => 5714 + 3 => 5553 + 25 => 5077 + 35 => 4250 + 13 => 3925 + 1 => 3805 + 57 => 3485 + 38 => 3204 + 23 => 3042 + 24 => 2834 + 63 => 2521 + 44 => 2306 + 30 => 2132 + 14 => 1746 + 67 => 818 + 36 => 745 + 62 => 569 + 47 => 488 + GetAmountOfStationsAround(30000) ListDump: + 70 => 0 + 69 => 0 + 68 => 0 + 67 => 0 + 66 => 0 + 65 => 0 + 64 => 0 + 63 => 0 + 62 => 0 + 61 => 0 + 60 => 0 + 59 => 0 + 58 => 0 + 57 => 0 + 56 => 0 + 55 => 0 + 54 => 0 + 53 => 0 + 52 => 0 + 51 => 0 + 50 => 0 + 49 => 0 + 48 => 0 + 47 => 0 + 46 => 0 + 45 => 0 + 44 => 0 + 43 => 0 + 42 => 0 + 41 => 0 + 40 => 0 + 39 => 0 + 38 => 0 + 37 => 0 + 36 => 0 + 35 => 0 + 34 => 0 + 33 => 0 + 32 => 0 + 31 => 0 + 30 => 0 + 29 => 0 + 28 => 0 + 27 => 0 + 26 => 0 + 25 => 0 + 24 => 0 + 23 => 0 + 22 => 0 + 21 => 0 + 20 => 0 + 19 => 0 + 18 => 0 + 17 => 0 + 16 => 0 + 15 => 0 + 14 => 0 + 13 => 0 + 12 => 0 + 11 => 0 + 10 => 0 + 9 => 0 + 8 => 0 + 7 => 0 + 6 => 0 + 5 => 0 + 4 => 0 + 3 => 0 + 2 => 0 + 1 => 0 + 0 => 0 + CargoAccepted(1) ListDump: + 70 => 1 + 31 => 1 + 30 => 1 + 29 => 1 + 28 => 1 + 27 => 1 + 26 => 1 + 25 => 1 + 69 => 0 + 68 => 0 + 67 => 0 + 66 => 0 + 65 => 0 + 64 => 0 + 63 => 0 + 62 => 0 + 61 => 0 + 60 => 0 + 59 => 0 + 58 => 0 + 57 => 0 + 56 => 0 + 55 => 0 + 54 => 0 + 53 => 0 + 52 => 0 + 51 => 0 + 50 => 0 + 49 => 0 + 48 => 0 + 47 => 0 + 46 => 0 + 45 => 0 + 44 => 0 + 43 => 0 + 42 => 0 + 41 => 0 + 40 => 0 + 39 => 0 + 38 => 0 + 37 => 0 + 36 => 0 + 35 => 0 + 34 => 0 + 33 => 0 + 32 => 0 + 24 => 0 + 23 => 0 + 22 => 0 + 21 => 0 + 20 => 0 + 19 => 0 + 18 => 0 + 17 => 0 + 16 => 0 + 15 => 0 + 14 => 0 + 13 => 0 + 12 => 0 + 11 => 0 + 10 => 0 + 9 => 0 + 8 => 0 + 7 => 0 + 6 => 0 + 5 => 0 + 4 => 0 + 3 => 0 + 2 => 0 + 1 => 0 + 0 => 0 +--IndustryList_CargoAccepting-- + Count(): 8 + Location ListDump: + 25 => 48182 + 31 => 44160 + 26 => 33934 + 30 => 29022 + 27 => 23714 + 28 => 20170 + 29 => 6685 + 70 => 6498 +--IndustryList_CargoProducing-- + Count(): 10 + Location ListDump: + 19 => 57429 + 15 => 51854 + 23 => 43035 + 21 => 29147 + 22 => 27822 + 18 => 23682 + 24 => 17943 + 17 => 13947 + 16 => 11734 + 20 => 8562 + +--IndustryTypeList-- + Count(): 12 + Location ListDump: + Id: 9 + IsRawIndustry(): true + ProductionCanIncrease(): true + GetConstructionCost(): -1 + GetName(): Farm + CanBuildIndustry(): false + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 5 + IsRawIndustry(): true + ProductionCanIncrease(): true + GetConstructionCost(): -1 + GetName(): Oil Rig + CanBuildIndustry(): false + CanProspectIndustry(): false + IsBuiltOnWater(): true + HasHeliport(): true + HasDock(): true + Id: 12 + IsRawIndustry(): false + ProductionCanIncrease(): true + GetConstructionCost(): 747070 + GetName(): Bank + CanBuildIndustry(): true + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 11 + IsRawIndustry(): true + ProductionCanIncrease(): false + GetConstructionCost(): -1 + GetName(): Oil Wells + CanBuildIndustry(): false + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 1 + IsRawIndustry(): false + ProductionCanIncrease(): true + GetConstructionCost(): 703125 + GetName(): Power Station + CanBuildIndustry(): true + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 3 + IsRawIndustry(): true + ProductionCanIncrease(): true + GetConstructionCost(): -1 + GetName(): Forest + CanBuildIndustry(): false + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 2 + IsRawIndustry(): false + ProductionCanIncrease(): true + GetConstructionCost(): 656250 + GetName(): Sawmill + CanBuildIndustry(): true + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 18 + IsRawIndustry(): true + ProductionCanIncrease(): true + GetConstructionCost(): -1 + GetName(): Iron Ore Mine + CanBuildIndustry(): false + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 0 + IsRawIndustry(): true + ProductionCanIncrease(): true + GetConstructionCost(): -1 + GetName(): Coal Mine + CanBuildIndustry(): false + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 8 + IsRawIndustry(): false + ProductionCanIncrease(): true + GetConstructionCost(): 629882 + GetName(): Steel Mill + CanBuildIndustry(): true + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 4 + IsRawIndustry(): false + ProductionCanIncrease(): true + GetConstructionCost(): 714843 + GetName(): Oil Refinery + CanBuildIndustry(): true + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + Id: 6 + IsRawIndustry(): false + ProductionCanIncrease(): true + GetConstructionCost(): 609375 + GetName(): Factory + CanBuildIndustry(): true + CanProspectIndustry(): false + IsBuiltOnWater(): false + HasHeliport(): false + HasDock(): false + +--Map-- + GetMapSize(): 65536 + GetMapSizeX(): 256 + GetMapSizeY(): 256 + GetTileX(123): 123 + GetTileY(123): 0 + GetTileIndex(): 123 + GetTileIndex(): 31488 + GetTileIndex(): 0 + GetTileIndex(): -257 + GetTileIndex(): 2570000 + IsValidTile(123): true + GetTileX(124): 124 + GetTileY(124): 0 + IsValidTile(124): true + IsValidTile(0): true + IsValidTile(-1): false + IsValidTile(): false + IsValidTile(): true + DemolishTile(): false + DemolishTile(): true + Distance + DistanceManhattan(): 54 + DistanceMax(): 39 + DistanceSquare(): 1746 + DistanceFromEdge(): 16 + +--AIMarine-- + IsWaterDepotTile(): false + IsDockTile(): false + IsBuoyTile(): false + IsLockTile(): false + IsCanalTile(): false + GetBankBalance(): 479664 + BuildWaterDepot(): true + BuildDock(): true + BuildBuoy(): true + BuildLock(): true + HasTransportType(): false + BuildCanal(): true + HasTransportType(): true + IsWaterDepotTile(): true + IsDockTile(): true + IsBuoyTile(): true + IsLockTile(): true + IsCanalTile(): true + GetBankBalance(): 465070 + +--AIWaypointList(BUOY)-- + Count(): 1 + Location ListDump: + 28481 + HasWaypointType: + false true false + + RemoveWaterDepot(): true + RemoveDock(): true + RemoveBuoy(): true + RemoveLock(): true + RemoveCanal(): true + IsWaterDepotTile(): false + IsDockTile(): false + IsBuoyTile(): false + IsLockTile(): false + IsCanalTile(): false + GetBankBalance(): 459675 + BuildWaterDepot(): true + BuildDock(): true + +--Prices-- + -Rail- + 0,BT_TRACK: 75 + 0,BT_SIGNAL: 48 + 0,BT_DEPOT: 450 + 0,BT_STATION: 285 + 0,BT_WAYPOINT: 450 + 1,BT_TRACK: -1 + 1,BT_SIGNAL: -1 + 1,BT_DEPOT: -1 + 1,BT_STATION: -1 + 1,BT_WAYPOINT: -1 + -Road- + ROADTYPE_ROAD,BT_ROAD: 71 + ROADTYPE_ROAD,BT_DEPOT: 375 + ROADTYPE_ROAD,BT_BUS_STOP: 150 + ROADTYPE_ROAD,BT_TRUCK_STOP: 150 + ROADTYPE_TRAM,BT_ROAD: -1 + ROADTYPE_TRAM,BT_DEPOT: -1 + ROADTYPE_TRAM,BT_BUS_STOP: -1 + ROADTYPE_TRAM,BT_TRUCK_STOP: -1 + -Water- + BT_DOCK: 262 + BT_DEPOT: 525 + BT_BUOY: 262 + -Tile- + BT_FOUNDATION: 187 + BT_TERRAFORM: 187 + BT_BUILD_TREES: 15 + BT_CLEAR_GRASS: 15 + BT_CLEAR_ROUGH: 30 + BT_CLEAR_ROCKY: 150 + BT_CLEAR_FIELDS: 375 + BT_CLEAR_HOUSE: 1200 + +--Rail-- + IsRailTile(): false + BuildRailTrack(): true + BuildSignal(): true + RemoveRailTrack(): false + RemoveRailTrack(): true + BuildRail(): true + HasTransportType(): true + HasTransportType(): false + 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 + IsRailTile(): false + BuildRailDepot(): false + BuildRailDepot(): false + BuildRailDepot(): true + BuildRailDepot(): false + GetRailDepotFrontTile(): 33412 + IsBuildable(): false + DepotList + Count(): 1 + Depot distance from (0,0) ListDump: + 33411 => 261 + RemoveDepot(): true + BuildRailDepot(): true + Station + BuildRailStation(): false + BuildRailStation(): true + IsRailStationTile(): false + IsRailStationTile(): true + IsRailStationTile(): true + RemoveRailStationTileRectangle():true + IsRailStationTile(): false + IsRailStationTile(): true + IsRailStationTile(): false + DemolishTile(): true + 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-- + Count(): 1 + ListDump: + RailType: 0 + GetName(): Railway construction + IsRailTypeAvailable(): true + GetMaxSpeed(): 0 + +--Road-- + Road + IsRoadTile(): false + BuildRoad(): false + BuildRoad(): false + HasTransportType(): false + BuildRoad(): true + HasTransportType(): true + AreRoadTilesConnected(): true + IsRoadTile(): true + HasRoadType(Road): true + HasRoadType(Tram): false + GetNeighbourRoadCount(): 2 + RemoveRoad(): false + RemoveRoad(): true + RemoveRoad(): false + RemoveRoad(): true + BuildOneWayRoad(): true + AreRoadTilesConnected(): true + AreRoadTilesConnected(): false + BuildOneWayRoad(): true + AreRoadTilesConnected(): false + AreRoadTilesConnected(): false + BuildOneWayRoad(): true + BuildOneWayRoad(): true + AreRoadTilesConnected(): true + AreRoadTilesConnected(): true + RemoveRoad(): true + IsRoadTypeAvailable(Road): true + IsRoadTypeAvailable(Tram): false + SetCurrentRoadType(Tram): (null : 0x00000000) + GetCurrentRoadType(): 0 + Depot + IsRoadTile(): false + BuildRoadDepot(): false + BuildRoadDepot(): false + BuildRoadDepot(): true + BuildRoadDepot(): false + HasRoadType(Road): true + HasRoadType(Tram): false + GetLastError(): 260 + GetLastErrorString(): ERR_AREA_NOT_CLEAR + GetErrorCategory(): 1 + IsRoadTile(): false + GetRoadDepotFrontTile(): 33412 + IsRoadDepotTile(): true + IsBuildable(): false + DepotList + Count(): 1 + Depot distance from (0,0) ListDump: + 33411 => 261 + RemoveRoadDepot(): true + RemoveRoadDepot(): false + Station + IsRoadTile(): false + BuildRoadStation(): false + BuildRoadStation(): false + BuildRoadStation(): true + BuildRoadStation(): true + IsStationTile(): true + IsStationTile(): false + HasRoadType(Road): true + HasRoadType(Tram): false + IsRoadTile(): false + GetDriveThroughBackTile(): -1 + GetRoadStationFrontTile(): 33412 + IsRoadStationTile(): true + IsDriveThroughRoadStationTile: false + RemoveRoadStation(): true + RemoveRoadStation(): false + Station Types + BuildRoadStation(bus): true + BuildRoadStation(truck): true + BuildRoadStation(truck): true + BuildRoadStation(bus): true + BuildRoadStation(truck): true + BuildDriveThroughRoadStation(bus-drive): true + BuildDriveThroughRoadStation(truck-drive): true + BuildDriveThroughRoadStation(bus-drive): true + BuildDriveThroughRoadStation(truck-drive): true + BuildRoadDepot(): true + GetRoadStationFrontTile(): 33411 + GetRoadStationFrontTile(): 33924 + IsDriveThroughRoadStationTile: true + IsBuildable(): false + GetDriveThroughBackTile(): 33416 + GetRoadStationFrontTile(): 33414 + IsRoadTile(): true + +--Sign-- + BuildSign(33410, 'Some Sign'): 0 + BuildSign(33411, 'Test'): 1 + SetName(1, 'Test2'): true + BuildSign(33409, 'Some other Sign'): 2 + RemoveSign(2): true + + Sign 0 + IsValidSign(): true + GetName(): Some Sign + GetLocation(): 33410 + Sign 1 + IsValidSign(): true + GetName(): Test2 + GetLocation(): 33411 + Valid Signs: 2 + +--Station-- + IsValidStation(0): true + IsValidStation(1000): false + GetName(0): Beningville Airport + SetName(0): true + GetName(0): Look, a station + GetLocation(1): 29253 + GetLocation(1000): -1 + GetStationID(33411): 6 + GetStationID(34411): 65535 + GetStationID(33411): 6 + HasRoadType(3, TRAM): false + HasRoadType(3, ROAD): false + HasRoadType(33411, TRAM): false + HasRoadType(33411, ROAD): true + HasStationType(3, BUS): false + HasStationType(3, TRAIN): false + GetCoverageRadius(BUS): 3 + GetCoverageRadius(TRUCK): 3 + GetCoverageRadius(TRAIN): 4 + GetNearestTown(): 15 + GetNearestTown(): 65535 + GetNearestTown(): 10 + +--CargoWaiting-- + GetCargoWaiting(0, 0): 0 + GetCargoWaitingFrom(0, 0, 0): 0 + GetCargoWaitingVia(0, 0, 0): 0 + GetCargoWaitingFromVia(0, 0, 0, 0): 0 + GetCargoWaitingFromVia(0, 0, 1000, 0): -1 + GetCargoWaitingFrom(0, 1000, 0): -1 + GetCargoWaitingVia(0, 1000, 0): -1 + GetCargoWaitingFromVia(0, 1000, 0, 0): -1 + GetCargoWaitingFromVia(0, 1000, 1000, 0): -1 + GetCargoWaiting(1000, 0): -1 + 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-- + HasTreeOnTile(): false + IsFarmTile(): true + IsRockTile(): true + IsRoughTile(): true + HasTreeOnTile(): true + IsFarmTile(): false + IsRockTile(): false + IsRoughTile(): false + IsSnowTile(): false + IsDesertTile(): false + PlantTree(): true + HasTreeOnTile(): true + PlantTree(): false + HasTreeOnTile(): false + PlantTreeRectangle(): true + HasTreeOnTile(): true + +--TileList-- + Count(): 0 + Count(): 9 + Slope(): done + Count(): 9 + ListDump: + 27631 => 29 + 27631 => 65535 + 27631 => true + 27631 => false + 27888 => 13 + 27888 => 2 + 27888 => false + 27888 => false + 27376 => 12 + 27376 => 3 + 27376 => false + 27376 => false + 27375 => 12 + 27375 => 3 + 27375 => false + 27375 => false + 27889 => 9 + 27889 => 6 + 27889 => false + 27889 => false + 27887 => 8 + 27887 => 7 + 27887 => false + 27887 => false + 27632 => 8 + 27632 => 7 + 27632 => false + 27632 => false + 27633 => 0 + 27633 => 15 + 27633 => false + 27633 => false + 27377 => 0 + 27377 => 15 + 27377 => false + 27377 => false + +--TileList-- + Count(): 0 + Count(): 27 + Height(): done + Count(): 27 + ListDump: + 34956 => 4 + 34700 => 4 + 34444 => 4 + 34955 => 3 + 34954 => 3 + 34953 => 3 + 34699 => 3 + 34698 => 3 + 34697 => 3 + 34693 => 3 + 34692 => 3 + 34443 => 3 + 34442 => 3 + 34441 => 3 + 34439 => 3 + 34438 => 3 + 34437 => 3 + 34436 => 3 + 34952 => 2 + 34951 => 2 + 34950 => 2 + 34949 => 2 + 34948 => 2 + 34696 => 2 + 34695 => 2 + 34694 => 2 + 34440 => 2 + CornerHeight(North): done + Count(): 27 + ListDump: + 34956 => 4 + 34700 => 4 + 34444 => 4 + 34955 => 3 + 34954 => 3 + 34953 => 3 + 34699 => 3 + 34698 => 3 + 34697 => 3 + 34693 => 3 + 34692 => 3 + 34443 => 3 + 34442 => 3 + 34441 => 3 + 34439 => 3 + 34438 => 3 + 34437 => 3 + 34436 => 3 + 34952 => 2 + 34951 => 2 + 34950 => 2 + 34949 => 2 + 34948 => 2 + 34696 => 2 + 34695 => 2 + 34694 => 2 + 34440 => 2 + MinHeight(): done + Count(): 27 + ListDump: + 34956 => 4 + 34700 => 4 + 34444 => 4 + 34955 => 3 + 34954 => 3 + 34953 => 3 + 34699 => 3 + 34698 => 3 + 34697 => 3 + 34443 => 3 + 34442 => 3 + 34441 => 3 + 34436 => 3 + 34952 => 2 + 34951 => 2 + 34950 => 2 + 34949 => 2 + 34948 => 2 + 34696 => 2 + 34695 => 2 + 34694 => 2 + 34693 => 2 + 34692 => 2 + 34440 => 2 + 34439 => 2 + 34438 => 2 + 34437 => 2 + MaxHeight(): done + Count(): 27 + ListDump: + 34956 => 4 + 34955 => 4 + 34700 => 4 + 34699 => 4 + 34444 => 4 + 34443 => 4 + 34954 => 3 + 34953 => 3 + 34952 => 3 + 34951 => 3 + 34950 => 3 + 34949 => 3 + 34948 => 3 + 34698 => 3 + 34697 => 3 + 34696 => 3 + 34693 => 3 + 34692 => 3 + 34442 => 3 + 34441 => 3 + 34440 => 3 + 34439 => 3 + 34438 => 3 + 34437 => 3 + 34436 => 3 + 34695 => 2 + 34694 => 2 + Slope(): done + KeepValue(0): done + Count(): 12 + ListDump: + 34956 => 0 + 34954 => 0 + 34953 => 0 + 34700 => 0 + 34698 => 0 + 34697 => 0 + 34695 => 0 + 34694 => 0 + 34444 => 0 + 34442 => 0 + 34441 => 0 + 34436 => 0 + Buildable(): done + KeepValue(1): done + Count(): 35 + BuildableRectangle(3, 3) ListDump: + 42415 => 1 + 42414 => 1 + 42413 => 1 + 42412 => 1 + 42411 => 1 + 42410 => 1 + 42159 => 1 + 42158 => 1 + 42157 => 1 + 42156 => 1 + 42155 => 1 + 42154 => 1 + 41903 => 1 + 41902 => 1 + 41901 => 1 + 41900 => 1 + 41899 => 1 + 41898 => 1 + 41647 => 1 + 41646 => 1 + 41645 => 1 + 41644 => 1 + 41643 => 1 + 41642 => 1 + 41641 => 1 + 41391 => 1 + 41390 => 1 + 41389 => 1 + 41388 => 1 + 41387 => 1 + 41386 => 1 + 41385 => 1 + 42153 => 0 + 41897 => 0 + 41384 => 0 + DistanceManhattanToTile(30000) ListDump: + 42415 => 175 + 42414 => 174 + 42159 => 174 + 42413 => 173 + 42158 => 173 + 41903 => 173 + 42412 => 172 + 42157 => 172 + 41902 => 172 + 41647 => 172 + 42411 => 171 + 42156 => 171 + 41901 => 171 + 41646 => 171 + 41391 => 171 + 42410 => 170 + 42155 => 170 + 41900 => 170 + 41645 => 170 + 41390 => 170 + 42154 => 169 + 41899 => 169 + 41644 => 169 + 41389 => 169 + 42153 => 168 + 41898 => 168 + 41643 => 168 + 41388 => 168 + 41897 => 167 + 41642 => 167 + 41387 => 167 + 41641 => 166 + 41386 => 166 + 41385 => 165 + 41384 => 164 + DistanceSquareToTile(30000) ListDump: + 42415 => 18433 + 42159 => 18338 + 41903 => 18245 + 42414 => 18180 + 41647 => 18154 + 42158 => 18085 + 41391 => 18065 + 41902 => 17992 + 42413 => 17929 + 41646 => 17901 + 42157 => 17834 + 41390 => 17812 + 41901 => 17741 + 42412 => 17680 + 41645 => 17650 + 42156 => 17585 + 41389 => 17561 + 41900 => 17492 + 42411 => 17433 + 41644 => 17401 + 42155 => 17338 + 41388 => 17312 + 41899 => 17245 + 42410 => 17188 + 41643 => 17154 + 42154 => 17093 + 41387 => 17065 + 41898 => 17000 + 41642 => 16909 + 42153 => 16850 + 41386 => 16820 + 41897 => 16757 + 41641 => 16666 + 41385 => 16577 + 41384 => 16336 + GetOwner() ListDump: + 42415 => -1 + 42414 => -1 + 42413 => -1 + 42412 => -1 + 42411 => -1 + 42410 => -1 + 42159 => -1 + 42158 => -1 + 42157 => -1 + 42156 => -1 + 42155 => -1 + 42154 => -1 + 42153 => -1 + 41903 => -1 + 41902 => -1 + 41901 => -1 + 41900 => -1 + 41899 => -1 + 41898 => -1 + 41897 => -1 + 41647 => -1 + 41646 => -1 + 41645 => -1 + 41644 => -1 + 41643 => -1 + 41642 => -1 + 41641 => -1 + 41391 => -1 + 41390 => -1 + 41389 => -1 + 41388 => -1 + 41387 => -1 + 41386 => -1 + 41385 => -1 + 41384 => -1 + 33183 => -1 + 33182 => -1 + 33181 => -1 + 33180 => -1 + 33179 => -1 + 33178 => -1 + 33177 => -1 + 33176 => -1 + 33175 => -1 + 32927 => -1 + 32926 => -1 + 32925 => -1 + 32924 => -1 + 32923 => -1 + 32922 => -1 + 32921 => -1 + 32920 => -1 + 32919 => -1 + 32671 => -1 + 32670 => -1 + 32669 => -1 + 32668 => -1 + 32667 => -1 + 32666 => -1 + 32665 => -1 + 32664 => -1 + 32663 => -1 + 32415 => -1 + 32414 => -1 + 32413 => -1 + 32412 => -1 + 32411 => -1 + 32410 => -1 + 32409 => -1 + 32408 => -1 + 32407 => -1 + 32159 => -1 + 32158 => -1 + 32157 => -1 + 32156 => -1 + 32155 => -1 + 32154 => -1 + 32153 => -1 + 32152 => -1 + 32151 => -1 + 31903 => -1 + 31902 => -1 + 31901 => -1 + 31900 => -1 + 31899 => -1 + 31898 => -1 + 31897 => -1 + 31896 => -1 + 31895 => -1 + 31647 => -1 + 31646 => -1 + 31645 => -1 + 31644 => -1 + 31643 => -1 + 31642 => -1 + 31641 => -1 + 31640 => -1 + 31639 => -1 + 31391 => -1 + 31390 => -1 + 31389 => -1 + 31388 => -1 + 31387 => -1 + 31386 => -1 + 31385 => -1 + 31384 => -1 + 31383 => -1 + 31135 => -1 + 31134 => -1 + 31133 => -1 + 31132 => -1 + 31131 => -1 + 31130 => -1 + 31129 => -1 + 31128 => -1 + 31127 => -1 + 30879 => -1 + 30878 => -1 + 30877 => -1 + 30876 => -1 + 30875 => -1 + 30874 => -1 + 30873 => -1 + 30872 => -1 + 30871 => -1 + 30623 => -1 + 30622 => -1 + 30621 => -1 + 30620 => -1 + 30619 => -1 + 30618 => -1 + 30617 => -1 + 30616 => -1 + 30615 => -1 + GetTownAuthority() ListDump: + 33183 => 65535 + 33182 => 65535 + 33181 => 65535 + 33180 => 65535 + 33179 => 65535 + 33178 => 65535 + 33177 => 65535 + 33176 => 65535 + 33175 => 65535 + 32927 => 65535 + 32926 => 65535 + 32925 => 65535 + 32924 => 65535 + 32923 => 65535 + 32922 => 65535 + 32921 => 65535 + 32920 => 65535 + 32919 => 65535 + 32671 => 65535 + 32670 => 65535 + 32669 => 65535 + 32668 => 65535 + 32667 => 65535 + 32666 => 65535 + 32665 => 65535 + 32664 => 65535 + 32663 => 65535 + 32415 => 65535 + 32414 => 65535 + 32413 => 65535 + 32412 => 65535 + 32411 => 65535 + 32410 => 65535 + 32409 => 65535 + 32408 => 65535 + 32407 => 65535 + 32159 => 65535 + 32158 => 65535 + 32157 => 65535 + 32156 => 65535 + 32155 => 65535 + 32154 => 65535 + 32153 => 65535 + 32152 => 65535 + 32151 => 65535 + 31903 => 65535 + 31902 => 65535 + 31901 => 65535 + 31900 => 65535 + 31899 => 65535 + 31898 => 65535 + 31897 => 65535 + 31896 => 65535 + 31895 => 65535 + 31647 => 65535 + 31646 => 65535 + 31645 => 65535 + 31644 => 65535 + 31643 => 65535 + 31642 => 65535 + 31641 => 65535 + 31640 => 65535 + 31639 => 65535 + 31391 => 65535 + 31390 => 65535 + 31389 => 65535 + 31388 => 65535 + 31387 => 65535 + 31386 => 65535 + 31385 => 65535 + 31384 => 65535 + 31383 => 65535 + 31135 => 65535 + 31134 => 65535 + 31133 => 65535 + 31132 => 65535 + 31131 => 65535 + 31130 => 65535 + 31129 => 65535 + 31128 => 65535 + 31127 => 65535 + 30879 => 65535 + 30878 => 65535 + 30877 => 65535 + 30876 => 65535 + 30875 => 65535 + 30874 => 65535 + 30873 => 65535 + 30872 => 65535 + 30871 => 65535 + 30623 => 65535 + 30622 => 65535 + 30621 => 65535 + 30620 => 65535 + 30619 => 65535 + 30618 => 65535 + 30617 => 65535 + 30616 => 65535 + 30615 => 65535 + 42415 => 3 + 42414 => 3 + 42413 => 3 + 42412 => 3 + 42411 => 3 + 42410 => 3 + 42159 => 3 + 42158 => 3 + 42157 => 3 + 42156 => 3 + 42155 => 3 + 42154 => 3 + 42153 => 3 + 41903 => 3 + 41902 => 3 + 41901 => 3 + 41900 => 3 + 41899 => 3 + 41898 => 3 + 41897 => 3 + 41647 => 3 + 41646 => 3 + 41645 => 3 + 41644 => 3 + 41643 => 3 + 41642 => 3 + 41641 => 3 + 41391 => 3 + 41390 => 3 + 41389 => 3 + 41388 => 3 + 41387 => 3 + 41386 => 3 + 41385 => 3 + 41384 => 3 + GetClosestTown() ListDump: + 31127 => 24 + 30872 => 24 + 30871 => 24 + 30617 => 24 + 30616 => 24 + 30615 => 24 + 42415 => 3 + 42414 => 3 + 42413 => 3 + 42412 => 3 + 42411 => 3 + 42410 => 3 + 42159 => 3 + 42158 => 3 + 42157 => 3 + 42156 => 3 + 42155 => 3 + 42154 => 3 + 42153 => 3 + 41903 => 3 + 41902 => 3 + 41901 => 3 + 41900 => 3 + 41899 => 3 + 41898 => 3 + 41897 => 3 + 41647 => 3 + 41646 => 3 + 41645 => 3 + 41644 => 3 + 41643 => 3 + 41642 => 3 + 41641 => 3 + 41391 => 3 + 41390 => 3 + 41389 => 3 + 41388 => 3 + 41387 => 3 + 41386 => 3 + 41385 => 3 + 41384 => 3 + 33183 => 3 + 33182 => 3 + 33181 => 3 + 33180 => 3 + 33179 => 3 + 33178 => 3 + 33177 => 3 + 33176 => 3 + 33175 => 3 + 32927 => 3 + 32926 => 3 + 32925 => 3 + 32924 => 3 + 32923 => 3 + 32922 => 3 + 32921 => 3 + 32920 => 3 + 32919 => 3 + 32671 => 3 + 32670 => 3 + 32669 => 3 + 32668 => 3 + 32667 => 3 + 32666 => 3 + 32665 => 3 + 32664 => 3 + 32663 => 3 + 32415 => 3 + 32414 => 3 + 32413 => 3 + 32412 => 3 + 32411 => 3 + 32410 => 3 + 32409 => 3 + 32408 => 3 + 32407 => 3 + 32159 => 3 + 32158 => 3 + 32157 => 3 + 32156 => 3 + 32155 => 3 + 32154 => 3 + 32153 => 3 + 32152 => 3 + 32151 => 3 + 31903 => 3 + 31902 => 3 + 31901 => 3 + 31900 => 3 + 31899 => 3 + 31898 => 3 + 31897 => 3 + 31896 => 3 + 31895 => 3 + 31647 => 3 + 31646 => 3 + 31645 => 3 + 31644 => 3 + 31643 => 3 + 31642 => 3 + 31641 => 3 + 31640 => 3 + 31639 => 3 + 31391 => 3 + 31390 => 3 + 31389 => 3 + 31388 => 3 + 31387 => 3 + 31386 => 3 + 31385 => 3 + 31384 => 3 + 31383 => 3 + 31135 => 3 + 31134 => 3 + 31133 => 3 + 31132 => 3 + 31131 => 3 + 31130 => 3 + 31129 => 3 + 31128 => 3 + 30879 => 3 + 30878 => 3 + 30877 => 3 + 30876 => 3 + 30875 => 3 + 30874 => 3 + 30873 => 3 + 30623 => 3 + 30622 => 3 + 30621 => 3 + 30620 => 3 + 30619 => 3 + 30618 => 3 + CargoAcceptance(): done + KeepAboveValue(10): done + Count(): 15 + ListDump: + 41897 => 29 + 41385 => 26 + 41384 => 26 + 42153 => 25 + 41641 => 23 + 41899 => 17 + 41898 => 17 + 41387 => 17 + 41386 => 17 + 41643 => 14 + 41642 => 14 + 42411 => 13 + 42410 => 13 + 42155 => 13 + 42154 => 13 + RoadTile(): done + KeepValue(1): done + Count(): 0 + ListDump: + NeighbourRoadCount():done + KeepValue(1): done + Count(): 0 + ListDump: + Water(): done + Count(): 45 + ListDump: + 54941 => 1 + 54940 => 1 + 54939 => 1 + 54938 => 1 + 54937 => 1 + 54936 => 1 + 54935 => 1 + 54934 => 1 + 54933 => 1 + 54685 => 1 + 54684 => 1 + 54683 => 1 + 54682 => 1 + 54681 => 1 + 54680 => 1 + 54679 => 1 + 54678 => 1 + 54677 => 1 + 54429 => 1 + 54428 => 1 + 54427 => 1 + 54426 => 1 + 54425 => 1 + 54424 => 1 + 54423 => 1 + 54422 => 1 + 54421 => 1 + 54173 => 1 + 54172 => 1 + 54171 => 1 + 54170 => 1 + 54169 => 1 + 54168 => 0 + 54167 => 0 + 54166 => 0 + 54165 => 0 + 53917 => 0 + 53916 => 0 + 53915 => 0 + 53914 => 0 + 53913 => 0 + 53912 => 0 + 53911 => 0 + 53910 => 0 + 53909 => 0 + +--TileList_IndustryAccepting-- + Count(): 47 + Location ListDump: + 21234 => 16 + 21233 => 16 + 21232 => 16 + 21231 => 16 + 21230 => 16 + 21229 => 16 + 20978 => 16 + 20977 => 16 + 20976 => 16 + 20975 => 16 + 20974 => 16 + 20973 => 16 + 20722 => 16 + 20718 => 16 + 20717 => 16 + 20466 => 16 + 20462 => 16 + 20461 => 16 + 20210 => 16 + 20206 => 16 + 20205 => 16 + 19954 => 16 + 19950 => 16 + 19949 => 16 + 21490 => 8 + 21489 => 8 + 21488 => 8 + 21487 => 8 + 21486 => 8 + 21485 => 8 + 21484 => 8 + 21235 => 8 + 21228 => 8 + 20979 => 8 + 20972 => 8 + 20723 => 8 + 20716 => 8 + 20467 => 8 + 20460 => 8 + 20211 => 8 + 20204 => 8 + 19955 => 8 + 19948 => 8 + 19699 => 8 + 19698 => 8 + 19694 => 8 + 19693 => 8 + +--TileList_IndustryProducing-- + Count(): 92 + Location ListDump: + 46920 => 1 + 46919 => 1 + 46918 => 1 + 46917 => 1 + 46916 => 1 + 46915 => 1 + 46914 => 1 + 46913 => 1 + 46912 => 1 + 46911 => 1 + 46664 => 1 + 46663 => 1 + 46662 => 1 + 46661 => 1 + 46660 => 1 + 46659 => 1 + 46658 => 1 + 46657 => 1 + 46656 => 1 + 46655 => 1 + 46408 => 1 + 46407 => 1 + 46406 => 1 + 46405 => 1 + 46404 => 1 + 46403 => 1 + 46402 => 1 + 46401 => 1 + 46400 => 1 + 46399 => 1 + 46152 => 1 + 46151 => 1 + 46150 => 1 + 46149 => 1 + 46146 => 1 + 46145 => 1 + 46144 => 1 + 46143 => 1 + 45896 => 1 + 45895 => 1 + 45894 => 1 + 45889 => 1 + 45888 => 1 + 45887 => 1 + 45640 => 1 + 45639 => 1 + 45638 => 1 + 45633 => 1 + 45632 => 1 + 45631 => 1 + 45384 => 1 + 45383 => 1 + 45382 => 1 + 45377 => 1 + 45376 => 1 + 45375 => 1 + 45128 => 1 + 45127 => 1 + 45126 => 1 + 45121 => 1 + 45120 => 1 + 45119 => 1 + 44872 => 1 + 44871 => 1 + 44870 => 1 + 44869 => 1 + 44868 => 1 + 44867 => 1 + 44866 => 1 + 44865 => 1 + 44864 => 1 + 44863 => 1 + 44616 => 1 + 44615 => 1 + 44614 => 1 + 44613 => 1 + 44612 => 1 + 44611 => 1 + 44610 => 1 + 44609 => 1 + 44608 => 1 + 44607 => 1 + 44360 => 1 + 44359 => 1 + 44358 => 1 + 44357 => 1 + 44356 => 1 + 44355 => 1 + 44354 => 1 + 44353 => 1 + 44352 => 1 + 44351 => 1 + +--TileList_StationType-- + Count(): 4 + Location ListDump: + 33667 => 0 + 33415 => 0 + 33413 => 0 + 33411 => 0 + +--Town-- + GetTownCount(): 28 + Town 0 + IsValidTown(): true + GetName(): Planfield + GetPopulation(): 787 + GetLocation(): 15508 + GetHouseCount(): 30 + GetRating(): 0 + IsCity(): true + Town 1 + IsValidTown(): true + GetName(): Trenningville + GetPopulation(): 243 + GetLocation(): 46751 + GetHouseCount(): 17 + GetRating(): 0 + IsCity(): false + Town 2 + IsValidTown(): true + GetName(): Tonston + GetPopulation(): 380 + GetLocation(): 28365 + GetHouseCount(): 19 + GetRating(): 0 + IsCity(): false + Town 3 + IsValidTown(): true + GetName(): Tunford + GetPopulation(): 176 + GetLocation(): 41895 + GetHouseCount(): 11 + GetRating(): 0 + IsCity(): false + Town 4 + IsValidTown(): true + GetName(): Wruntown + GetPopulation(): 426 + GetLocation(): 41450 + GetHouseCount(): 18 + GetRating(): 0 + IsCity(): true + Town 5 + IsValidTown(): true + GetName(): Fratston + GetPopulation(): 205 + GetLocation(): 55007 + GetHouseCount(): 11 + GetRating(): 0 + IsCity(): false + Town 6 + IsValidTown(): true + GetName(): Muningville + GetPopulation(): 679 + GetLocation(): 38200 + GetHouseCount(): 28 + GetRating(): 0 + IsCity(): false + Town 7 + IsValidTown(): true + GetName(): Hutford + GetPopulation(): 950 + GetLocation(): 59234 + GetHouseCount(): 33 + GetRating(): 0 + IsCity(): false + Town 8 + IsValidTown(): true + GetName(): Satown + GetPopulation(): 358 + GetLocation(): 51267 + GetHouseCount(): 20 + GetRating(): 0 + IsCity(): true + Town 9 + IsValidTown(): true + GetName(): Frindinghattan + GetPopulation(): 478 + GetLocation(): 5825 + GetHouseCount(): 18 + GetRating(): 0 + IsCity(): false + Town 10 + IsValidTown(): true + GetName(): Nuntburg + GetPopulation(): 737 + GetLocation(): 6446 + GetHouseCount(): 26 + GetRating(): 6 + IsCity(): false + Town 11 + IsValidTown(): true + GetName(): Fort Frindston + GetPopulation(): 180 + GetLocation(): 14935 + GetHouseCount(): 13 + GetRating(): 0 + IsCity(): false + Town 12 + IsValidTown(): true + GetName(): Gintborough + GetPopulation(): 982 + GetLocation(): 32740 + GetHouseCount(): 28 + GetRating(): 0 + IsCity(): true + Town 13 + IsValidTown(): true + GetName(): Great Hinninghall + GetPopulation(): 310 + GetLocation(): 9595 + GetHouseCount(): 14 + GetRating(): 0 + IsCity(): false + Town 14 + IsValidTown(): true + GetName(): Prundinghall + GetPopulation(): 432 + GetLocation(): 51298 + GetHouseCount(): 18 + GetRating(): 0 + IsCity(): false + Town 15 + IsValidTown(): true + GetName(): Beningville + GetPopulation(): 807 + GetLocation(): 42338 + GetHouseCount(): 33 + GetRating(): 6 + IsCity(): false + Town 16 + IsValidTown(): true + GetName(): Kennville + GetPopulation(): 780 + GetLocation(): 17345 + GetHouseCount(): 33 + GetRating(): 0 + IsCity(): true + Town 17 + IsValidTown(): true + GetName(): Quarfingfield + GetPopulation(): 218 + GetLocation(): 24252 + GetHouseCount(): 13 + GetRating(): 0 + IsCity(): false + Town 18 + IsValidTown(): true + GetName(): Nefingbridge + GetPopulation(): 262 + GetLocation(): 10574 + GetHouseCount(): 13 + GetRating(): 0 + IsCity(): false + Town 19 + IsValidTown(): true + GetName(): Mendston + GetPopulation(): 243 + GetLocation(): 6511 + GetHouseCount(): 14 + GetRating(): 0 + IsCity(): false + Town 20 + IsValidTown(): true + GetName(): Chenfingbourne + GetPopulation(): 437 + GetLocation(): 22585 + GetHouseCount(): 15 + GetRating(): 6 + IsCity(): true + Town 21 + IsValidTown(): true + GetName(): Franinghead + GetPopulation(): 802 + GetLocation(): 9634 + GetHouseCount(): 27 + GetRating(): 0 + IsCity(): false + Town 22 + IsValidTown(): true + GetName(): Natborough + GetPopulation(): 221 + GetLocation(): 51891 + GetHouseCount(): 12 + GetRating(): 0 + IsCity(): false + Town 23 + IsValidTown(): true + GetName(): Larborough + GetPopulation(): 652 + GetLocation(): 59622 + GetHouseCount(): 27 + GetRating(): 0 + IsCity(): false + Town 24 + IsValidTown(): true + GetName(): Little Frutford + GetPopulation(): 668 + GetLocation(): 19596 + GetHouseCount(): 34 + GetRating(): 4 + IsCity(): true + Town 25 + IsValidTown(): true + GetName(): Grinnway + GetPopulation(): 563 + GetLocation(): 16433 + GetHouseCount(): 15 + GetRating(): 0 + IsCity(): false + Town 26 + IsValidTown(): true + GetName(): Beburg + GetPopulation(): 362 + GetLocation(): 39505 + GetHouseCount(): 18 + GetRating(): 0 + IsCity(): false + Town 27 + IsValidTown(): true + GetName(): Fudhattan + GetPopulation(): 390 + GetLocation(): 45525 + GetHouseCount(): 19 + GetRating(): 0 + IsCity(): false + Valid Towns: 28 + GetTownCount(): 28 + +--TownList-- + Count(): 28 + Location ListDump: + 23 => 59622 + 7 => 59234 + 5 => 55007 + 22 => 51891 + 14 => 51298 + 8 => 51267 + 1 => 46751 + 27 => 45525 + 15 => 42338 + 3 => 41895 + 4 => 41450 + 26 => 39505 + 6 => 38200 + 12 => 32740 + 2 => 28365 + 17 => 24252 + 20 => 22585 + 24 => 19596 + 16 => 17345 + 25 => 16433 + 0 => 15508 + 11 => 14935 + 18 => 10574 + 21 => 9634 + 13 => 9595 + 19 => 6511 + 10 => 6446 + 9 => 5825 + DistanceManhattanToTile(30000) ListDump: + 23 => 297 + 5 => 272 + 9 => 240 + 4 => 230 + 27 => 225 + 22 => 216 + 16 => 195 + 21 => 194 + 12 => 190 + 1 => 176 + 3 => 165 + 7 => 164 + 2 => 164 + 17 => 163 + 0 => 157 + 19 => 155 + 13 => 155 + 24 => 133 + 14 => 133 + 18 => 106 + 8 => 102 + 15 => 98 + 11 => 98 + 10 => 94 + 26 => 70 + 25 => 54 + 6 => 40 + 20 => 38 + DistanceSquareToTile(30000) ListDump: + 23 => 46349 + 5 => 40034 + 4 => 36532 + 12 => 32500 + 27 => 30825 + 9 => 30050 + 2 => 24698 + 22 => 24386 + 16 => 23525 + 17 => 20129 + 21 => 19396 + 1 => 16546 + 3 => 16277 + 7 => 15496 + 0 => 13249 + 19 => 12433 + 13 => 12025 + 24 => 10145 + 14 => 9389 + 10 => 8468 + 8 => 7250 + 18 => 6676 + 11 => 5002 + 15 => 4804 + 25 => 2810 + 26 => 2458 + 6 => 1088 + 20 => 922 + IsWithinTownInfluence(15508) ListDump: + 0 => 1 + 27 => 0 + 26 => 0 + 25 => 0 + 24 => 0 + 23 => 0 + 22 => 0 + 21 => 0 + 20 => 0 + 19 => 0 + 18 => 0 + 17 => 0 + 16 => 0 + 15 => 0 + 14 => 0 + 13 => 0 + 12 => 0 + 11 => 0 + 10 => 0 + 9 => 0 + 8 => 0 + 7 => 0 + 6 => 0 + 5 => 0 + 4 => 0 + 3 => 0 + 2 => 0 + 1 => 0 + GetAllowedNoise() ListDump: + 27 => 2 + 26 => 2 + 25 => 2 + 24 => 2 + 23 => 2 + 22 => 2 + 21 => 2 + 20 => 2 + 19 => 2 + 18 => 2 + 17 => 2 + 16 => 2 + 14 => 2 + 13 => 2 + 12 => 2 + 11 => 2 + 10 => 2 + 9 => 2 + 8 => 2 + 7 => 2 + 6 => 2 + 5 => 2 + 4 => 2 + 3 => 2 + 2 => 2 + 1 => 2 + 0 => 2 + 15 => 1 + KeepAboveValue(500): done + Count(): 11 + Population ListDump: + 12 => 982 + 7 => 950 + 15 => 807 + 21 => 802 + 0 => 787 + 16 => 780 + 10 => 737 + 6 => 679 + 24 => 668 + 23 => 652 + 25 => 563 + HasStatue(): false + GetRoadReworkDuration(): 0 + GetExclusiveRightsCompany(): -1 + GetExclusiveRightsDuration(): 0 + IsActionAvailable(BUILD_STATUE): true + PerformTownAction(BUILD_STATUE): true + IsActionAvailable(BUILD_STATUE): false + HasStatue(): true + +--Tunnel-- + IsTunnelTile(): false + RemoveTunnel(): false + GetOtherTunnelEnd(): 28026 + BuildTunnel(): true + GetOtherTunnelEnd(): 28026 + IsTunnelTile(): true + IsTunnelTile(): true + RemoveTunnel(): true + IsTunnelTile(): false + --Errors-- + BuildTunnel(): true + BuildTunnel(): false + GetLastErrorString(): ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY + RemoveTunnel(): true + +--Vehicle-- + IsValidVehicle(-1): false + IsValidVehicle(0): false + IsValidVehicle(12): false + ISValidVehicle(9999): false + BuildVehicle(): 12 + IsValidVehicle(12): true + CloneVehicle(): 13 + --Accounting-- + GetCosts(): 11894 + Should be: 11894 + ResetCosts(): (null : 0x00000000) + SellVehicle(13): true + IsInDepot(): true + IsStoppedInDepot(): true + StartStopVehicle(): true + IsInDepot(): false + IsStoppedInDepot(): false + SendVehicleToDepot(): true + IsInDepot(): false + IsStoppedInDepot(): false + --Accounting-- + GetCosts(): -5947 + Should be: -5947 + GetName(): Road Vehicle 1 + SetName(): true + GetName(): MyVehicleName + CloneVehicle(): 13 + --VehicleData-- + GetLocation(): 33417 + GetEngineType(): 153 + GetUnitNumber(): 1 + GetAge(): 0 + GetMaxAge(): 5490 + GetAgeLeft(): 5490 + GetCurrentSpeed(): 7 + GetRunningCost(): 421 + GetProfitThisYear(): 0 + GetProfitLastYear(): 0 + GetCurrentValue(): 5947 + GetVehicleType(): 1 + GetRoadType(): 0 + GetCapacity(): 12 + GetCargoLoad(): 0 + IsInDepot(): false + GetNumWagons(): 1 + GetWagonEngineType(): 153 + GetWagonAge(): 0 + GetLength(): 8 + GetOwner(): 1 + BuildVehicle(): 14 + IsValidVehicle(14): true + IsInDepot(14): true + IsStoppedInDepot(14): true + IsValidVehicle(15): false + IsInDepot(15): false + IsStoppedInDepot(15): false + BuildVehicle(): 16 + IsValidVehicle(16): true + IsInDepot(16): true + IsStoppedInDepot(16): true + BuildRailDepot(): true + BuildVehicle(): 17 + BuildVehicle(): 18 + BuildVehicle(): 19 + MoveWagonChain(): true + GetNumWagons(): 3 + GetLength(): 24 + GetWagonEngineType(): 9 + GetWagonAge(): 1 + GetWagonEngineType(): 27 + GetWagonAge(): 1 + GetWagonEngineType(): 27 + GetWagonAge(): 0 + GetWagonEngineType(): 65535 + GetWagonAge(): -1 + --Errors-- + RefitVehicle(): false + GetLastErrorString(): ERR_VEHICLE_NOT_IN_DEPOT + SellVehicle(): false + GetLastErrorString(): ERR_VEHICLE_NOT_IN_DEPOT + SendVehicleToDepot(): false + GetLastErrorString(): ERR_UNKNOWN + +--VehicleList-- + Count(): 5 + Location ListDump: + 13 => 33417 + 12 => 33417 + 14 => 32119 + 16 => 28479 + 17 => 10008 + EngineType ListDump: + 14 => 219 + 16 => 204 + 13 => 153 + 12 => 153 + 17 => 9 + UnitNumber ListDump: + 13 => 2 + 17 => 1 + 16 => 1 + 14 => 1 + 12 => 1 + Age ListDump: + 17 => 1 + 16 => 1 + 14 => 1 + 13 => 1 + 12 => 1 + MaxAge ListDump: + 16 => 10980 + 14 => 10980 + 17 => 7320 + 13 => 5490 + 12 => 5490 + AgeLeft ListDump: + 16 => 10979 + 14 => 10979 + 17 => 7319 + 13 => 5489 + 12 => 5489 + CurrentSpeed ListDump: + 12 => 21 + 17 => 0 + 16 => 0 + 14 => 0 + 13 => 0 + RunningCost ListDump: + 14 => 2756 + 17 => 2296 + 16 => 2296 + 13 => 421 + 12 => 421 + ProfitThisYear ListDump: + 17 => 0 + 16 => 0 + 14 => 0 + 13 => 0 + 12 => -1 + ProfitLastYear ListDump: + 17 => 0 + 16 => 0 + 14 => 0 + 13 => 0 + 12 => 0 + CurrentValue ListDump: + 14 => 30761 + 16 => 30468 + 17 => 22265 + 13 => 5947 + 12 => 5947 + VehicleType ListDump: + 14 => 3 + 16 => 2 + 13 => 1 + 12 => 1 + 17 => 0 + RoadType ListDump: + 13 => 0 + 12 => 0 + 17 => -1 + 16 => -1 + 14 => -1 + VehicleType ListDump: + 13 => 12 + 12 => 12 + 17 => 0 + 16 => 0 + 14 => 0 + VehicleType ListDump: + 17 => 0 + 16 => 0 + 14 => 0 + 13 => 0 + 12 => 0 + +--Order-- + GetOrderCount(): 0 + GetOrderDestination(): -1 + AreOrderFlagsValid(): true + AreOrderFlagsValid(): false + AreOrderFlagsValid(): true + AreOrderFlagsValid(): true + AreOrderFlagsValid(): true + AreOrderFlagsValid(): true + IsValidConditionalOrder(): true + IsValidConditionalOrder(): false + IsValidConditionalOrder(): true + IsValidConditionalOrder(): false + IsValidVehicleOrder(): false + IsGotoStationOrder(): false + IsGotoDepotOrder(): false + IsGotoWaypointOrder(): false + IsConditionalOrder(): false + IsCurrentOrderPartOfOrderList(): false + GetOrderFlags(): 65535 + AppendOrder(): true + InsertOrder(): true + GetOrderCount(): 2 + IsValidVehicleOrder(): true + IsGotoStationOrder(): true + IsGotoDepotOrder(): false + IsGotoWaypointOrder(): false + IsConditionalOrder(): false + IsCurrentOrderPartOfOrderList(): false + GetOrderFlags(): 8 + GetOrderFlags(): 8 + GetOrderJumpTo(): -1 + RemoveOrder(): true + SetOrderFlags(): true + GetOrderFlags(): 64 + GetOrderDestination(): 33411 + CopyOrders(): false + CopyOrders(): true + ShareOrders(): false + ShareOrders(): true + UnshareOrders(): true + AppendOrder(): true + GetStopLocation(): -1 + BuildVehicle(): 20 + BuildRailStation(): true + AppendOrder(): true + GetOrderCount(): 1 + GetStopLocation(): 2 + SetStopLocation(): true + GetStopLocation(): 1 + +--VehicleList_Station-- + Count(): 1 + Location ListDump: + 20 => 23596 + foreach(): + 20 => 23596 + + First Subsidy Test + --Subsidy (0) -- + IsValidSubsidy(): true + IsAwarded(): false + GetAwardedTo(): -1 + GetExpireDate(): 714080 + GetSourceType(): 1 + GetSourceIndex(): 15 + GetDestinationType(): 1 + GetDestinationIndex(): 7 + GetCargoType(): 0 + IsEventWaiting: false + +--Math-- + -2147483648 < -2147483647: true + -2147483648 < -1 : true + -2147483648 < 0 : true + -2147483648 < 1 : true + -2147483648 < 2147483647: true + -2147483647 < -2147483648: false + -1 < -2147483648: false + 0 < -2147483648: false + 1 < -2147483648: false + 2147483647 < -2147483648: false + -1 > 2147483647: false + -1 > 1 : false + -1 > 0 : false + -1 > -1 : false + -1 > -2147483648: true + 1 > 2147483647: false + 1 > 1 : false + 1 > 0 : true + 1 > -1 : true + 1 > -2147483648: true + 2147483647 > 2147483646: true + 2147483647 > 1 : true + 2147483647 > 0 : true + 2147483647 > -1 : true + 2147483647 > -2147483648: true + 2147483646 > 2147483647: false + 1 > 2147483647: false + 0 > 2147483647: false + -1 > 2147483647: false + -2147483648 > 2147483647: false + 13725 > -2147483648: true +ERROR: The script died unexpectedly. diff --git a/bin/ai/regression/tst_stationlist/main.nut b/bin/ai/regression/tst_stationlist/main.nut new file mode 100644 index 0000000000..60f3e4a4a7 --- /dev/null +++ b/bin/ai/regression/tst_stationlist/main.nut @@ -0,0 +1,216 @@ +/* $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(); +} diff --git a/bin/ai/regression/tst_stationlist/result.txt b/bin/ai/regression/tst_stationlist/result.txt new file mode 100644 index 0000000000..20e594766f --- /dev/null +++ b/bin/ai/regression/tst_stationlist/result.txt @@ -0,0 +1,127 @@ + +--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. diff --git a/bin/ai/regression/tst_stationlist/test.sav b/bin/ai/regression/tst_stationlist/test.sav new file mode 100644 index 0000000000000000000000000000000000000000..ef551c74ff8f74202cb30e88b6c063442b44ed78 GIT binary patch literal 94348 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%0A0$MM2b8 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 xuVn$B_X1wa@. + */ + +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); +} diff --git a/bin/game/compat_1.6.nut b/bin/game/compat_1.6.nut new file mode 100644 index 0000000000..a3f5975287 --- /dev/null +++ b/bin/game/compat_1.6.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/game/compat_1.7.nut b/bin/game/compat_1.7.nut new file mode 100644 index 0000000000..b4c4d1bb35 --- /dev/null +++ b/bin/game/compat_1.7.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut new file mode 100644 index 0000000000..5aac3f8c1d --- /dev/null +++ b/bin/game/compat_1.8.nut @@ -0,0 +1,17 @@ +/* $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 . + */ + +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); +} diff --git a/bin/game/compat_1.9.nut b/bin/game/compat_1.9.nut new file mode 100644 index 0000000000..fe985b90d0 --- /dev/null +++ b/bin/game/compat_1.9.nut @@ -0,0 +1,8 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/docs/Readme_Windows_MSVC.md b/docs/Readme_Windows_MSVC.md new file mode 100644 index 0000000000..90ab2af657 --- /dev/null +++ b/docs/Readme_Windows_MSVC.md @@ -0,0 +1,71 @@ +# 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. diff --git a/media/baseset/orig_dos.obm b/media/baseset/orig_dos.obm new file mode 100644 index 0000000000..9920bfdbe1 --- /dev/null +++ b/media/baseset/orig_dos.obm @@ -0,0 +1,76 @@ +; $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. diff --git a/media/baseset/orig_tto.obm b/media/baseset/orig_tto.obm new file mode 100644 index 0000000000..ff600d00f6 --- /dev/null +++ b/media/baseset/orig_tto.obm @@ -0,0 +1,71 @@ +; $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. diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs new file mode 100644 index 0000000000..fffb577482 --- /dev/null +++ b/media/baseset/translations.vbs @@ -0,0 +1,123 @@ +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 . + +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 diff --git a/media/extra_grf/airports_orig_extra.nfo b/media/extra_grf/airports_orig_extra.nfo new file mode 100644 index 0000000000..f2a8dc8327 --- /dev/null +++ b/media/extra_grf/airports_orig_extra.nfo @@ -0,0 +1,12 @@ +// +// $Id$ +// +// This file is part of OpenTTD. +// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . +// + -1 * 0 0C "Climate specific airport sprite by PaulC" + -1 * 0 07 83 01 \7! 03 02 + -1 * 0 0A 01 01 2F 08 + -1 sprites/airports.png 8bpp 20 170 42 39 -19 -21 normal diff --git a/media/extra_grf/canals_extra.nfo b/media/extra_grf/canals_extra.nfo new file mode 100644 index 0000000000..3103886233 --- /dev/null +++ b/media/extra_grf/canals_extra.nfo @@ -0,0 +1,101 @@ +// +// $Id$ +// +// This file is part of OpenTTD. +// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . +// + -1 * 0 0C "Extra canal graphics by PaulC" + +// Differentiation for the climates starts here + +// Canal edges (arctic snowy) + -1 * 4 01 05 01 \b12 + -1 sprites/canals.png 8bpp 30 40 45 22 -11 -1 normal + -1 sprites/canals.png 8bpp 94 40 41 21 -8 10 normal + -1 sprites/canals.png 8bpp 142 40 42 21 -31 10 normal + -1 sprites/canals.png 8bpp 190 40 43 22 -31 -1 normal + -1 sprites/canals.png 8bpp 238 40 22 22 11 4 normal + -1 sprites/canals.png 8bpp 270 40 24 16 -11 15 normal + -1 sprites/canals.png 8bpp 302 40 23 23 -31 4 normal + -1 sprites/canals.png 8bpp 334 40 24 18 -11 -1 normal + -1 sprites/canals.png 8bpp 366 40 12 11 21 10 normal + -1 sprites/canals.png 8bpp 398 40 19 10 -8 21 normal + -1 sprites/canals.png 8bpp 430 40 11 10 -31 10 normal + -1 sprites/canals.png 8bpp 446 40 24 16 -11 -6 normal + -1 * 7 02 05 10 01 00 00 00 + +// Canal edges (arctic normal) + -1 * 4 01 05 01 \b12 + -1 sprites/canals.png 8bpp 30 70 45 22 -11 -1 normal + -1 sprites/canals.png 8bpp 94 70 41 21 -8 10 normal + -1 sprites/canals.png 8bpp 142 70 42 21 -31 10 normal + -1 sprites/canals.png 8bpp 190 70 43 22 -31 -1 normal + -1 sprites/canals.png 8bpp 238 70 22 22 11 4 normal + -1 sprites/canals.png 8bpp 270 70 24 16 -11 15 normal + -1 sprites/canals.png 8bpp 302 70 23 23 -31 4 normal + -1 sprites/canals.png 8bpp 334 70 24 18 -11 -1 normal + -1 sprites/canals.png 8bpp 366 70 12 11 21 10 normal + -1 sprites/canals.png 8bpp 398 70 19 10 -8 21 normal + -1 sprites/canals.png 8bpp 430 70 11 10 -31 10 normal + -1 sprites/canals.png 8bpp 446 70 24 16 -11 -6 normal + -1 * 7 02 05 11 01 00 00 00 +// Choose the right arctic canal edges + -1 * 14 02 05 12 81 81 00 FF 01 10 00 04 04 11 00 + -1 * 6 07 83 01 \7! 01 01 + -1 * 7 03 05 01 02 00 12 00 + +// Canal edges (tropic desert) + -1 * 4 01 05 01 \b12 + -1 sprites/canals.png 8bpp 30 100 45 22 -11 -1 normal + -1 sprites/canals.png 8bpp 94 100 41 21 -8 10 normal + -1 sprites/canals.png 8bpp 142 100 42 21 -31 10 normal + -1 sprites/canals.png 8bpp 190 100 43 22 -31 -1 normal + -1 sprites/canals.png 8bpp 238 100 22 22 11 4 normal + -1 sprites/canals.png 8bpp 270 100 24 16 -11 15 normal + -1 sprites/canals.png 8bpp 302 100 23 23 -31 4 normal + -1 sprites/canals.png 8bpp 334 100 24 18 -11 -1 normal + -1 sprites/canals.png 8bpp 366 100 12 11 21 10 normal + -1 sprites/canals.png 8bpp 398 100 19 10 -8 21 normal + -1 sprites/canals.png 8bpp 430 100 11 10 -31 10 normal + -1 sprites/canals.png 8bpp 446 100 24 16 -11 -6 normal + -1 * 7 02 05 13 01 00 00 00 + +// Canal edges (tropic rainforest) + -1 * 4 01 05 01 \b12 + -1 sprites/canals.png 8bpp 30 130 45 22 -11 -1 normal + -1 sprites/canals.png 8bpp 94 130 41 21 -8 10 normal + -1 sprites/canals.png 8bpp 142 130 42 21 -31 10 normal + -1 sprites/canals.png 8bpp 190 130 43 22 -31 -1 normal + -1 sprites/canals.png 8bpp 238 130 22 22 11 4 normal + -1 sprites/canals.png 8bpp 270 130 24 16 -11 15 normal + -1 sprites/canals.png 8bpp 302 130 23 23 -31 4 normal + -1 sprites/canals.png 8bpp 334 130 24 18 -11 -1 normal + -1 sprites/canals.png 8bpp 366 130 12 11 21 10 normal + -1 sprites/canals.png 8bpp 398 130 19 10 -8 21 normal + -1 sprites/canals.png 8bpp 430 130 11 10 -31 10 normal + -1 sprites/canals.png 8bpp 446 130 24 16 -11 -6 normal + -1 * 7 02 05 14 01 00 00 00 +// Choose the right tropic canal edges + -1 * 14 02 05 15 81 81 00 FF 01 13 00 01 01 14 00 + -1 * 6 07 83 01 \7! 02 01 + -1 * 7 03 05 01 02 00 15 00 + +// Canal edges (toyland) + -1 * 4 01 05 01 \b12 + -1 sprites/canals.png 8bpp 30 160 45 22 -11 -1 normal + -1 sprites/canals.png 8bpp 94 160 41 21 -8 10 normal + -1 sprites/canals.png 8bpp 142 160 42 21 -31 10 normal + -1 sprites/canals.png 8bpp 190 160 43 22 -31 -1 normal + -1 sprites/canals.png 8bpp 238 160 22 22 11 4 normal + -1 sprites/canals.png 8bpp 270 160 24 16 -11 15 normal + -1 sprites/canals.png 8bpp 302 160 23 23 -31 4 normal + -1 sprites/canals.png 8bpp 334 160 24 18 -11 -1 normal + -1 sprites/canals.png 8bpp 366 160 12 11 21 10 normal + -1 sprites/canals.png 8bpp 398 160 19 10 -8 21 normal + -1 sprites/canals.png 8bpp 430 160 11 10 -31 10 normal + -1 sprites/canals.png 8bpp 446 160 24 16 -11 -6 normal + -1 * 7 02 05 16 01 00 00 00 + -1 * 6 07 83 01 \7! 03 01 + -1 * 7 03 05 01 02 00 16 00 diff --git a/media/extra_grf/chars_orig_extra.nfo b/media/extra_grf/chars_orig_extra.nfo new file mode 100644 index 0000000000..7979e79450 --- /dev/null +++ b/media/extra_grf/chars_orig_extra.nfo @@ -0,0 +1,249 @@ +// +// $Id$ +// +// This file is part of OpenTTD. +// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . +// + -1 * 0 0C "Font characters by PaulC, Bilbo and Jasper Vries" + +// Replace original characters + + -1 * 5 0A 01 02 41 00 + -1 sprites/chars.png 8bpp 10 10 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 20 10 4 12 0 -1 normal + -1 * 5 0A 01 02 86 00 + -1 sprites/chars.png 8bpp 50 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 70 10 9 12 0 -1 normal + -1 * 5 0A 01 01 8A 00 + -1 sprites/chars.png 8bpp 120 10 6 12 0 -1 normal + -1 * 5 0A 01 01 A0 00 + -1 sprites/chars.png 8bpp 230 10 10 12 0 -1 normal + -1 * 5 0A 01 04 A2 00 + -1 sprites/chars.png 8bpp 260 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 290 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 320 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 350 10 8 12 0 -1 normal + -1 * 5 0A 01 06 A7 00 + -1 sprites/chars.png 8bpp 410 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 440 10 12 12 0 -1 normal + -1 sprites/chars.png 8bpp 470 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 480 10 7 12 0 -1 normal + -1 sprites/chars.png 8bpp 500 10 7 12 0 -1 normal + -1 sprites/chars.png 8bpp 520 10 7 12 0 -1 normal + -1 * 5 0A 01 03 AE 00 + -1 sprites/chars.png 8bpp 560 10 4 12 0 -1 normal + -1 sprites/chars.png 8bpp 570 10 4 12 0 -1 normal + -1 sprites/chars.png 8bpp 580 10 5 12 0 -1 normal + -1 * 5 0A 01 05 B3 00 + -1 sprites/chars.png 8bpp 620 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 640 10 9 12 0 -1 normal + -1 sprites/chars.png 8bpp 660 10 9 12 0 -1 normal + -1 sprites/chars.png 8bpp 680 10 9 12 0 -1 normal + -1 sprites/chars.png 8bpp 700 10 9 12 0 -1 normal + -1 * 5 0A 01 03 BB 00 + -1 sprites/chars.png 8bpp 770 10 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 10 70 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 30 70 8 12 0 -1 normal + -1 * 5 0A 01 01 BF 00 + -1 sprites/chars.png 8bpp 70 70 9 12 0 -1 normal + -1 * 5 0A 01 05 C1 00 + -1 sprites/chars.png 8bpp 450 70 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 110 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 120 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 130 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 140 70 6 12 0 -1 normal + -1 * 5 0A 01 01 C7 00 + -1 sprites/chars.png 8bpp 160 70 6 12 0 -1 normal + -1 * 5 0A 01 03 CA 00 + -1 sprites/chars.png 8bpp 200 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 210 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 220 70 6 12 0 -1 normal + -1 * 5 0A 01 04 CE 00 + -1 sprites/chars.png 8bpp 230 70 4 12 0 -1 normal + -1 sprites/chars.png 8bpp 240 70 4 12 0 -1 normal + -1 sprites/chars.png 8bpp 250 70 5 12 0 -1 normal + -1 sprites/chars.png 8bpp 260 70 5 12 0 -1 normal + -1 * 5 0A 01 05 D3 00 + -1 sprites/chars.png 8bpp 290 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 310 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 320 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 330 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 340 70 6 12 0 -1 normal + -1 * 5 0A 01 03 DB 00 + -1 sprites/chars.png 8bpp 390 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 400 70 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 410 70 6 12 0 -1 normal + -1 * 5 0A 01 02 DF 00 + -1 sprites/chars.png 8bpp 420 70 7 12 0 -1 normal + -1 sprites/chars.png 8bpp 430 70 6 12 0 -1 normal + -1 * 5 0A 01 01 22 01 + -1 sprites/chars.png 8bpp 20 30 2 7 0 0 normal + -1 * 5 0A 01 01 7D 01 + -1 sprites/chars.png 8bpp 220 30 4 7 0 0 normal + -1 * 5 0A 01 02 80 01 + -1 sprites/chars.png 8bpp 230 30 9 7 0 0 normal + -1 sprites/chars.png 8bpp 250 30 3 7 0 0 normal + -1 * 5 0A 01 01 89 01 + -1 sprites/chars.png 8bpp 470 30 3 7 0 0 normal + -1 * 5 0A 01 01 9F 01 + -1 sprites/chars.png 8bpp 70 90 3 7 0 0 normal + -1 * 5 0A 01 01 A9 01 + -1 sprites/chars.png 8bpp 190 90 3 7 0 0 normal + -1 * 5 0A 01 02 BF 01 + -1 sprites/chars.png 8bpp 420 90 3 7 0 0 normal + -1 sprites/chars.png 8bpp 430 90 3 7 0 0 normal + -1 * 5 0A 01 01 02 02 + -1 sprites/chars.png 8bpp 20 40 4 21 0 -2 normal + -1 * 5 0A 01 01 41 02 + -1 sprites/chars.png 8bpp 30 40 14 21 0 -2 normal + -1 * 5 0A 01 06 46 02 + -1 sprites/chars.png 8bpp 50 40 10 21 0 -2 normal + -1 sprites/chars.png 8bpp 70 40 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 90 40 3 21 0 -2 normal + -1 sprites/chars.png 8bpp 100 40 13 21 0 -2 normal + -1 sprites/chars.png 8bpp 120 40 7 21 0 -2 normal + -1 sprites/chars.png 8bpp 130 40 16 21 0 -2 normal + -1 * 5 0A 01 01 50 02 + -1 sprites/chars.png 8bpp 150 40 16 21 0 -2 normal + -1 * 5 0A 01 04 52 02 + -1 sprites/chars.png 8bpp 170 40 8 21 0 -2 normal + -1 sprites/chars.png 8bpp 180 40 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 190 40 6 21 0 -2 normal + -1 sprites/chars.png 8bpp 200 40 6 21 0 -2 normal + -1 * 5 0A 01 01 5C 02 + -1 sprites/chars.png 8bpp 210 40 7 21 0 -2 normal + -1 * 5 0A 01 01 60 02 + -1 sprites/chars.png 8bpp 230 40 16 21 0 -2 normal + -1 * 5 0A 01 07 62 02 + -1 sprites/chars.png 8bpp 260 40 20 21 0 -2 normal + -1 sprites/chars.png 8bpp 290 40 20 21 0 -2 normal + -1 sprites/chars.png 8bpp 320 40 20 21 0 -2 normal + -1 sprites/chars.png 8bpp 350 40 20 21 0 -2 normal + -1 sprites/chars.png 8bpp 380 40 20 21 0 -2 normal + -1 sprites/chars.png 8bpp 410 40 20 21 0 -2 normal + -1 sprites/chars.png 8bpp 440 40 24 21 0 -2 normal + -1 * 5 0A 01 18 6A 02 + -1 sprites/chars.png 8bpp 480 40 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 500 40 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 520 40 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 540 40 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 560 40 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 570 40 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 580 40 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 590 40 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 600 40 17 21 0 -2 normal + -1 sprites/chars.png 8bpp 620 40 18 21 0 -2 normal + -1 sprites/chars.png 8bpp 640 40 15 21 0 -2 normal + -1 sprites/chars.png 8bpp 660 40 15 21 0 -2 normal + -1 sprites/chars.png 8bpp 680 40 15 21 0 -2 normal + -1 sprites/chars.png 8bpp 700 40 15 21 0 -2 normal + -1 sprites/chars.png 8bpp 720 40 15 21 0 -2 normal + -1 sprites/chars.png 8bpp 740 40 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 750 40 16 21 0 -2 normal + -1 sprites/chars.png 8bpp 770 40 17 21 0 -2 normal + -1 sprites/chars.png 8bpp 10 100 17 21 0 -2 normal + -1 sprites/chars.png 8bpp 30 100 17 21 0 -2 normal + -1 sprites/chars.png 8bpp 50 100 17 21 0 -2 normal + -1 sprites/chars.png 8bpp 70 100 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 90 100 14 21 0 -2 normal + -1 sprites/chars.png 8bpp 450 100 14 21 0 -2 normal + -1 * 5 0A 01 01 85 02 + -1 sprites/chars.png 8bpp 140 100 12 21 0 -2 normal + -1 * 5 0A 01 01 88 02 + -1 sprites/chars.png 8bpp 170 100 19 21 0 -2 normal + -1 * 5 0A 01 02 92 02 + -1 sprites/chars.png 8bpp 270 100 11 21 0 -2 normal + -1 sprites/chars.png 8bpp 290 100 15 21 0 -2 normal + -1 * 5 0A 01 01 97 02 + -1 sprites/chars.png 8bpp 340 100 11 21 0 -2 normal + -1 * 5 0A 01 02 99 02 + -1 sprites/chars.png 8bpp 360 100 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 370 100 11 21 0 -2 normal + -1 * 5 0A 01 01 A0 02 + -1 sprites/chars.png 8bpp 430 100 14 21 0 -2 normal + +// New characters, all fonts except monospaced + +// U+007B: Left Curly Bracket +// U+007C: Vertical Line +// U+007D: Right Curly Bracket +// U+007E: Tilde + -1 * 14 12 03 00 04 7B 00 01 04 7B 00 02 04 7B 00 + -1 sprites/chars.png 8bpp 10 130 5 12 0 -1 normal + -1 sprites/chars.png 8bpp 20 130 3 12 0 -1 normal + -1 sprites/chars.png 8bpp 30 130 5 12 0 -1 normal + -1 sprites/chars.png 8bpp 50 130 7 12 0 -1 normal + -1 sprites/chars.png 8bpp 10 150 3 7 0 0 normal + -1 sprites/chars.png 8bpp 20 150 1 7 0 0 normal + -1 sprites/chars.png 8bpp 30 150 3 7 0 0 normal + -1 sprites/chars.png 8bpp 50 150 4 7 0 0 normal + -1 sprites/chars.png 8bpp 10 160 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 20 160 3 21 0 -2 normal + -1 sprites/chars.png 8bpp 30 160 9 21 0 -2 normal + -1 sprites/chars.png 8bpp 50 160 10 21 0 -2 normal + +// U+007F: No-Break Space + -1 * 14 12 03 00 01 7F 00 01 01 7F 00 02 01 7F 00 + -1 sprites/chars.png 8bpp 70 130 2 12 0 -1 normal + -1 sprites/chars.png 8bpp 70 150 1 7 0 0 normal + -1 sprites/chars.png 8bpp 70 160 5 21 0 -2 normal + +// U+00AA: Feminine Ordinal Indicator + -1 * 14 12 03 00 01 AA 00 01 01 AA 00 02 01 AA 00 + -1 sprites/chars.png 8bpp 80 130 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 80 150 3 7 0 0 normal + -1 sprites/chars.png 8bpp 80 160 7 21 0 -2 normal + +// U+00AC: Not Sign +// U+00AD: Soft Hyphen + -1 * 14 12 03 00 02 AC 00 01 02 AC 00 02 02 AC 00 + -1 sprites/chars.png 8bpp 90 130 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 110 130 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 90 150 4 7 0 0 normal + -1 sprites/chars.png 8bpp 110 150 3 7 0 0 normal + -1 sprites/chars.png 8bpp 90 160 12 21 0 -2 normal + -1 sprites/chars.png 8bpp 110 160 9 21 0 -2 normal + +// U+00AF: Macron + -1 * 14 12 03 00 01 AF 00 01 01 AF 00 02 01 AF 00 + -1 sprites/chars.png 8bpp 130 130 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 130 150 3 7 0 0 normal + -1 sprites/chars.png 8bpp 130 160 12 21 0 -2 normal + +// U+00B4: Acute Accent +// U+00B5: Micro Sign +// U+00B6: Pilcrow Sign +// U+00B7: Middle Dot +// U+00B8: Cedilla +// U+00B9: Superscript One + -1 * 14 12 03 00 06 B4 00 01 06 B4 00 02 06 B4 00 + -1 sprites/chars.png 8bpp 150 130 4 12 0 -1 normal + -1 sprites/chars.png 8bpp 160 130 6 12 0 -1 normal + -1 sprites/chars.png 8bpp 180 130 8 12 0 -1 normal + -1 sprites/chars.png 8bpp 200 130 3 12 0 -1 normal + -1 sprites/chars.png 8bpp 210 130 4 12 0 -1 normal + -1 sprites/chars.png 8bpp 220 130 5 12 0 -1 normal + -1 sprites/chars.png 8bpp 150 150 2 7 0 0 normal + -1 sprites/chars.png 8bpp 160 150 3 7 0 0 normal + -1 sprites/chars.png 8bpp 180 150 6 7 0 0 normal + -1 sprites/chars.png 8bpp 200 150 1 7 0 0 normal + -1 sprites/chars.png 8bpp 210 150 2 7 0 0 normal + -1 sprites/chars.png 8bpp 220 150 2 7 0 0 normal + -1 sprites/chars.png 8bpp 150 160 4 21 0 -2 normal + -1 sprites/chars.png 8bpp 160 160 15 21 0 -2 normal + -1 sprites/chars.png 8bpp 180 160 13 21 0 -2 normal + -1 sprites/chars.png 8bpp 200 160 3 21 0 -2 normal + -1 sprites/chars.png 8bpp 210 160 5 21 0 -2 normal + -1 sprites/chars.png 8bpp 220 160 6 21 0 -2 normal + +// U+00BC: Vulgar Fraction One Quarter +// U+00BD: Vulgar Fraction One Half + -1 * 14 12 03 00 02 BC 00 01 02 BC 00 02 02 BC 00 + -1 sprites/chars.png 8bpp 230 130 10 12 0 -1 normal + -1 sprites/chars.png 8bpp 250 130 10 12 0 -1 normal + -1 sprites/chars.png 8bpp 230 150 9 7 0 0 normal + -1 sprites/chars.png 8bpp 250 150 9 7 0 0 normal + -1 sprites/chars.png 8bpp 230 160 16 21 0 -2 normal + -1 sprites/chars.png 8bpp 250 160 16 21 0 -2 normal diff --git a/media/extra_grf/openttdgui_group_livery.png b/media/extra_grf/openttdgui_group_livery.png new file mode 100644 index 0000000000000000000000000000000000000000..f45be670cb764012f3262295f526d2ddde0a3ae8 GIT binary patch literal 1426 zcmeAS@N?(olHy`uVBq!ia0y~yUgl#-H?mX?+&Q>Ls~v0}%L9VbqlxN+mgix)5c{P|;IL^wiZ1afp_8Z0!Xcv!56@!63Raik&V%9I8U69xeX2893?g9H|b0-lf- zk&G!a4J&kHOeAz%6l@|40y1neYJ3`|#LU=`v*k>UfQf{HhmJ*phfhgFLPt);l8zY% zR_wTQLP3JTLWaRZgC)X*C&NLaCPb$v$6-N3gpYS-{}2gCXIHM8zG82`?g6d}uiG zXU~H_0uBih0XZ586($8O0X+*!)*P5~=FXW9f7Y0oTrn~EV`B0rCF0M7nm;=h{JC-B z&zCnIA_XxzJq0c+dQy(8=y-5q!;cF){=c~J$A*C+hJm4hfnfmy!x09C2Mi2<7#RKp zF#O43_|w7gX9>ff0}OxeF#P$$aHfOf$pn@^a~S??F!*yM<OD)xBHxRJ8vLChSJoDB{&CwwM6hIVx^cd8Lt){>nLC-Q)BPA? z6d#07k~R#o&$+3xnuDur{gVClC%1Jh@_+Qv_Js1{2QwQCTR%jqF|^Og-G2M5TJp@5 z6M{L|<{2j{HaebXk-BxOxx;SFQ4Wtu&R$b5`!snUUg&D&X|ieE*}63yb{j$#rdhSE zi?VlIBx5x@bCbgjvzw0iLc_k zg?`hOJ3Jh^n2$35+nXZ)eqs5BS;`WPK}=!68A~Gij9$KC;uWdiGv(&*+23EXSv7hs zWHfG!(*AN};oir09L)EYTixX^;b~P`E!@#~*Vuwb1rzn&#?8X znUkJ;*famt?!fQAOgauFZnu8(v31eHKXH#=mU>^D>ts3M>Zh!ps2IJyYP;UtnjLrN zmYzkc_M6XkO=(vX=7(N3DZM&phAQXMX`d|w#oq}pRuVp_K1cE1cfo4k37R`nGL73= zSELyAr*|^!vv<7S%eL)R%-a5ai!EESE#mf1IG6rW=NbD$sm5)G`S. +// +// Sources for extra graphics to complement the original graphics. +// Checks whether the correct version of OpenTTD is used before +// allowing it to be used. +// + +// +// Number of sprites, it is wrong, but GRFcodec automagically gets it right. +// + 0 * 4 00 00 00 00 + + +// +// Check whether we are running OTTD or not. +// + -1 * 0 07 9D 04 \7= 01 00 00 00 01 + -1 * 0 0B 03 7F FF 80 " is not for TTDPatch. Use ttdpatch(w).grf." 00 + + +// +// Check for OTTD's version number +// + +// First step... Variable A1 might not exist. If that's the case it always +// skips. As we do not want to skip out of the whole testing, we skip over +// the real version check. + -1 * 0 07 A1 04 \7= FF FF FF FF 02 + +// Real version check. + -1 * 0 07 A1 04 \7> \w20304 01 01 03 + +// If the version check is supported, the string is translateable via OpenTTD +// itself. Use it!. + + -1 * 0 0B 03 7F 06 "1.1 (or trunk r20304)" 00 + +// Some OTTD versions before r11130 did support Action B, so use the English +// phrase there + -1 * 0 0B 03 7F FF "Requires OpenTTD version 1.1 (or trunk r20304) or better." 00 + +// Final fallback. No Action B support, just skip to the end of the file. + -1 * 0 07 A1 04 \7= FF FF FF FF 00 + +// We are a DOS paletted NewGRF, so tell OpenTTD that. Then it can actually +// do the right thing. Yay for that feature as that means no duplicate NewGRF! + -1 * 0 14 + "C" "INFO" + "B" "PALS" \w1 "D" + 00 + 00 + +// GRF ID, must start with FF so it gets ignored +//@@WARNING DISABLE 101 + -1 * 0 08 08 FF "OTT" + +// Name of the GRF + "Original baseset extra graphics" 00 + +// Description of the GRF. + "License: GNU General Public License version 2" 0D + "Andrew Parkhouse: rivers" 0D + "Addi and PaulC: original graphics fixes" 0D + "OpenTTD developers: other graphics" 00 + +// +// The real data of the GRF is acquired from several subfiles. +// +#include "chars_orig_extra.nfo" +#include "shore.nfo" +#include "fix_graphics.nfo" +#include "airports_orig_extra.nfo" +#include "canals_extra.nfo" +#include "rivers/rapids.nfo" +#include "rivers/temperate.nfo" +#include "rivers/arctic.nfo" +#include "rivers/tropic.nfo" +#include "rivers/toyland.nfo" diff --git a/projects/basesets_vs140.vcxproj b/projects/basesets_vs140.vcxproj new file mode 100644 index 0000000000..4e5ed52c4a --- /dev/null +++ b/projects/basesets_vs140.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v140 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs140.vcxproj.filters b/projects/basesets_vs140.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs140.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs140.vcxproj.filters.in b/projects/basesets_vs140.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs140.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs140.vcxproj.in b/projects/basesets_vs140.vcxproj.in new file mode 100644 index 0000000000..0471100a3e --- /dev/null +++ b/projects/basesets_vs140.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v140 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/basesets_vs141.vcxproj b/projects/basesets_vs141.vcxproj new file mode 100644 index 0000000000..a01f24989b --- /dev/null +++ b/projects/basesets_vs141.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v141 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs141.vcxproj.filters b/projects/basesets_vs141.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs141.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs141.vcxproj.filters.in b/projects/basesets_vs141.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs141.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs141.vcxproj.in b/projects/basesets_vs141.vcxproj.in new file mode 100644 index 0000000000..69dbd2e078 --- /dev/null +++ b/projects/basesets_vs141.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v141 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/basesets_vs142.vcxproj b/projects/basesets_vs142.vcxproj new file mode 100644 index 0000000000..d483708aa7 --- /dev/null +++ b/projects/basesets_vs142.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs142.vcxproj.filters b/projects/basesets_vs142.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs142.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs142.vcxproj.filters.in b/projects/basesets_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs142.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs142.vcxproj.in b/projects/basesets_vs142.vcxproj.in new file mode 100644 index 0000000000..9743d83e7a --- /dev/null +++ b/projects/basesets_vs142.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v142 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/gen-kdev4.sh b/projects/gen-kdev4.sh new file mode 100755 index 0000000000..4ea5dbc2a8 --- /dev/null +++ b/projects/gen-kdev4.sh @@ -0,0 +1,203 @@ +#!/bin/sh + +# $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 . + +# echo without interpretation of backslash escapes and without +# adding newline at the end - just the string as it is +rawprint() +{ + printf '%s' "$@" +} + +encode_dword() +{ + printf '\x%02x' \ + `expr $1 / 16777216 % 256` \ + `expr $1 / 65536 % 256` \ + `expr $1 / 256 % 256` \ + `expr $1 % 256` +} + +encode_string() +{ + # turn string into UTF-16 and hexdump it + hex_utf16=`rawprint "$1" | iconv -t UTF-16BE | od -t x1 -A n | tr -d -c '[:xdigit:]'`; + + encode_dword `rawprint "$hex_utf16" | wc -m | xargs -I {} expr {} / 2` # length = num hex digits / 2 + rawprint "$hex_utf16" | sed 's/../\\x&/g' # put '\x' prefix before every pair of digits +} + +encode_single_define() +{ + encode_string `rawprint "$1" | grep -o '^[^=]*'` # everything before '=' + rawprint '\x00\x00\x00\n\x00' + encode_string `rawprint "$1" | sed 's/^[^=]*=\?//'` # everything after '=' +} + +# $1 - newline-separated list of defines +encode_defines() +{ + # add some fixed defines and discard empty lines from the tail + defines=`printf 'va_list\nva_args\n%s' "$1"` + + # count lines (no newline at the end so add one) + encode_dword `printf '%s\n' "$defines" | wc -l` + + while [ -n "$defines" ]; do + encode_single_define `rawprint "$defines" | head -n 1` + defines=`rawprint "$defines" | tail -n +2` + done +} + +encode_includes() +{ + encode_dword 3 # number of custom includes + encode_string "$1/src/stdafx.h" + encode_string "$1/objs/lang" + encode_string "$1/objs/setting" +} + +# escape with a backslash (\) characters special to the sed replace string: \ & +# also escape our custom filed separator that we will be using in sed: @ +escape_sed_special() +{ + sed -e 's/[\&@]/\\&/g' +} + + + +PROJECT_DIR=`pwd` +DIR_NAME=`pwd | xargs -0 basename` + +USAGE_TEXT='Usage: + + projects/gen-kdev4 [PROJECT_NAME|-h|--help] + +PROJECT_NAME is the name of the project that will be displayed in KDevelop. +Before executing, cd into OpenTTD folder and run ./configure script. + +-h, --help + print help and exit' + +case "$# $1" in + '1 -h' | '1 --help') printf 'Generate OpenTTD project files for KDevelop 4+\n\n%s\n' "$USAGE_TEXT"; exit 0;; + 1*) PROJECT_NAME="$1";; + 0*) PROJECT_NAME="$DIR_NAME";; + *) printf 'Wrong arguments given. %s\n' "$USAGE_TEXT" >&2; exit 1;; +esac + +CFLAGS=`grep '^using CFLAGS\.\.\.' config.log 2>/dev/null` +if [ -z "$CFLAGS" ]; then + echo "OpenTTD config.log not found" >&2 + echo "cd into OpenTTD first and run 'configure'" >&2 + exit 1 +fi +DEFINES=`eval "printf '%s\n' $CFLAGS" | grep '^\-D' | cut -c3-` + +PROJECT_NAME_SED=s@!!PROJECT_NAME!!@`rawprint "$PROJECT_NAME" | escape_sed_special`@g +PROJECT_DIR_SED=s@!!PROJECT_DIR!!@`rawprint "$PROJECT_DIR" | escape_sed_special`@g +CUSTOM_DEFINES_SED=s@!!CUSTOM_DEFINES!!@`encode_defines "$DEFINES" | escape_sed_special`@g +CUSTOM_INCLUDES_SED=s@!!CUSTOM_INCLUDES!!@`encode_includes "$PROJECT_DIR" | escape_sed_special`@g + +mkdir -p .kdev4 + +sed -e "$PROJECT_NAME_SED" \ + >"$PROJECT_DIR/$DIR_NAME.kdev4" \ + << "EOF" +[Project] +Manager=KDevCustomMakeManager +Name=!!PROJECT_NAME!! +EOF + +sed -e "$PROJECT_DIR_SED" -e "$CUSTOM_DEFINES_SED" -e "$CUSTOM_INCLUDES_SED" \ + >"$PROJECT_DIR/.kdev4/$DIR_NAME.kdev4" \ + << "EOF" +[CustomDefinesAndIncludes][ProjectPath0] +Defines=!!CUSTOM_DEFINES!! +Includes=!!CUSTOM_INCLUDES!! +Path=. + +[Defines And Includes][Compiler] +Name=GCC +Path=gcc +Type=GCC + +[Filters] +size=10 + +[Filters][0] +inclusive=0 +pattern=.* +targets=3 + +[Filters][1] +inclusive=0 +pattern=.svn +targets=2 + +[Filters][2] +inclusive=0 +pattern=.hg +targets=2 + +[Filters][3] +inclusive=0 +pattern=.git +targets=2 + +[Filters][4] +inclusive=0 +pattern=*.rej +targets=1 + +[Filters][5] +inclusive=0 +pattern=*.orig +targets=1 + +[Filters][6] +inclusive=0 +pattern=*~ +targets=1 + +[Filters][7] +inclusive=0 +pattern=.*.kate-swp +targets=1 + +[Filters][8] +inclusive=0 +pattern=.*.swp +targets=1 + +[Filters][9] +inclusive=0 +pattern=/objs +targets=2 + +[Launch] +Launch Configurations=Launch Configuration 0 + +[Launch][Launch Configuration 0] +Configured Launch Modes=execute +Configured Launchers=nativeAppLauncher +Name=Launch OpenTTD\s +Type=Native Application + +[Launch][Launch Configuration 0][Data] +Arguments=-d 1 +Dependencies=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x00) +Dependency Action=Nothing +EnvironmentGroup= +Executable=file://!!PROJECT_DIR!!/bin/openttd +External Terminal=konsole --noclose --workdir %workdir -e %exe +Project Target= +Use External Terminal=false +Working Directory=file://!!PROJECT_DIR!!/bin +isExecutable=true +EOF diff --git a/projects/generate_vs141.vcxproj b/projects/generate_vs141.vcxproj new file mode 100644 index 0000000000..d7a877db17 --- /dev/null +++ b/projects/generate_vs141.vcxproj @@ -0,0 +1,39 @@ + + + + + Debug + Win32 + + + + generate + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} + generate + + + + Utility + v141 + + + + + + + + + + + + + Document + Running %27generate.vbs%27 ... + cscript "$(ProjectDir)generate.vbs" + %(FullPath);%(AdditionalInputs) + + + + + + diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj new file mode 100644 index 0000000000..3e55d7a1d4 --- /dev/null +++ b/projects/generate_vs142.vcxproj @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + generate + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} + generate + 8.1 + + + + Utility + v142 + + + + + + + + + + + + + Document + Running %27generate.vbs%27 ... + cscript "$(ProjectDir)generate.vbs" + %(FullPath);%(AdditionalInputs) + + + + + + diff --git a/projects/langs_vs141.vcxproj b/projects/langs_vs141.vcxproj new file mode 100644 index 0000000000..c554c6e378 --- /dev/null +++ b/projects/langs_vs141.vcxproj @@ -0,0 +1,390 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v141 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + + + Generating afrikaans language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\afrikaans.lng;%(Outputs) + + + Generating arabic_egypt language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\arabic_egypt.lng;%(Outputs) + + + Generating basque language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\basque.lng;%(Outputs) + + + Generating belarusian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\belarusian.lng;%(Outputs) + + + Generating brazilian_portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\brazilian_portuguese.lng;%(Outputs) + + + Generating bulgarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\bulgarian.lng;%(Outputs) + + + Generating catalan language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\catalan.lng;%(Outputs) + + + Generating croatian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\croatian.lng;%(Outputs) + + + Generating czech language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\czech.lng;%(Outputs) + + + Generating danish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\danish.lng;%(Outputs) + + + Generating dutch language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\dutch.lng;%(Outputs) + + + Generating english_AU language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_AU.lng;%(Outputs) + + + Generating english_US language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_US.lng;%(Outputs) + + + Generating esperanto language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\esperanto.lng;%(Outputs) + + + Generating estonian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\estonian.lng;%(Outputs) + + + Generating faroese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\faroese.lng;%(Outputs) + + + Generating finnish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\finnish.lng;%(Outputs) + + + Generating french language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\french.lng;%(Outputs) + + + Generating gaelic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\gaelic.lng;%(Outputs) + + + Generating galician language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\galician.lng;%(Outputs) + + + Generating german language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\german.lng;%(Outputs) + + + Generating greek language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\greek.lng;%(Outputs) + + + Generating hebrew language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hebrew.lng;%(Outputs) + + + Generating hungarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hungarian.lng;%(Outputs) + + + Generating icelandic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\icelandic.lng;%(Outputs) + + + Generating indonesian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\indonesian.lng;%(Outputs) + + + Generating irish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\irish.lng;%(Outputs) + + + Generating italian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\italian.lng;%(Outputs) + + + Generating japanese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\japanese.lng;%(Outputs) + + + Generating korean language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\korean.lng;%(Outputs) + + + Generating latin language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latin.lng;%(Outputs) + + + Generating latvian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latvian.lng;%(Outputs) + + + Generating lithuanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\lithuanian.lng;%(Outputs) + + + Generating luxembourgish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\luxembourgish.lng;%(Outputs) + + + Generating malay language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\malay.lng;%(Outputs) + + + Generating norwegian_bokmal language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_bokmal.lng;%(Outputs) + + + Generating norwegian_nynorsk language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) + + + Generating polish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\polish.lng;%(Outputs) + + + Generating portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\portuguese.lng;%(Outputs) + + + Generating romanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\romanian.lng;%(Outputs) + + + Generating russian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\russian.lng;%(Outputs) + + + Generating serbian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\serbian.lng;%(Outputs) + + + Generating simplified_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\simplified_chinese.lng;%(Outputs) + + + Generating slovak language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovak.lng;%(Outputs) + + + Generating slovenian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovenian.lng;%(Outputs) + + + Generating spanish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish.lng;%(Outputs) + + + Generating spanish_MX language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish_MX.lng;%(Outputs) + + + Generating swedish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\swedish.lng;%(Outputs) + + + Generating tamil language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\tamil.lng;%(Outputs) + + + Generating thai language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\thai.lng;%(Outputs) + + + Generating traditional_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\traditional_chinese.lng;%(Outputs) + + + Generating turkish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\turkish.lng;%(Outputs) + + + Generating ukrainian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\ukrainian.lng;%(Outputs) + + + Generating vietnamese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\vietnamese.lng;%(Outputs) + + + Generating welsh language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\welsh.lng;%(Outputs) + + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/langs_vs141.vcxproj.filters b/projects/langs_vs141.vcxproj.filters new file mode 100644 index 0000000000..bf5257ec82 --- /dev/null +++ b/projects/langs_vs141.vcxproj.filters @@ -0,0 +1,176 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + diff --git a/projects/langs_vs141.vcxproj.filters.in b/projects/langs_vs141.vcxproj.filters.in new file mode 100644 index 0000000000..0d60ee9595 --- /dev/null +++ b/projects/langs_vs141.vcxproj.filters.in @@ -0,0 +1,12 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + +!!FILES!! + + diff --git a/projects/langs_vs141.vcxproj.in b/projects/langs_vs141.vcxproj.in new file mode 100644 index 0000000000..b73d52c5c9 --- /dev/null +++ b/projects/langs_vs141.vcxproj.in @@ -0,0 +1,61 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v141 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + +!!FILES!! + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/langs_vs142.vcxproj b/projects/langs_vs142.vcxproj new file mode 100644 index 0000000000..0a11156bb0 --- /dev/null +++ b/projects/langs_vs142.vcxproj @@ -0,0 +1,390 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + + + Generating afrikaans language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\afrikaans.lng;%(Outputs) + + + Generating arabic_egypt language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\arabic_egypt.lng;%(Outputs) + + + Generating basque language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\basque.lng;%(Outputs) + + + Generating belarusian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\belarusian.lng;%(Outputs) + + + Generating brazilian_portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\brazilian_portuguese.lng;%(Outputs) + + + Generating bulgarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\bulgarian.lng;%(Outputs) + + + Generating catalan language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\catalan.lng;%(Outputs) + + + Generating croatian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\croatian.lng;%(Outputs) + + + Generating czech language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\czech.lng;%(Outputs) + + + Generating danish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\danish.lng;%(Outputs) + + + Generating dutch language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\dutch.lng;%(Outputs) + + + Generating english_AU language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_AU.lng;%(Outputs) + + + Generating english_US language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_US.lng;%(Outputs) + + + Generating esperanto language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\esperanto.lng;%(Outputs) + + + Generating estonian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\estonian.lng;%(Outputs) + + + Generating faroese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\faroese.lng;%(Outputs) + + + Generating finnish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\finnish.lng;%(Outputs) + + + Generating french language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\french.lng;%(Outputs) + + + Generating gaelic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\gaelic.lng;%(Outputs) + + + Generating galician language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\galician.lng;%(Outputs) + + + Generating german language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\german.lng;%(Outputs) + + + Generating greek language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\greek.lng;%(Outputs) + + + Generating hebrew language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hebrew.lng;%(Outputs) + + + Generating hungarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hungarian.lng;%(Outputs) + + + Generating icelandic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\icelandic.lng;%(Outputs) + + + Generating indonesian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\indonesian.lng;%(Outputs) + + + Generating irish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\irish.lng;%(Outputs) + + + Generating italian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\italian.lng;%(Outputs) + + + Generating japanese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\japanese.lng;%(Outputs) + + + Generating korean language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\korean.lng;%(Outputs) + + + Generating latin language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latin.lng;%(Outputs) + + + Generating latvian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latvian.lng;%(Outputs) + + + Generating lithuanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\lithuanian.lng;%(Outputs) + + + Generating luxembourgish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\luxembourgish.lng;%(Outputs) + + + Generating malay language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\malay.lng;%(Outputs) + + + Generating norwegian_bokmal language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_bokmal.lng;%(Outputs) + + + Generating norwegian_nynorsk language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) + + + Generating polish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\polish.lng;%(Outputs) + + + Generating portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\portuguese.lng;%(Outputs) + + + Generating romanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\romanian.lng;%(Outputs) + + + Generating russian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\russian.lng;%(Outputs) + + + Generating serbian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\serbian.lng;%(Outputs) + + + Generating simplified_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\simplified_chinese.lng;%(Outputs) + + + Generating slovak language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovak.lng;%(Outputs) + + + Generating slovenian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovenian.lng;%(Outputs) + + + Generating spanish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish.lng;%(Outputs) + + + Generating spanish_MX language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish_MX.lng;%(Outputs) + + + Generating swedish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\swedish.lng;%(Outputs) + + + Generating tamil language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\tamil.lng;%(Outputs) + + + Generating thai language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\thai.lng;%(Outputs) + + + Generating traditional_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\traditional_chinese.lng;%(Outputs) + + + Generating turkish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\turkish.lng;%(Outputs) + + + Generating ukrainian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\ukrainian.lng;%(Outputs) + + + Generating vietnamese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\vietnamese.lng;%(Outputs) + + + Generating welsh language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\welsh.lng;%(Outputs) + + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/langs_vs142.vcxproj.filters b/projects/langs_vs142.vcxproj.filters new file mode 100644 index 0000000000..bf5257ec82 --- /dev/null +++ b/projects/langs_vs142.vcxproj.filters @@ -0,0 +1,176 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + diff --git a/projects/langs_vs142.vcxproj.filters.in b/projects/langs_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..0d60ee9595 --- /dev/null +++ b/projects/langs_vs142.vcxproj.filters.in @@ -0,0 +1,12 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + +!!FILES!! + + diff --git a/projects/langs_vs142.vcxproj.in b/projects/langs_vs142.vcxproj.in new file mode 100644 index 0000000000..f24c7cad78 --- /dev/null +++ b/projects/langs_vs142.vcxproj.in @@ -0,0 +1,61 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + +!!FILES!! + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln new file mode 100644 index 0000000000..6e328ba764 --- /dev/null +++ b/projects/openttd_vs141.sln @@ -0,0 +1,103 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs141.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs141.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs141.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs141.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs141.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs141.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj new file mode 100644 index 0000000000..92edccd7c9 --- /dev/null +++ b/projects/openttd_vs141.vcxproj @@ -0,0 +1,1370 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v141 + + + Application + false + Unicode + true + v141 + + + Application + false + Unicode + v141 + + + Application + false + Unicode + true + v141 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters new file mode 100644 index 0000000000..e93c94f1f7 --- /dev/null +++ b/projects/openttd_vs141.vcxproj.filters @@ -0,0 +1,3101 @@ + + + + + {c76ff9f1-1e62-46d8-8d55-000000000000} + + + {c76ff9f1-1e62-46d8-8d55-000000000001} + + + {c76ff9f1-1e62-46d8-8d55-000000000002} + + + {c76ff9f1-1e62-46d8-8d55-000000000003} + + + {c76ff9f1-1e62-46d8-8d55-000000000004} + + + {c76ff9f1-1e62-46d8-8d55-000000000005} + + + {c76ff9f1-1e62-46d8-8d55-000000000006} + + + {c76ff9f1-1e62-46d8-8d55-000000000007} + + + {c76ff9f1-1e62-46d8-8d55-000000000008} + + + {c76ff9f1-1e62-46d8-8d55-000000000009} + + + {c76ff9f1-1e62-46d8-8d55-000000000010} + + + {c76ff9f1-1e62-46d8-8d55-000000000011} + + + {c76ff9f1-1e62-46d8-8d55-000000000012} + + + {c76ff9f1-1e62-46d8-8d55-000000000013} + + + {c76ff9f1-1e62-46d8-8d55-000000000014} + + + {c76ff9f1-1e62-46d8-8d55-000000000015} + + + {c76ff9f1-1e62-46d8-8d55-000000000016} + + + {c76ff9f1-1e62-46d8-8d55-000000000017} + + + {c76ff9f1-1e62-46d8-8d55-000000000018} + + + {c76ff9f1-1e62-46d8-8d55-000000000019} + + + {c76ff9f1-1e62-46d8-8d55-000000000020} + + + {c76ff9f1-1e62-46d8-8d55-000000000021} + + + {c76ff9f1-1e62-46d8-8d55-000000000022} + + + {c76ff9f1-1e62-46d8-8d55-000000000023} + + + {c76ff9f1-1e62-46d8-8d55-000000000024} + + + {c76ff9f1-1e62-46d8-8d55-000000000025} + + + {c76ff9f1-1e62-46d8-8d55-000000000026} + + + {c76ff9f1-1e62-46d8-8d55-000000000027} + + + {c76ff9f1-1e62-46d8-8d55-000000000028} + + + {c76ff9f1-1e62-46d8-8d55-000000000029} + + + {c76ff9f1-1e62-46d8-8d55-000000000030} + + + {c76ff9f1-1e62-46d8-8d55-000000000031} + + + {c76ff9f1-1e62-46d8-8d55-000000000032} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + MD5 + + + MD5 + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI API + + + Game API + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Drivers + + + Drivers + + + Drivers + + + Sprite loaders + + + Sprite loaders + + + Sprite loaders + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + Video + + + Video + + + Video + + + Video + + + Music + + + Music + + + Music + + + Music + + + Sound + + + Sound + + + Sound + + + Sound + + + Windows files + + + Windows files + + + Windows files + + + Windows files + + + Threading + + + Threading + + + + + + + diff --git a/projects/openttd_vs141.vcxproj.filters.in b/projects/openttd_vs141.vcxproj.filters.in new file mode 100644 index 0000000000..126bd61459 --- /dev/null +++ b/projects/openttd_vs141.vcxproj.filters.in @@ -0,0 +1,13 @@ + + + +!!FILTERS!! + + +!!FILES!! + + + + + + diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in new file mode 100644 index 0000000000..d28f500f1c --- /dev/null +++ b/projects/openttd_vs141.vcxproj.in @@ -0,0 +1,374 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v141 + + + Application + false + Unicode + true + v141 + + + Application + false + Unicode + v141 + + + Application + false + Unicode + true + v141 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + +!!FILES!! + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln new file mode 100644 index 0000000000..15cd430168 --- /dev/null +++ b/projects/openttd_vs142.sln @@ -0,0 +1,105 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28516.95 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs142.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs142.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs142.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs142.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs142.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs142.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs142.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs142.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1DE4D2BD-DBC4-4304-907E-34994EEAA4C1} + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj new file mode 100644 index 0000000000..34f7c5f280 --- /dev/null +++ b/projects/openttd_vs142.vcxproj @@ -0,0 +1,1370 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters new file mode 100644 index 0000000000..e93c94f1f7 --- /dev/null +++ b/projects/openttd_vs142.vcxproj.filters @@ -0,0 +1,3101 @@ + + + + + {c76ff9f1-1e62-46d8-8d55-000000000000} + + + {c76ff9f1-1e62-46d8-8d55-000000000001} + + + {c76ff9f1-1e62-46d8-8d55-000000000002} + + + {c76ff9f1-1e62-46d8-8d55-000000000003} + + + {c76ff9f1-1e62-46d8-8d55-000000000004} + + + {c76ff9f1-1e62-46d8-8d55-000000000005} + + + {c76ff9f1-1e62-46d8-8d55-000000000006} + + + {c76ff9f1-1e62-46d8-8d55-000000000007} + + + {c76ff9f1-1e62-46d8-8d55-000000000008} + + + {c76ff9f1-1e62-46d8-8d55-000000000009} + + + {c76ff9f1-1e62-46d8-8d55-000000000010} + + + {c76ff9f1-1e62-46d8-8d55-000000000011} + + + {c76ff9f1-1e62-46d8-8d55-000000000012} + + + {c76ff9f1-1e62-46d8-8d55-000000000013} + + + {c76ff9f1-1e62-46d8-8d55-000000000014} + + + {c76ff9f1-1e62-46d8-8d55-000000000015} + + + {c76ff9f1-1e62-46d8-8d55-000000000016} + + + {c76ff9f1-1e62-46d8-8d55-000000000017} + + + {c76ff9f1-1e62-46d8-8d55-000000000018} + + + {c76ff9f1-1e62-46d8-8d55-000000000019} + + + {c76ff9f1-1e62-46d8-8d55-000000000020} + + + {c76ff9f1-1e62-46d8-8d55-000000000021} + + + {c76ff9f1-1e62-46d8-8d55-000000000022} + + + {c76ff9f1-1e62-46d8-8d55-000000000023} + + + {c76ff9f1-1e62-46d8-8d55-000000000024} + + + {c76ff9f1-1e62-46d8-8d55-000000000025} + + + {c76ff9f1-1e62-46d8-8d55-000000000026} + + + {c76ff9f1-1e62-46d8-8d55-000000000027} + + + {c76ff9f1-1e62-46d8-8d55-000000000028} + + + {c76ff9f1-1e62-46d8-8d55-000000000029} + + + {c76ff9f1-1e62-46d8-8d55-000000000030} + + + {c76ff9f1-1e62-46d8-8d55-000000000031} + + + {c76ff9f1-1e62-46d8-8d55-000000000032} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + MD5 + + + MD5 + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI API + + + Game API + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Drivers + + + Drivers + + + Drivers + + + Sprite loaders + + + Sprite loaders + + + Sprite loaders + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + Video + + + Video + + + Video + + + Video + + + Music + + + Music + + + Music + + + Music + + + Sound + + + Sound + + + Sound + + + Sound + + + Windows files + + + Windows files + + + Windows files + + + Windows files + + + Threading + + + Threading + + + + + + + diff --git a/projects/openttd_vs142.vcxproj.filters.in b/projects/openttd_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..126bd61459 --- /dev/null +++ b/projects/openttd_vs142.vcxproj.filters.in @@ -0,0 +1,13 @@ + + + +!!FILTERS!! + + +!!FILES!! + + + + + + diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in new file mode 100644 index 0000000000..91689e8bde --- /dev/null +++ b/projects/openttd_vs142.vcxproj.in @@ -0,0 +1,374 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + +!!FILES!! + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest new file mode 100644 index 0000000000..c7905ee709 --- /dev/null +++ b/projects/os_versions.manifest @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/projects/regression.bat b/projects/regression.bat new file mode 100644 index 0000000000..db373c371b --- /dev/null +++ b/projects/regression.bat @@ -0,0 +1,6 @@ +cd ..\bin +editbin /nologo /subsystem:console openttd.exe +cscript /nologo ai\regression\run.vbs +set RESULT=%ERRORLEVEL% +editbin /nologo /subsystem:windows openttd.exe +exit %RESULT% diff --git a/projects/regression_vs140.vcxproj b/projects/regression_vs140.vcxproj new file mode 100644 index 0000000000..b1c9f4930a --- /dev/null +++ b/projects/regression_vs140.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v140 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + diff --git a/projects/regression_vs141.vcxproj b/projects/regression_vs141.vcxproj new file mode 100644 index 0000000000..fda3f3312d --- /dev/null +++ b/projects/regression_vs141.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v141 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + diff --git a/projects/regression_vs142.vcxproj b/projects/regression_vs142.vcxproj new file mode 100644 index 0000000000..3ddcc6f37a --- /dev/null +++ b/projects/regression_vs142.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v142 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj new file mode 100644 index 0000000000..9c20f1407e --- /dev/null +++ b/projects/settings_vs141.vcxproj @@ -0,0 +1,60 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v141 + + + + + + + + + +..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + + + + + + + + + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settings_vs141.vcxproj.filters b/projects/settings_vs141.vcxproj.filters new file mode 100644 index 0000000000..8caf9fa0a6 --- /dev/null +++ b/projects/settings_vs141.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + + + + + diff --git a/projects/settings_vs141.vcxproj.filters.in b/projects/settings_vs141.vcxproj.filters.in new file mode 100644 index 0000000000..08f90670d2 --- /dev/null +++ b/projects/settings_vs141.vcxproj.filters.in @@ -0,0 +1,15 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + +!!FILES!! + + + + + + diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in new file mode 100644 index 0000000000..23e044cc17 --- /dev/null +++ b/projects/settings_vs141.vcxproj.in @@ -0,0 +1,54 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v141 + + + + + + + + + +!!FILTERS!! + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + +!!FILES!! + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj new file mode 100644 index 0000000000..a2dda134b5 --- /dev/null +++ b/projects/settings_vs142.vcxproj @@ -0,0 +1,60 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v142 + + + + + + + + + +..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + + + + + + + + + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settings_vs142.vcxproj.filters b/projects/settings_vs142.vcxproj.filters new file mode 100644 index 0000000000..8caf9fa0a6 --- /dev/null +++ b/projects/settings_vs142.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + + + + + diff --git a/projects/settings_vs142.vcxproj.filters.in b/projects/settings_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..08f90670d2 --- /dev/null +++ b/projects/settings_vs142.vcxproj.filters.in @@ -0,0 +1,15 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + +!!FILES!! + + + + + + diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in new file mode 100644 index 0000000000..3e49b7ca02 --- /dev/null +++ b/projects/settings_vs142.vcxproj.in @@ -0,0 +1,54 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v142 + + + + + + + + + +!!FILTERS!! + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + +!!FILES!! + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settingsgen_vs141.vcxproj b/projects/settingsgen_vs141.vcxproj new file mode 100644 index 0000000000..2b356f2eab --- /dev/null +++ b/projects/settingsgen_vs141.vcxproj @@ -0,0 +1,83 @@ + + + + + Debug + Win32 + + + + settingsgen + {E9548DE9-F089-49B7-93A6-30BE2CC311C7} + settings + + + + Application + MultiByte + v141 + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\objs\settings\ + ..\objs\settings\ + settings_gen + + + + + + + + %(Inputs) + + + MinSpace + Size + SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + All + $(IntDir)$(TargetName).pdb + Level3 + true + ProgramDatabase + MultiThreadedDebug + + + $(OutDir)settings_gen.exe + true + false + + + Console + 5.01 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/settingsgen_vs141.vcxproj.filters b/projects/settingsgen_vs141.vcxproj.filters new file mode 100644 index 0000000000..c8afe0c8ed --- /dev/null +++ b/projects/settingsgen_vs141.vcxproj.filters @@ -0,0 +1,32 @@ + + + + + {a4678737-b3b3-4be5-9db1-fa6ccd164c59} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj new file mode 100644 index 0000000000..ca0418c15c --- /dev/null +++ b/projects/settingsgen_vs142.vcxproj @@ -0,0 +1,84 @@ + + + + + Debug + Win32 + + + + settingsgen + {E9548DE9-F089-49B7-93A6-30BE2CC311C7} + settings + 8.1 + + + + Application + MultiByte + v142 + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\objs\settings\ + ..\objs\settings\ + settings_gen + + + + + + + + %(Inputs) + + + MinSpace + Size + SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + All + $(IntDir)$(TargetName).pdb + Level3 + true + ProgramDatabase + MultiThreadedDebug + + + $(OutDir)settings_gen.exe + true + false + + + Console + 5.01 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/settingsgen_vs142.vcxproj.filters b/projects/settingsgen_vs142.vcxproj.filters new file mode 100644 index 0000000000..c8afe0c8ed --- /dev/null +++ b/projects/settingsgen_vs142.vcxproj.filters @@ -0,0 +1,32 @@ + + + + + {a4678737-b3b3-4be5-9db1-fa6ccd164c59} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + diff --git a/projects/strgen_vs141.vcxproj b/projects/strgen_vs141.vcxproj new file mode 100644 index 0000000000..addc6f10a5 --- /dev/null +++ b/projects/strgen_vs141.vcxproj @@ -0,0 +1,95 @@ + + + + + Debug + Win32 + + + + strgen + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} + strgen + + + + Application + false + MultiByte + v141 + + + + + + + + + + $(SolutionDir)..\objs\strgen\ + $(SolutionDir)..\objs\strgen\ + false + AllRules.ruleset + + + + + + .\Debug/strgen.tlb + + + + + /MP %(AdditionalOptions) + MinSpace + Size + STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + Default + MultiThreadedDebug + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x041d + + + true + true + $(IntDir)strgen.pdb + Console + false + + + MachineX86 + 5.01 + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/strgen_vs141.vcxproj.filters b/projects/strgen_vs141.vcxproj.filters new file mode 100644 index 0000000000..58864ee691 --- /dev/null +++ b/projects/strgen_vs141.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {5894294c-d4dc-41f0-be31-e56cff4e0405} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + + + diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj new file mode 100644 index 0000000000..5329d68daa --- /dev/null +++ b/projects/strgen_vs142.vcxproj @@ -0,0 +1,96 @@ + + + + + Debug + Win32 + + + + strgen + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} + strgen + 8.1 + + + + Application + false + MultiByte + v142 + + + + + + + + + + $(SolutionDir)..\objs\strgen\ + $(SolutionDir)..\objs\strgen\ + false + AllRules.ruleset + + + + + + .\Debug/strgen.tlb + + + + + /MP %(AdditionalOptions) + MinSpace + Size + STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + Default + MultiThreadedDebug + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x041d + + + true + true + $(IntDir)strgen.pdb + Console + false + + + MachineX86 + 5.01 + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/strgen_vs142.vcxproj.filters b/projects/strgen_vs142.vcxproj.filters new file mode 100644 index 0000000000..58864ee691 --- /dev/null +++ b/projects/strgen_vs142.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {5894294c-d4dc-41f0-be31-e56cff4e0405} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + + + diff --git a/projects/version_vs141.vcxproj b/projects/version_vs141.vcxproj new file mode 100644 index 0000000000..5d8ee8c74f --- /dev/null +++ b/projects/version_vs141.vcxproj @@ -0,0 +1,42 @@ + + + + + Debug + Win32 + + + + version + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} + version + + + + Makefile + MultiByte + v141 + + + + + + + + + + $(SolutionDir)..\objs\version\ + $(SolutionDir)..\objs\version\ + cscript "$(ProjectDir)/determineversion.vbs" + cscript "$(ProjectDir)/determineversion.vbs" + ..\src\rev.cpp + del ..\src\rev.cpp + + + + + + + + + diff --git a/projects/version_vs142.vcxproj b/projects/version_vs142.vcxproj new file mode 100644 index 0000000000..31971e35c9 --- /dev/null +++ b/projects/version_vs142.vcxproj @@ -0,0 +1,42 @@ + + + + + Debug + Win32 + + + + version + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} + version + + + + Makefile + MultiByte + v142 + + + + + + + + + + $(SolutionDir)..\objs\version\ + $(SolutionDir)..\objs\version\ + cscript "$(ProjectDir)/determineversion.vbs" + cscript "$(ProjectDir)/determineversion.vbs" + ..\src\rev.cpp + del ..\src\rev.cpp + + + + + + + + +