mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-13 17:49:10 +00:00
Compare commits
273 Commits
1.10.0-bet
...
1.10.2
Author | SHA1 | Date | |
---|---|---|---|
|
430ce20f8d | ||
|
20007fd1f4 | ||
|
02980119e4 | ||
|
dd4aae830d | ||
|
f4ed770cff | ||
|
89c8215b79 | ||
|
911f9165cf | ||
|
2748a90bc9 | ||
|
583a2221ca | ||
|
86113008ab | ||
|
31a9f549fb | ||
|
8203adecb5 | ||
|
3d8e68f966 | ||
|
aca5d97a68 | ||
|
fd8ca95947 | ||
|
9617fa727d | ||
|
74b591c2e9 | ||
|
78e558717c | ||
|
cb9c4bf4a0 | ||
|
e39c5829a2 | ||
|
a089c876ab | ||
|
1072c74bc4 | ||
|
bb251f45fc | ||
|
21aa339901 | ||
|
3132d29805 | ||
|
94581d352a | ||
|
cf27deb675 | ||
|
40d68273aa | ||
|
2cc244bde0 | ||
|
7872b1e0b5 | ||
|
22519b3b0d | ||
|
5b2447e10c | ||
|
e0680c9ede | ||
|
ea895f05eb | ||
|
37187df7ef | ||
|
2faa89a98e | ||
|
4297cc5f21 | ||
|
591ca82845 | ||
|
e90322f6e9 | ||
|
978cc774ec | ||
|
7f77b8c1e2 | ||
|
2bf936bbbc | ||
|
eb8d79f41f | ||
|
0737458ec4 | ||
|
7e659bc3da | ||
|
612c912144 | ||
|
c8cd5f7f3a | ||
|
0c87ae1875 | ||
|
cc458c9559 | ||
|
9f0371117b | ||
|
b6d409f8a7 | ||
|
d0613bad11 | ||
|
27cbee76b4 | ||
|
7e3eabdaae | ||
|
a4d73d74a2 | ||
|
d4bd17d443 | ||
|
a82dca883f | ||
|
18ad0fa983 | ||
|
fd64c62bcd | ||
|
b542ebfb52 | ||
|
318b51c58a | ||
|
df7f642a02 | ||
|
a0dc9ef847 | ||
|
8b4501604c | ||
|
4082121511 | ||
|
40b3bc6f1a | ||
|
b5a8510b9b | ||
|
aa7dbdc42e | ||
|
2f57d65575 | ||
|
ceae49a1d8 | ||
|
dc2f10bf11 | ||
|
0643a3627f | ||
|
fd106cf67b | ||
|
3d5b729290 | ||
|
81ed69d8d4 | ||
|
bd3ba91181 | ||
|
49d2a07f66 | ||
|
887dce4655 | ||
|
a499e9acdd | ||
|
2b1a7ceb4e | ||
|
1a88fb5c91 | ||
|
9e632355f1 | ||
|
04ce1f0713 | ||
|
107283748a | ||
|
f389d66e36 | ||
|
76eab18f02 | ||
|
3089c625e4 | ||
|
492d2704f1 | ||
|
805ecd32be | ||
|
3fcb240f8e | ||
|
58c8ff456e | ||
|
5880f1479f | ||
|
b5d56559d2 | ||
|
ac7cc18ab9 | ||
|
14af8701df | ||
|
196157b29e | ||
|
be9ca4689e | ||
|
5df01bf95e | ||
|
2fee030a26 | ||
|
a38122e6f2 | ||
|
791eaedb64 | ||
fff05cf117 | |||
|
2158e26b9e | ||
|
bf4672864d | ||
|
c8779fb311 | ||
|
f88ac83408 | ||
|
341941af85 | ||
|
9d5dd893cd | ||
|
fb3de33a38 | ||
|
6dfe5c852e | ||
|
3b177af826 | ||
|
8fe38afd2b | ||
|
d7a928a08b | ||
|
4366f8e46a | ||
|
5a4b27d73a | ||
|
2fc2058b3b | ||
|
dbbd0f5ddc | ||
|
87700bfe0e | ||
|
d35f35a968 | ||
|
c3223903ed | ||
|
f1734e7815 | ||
|
22ba048c89 | ||
|
f2d230d91c | ||
|
a4be4514c9 | ||
|
41163331aa | ||
|
1ab3fe6b85 | ||
|
823333c4b0 | ||
|
a411ce18c9 | ||
|
1225693b9c | ||
|
b144258bf0 | ||
|
34b7cb6c03 | ||
|
8b0e4bb101 | ||
|
6e7117e04c | ||
|
190e074287 | ||
|
5a31efd98d | ||
|
7413d65c2a | ||
|
f02b643a44 | ||
|
35c55dfe70 | ||
|
fa71375ec2 | ||
|
5c10c426fe | ||
|
150dfba95b | ||
|
4cc1420beb | ||
|
a0066ebca1 | ||
|
eb07e174f1 | ||
|
1812b0cf49 | ||
|
5b52f25902 | ||
|
39e6247bec | ||
|
ac3bc30a30 | ||
|
838117b05e | ||
|
596fb5d54a | ||
|
808253c29c | ||
|
70f9c3c655 | ||
|
ab9042145e | ||
|
d1cead7f25 | ||
|
cddb8a4605 | ||
|
12380fc1bb | ||
|
12f4602f57 | ||
|
7be9c28037 | ||
|
f401622149 | ||
|
b524f1ae21 | ||
|
e04ca904a9 | ||
|
e7922cd078 | ||
|
9e7c5235e8 | ||
|
9e4533dc8f | ||
|
3a557b0336 | ||
|
e558aa8ff4 | ||
|
90f4abe03f | ||
|
24bace32ba | ||
|
f6ce5c4563 | ||
|
86107028a4 | ||
|
e18f1703d2 | ||
|
2fd871e2af | ||
|
69f9529ba3 | ||
|
0e78393774 | ||
|
7f25032766 | ||
|
a6901f8ae8 | ||
|
16537b472c | ||
|
18f03a300b | ||
|
d427559eba | ||
|
40605efd1c | ||
|
c7ead8388c | ||
|
26ce4eb45d | ||
|
f0ff7003fd | ||
|
dbe44e80f1 | ||
|
fea5151ee1 | ||
|
798e9ee93e | ||
|
cc1d72c3a3 | ||
|
a363933d08 | ||
|
551bde77a4 | ||
|
42144ecd56 | ||
|
b769eb30c4 | ||
|
6fa217dfc8 | ||
|
3d29c9483b | ||
|
7f351fd7c1 | ||
|
bc7f92815b | ||
|
e5dd19b0de | ||
|
b0d443d525 | ||
|
faaec445d6 | ||
|
e3c75a30ba | ||
|
ae532008ff | ||
|
ee7a8eebca | ||
|
0b489f9924 | ||
|
847e5f33d4 | ||
|
869581eb23 | ||
|
b91abd3af9 | ||
|
514565fad6 | ||
|
11f178a312 | ||
|
d8a1be48cd | ||
|
9892d90b26 | ||
|
41232f18c1 | ||
|
09fa39c5b5 | ||
|
00c2a98cf3 | ||
|
4ae829cb27 | ||
|
f58ce3db19 | ||
|
1f6b3a37f9 | ||
|
1c92ba8ebe | ||
|
fa9769f81a | ||
|
5fce5fa300 | ||
|
60e3cf8aff | ||
|
ddabfed1cd | ||
|
3a14cea068 | ||
|
68f22134cb | ||
|
379402f02e | ||
|
96f8c13543 | ||
|
e54184d18b | ||
|
e001d87569 | ||
|
94cc0edb70 | ||
|
df2a19ec87 | ||
|
f7bf8e2da9 | ||
|
35dc377a58 | ||
|
03bbae7fe9 | ||
|
9900af38f5 | ||
|
f91c701ffe | ||
|
40ebf3c765 | ||
|
d865916a07 | ||
|
ef8455f549 | ||
|
61dba850af | ||
|
c7b703d426 | ||
|
7e22f243ed | ||
|
d242b1824c | ||
|
70f8c729d4 | ||
|
e3dc65978d | ||
|
60cbddbb5f | ||
|
cf354f6668 | ||
|
ddffe32f15 | ||
|
0bdbd509be | ||
|
b533c66f42 | ||
|
a1d6354caf | ||
|
da2504a0de | ||
|
cfc4568ddc | ||
|
b8abd54181 | ||
|
196247ae71 | ||
|
e3511ecacd | ||
|
9fc6329066 | ||
|
fa657c8360 | ||
|
4eab70f84e | ||
|
13cc8a0cee | ||
|
a15ace0f5b | ||
|
1dba06656d | ||
|
81f159434d | ||
|
46f7c6a641 | ||
|
d41378c00a | ||
|
3db399d7d9 | ||
|
3d362f2513 | ||
|
2be619ea88 | ||
|
460f73cd2d | ||
|
6929429f0f | ||
|
729caa135b | ||
|
3775381c10 | ||
|
ccb4c3797f | ||
|
4884dcacba | ||
|
d5a9bd404a | ||
|
58122983fb |
@@ -12,3 +12,4 @@ notifications:
|
||||
commit-comment:
|
||||
pull-request:
|
||||
issue:
|
||||
tag-created:
|
||||
|
45
.github/workflows/commit-checker.yml
vendored
Normal file
45
.github/workflows/commit-checker.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
name: Commit checker
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
commit-checker:
|
||||
name: Commit checker
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 4
|
||||
|
||||
- name: Get pull-request commits
|
||||
run: |
|
||||
set -x
|
||||
# actions/checkout did a merge checkout of the pull-request. As such, the first
|
||||
# commit is the merge commit. This means that on HEAD^ is the base branch, and
|
||||
# on HEAD^2 are the commits from the pull-request. We now check if those trees
|
||||
# have a common parent. If not, we fetch a few more commits till we do. In result,
|
||||
# the log between HEAD^ and HEAD^2 will be the commits in the pull-request.
|
||||
DEPTH=4
|
||||
while [ -z "$(git merge-base HEAD^ HEAD^2)" ]; do
|
||||
git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --deepen=${DEPTH} origin HEAD
|
||||
DEPTH=$(( ${DEPTH} * 4 ))
|
||||
done
|
||||
|
||||
# Just to show which commits we are going to evaluate.
|
||||
git log --oneline HEAD^..HEAD^2
|
||||
|
||||
- name: Checkout commit-checker
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: OpenTTD/OpenTTD-git-hooks
|
||||
path: git-hooks
|
||||
ref: master
|
||||
|
||||
- name: Check commits
|
||||
run: |
|
||||
set -x
|
||||
HOOKS_DIR=./git-hooks/hooks GIT_DIR=.git ./git-hooks/hooks/check-commits.sh HEAD^..HEAD^2
|
||||
echo "Commit checks passed"
|
60
CREDITS.md
Normal file
60
CREDITS.md
Normal file
@@ -0,0 +1,60 @@
|
||||
### 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)
|
||||
- Charles Pigott (LordAro) - General / Correctness police (since 1.9)
|
||||
- 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!
|
6
Doxyfile
6
Doxyfile
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
@@ -9,8 +7,8 @@
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = OpenTTD
|
||||
PROJECT_NUMBER =
|
||||
PROJECT_NAME = "OpenTTD Source"
|
||||
PROJECT_NUMBER = $(VERSION)
|
||||
PROJECT_BRIEF =
|
||||
PROJECT_LOGO =
|
||||
OUTPUT_DIRECTORY = docs/source/
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
@@ -93,6 +91,7 @@ ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
|
||||
GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ')
|
||||
ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ')
|
||||
ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ')
|
||||
YEAR := $(shell echo "$(VERSIONS)" | cut -f 7 -d' ')
|
||||
|
||||
# Make sure we have something in VERSION and ISODATE
|
||||
ifeq ($(VERSION),)
|
||||
@@ -274,10 +273,10 @@ endif
|
||||
# Revision files
|
||||
|
||||
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
|
||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/rev.cpp
|
||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/rev.cpp
|
||||
|
||||
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
|
||||
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc
|
||||
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/os/windows/ottdres.rc
|
||||
|
||||
FORCE:
|
||||
|
||||
|
796
README.md
796
README.md
@@ -3,215 +3,78 @@
|
||||
## Table of contents
|
||||
|
||||
- 1.0) [About](#10-about)
|
||||
- 1.1) [Compiling OpenTTD](#11-compiling-openttd)
|
||||
- 1.2) [Contributing to OpenTTD](#12-contributing-to-openttd)
|
||||
- 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) [Translating](#70-translating)
|
||||
- 7.1) [Translation](#71-translation)
|
||||
- 7.2) [Previewing](#72-previewing)
|
||||
- 8.0) [Troubleshooting](#80-troubleshooting)
|
||||
- 9.0) [Licensing](#90-licensing)
|
||||
- X.X) [Credits](#xx-credits)
|
||||
- 1.1) [Downloading OpenTTD](#11-downloading-openttd)
|
||||
- 1.2) [OpenTTD gameplay manual](#12-openttd-gameplay-manual)
|
||||
- 1.3) [Supported platforms](#13-supported-platforms)
|
||||
- 1.4) [Installing and running OpenTTD](#14-installing-and-running-openttd)
|
||||
- 1.5) [Add-on content / mods](#15-add-on-content--mods)
|
||||
- 1.6) [OpenTTD directories](#16-openttd-directories)
|
||||
- 1.7) [Compiling OpenTTD](#17-compiling-openttd)
|
||||
- 2.0) [Contact and community](#20-contact-and-community)
|
||||
- 2.1) [Contributing to OpenTTD](#21-contributing-to-openttd)
|
||||
- 2.2) [Reporting bugs](#22-reporting-bugs)
|
||||
- 2.3) [Translating](#23-translating)
|
||||
- 3.0) [Licensing](#30-licensing)
|
||||
- 4.0) [Credits](#40-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 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.
|
||||
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"](#30-licensing) below for details.
|
||||
|
||||
## 1.1) Compiling OpenTTD
|
||||
## 1.1) Downloading OpenTTD
|
||||
|
||||
Instructions for compiling OpenTTD can be found in [./COMPILING.md](COMPILING.md)
|
||||
OpenTTD can be downloaded from the [official OpenTTD website](https://www.openttd.org/).
|
||||
|
||||
## 1.2) Contributing to OpenTTD
|
||||
Both 'stable' and 'nightly' versions are available for download:
|
||||
|
||||
We welcome contributors to OpenTTD. More information for contributors can be found in [./CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
- most people should choose the 'stable' version, as this has been more extensively tested
|
||||
- the 'nightly' version includes the latest changes and features, but may sometimes be less reliable
|
||||
|
||||
## 2.0) Contacting
|
||||
On some platforms OpenTTD will also be available via your OS package manager or a similar service.
|
||||
|
||||
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.
|
||||
## 1.2) OpenTTD gameplay manual
|
||||
|
||||
You can also find the OpenTTD forums at
|
||||
[https://www.tt-forums.net](https://www.tt-forums.net/viewforum.php?f=55).
|
||||
OpenTTD has a [community-maintained wiki](https://wiki.openttd.org/), including a gameplay manual and tips.
|
||||
|
||||
### 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.
|
||||
## 1.3) Supported platforms
|
||||
|
||||
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.
|
||||
OpenTTD has been ported to several platforms and operating systems.
|
||||
|
||||
When you are sure it is not already reported you should:
|
||||
|
||||
- Make sure you are running a recent version, i.e. run the latest stable or
|
||||
nightly based on where you found the bug.
|
||||
- Make sure you are not running a non-official binary, like a patch pack.
|
||||
When you are playing with a patch pack you should report any bugs to the
|
||||
forum thread related to that patch pack.
|
||||
- Make it reproducible for the developers. In other words, create a savegame
|
||||
in which you can reproduce the issue once loaded. It is very useful to give
|
||||
us the crash.dmp, crash.sav, crash.log and crash screenshot which are
|
||||
created on crashes.
|
||||
- Check whether the bug is already reported on our bug tracker. This includes
|
||||
searching for recently closed bug reports as the bug might already be fixed.
|
||||
|
||||
After you have done all that you can report the bug. Please include the
|
||||
following information in your bug report:
|
||||
|
||||
- OpenTTD version (PLEASE test the latest Git revision/nightly build)
|
||||
- Bug details, including instructions how to reproduce it
|
||||
- Platform (Windows, Linux, FreeBSD, …) and compiler (including version) if
|
||||
you compiled OpenTTD yourself.
|
||||
- The processor architecture of your OS (32-bit Windows, 64-bit Windows,
|
||||
Linux on an ARM, Mac OS X on a PowerPC, etc.)
|
||||
- Attach a saved game **and** a screenshot if possible
|
||||
- If this bug only occurred recently please note the last version without
|
||||
the bug and the first version including the bug. That way we can fix it
|
||||
quicker by looking at the changes made.
|
||||
- Attach crash.dmp, crash.log and crash.sav. These files are usually created
|
||||
next to your openttd.cfg. The crash handler will tell you the location.
|
||||
|
||||
### 2.2) Reporting desyncs
|
||||
|
||||
As desyncs are hard to make reproducible OpenTTD has the ability to log all
|
||||
actions done by clients so we can replay the whole game in an effort to make
|
||||
desyncs better reproducible. You need to turn this ability on. When turned
|
||||
on an automatic savegame will be made once the map has been constructed in
|
||||
the 'save/autosave' directory, see OpenTTD directories to know where to find
|
||||
this directory. Furthermore the log file 'commands-out.log' will be created
|
||||
and all actions will be written to there.
|
||||
|
||||
To enable the desync debugging you need to set the debug level for 'desync'
|
||||
to at least 1. You do this by starting OpenTTD with '`-d desync=<level>`' as
|
||||
parameter or by typing '`debug_level desync=<level>`' in OpenTTD's internal
|
||||
console.
|
||||
The desync debug levels are:
|
||||
|
||||
- 0: nothing.
|
||||
- 1: dumping of commands to 'commands-out.log'.
|
||||
- 2: same as 1 plus checking vehicle caches and dumping that too.
|
||||
- 3: same as 2 plus monthly saves in autosave.
|
||||
- 4 and higher: same as 3
|
||||
|
||||
Restarting OpenTTD will overwrite 'commands-out.log'. OpenTTD will not remove
|
||||
the savegames (dmp_cmds_*.sav) made by the desync debugging system, so you
|
||||
have to occasionally remove them yourself!
|
||||
|
||||
The naming format of the desync savegames is as follows:
|
||||
dmp_cmds_XXXXXXXX_YYYYYYYY.sav. The XXXXXXXX is the hexadecimal representation
|
||||
of the generation seed of the game and YYYYYYYY is the hexadecimal
|
||||
representation of the date of the game. This sorts the savegames by game and
|
||||
then by date making it easier to find the right savegames.
|
||||
|
||||
When a desync has occurred with the desync debugging turned on you should file
|
||||
a bug report with the following files attached:
|
||||
|
||||
- commands-out.log as it contains all the commands that were done
|
||||
- the last saved savegame (search for the last line beginning with
|
||||
'save: dmp_cmds_' in commands-out.log). We use this savegame to check
|
||||
whether we can quickly reproduce the desync. Otherwise we will need …
|
||||
- the first saved savegame (search for the first line beginning with 'save'
|
||||
where the first part, up to the last underscore '_', is the same). We need
|
||||
this savegame to be able to reproduce the bug when the last savegame is not
|
||||
old enough. If you loaded a scenario or savegame you need to attach that.
|
||||
- optionally you can attach the savegames from around 50%, 75%, 85%, 90% and
|
||||
95% of the game's progression. We can use these savegames to speed up the
|
||||
reproduction of the desync, but we should be able to reproduce these
|
||||
savegames based on the first savegame and commands-out.log.
|
||||
- in case you use any NewGRFs you should attach the ones you used unless
|
||||
we can easily find them ourselves via bananas or when they are in the
|
||||
#openttdcoop pack.
|
||||
|
||||
Do NOT remove the dmp_cmds savegames of a desync you have reported until the
|
||||
desync has been fixed; if you, by accident, send us the wrong savegames we
|
||||
will not be able to reproduce the desync and thus will be unable to fix it.
|
||||
|
||||
## 3.0) Supported platforms
|
||||
|
||||
OpenTTD has been ported to several platforms and operating systems. It should
|
||||
not be very difficult to port it to a new platform. The currently working
|
||||
platforms are:
|
||||
The currently working platforms are:
|
||||
|
||||
- FreeBSD (SDL)
|
||||
- Haiku (SDL)
|
||||
- Linux (SDL or Allegro)
|
||||
- Linux (SDL)
|
||||
- macOS (universal) (Cocoa video and sound drivers)
|
||||
- OpenBSD (SDL)
|
||||
- OS/2 (SDL)
|
||||
- Windows (Win32 GDI (faster) or SDL or Allegro)
|
||||
- Windows (Win32 GDI (faster) or SDL)
|
||||
|
||||
## 4.0) Installing and running OpenTTD
|
||||
### 1.3.1) Legacy support
|
||||
Platforms, languages and compilers change.
|
||||
We'll keep support going on old platforms as long as someone is interested in supporting them, except where it means the project can't move forward to keep up with language and compiler features.
|
||||
|
||||
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.
|
||||
We guarantee that every revision of OpenTTD will be able to load savegames from every older revision (excepting where the savegame is corrupt).
|
||||
Please report a bug if you find a save that doesn't load.
|
||||
|
||||
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.
|
||||
## 1.4) Installing and running OpenTTD
|
||||
|
||||
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.
|
||||
OpenTTD is usually straightforward to install, but for more help the wiki [includes an installation guide](https://wiki.openttd.org/Installation).
|
||||
|
||||
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 needs some additional graphics and sound files to run.
|
||||
|
||||
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.
|
||||
For some platforms these will be downloaded during the installation process if required.
|
||||
|
||||
### 4.1) (Required) 3rd party files
|
||||
For some platforms, you will need to refer to [the installation guide](https://wiki.openttd.org/Installation).
|
||||
|
||||
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
|
||||
### 1.4.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:
|
||||
@@ -223,12 +86,13 @@ OpenMSX for music can be found at:
|
||||
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.
|
||||
### 1.4.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
|
||||
@@ -237,469 +101,113 @@ You need to copy the following files:
|
||||
- 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.
|
||||
### 1.4.3) Original Transport Tycoon Deluxe music
|
||||
|
||||
If you want the Transport Tycoon Deluxe music, copy the appropriate files from the original game into the baseset folder.
|
||||
- TTD for Windows: All files in the gm/ folder (gm_tt00.gm up to gm_tt21.gm)
|
||||
- TTD for DOS: The GM.CAT file
|
||||
- Transport Tycoon Original: The GM.CAT file, but rename it to GM-TTO.CAT
|
||||
|
||||
#### 4.1.4) AIs
|
||||
|
||||
If you want AIs use the in-game content downloader. If for some reason that is
|
||||
not possible or you want to use an AI that has not been uploaded to the content
|
||||
download system download the tar file and place it in the ai/ directory. If the
|
||||
AI needs libraries you will have to download those too and put them in the
|
||||
ai/library/ directory. All AIs and AI Libraries that have been uploaded to
|
||||
the content download system can be found at https://noai.openttd.org/downloads.
|
||||
The AIs and libraries can be found their in the form of .tar.gz packages.
|
||||
OpenTTD can read inside tar files but it does not extract .tar.gz files by itself.
|
||||
|
||||
To figure out which libraries you need for an AI you have to start the AI and
|
||||
wait for an error message to pop up. The error message will tell you
|
||||
'could not find library "lib-name"'. Download that library and try again.
|
||||
|
||||
#### 4.1.5) Game scripts
|
||||
|
||||
If you want an extra challenge in OpenTTD you can download so-called game
|
||||
scripts via the in-game content downloader. These game scripts have varying
|
||||
functionality, though they can generally influence town growth, subsidies, add
|
||||
goals to reach or provide a different ranking system.
|
||||
|
||||
If you download a game script manually you have to follow the same rules as for
|
||||
AIs, except that game scripts are placed in the game/ directory instead of the
|
||||
ai/ directory.
|
||||
|
||||
### 4.2) OpenTTD directories
|
||||
|
||||
OpenTTD uses its own directory to store its required 3rd party base set files
|
||||
(see section 4.1 'Required 3rd party files') and non-compulsory extension and
|
||||
configuration files. See below for their proper place within this OpenTTD main
|
||||
data directory.
|
||||
|
||||
The main OpenTTD directories can be found in various locations, depending on
|
||||
your operating system:
|
||||
|
||||
1. The current working directory (from where you started OpenTTD)
|
||||
|
||||
For non-Windows operating systems OpenTTD will not scan for files in this
|
||||
directory if it is your personal directory, i.e. '~/', or when it is the
|
||||
root directory, i.e. '/'.
|
||||
|
||||
2. Your personal directory
|
||||
- Windows:
|
||||
- `C:\My Documents\OpenTTD` (95, 98, ME)
|
||||
- `C:\Documents and Settings\<username>\My Documents\OpenTTD` (2000, XP)
|
||||
- `C:\Users\<username>\Documents\OpenTTD` (Vista, 7, 8.1, 10)
|
||||
- macOS: `~/Documents/OpenTTD`
|
||||
- Linux: `$XDG_DATA_HOME/openttd` which is usually `~/.local/share/openttd`
|
||||
when built with XDG base directory support, otherwise `~/.openttd`
|
||||
3. The shared directory
|
||||
- Windows:
|
||||
- `C:\Documents and Settings\All Users\Shared Documents\OpenTTD` (2000, XP)
|
||||
- `C:\Users\Public\Documents\OpenTTD` (Vista, 7, 8.1, 10)
|
||||
- macOS: `/Library/Application Support/OpenTTD`
|
||||
- Linux: not available
|
||||
4. The binary directory (where the OpenTTD executable is)
|
||||
- Windows: `C:\Program Files\OpenTTD`
|
||||
- Linux: `/usr/games`
|
||||
5. The installation directory (Linux only)
|
||||
- Linux: `/usr/share/games/openttd`
|
||||
6. The application bundle (macOS only)
|
||||
|
||||
It includes the OpenTTD files (grf+lng) and it will work as long as they
|
||||
are not touched
|
||||
|
||||
Different types of data or extensions go into different subdirectories of the
|
||||
chosen main OpenTTD directory:
|
||||
|
||||
| data type | directory | additional info |
|
||||
| ------------------- | ----------------- | --------------------------- |
|
||||
| Config File | (no subdirectory) | |
|
||||
| Screenshots | screenshot | |
|
||||
| Base Graphics | baseset | (or a subdirectory thereof) |
|
||||
| Sound Sets | baseset | (or a subdirectory thereof) |
|
||||
| NewGRFs | newgrf | (or a subdirectory thereof) |
|
||||
| 32bpp Sets | newgrf | (or a subdirectory thereof) |
|
||||
| Music Sets | baseset | (or a subdirectory thereof) |
|
||||
| AIs | ai | (or a subdirectory thereof) |
|
||||
| AI Libraries | ai/library | (or a subdirectory thereof) |
|
||||
| Game Scripts (GS) | game | (or a subdirectory thereof) |
|
||||
| GS Libraries | game/library | (or a subdirectory thereof) |
|
||||
| Savegames | save | |
|
||||
| Automatic Savegames | save/autosave | |
|
||||
| Scenarios | scenario | |
|
||||
|
||||
The (automatically created) directory content_download is for OpenTTD's internal
|
||||
use and no files should be added to it or its subdirectories manually.
|
||||
|
||||
#### Notes:
|
||||
|
||||
- Linux in the previous list means .deb, but most paths should be similar for
|
||||
others.
|
||||
- The previous search order is also used for NewGRFs and openttd.cfg.
|
||||
- If openttd.cfg is not found, then it will be created using the 2, 4, 1, 3,
|
||||
5 order. When built with XDG base directory support, openttd.cfg will be
|
||||
created in $XDG_CONFIG_HOME/openttd which is usually ~/.config/openttd.
|
||||
- Savegames will be relative to the config file only if there is no save/
|
||||
directory in paths with higher priority than the config file path, but
|
||||
autosaves and screenshots will always be relative to the config file.
|
||||
Unless the configuration file is in $XDG_CONFIG_HOME/openttd, then all
|
||||
other files will be saved under $XDG_DATA_HOME/openttd.
|
||||
|
||||
#### The preferred setup:
|
||||
|
||||
Place 3rd party files in shared directory (or in personal directory if you do
|
||||
not have write access on shared directory) and have your openttd.cfg config
|
||||
file in personal directory (where the game will then also place savegames and
|
||||
screenshots).
|
||||
|
||||
### 4.3) Portable installations (portable media)
|
||||
|
||||
You can install OpenTTD on external media so you can take it with you, i.e.
|
||||
using a USB key, or a USB HDD, etc.
|
||||
Create a directory where you shall store the game in (i.e. OpenTTD/).
|
||||
Copy the binary (OpenTTD.exe, OpenTTD.app, openttd, etc), baseset/ and your
|
||||
openttd.cfg to this directory.
|
||||
You can copy binaries for any operating system into this directory, which will
|
||||
allow you to play the game on nearly any computer you can attach the external
|
||||
media to.
|
||||
As always - additional grf files are stored in the newgrf/ dir (for details,
|
||||
again, see section 4.1).
|
||||
|
||||
### 4.4) Files in tar (archives)
|
||||
|
||||
OpenTTD can read files that are in an uncompressed tar (archive), which
|
||||
makes it easy to bundle files belonging to the same script, NewGRF or base
|
||||
set. Music sets are the only exception as they cannot be stored in a tar
|
||||
file due to being played by external applications.
|
||||
|
||||
OpenTTD sees each tar archive as the 'root' of its search path. This means that
|
||||
having a file with the same path in two different tar files means that one
|
||||
cannot be opened, after all only one file will be found first. As such it is
|
||||
advisable to put an uniquely named folder in the root of the tar and put all the
|
||||
content in that folder. For example, all downloaded content has a path that
|
||||
concatenates the name of the content and the version, which makes the path
|
||||
unique. For custom tar files it is advised to do this as well.
|
||||
|
||||
The normal files are also referred to by their relative path from the search
|
||||
directory, this means that also normal files could hide files in a tar as
|
||||
long as the relative path from the search path of the normal file is the
|
||||
same as the path in the tar file. Again it is advised to have an unique path
|
||||
to the normal file so they do not collide with the files from other tar
|
||||
files.
|
||||
|
||||
## 5.0) OpenTTD features
|
||||
|
||||
OpenTTD has a lot of features going beyond the original Transport Tycoon Deluxe
|
||||
emulation. Unfortunately, there is currently no comprehensive list of features,
|
||||
but there is a basic features list on the web, and some optional features can be
|
||||
controlled through the Advanced Settings dialog. We also implement some
|
||||
features known from [TTDPatch](https://www.ttdpatch.net).
|
||||
|
||||
Several important non-standard controls:
|
||||
|
||||
- Ctrl modifies many commands and makes them more powerful. For example Ctrl
|
||||
clicking on signals with the build signal tool changes their behaviour,
|
||||
holding Ctrl while the track build tool is activated changes it to the track
|
||||
removal tool, and so on. See https://wiki.openttd.org/Hidden_features
|
||||
for a non-comprehensive list or look at the tooltips.
|
||||
- Ingame console. More information at https://wiki.openttd.org/Console
|
||||
- Hovering over a GUI element shows tooltips. This can be changed to right click
|
||||
via the advanced settings.
|
||||
|
||||
### 5.1) Logging of potentially dangerous actions
|
||||
|
||||
OpenTTD is a complex program, and together with NewGRF, it may show a buggy
|
||||
behaviour. But not only bugs in code can cause problems. There are several
|
||||
ways to affect game state possibly resulting in program crash or multiplayer
|
||||
desyncs.
|
||||
|
||||
Easier way would be to forbid all these unsafe actions, but that would affect
|
||||
game usability for many players. We certainly do not want that.
|
||||
However, we receive bug reports because of this. To reduce time spent with
|
||||
solving these problems, these potentially unsafe actions are logged in
|
||||
the savegame (including crash.sav). Log is stored in crash logs, too.
|
||||
|
||||
Information logged:
|
||||
|
||||
- Adding / removing / changing order of NewGRFs
|
||||
- Changing NewGRF parameters, loading compatible NewGRF
|
||||
- Changing game mode (scenario editor <-> normal game)
|
||||
- Loading game saved in a different OpenTTD / TTDPatch / Transport Tycoon Deluxe /
|
||||
original Transport Tycoon version
|
||||
- Running a modified OpenTTD build
|
||||
- Changing settings affecting NewGRF behaviour (non-network-safe settings)
|
||||
- Triggering NewGRF bugs
|
||||
|
||||
No personal information is stored.
|
||||
|
||||
You can show the game log by typing 'gamelog' in the console or by running
|
||||
OpenTTD in debug mode.
|
||||
|
||||
### 5.2) Frame rate and performance metrics
|
||||
|
||||
The Help menu in-game has a function to open the Frame rate window. This
|
||||
window shows various real-time performance statistics, measuring what parts
|
||||
of the game require the most processing power currently.
|
||||
|
||||
A summary of the statistics can also be retrieved from the console with the
|
||||
`fps` command. This is especially useful on dedicated servers, where the
|
||||
administrator might want to determine what's limiting performance in a slow
|
||||
game.
|
||||
|
||||
The frame rate is given as two figures, the simulation rate and the graphics
|
||||
frame rate. Usually these are identical, as the screen is rendered exactly
|
||||
once per simulated tick, but in the future there might be support for graphics
|
||||
and simulation running at different rates. When the game is paused, the
|
||||
simulation rate drops to zero.
|
||||
|
||||
In addition to the simulation rate, a game speed factor is also calculated.
|
||||
This is based on the target simulation speed, which is 30 milliseconds per
|
||||
game tick. At that speed, the expected frame rate is 33.33 frames/second, and
|
||||
the game speed factor is how close to that target the actual rate is. When
|
||||
the game is in fast forward mode, the game speed factor shows how much
|
||||
speed up is achieved.
|
||||
|
||||
The lower part of the window shows timing statistics for individual parts of
|
||||
the game. The times shown are short-term and long-term averages of how long
|
||||
it takes to process one tick of game time, all figures are in milliseconds.
|
||||
|
||||
Clicking a line in the lower part of the window opens a graph window, giving
|
||||
detailed readings on each tick simulated by the game.
|
||||
|
||||
The following is an explanation of the different statistics:
|
||||
|
||||
- *Game loop* - Total processing time used per simulated "tick" in the game.
|
||||
This includes all pathfinding, world updates, and economy handling.
|
||||
- *Cargo handling* - Time spent loading/unloading cargo at stations, and
|
||||
industries and towns sending/retrieving cargo from stations.
|
||||
- *Train ticks*, *Road vehicle ticks*, *Ship ticks*, *Aircraft ticks* -
|
||||
Time spent on pathfinding and other processing for each player vehicle type.
|
||||
- *World ticks* - Time spent on other world/landscape processing. This
|
||||
includes towns growing, building animations, updates of farmland and trees,
|
||||
and station rating updates.
|
||||
- *GS/AI total*, *Game script*, and *AI players* - Time spent running logic
|
||||
for game scripts and AI players. The total may show as less than the current
|
||||
sum of the individual scripts, this is because AI players at lower
|
||||
difficulty settings do not run every game tick, and hence contribute less
|
||||
to the average across all ticks. Keep in mind that the "Current" figure is
|
||||
also an average, just only over short term.
|
||||
- *Link graph delay* - Time overruns of the cargo distribution link graph
|
||||
update thread. Usually the link graph is updated in a background thread,
|
||||
but these updates need to synchronise with the main game loop occasionally,
|
||||
if the time spent on link graph updates is longer than the time taken to
|
||||
otherwise simulate the game while it was updating, these delays are counted
|
||||
in this figure.
|
||||
- *Graphics rendering* - Total time spent rendering all graphics, including
|
||||
both GUI and world viewports. This typically spikes when panning the view
|
||||
around, and when more things are happening on screen at once.
|
||||
- *World viewport rendering* - Isolated time spent rendering just world
|
||||
viewports. If this figure is significantly lower than the total graphics
|
||||
rendering time, most time is spent rendering GUI than rendering world.
|
||||
- *Video output* - Speed of copying the rendered graphics to the display
|
||||
adapter. Usually this should be very fast (in the range of 0-3 ms), large
|
||||
values for this can indicate a graphics driver problem.
|
||||
- *Sound mixing* - Speed of mixing active audio samples together. Usually
|
||||
this should be very fast (in the range of 0-3 ms), if it is slow, consider
|
||||
switching to the NoSound set.
|
||||
|
||||
If the frame rate window is shaded, the title bar will instead show just the
|
||||
current simulation rate and the game speed factor.
|
||||
|
||||
## 6.0) Configuration file
|
||||
|
||||
The configuration file for OpenTTD (openttd.cfg) is in a simple Windows-like
|
||||
.INI format. It is mostly undocumented. Almost all settings can be changed
|
||||
ingame by using the 'Advanced Settings' window.
|
||||
When you cannot find openttd.cfg you should look in the directories as
|
||||
described in section 4.2. If you do not have an openttd.cfg OpenTTD will
|
||||
create one after closing.
|
||||
|
||||
## 7.0) 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.
|
||||
|
||||
### 7.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
|
||||
|
||||
### 7.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.
|
||||
|
||||
## 8.0) Troubleshooting
|
||||
|
||||
To see all startup options available to you, start OpenTTD with the
|
||||
'`./openttd -h`' option. This might help you tweak some of the settings.
|
||||
|
||||
If the game is acting strange and you feel adventurous you can try the
|
||||
'`-d [[<name>=]<level>]`' flag, where the higher levels will give you more
|
||||
debugging output. The 'name' variable can help you to display only some type of
|
||||
debugging messages. This is mostly undocumented so best is to look in the
|
||||
source code file debug.c for the various debugging types. For more information
|
||||
look at https://wiki.openttd.org/Command_line.
|
||||
|
||||
The most frequent problem is missing data files. Please install OpenGFX and
|
||||
possibly OpenSFX and OpenMSX. See section 4.1.1 for more information.
|
||||
|
||||
Under certain circumstance, especially on Ubuntu OpenTTD can be extremely slow
|
||||
and/or freeze. See known-bugs.txt for more information and how to solve this
|
||||
problem on your computer.
|
||||
|
||||
Under Windows 98 and lower it is impossible to use a dedicated server; it will
|
||||
fail to start. Perhaps this is for the better because those OSes are not known
|
||||
for their stability.
|
||||
|
||||
With the added support for font-based text selecting a non-latin language can
|
||||
result in lots of question marks ('?') being shown on screen. Please open your
|
||||
configuration file (openttd.cfg - see Section 4.2 for where to find it)
|
||||
and add a suitable font for the small, medium and / or large font, e.g.:
|
||||
|
||||
small_font = "Tahoma"
|
||||
medium_font = "Tahoma"
|
||||
large_font = "Tahoma"
|
||||
|
||||
You should use a font name like 'Tahoma' or a path to the desired font.
|
||||
|
||||
Any NewGRF file used in a game is stored inside the savegame and will refuse to
|
||||
load if you do not have that NewGRF file available. A list of missing files can
|
||||
be viewed in the NewGRF window accessible from the file load dialogue window.
|
||||
|
||||
You can try to obtain the missing files from that NewGRF dialogue or – if they
|
||||
are not available online – you can search manually through our
|
||||
[forum's graphics development section](https://www.tt-forums.net/viewforum.php?f=66)
|
||||
or [GRFCrawler](https://grfcrawler.tt-forums.net). Put the NewGRF files in
|
||||
OpenTTD's newgrf folder (see section 4.2 'OpenTTD directories') and rescan the
|
||||
list of available NewGRFs. Once you have all missing files, you are set to go.
|
||||
|
||||
## 9.0) Licensing
|
||||
|
||||
OpenTTD is licensed under the GNU General Public License version 2.0. For
|
||||
the complete license text, see the file 'COPYING.md'. 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.
|
||||
|
||||
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)
|
||||
- Charles Pigott (LordAro) - General / Correctness police (since 1.9)
|
||||
- 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!
|
||||
|
||||
## 1.5) Add-on content / mods
|
||||
|
||||
OpenTTD features multiple types of add-on content, which modify gameplay in different ways.
|
||||
|
||||
Most types of add-on content can be downloaded within OpenTTD via the 'Check Online Content' button in the main menu.
|
||||
|
||||
Add-on content can also be installed manually, but that's more complicated; the [OpenTTD wiki](https://wiki.openttd.org/OpenTTD) may offer help with that, or the [OpenTTD directory structure guide](./docs/directory_structure.md).
|
||||
|
||||
### 1.5.1) AI opponents
|
||||
|
||||
OpenTTD comes without AI opponents, 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.
|
||||
|
||||
AI help and discussions may also be found in the [AI section of the forum](https://www.tt-forums.net/viewforum.php?f=65).
|
||||
|
||||
### 1.5.2) Scenarios and height maps
|
||||
|
||||
Scenarios and heightmaps can be added via the 'Check Online Content' button in the main menu.
|
||||
|
||||
### 1.5.3) NewGRFs
|
||||
|
||||
A wide range of add-content is available as NewGRFs, including vehicles, industries, stations, landscape objects, town names and more.
|
||||
|
||||
NewGRFs can be added via the 'Check Online Content' button in the main menu.
|
||||
|
||||
See also the wiki [guide to NewGRFs](https://wiki.openttd.org/NewGRF) and [the forum graphics development section](https://www.tt-forums.net/viewforum.php?f=66).
|
||||
|
||||
### 1.5.4) Game scripts
|
||||
|
||||
Game scripts can provide additional challenges or changes to the standard OpenTTD gameplay, for example setting transport goals, or changing town growth behaviour.
|
||||
|
||||
Game scripts can be added via the 'Check Online Content' button in the main menu.
|
||||
|
||||
See also the wiki [guide to game scripts](https://wiki.openttd.org/Game_script) and [the forum graphics game script section](https://www.tt-forums.net/viewforum.php?f=65).
|
||||
|
||||
### 1.6) OpenTTD directories
|
||||
|
||||
OpenTTD uses its own directory structure to store game data, add-on content etc.
|
||||
|
||||
For more information, see the [directory structure guide](./docs/directory_structure.md).
|
||||
|
||||
### 1.7) Compiling OpenTTD
|
||||
|
||||
If you want to compile OpenTTD from source, instructions can be found in [COMPILING.md](./COMPILING.md).
|
||||
|
||||
|
||||
## 2.0) Contact and Community
|
||||
|
||||
'Official' channels
|
||||
|
||||
- [OpenTTD website](https://www.openttd.org)
|
||||
- IRC chat using #openttd on irc.oftc.net [more info about our irc channel](https://wiki.openttd.org/Irc)
|
||||
- [OpenTTD on Github](https://github.com/openTTD/) for code repositories and for reporting issues
|
||||
- [forum.openttd.org](https://forum.openttd.org/) - the primary community forum site for discussing OpenTTD and related games
|
||||
- [OpenTTD wiki](https://wiki.openttd.org/) community-maintained wiki, including topics like gameplay guide, detailed explanation of some game mechanics, how to use add-on content (mods) and much more
|
||||
|
||||
'Unofficial' channels
|
||||
|
||||
- the OpenTTD wiki has a [page listing OpenTTD communities](https://wiki.openttd.org/Community) including some in languages other than English
|
||||
|
||||
|
||||
### 2.1) Contributing to OpenTTD
|
||||
|
||||
We welcome contributors to OpenTTD. More information for contributors can be found in [CONTRIBUTING.md](./CONTRIBUTING.md)
|
||||
|
||||
|
||||
### 2.2) Reporting bugs
|
||||
|
||||
Good bug reports are very helpful. We have a [guide to reporting bugs](./CONTRIBUTING.md#bug-reports) to help with this.
|
||||
|
||||
Desyncs in multiplayer are complex to debug and report (some software development skils are required).
|
||||
Instructions can be found in [debugging and reporting desyncs](./docs/debugging_desyncs.md).
|
||||
|
||||
|
||||
### 2.3) Translating
|
||||
|
||||
OpenTTD is translated into many languages. Translations are added and updated via the [online translation tool](https://translator.openttd.org).
|
||||
|
||||
|
||||
## 3.0) Licensing
|
||||
|
||||
OpenTTD is licensed under the GNU General Public License version 2.0.
|
||||
For the complete license text, see the file '[COPYING.md](./COPYING.md)'.
|
||||
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`.
|
||||
|
||||
|
||||
## 4.0 Credits
|
||||
|
||||
See [CREDITS.md](./CREDITS.md)
|
||||
|
@@ -39,8 +39,6 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
commit-checker:
|
||||
Tag: 'commit-checker'
|
||||
linux-amd64-clang-3.9:
|
||||
Tag: 'linux-amd64-clang-3.9'
|
||||
linux-amd64-gcc-6:
|
||||
@@ -60,7 +58,7 @@ jobs:
|
||||
- job: macos
|
||||
displayName: 'MacOS'
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
|
||||
variables:
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.9
|
||||
|
@@ -1,16 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
tag=$(git describe --tags 2>/dev/null)
|
||||
tag=$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@')
|
||||
|
||||
# If we are a tag, show the part of the changelog till (but excluding) the last stable
|
||||
if [ -n "$tag" ]; then
|
||||
grep='^[0-9]\.[0-9]\.[0-9][^-]'
|
||||
grep='^[0-9]\+\.[0-9]\+\.[0-9]\+[^-]'
|
||||
next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//')
|
||||
cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9].[0-9].[0-9]/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }'
|
||||
cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9]+.[0-9]+.[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")
|
||||
last_week=$(date -d "$revdate -7days" +"%Y-%m-%d %H:%M")
|
||||
git log --after="${last_week}" --pretty=fuller
|
||||
|
@@ -31,29 +31,56 @@ DATE=$(cat .release_date | tr ' ' T | sed 's/TUTC/:00-00:00/')
|
||||
VERSION=$(cat .version)
|
||||
BASE="openttd-${VERSION}"
|
||||
|
||||
echo "name: ${NAME}" >> manifest.yaml
|
||||
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
|
||||
FILES=
|
||||
DEV_FILES=
|
||||
for filename in $(ls ${FOLDER} | grep -v ".txt$\|.md$\|sum$" | sort); do
|
||||
case ${filename} in
|
||||
*docs* |\
|
||||
*source* |\
|
||||
*dbg.deb |\
|
||||
*pdb.xz )
|
||||
DEV_FILES="${DEV_FILES} ${filename}"
|
||||
;;
|
||||
|
||||
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
|
||||
*)
|
||||
FILES="${FILES} ${filename}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# output_files key filename...
|
||||
output_files() {
|
||||
if [ "$#" -lt 2 ]; then return; fi
|
||||
key=$1
|
||||
echo "${key}:" >> manifest.yaml
|
||||
shift
|
||||
while [ "$#" -gt 0 ]; do
|
||||
filename=$1
|
||||
if [ ! -e ${FOLDER}/${filename}.md5sum ] || [ ! -e ${FOLDER}/${filename}.sha1sum ] || [ ! -e ${FOLDER}/${filename}.sha256sum ]; then
|
||||
echo "ERROR: missing checksum file for ${filename}" 1>&2
|
||||
error="y"
|
||||
shift
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "- id: ${filename}" >> manifest.yaml
|
||||
echo " size: $(stat -c"%s" ${FOLDER}/${filename})" >> manifest.yaml
|
||||
echo " md5sum: $(cat ${FOLDER}/${filename}.md5sum | cut -d\ -f1)" >> manifest.yaml
|
||||
echo " sha1sum: $(cat ${FOLDER}/${filename}.sha1sum | cut -d\ -f1)" >> manifest.yaml
|
||||
echo " sha256sum: $(cat ${FOLDER}/${filename}.sha256sum | cut -d\ -f1)" >> manifest.yaml
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
output_files files ${FILES}
|
||||
output_files dev_files ${DEV_FILES}
|
||||
|
||||
if [ -n "${error}" ]; then
|
||||
echo "ERROR: exiting due to earlier errors" 1>&2
|
||||
exit 1
|
||||
|
@@ -2,7 +2,7 @@ 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
|
||||
curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip > opengfx-all.zip
|
||||
unzip opengfx-all.zip
|
||||
rm -f opengfx-all.zip
|
||||
displayName: 'Install OpenGFX'
|
||||
|
@@ -119,6 +119,8 @@ jobs:
|
||||
Tag: 'linux-ubuntu-bionic-i386-gcc'
|
||||
linux-ubuntu-bionic-amd64-gcc:
|
||||
Tag: 'linux-ubuntu-bionic-amd64-gcc'
|
||||
linux-ubuntu-focal-amd64-gcc:
|
||||
Tag: 'linux-ubuntu-focal-amd64-gcc'
|
||||
linux-debian-stretch-i386-gcc:
|
||||
Tag: 'linux-debian-stretch-i386-gcc'
|
||||
linux-debian-stretch-amd64-gcc:
|
||||
@@ -141,7 +143,7 @@ jobs:
|
||||
- job: macos
|
||||
displayName: 'MacOS'
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
dependsOn: source
|
||||
|
||||
variables:
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id$
|
||||
|
||||
if ! [ -f ai/regression/completeness.sh ]; then
|
||||
echo "Make sure you are in the root of OpenTTD before starting this script."
|
||||
exit 1
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $Id$ */
|
||||
|
||||
class Regression extends AIInfo {
|
||||
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
|
||||
function GetName() { return "Regression"; }
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id$
|
||||
|
||||
if ! [ -f ai/regression/run.sh ]; then
|
||||
echo "Make sure you are in the root of OpenTTD before starting this script."
|
||||
exit 1
|
||||
|
@@ -1,7 +1,5 @@
|
||||
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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $Id$ */
|
||||
|
||||
class Regression extends AIController {
|
||||
function Start();
|
||||
};
|
||||
@@ -1692,6 +1690,9 @@ function Regression::Vehicle()
|
||||
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 9));
|
||||
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 27));
|
||||
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 27));
|
||||
print(" IsValidVehicle(17): " + AIVehicle.IsValidVehicle(17));
|
||||
print(" IsValidVehicle(18): " + AIVehicle.IsValidVehicle(18));
|
||||
print(" IsValidVehicle(19): " + AIVehicle.IsValidVehicle(19)); // 19 is immediately joined to 18
|
||||
print(" MoveWagonChain(): " + AIVehicle.MoveWagonChain(18, 0, 17, 0));
|
||||
print(" GetNumWagons(): " + AIVehicle.GetNumWagons(17));
|
||||
print(" GetLength(): " + AIVehicle.GetLength(17));
|
||||
|
@@ -1,4 +1,2 @@
|
||||
/* $Id$ */
|
||||
|
||||
print(" Required this file");
|
||||
|
||||
|
@@ -9115,6 +9115,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
BuildVehicle(): 17
|
||||
BuildVehicle(): 18
|
||||
BuildVehicle(): 19
|
||||
IsValidVehicle(17): true
|
||||
IsValidVehicle(18): true
|
||||
IsValidVehicle(19): false
|
||||
MoveWagonChain(): true
|
||||
GetNumWagons(): 3
|
||||
GetLength(): 24
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $Id$ */
|
||||
|
||||
class Regression extends AIController {
|
||||
function Start();
|
||||
};
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
/* $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.
|
||||
|
125
changelog.txt
125
changelog.txt
@@ -1,3 +1,127 @@
|
||||
1.10.2 (2020-06-01)
|
||||
------------------------------------------------------------------------
|
||||
Add: Ubuntu 20.04 packages (#8127)
|
||||
Fix: [OSX] Possible crash on failure to set colourspace (#8181)
|
||||
Fix #8166: Prevent crash from a NewGRF with an invalid RoadType (#8180)
|
||||
Fix #8024: Make Online Content GUI more responsive while loading (#8179)
|
||||
Fix #7970: Disable event loop when generating crash dump (#8176)
|
||||
Fix: [Build] Compatibility with modern Visual Studio (#8170)
|
||||
Fix: Trees would disappear completely after a few years if tree spread was disabled (#8160)
|
||||
Fix #8155: Roadtype speed limit in scenario editor toolbar dropdown was doubled (#8156)
|
||||
Fix: Desync after house replacement (#8151)
|
||||
Fix #8137: New clients can't join (desync) after funding an industry (#8140)
|
||||
Fix #8132: Corrupted savegame with station with multiple owners caused a crash (#8134, #8142)
|
||||
Fix: Stop gamelog when recovering from a savegame load error (#8133)
|
||||
Fix: Exceptionally unlikely issue when reading MIDI files (#8125)
|
||||
Fix #8119: Docking areas were not properly updated when clearing, causing desyncs (#8124, #8130)
|
||||
Fix #8117: Memory leak for incoming admin port packets (#8122)
|
||||
Fix: Non-roadbridges potentially had roadtype information set (#8111)
|
||||
Fix #8108: Possible crash on loading TTD savegames with phantom oil rigs (#8109, #8110)
|
||||
Fix #8093: Build & refit test run changed game state and could cause desyncs (#8103)
|
||||
Fix: [Script] AreWaterTilesConnected did not handle aqueducts properly (#8074)
|
||||
|
||||
|
||||
1.10.1 (2020-04-13)
|
||||
------------------------------------------------------------------------
|
||||
Fix #8081: Crash when placing a ship depot next to a dock (#8082)
|
||||
Fix: [GS] A Goal's QuestionID was getting truncated (#8072)
|
||||
Fix #8064: Refit capacity could be displayed incorrectly in extreme edgecases (#8065)
|
||||
Fix #8060: Restore admin network API compatibility (#8061)
|
||||
Fix #8055: Crash when roadtype availability changes with the road construction toolbar open (#8058)
|
||||
|
||||
|
||||
1.10.0 (2020-04-01)
|
||||
------------------------------------------------------------------------
|
||||
Change: Open company window when clicking on a company goal (#8033)
|
||||
Change: [SDL2] Support pasting from clipboard on Linux (#8004)
|
||||
Fix: [Script] Random deviation upper bound range should be inclusive (#8052)
|
||||
Fix #8043: Incorrect handling of global road/tram hotkeys caused a crash (#8044)
|
||||
Fix #8039: [Script] SetOrderFlags and GetOrderDestination didn't work for oil rigs (#8040)
|
||||
Fix: [Script] CanBuildConnectedRoadPartsHere neighbours tiles were incorrect if you started a new game with a different world size (#8036)
|
||||
Fix: Ignore clicks on non-applicable global goals (#8035)
|
||||
Fix #7613: Limit News Window to 1024 messages to keep it usable and avoid overflowing scrollbars (#8026)
|
||||
Fix #7644: [OSX] Hopefully improve performance by manually set colorspace to sRGB (#8023)
|
||||
Fix #8020: Add missing docking tiles around industry neutral stations (#8021)
|
||||
Fix: GUI tramway icon only contained a single set of tram tracks (#8015)
|
||||
Fix: Station with multiple docks had the wrong tile area (#8014)
|
||||
Fix #8011: Crash when loading TTD scenario containing a dock (#8012)
|
||||
Fix #7998: Crash when scripts tried to access companies with invalid IDs (#8010)
|
||||
Fix: Crash when attempting to draw a string containing nonprintable characters (#8005)
|
||||
Fix #6399: Directory ~/.local/share not created if it didn't already exist (#8003)
|
||||
Fix #7958: Custom catenary missing on road bridges (#7991)
|
||||
Fix #7944: Demolishing locks built on rivers didn't always restore the river (#7946)
|
||||
|
||||
|
||||
1.10.0-RC1 (2020-02-09)
|
||||
------------------------------------------------------------------------
|
||||
Feature: Allow server to supply a reason to kicked/banned clients (#7859)
|
||||
Feature: [NewGRF] Station variable 6A, querying GRFID of nearby station tiles (#7956)
|
||||
Feature: Improved logic of sharing industry production between 3 or more stations (#7922)
|
||||
Feature: Highlight the item under mouse cursor in file browser (#7900)
|
||||
Feature: [GS] Methods to change town rating of companies (#7898)
|
||||
Feature: [NewGRF] Callback profiling command (#7868)
|
||||
Feature: Add a setting to show the name of the NewGRF of a vehicle in the build window (#7852)
|
||||
Feature: Ability to filter industry directory window by cargo (#7843)
|
||||
Feature: Minimap screenshot type (#7817)
|
||||
Feature: [GS] Methods to control engine availability of a specific company (#7791)
|
||||
Feature: Configurable game ending year (#7747)
|
||||
Feature: Separate window for taking screenshots (#7550)
|
||||
Change: Move autorenew setting to basic category (#7984)
|
||||
Change: Improved algorithm for transfer feeder payments (#7935)
|
||||
Change: Show volume sliders with wedges instead of boxy slider (#7902)
|
||||
Change: Auto-restart loads the original resources (e.g. save or scenario) again (#7688)
|
||||
Change: Improve readability of integer lists saved to config files (#7396)
|
||||
Fix #7976: Crash when attempting to kick the host via rcon (#7985)
|
||||
Fix #7592: Road vehicles no longer balanced between multiple road stop stations (#7979)
|
||||
Fix: Station rating effects affecting too large area (#7977)
|
||||
Fix #7974: Crash when Ctrl+click to show a collapsed vehicle group (#7975)
|
||||
Fix #7969: Crash when executing a recursive console alias (#7973)
|
||||
Fix #6566: Very long loading of the maximum "zoom out" level at high resolutions (#7968)
|
||||
Fix #7952: Crash when switching input languages (#7953)
|
||||
Fix: [OSX] Don't show a crash/assertion message box for a GUI-less video driver (#7934)
|
||||
Fix #7925: Corrupt savegames could lead to corruption of the titlegame (#7932)
|
||||
Fix: [Fluidsynth] Music notes from previous song were not properly reset (#7930)
|
||||
Fix: Invalid string usage within music window (#7928)
|
||||
Fix: Non-deterministic name sorting in industry directory window (#7915)
|
||||
Fix #7899: Various issues with town list window sorting (#7906, #7916)
|
||||
Fix #7587: Fix possible crashes when loading old save games with invalid waypoint positions (#7894)
|
||||
Fix: Avoid a crash by properly resetting timetable duration when loading old savegames (#7894)
|
||||
Fix: Possible crash when post road-works cleanup removes all road pieces (#7903)
|
||||
Fix #7891: Fix crash when loading save from 1.7.2 (#7892)
|
||||
Fix #7887: Missing sound effects for some main toolbar buttons (#7888)
|
||||
Fix #6667: Avoid confusion by also recalculating bridge costs for 'spectated' AI companies (#7884)
|
||||
Fix: Allow old NewGRF industries to hide in/out cargo slots (#7882)
|
||||
Fix: [Windows] Fix bootstrap GUI with Uniscribe but no Freetype (#7878)
|
||||
Fix: Missing keycodes for hotkeys.cfg (#7850)
|
||||
Fix #7625: Ensure road infrastructure cost is correctly updated when upgrading your own roads (#7628)
|
||||
Fix #7088: Avoid crash by closing AI/GS textfile windows when changing their in-game slot (#7094)
|
||||
|
||||
|
||||
1.10.0-beta2 (2019-12-25)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: [Script] More error mappings (#7857)
|
||||
- Feature: Ctrl+Click on a vehicle in the vehicle group window selects and scrolls to the vehicle's group (#7800)
|
||||
- Feature: Ctrl+Click on the vehicle details button in the vehicle view window opens the vehicle group window focused on the vehicle (#7800)
|
||||
- Feature: Add a button to the vehicle advisory news window to open the vehicle's group window (#7800)
|
||||
- Feature: Ctrl+Click on a vehicle in the vehicle list window opens the vehicle group window focused on the vehicle's group (#7800)
|
||||
- Fix: Custom sea level default value is now equal to minimum value (#7866)
|
||||
- Fix: [NewGRF] Various tracktype fixes (#7863)
|
||||
- Fix: Infrastructure total update when removing tram road stop (#7856)
|
||||
- Fix #7847: Use ViewportSign coordinates for sign Kdtree coordinates (#7849)
|
||||
- Fix #7836: Check coherency of NewGRF parameter min/max (#7840)
|
||||
- Fix #7673: [Script] Allow removal of custom town text (#7834)
|
||||
- Fix: Crash when displaying an error message at map edges (#7833)
|
||||
- Fix #7783, #7816: [SDL2] Fix input handling in edit context (#7825)
|
||||
- Fix #7697: Tile query on HQs did not display cargo correctly (#7824)
|
||||
- Fix #7820: Possible game crash when removing oil rig (#7821)
|
||||
- Fix #7606: Rare crash when trying to clean up a crashed script (#7819)
|
||||
- Fix #7784: [SDL2] up/down/home/end key behaviour (#7815)
|
||||
- Fix #7631: 16 out cargo support for industry directory (#7809)
|
||||
- Fix #7646: Crash on random map generation failure (#7805)
|
||||
- Fix #7430: Only reset time since pickup when train visits station if it has room to load (#7595)
|
||||
- Fix #5405: Aircraft could route to depots outside their range (#7104)
|
||||
|
||||
|
||||
1.10.0-beta1 (2019-10-29)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: Configurable minimum age for companies before allowing share trading (#7780)
|
||||
@@ -11,7 +135,6 @@
|
||||
- Feature: Improved performance for road vehicle pathfinding (#7261)
|
||||
- Feature: Option to show local authority boundary of towns (#7025)
|
||||
- Feature: Experimental method of town cargo generation that scales linearly with population (#6965)
|
||||
- Feature: [NewGRF] Houses and industries can accept/produce up to 16 different cargo types (#6867, #6872)
|
||||
- Feature: [NewGRF] RoadTypes (NRT) (#6811)
|
||||
- Add: [Win32] Select MIDI device by port name (#7666)
|
||||
- Add: 'getsysdate' console command (#7658)
|
||||
|
30
config.lib
30
config.lib
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
@@ -56,8 +54,8 @@ set_default() {
|
||||
enable_translator="0"
|
||||
enable_unicode="1"
|
||||
enable_console="1";
|
||||
enable_assert="1"
|
||||
enable_strip="0"
|
||||
enable_assert="0"
|
||||
enable_strip="1"
|
||||
enable_universal="0"
|
||||
enable_osx_g5="0"
|
||||
enable_cocoa_quartz="1"
|
||||
@@ -1518,12 +1516,20 @@ make_cflags_and_ldflags() {
|
||||
# extensions in a way that breaks build with at least ICC.
|
||||
# This requires -O1 or more, so debug level 3 (-O0) is excluded.
|
||||
CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
|
||||
if [ "$os" = "MINGW" ]; then
|
||||
# Prevent undefined references when _FORTIFY_SOURCE > 0
|
||||
LDFLAGS="$LDFLAGS -fstack-protector"
|
||||
fi
|
||||
fi
|
||||
|
||||
cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null`
|
||||
if [ -n "$cc_build_is_gcc" ]; then
|
||||
# Just add -O1 to the tools needed for building.
|
||||
CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1"
|
||||
if [ "$os" = "MINGW" ]; then
|
||||
# Prevent undefined references when _FORTIFY_SOURCE > 0
|
||||
LDFLAGS_BUILD="$LDFLAGS_BUILD -fstack-protector"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -2399,16 +2405,17 @@ detect_sdl() {
|
||||
log 1 "checking SDL... disabled"
|
||||
|
||||
sdl_config=""
|
||||
sdl2_config=""
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then
|
||||
if [ "$with_sdl" != "1" ] && [ "$with_cocoa" = "2" ]; then
|
||||
log 1 "configure: error: it is impossible to compile both SDL and COCOA"
|
||||
log 1 "configure: error: please deselect one of them and try again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then
|
||||
if [ "$with_sdl" != "1" ] && [ "$enable_dedicated" != "0" ]; then
|
||||
log 1 "configure: error: it is impossible to compile a dedicated with SDL"
|
||||
log 1 "configure: error: please deselect one of them and try again"
|
||||
exit 1
|
||||
@@ -2418,6 +2425,7 @@ detect_sdl() {
|
||||
log 1 "checking SDL... dedicated server, skipping"
|
||||
|
||||
sdl_config=""
|
||||
sdl2_config=""
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -2437,10 +2445,16 @@ detect_sdl() {
|
||||
|
||||
if [ $with_sdl = "sdl1" ]; then
|
||||
detect_pkg_config "2" "sdl" "sdl_config" "1.2"
|
||||
elif [ $with_sdl = "sdl2" ] || [ -x `which sdl2-config` ]; then
|
||||
elif [ $with_sdl = "sdl2" ]; then
|
||||
detect_pkg_config "2" "sdl2" "sdl2_config" "2.0"
|
||||
else
|
||||
detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2"
|
||||
sdl2_config=""
|
||||
if [ -x "`which sdl2-config`" ]; then
|
||||
detect_pkg_config "$with_sdl" "sdl2" "sdl2_config" "2.0"
|
||||
fi
|
||||
if [ -z "$sdl2_config" ]; then
|
||||
detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
2
configure
vendored
2
configure
vendored
@@ -1,7 +1,5 @@
|
||||
#!/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.
|
||||
|
56
docs/debugging_desyncs.md
Normal file
56
docs/debugging_desyncs.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Debugging / reporting desyncs
|
||||
|
||||
As desyncs are hard to make reproducible OpenTTD has the ability to log all
|
||||
actions done by clients so we can replay the whole game in an effort to make
|
||||
desyncs better reproducible. You need to turn this ability on. When turned
|
||||
on an automatic savegame will be made once the map has been constructed in
|
||||
the 'save/autosave' directory, see OpenTTD directories to know where to find
|
||||
this directory. Furthermore the log file 'commands-out.log' will be created
|
||||
and all actions will be written to there.
|
||||
|
||||
To enable the desync debugging you need to set the debug level for 'desync'
|
||||
to at least 1. You do this by starting OpenTTD with '`-d desync=<level>`' as
|
||||
parameter or by typing '`debug_level desync=<level>`' in OpenTTD's internal
|
||||
console.
|
||||
The desync debug levels are:
|
||||
|
||||
- 0: nothing.
|
||||
- 1: dumping of commands to 'commands-out.log'.
|
||||
- 2: same as 1 plus checking vehicle caches and dumping that too.
|
||||
- 3: same as 2 plus monthly saves in autosave.
|
||||
- 4 and higher: same as 3
|
||||
|
||||
Restarting OpenTTD will overwrite 'commands-out.log'. OpenTTD will not remove
|
||||
the savegames (dmp_cmds_*.sav) made by the desync debugging system, so you
|
||||
have to occasionally remove them yourself!
|
||||
|
||||
The naming format of the desync savegames is as follows:
|
||||
dmp_cmds_XXXXXXXX_YYYYYYYY.sav. The XXXXXXXX is the hexadecimal representation
|
||||
of the generation seed of the game and YYYYYYYY is the hexadecimal
|
||||
representation of the date of the game. This sorts the savegames by game and
|
||||
then by date making it easier to find the right savegames.
|
||||
|
||||
When a desync has occurred with the desync debugging turned on you should file
|
||||
a bug report with the following files attached:
|
||||
|
||||
- commands-out.log as it contains all the commands that were done
|
||||
- the last saved savegame (search for the last line beginning with
|
||||
'save: dmp_cmds_' in commands-out.log). We use this savegame to check
|
||||
whether we can quickly reproduce the desync. Otherwise we will need …
|
||||
- the first saved savegame (search for the first line beginning with 'save'
|
||||
where the first part, up to the last underscore '_', is the same). We need
|
||||
this savegame to be able to reproduce the bug when the last savegame is not
|
||||
old enough. If you loaded a scenario or savegame you need to attach that.
|
||||
- optionally you can attach the savegames from around 50%, 75%, 85%, 90% and
|
||||
95% of the game's progression. We can use these savegames to speed up the
|
||||
reproduction of the desync, but we should be able to reproduce these
|
||||
savegames based on the first savegame and commands-out.log.
|
||||
- in case you use any NewGRFs you should attach the ones you used unless
|
||||
we can easily find them ourselves via bananas or when they are in the
|
||||
#openttdcoop pack.
|
||||
|
||||
Do NOT remove the dmp_cmds savegames of a desync you have reported until the
|
||||
desync has been fixed; if you, by accident, send us the wrong savegames we
|
||||
will not be able to reproduce the desync and thus will be unable to fix it.
|
||||
|
||||
|
130
docs/directory_structure.md
Normal file
130
docs/directory_structure.md
Normal file
@@ -0,0 +1,130 @@
|
||||
# OpenTTD directory structure
|
||||
|
||||
OpenTTD uses its own directory to store its required 3rd party base set files
|
||||
(see section 4.1 'Required 3rd party files') and non-compulsory extension and
|
||||
configuration files.
|
||||
|
||||
See below for their proper place within this OpenTTD main data directory.
|
||||
|
||||
The main OpenTTD directories can be found in various locations, depending on
|
||||
your operating system:
|
||||
|
||||
1. The current working directory (from where you started OpenTTD)
|
||||
|
||||
For non-Windows operating systems OpenTTD will not scan for files in this
|
||||
directory if it is your personal directory, i.e. '~/', or when it is the
|
||||
root directory, i.e. '/'.
|
||||
|
||||
2. Your personal directory
|
||||
- Windows:
|
||||
- `C:\My Documents\OpenTTD` (95, 98, ME)
|
||||
- `C:\Documents and Settings\<username>\My Documents\OpenTTD` (2000, XP)
|
||||
- `C:\Users\<username>\Documents\OpenTTD` (Vista, 7, 8.1, 10)
|
||||
- macOS: `~/Documents/OpenTTD`
|
||||
- Linux: `$XDG_DATA_HOME/openttd` which is usually `~/.local/share/openttd`
|
||||
when built with XDG base directory support, otherwise `~/.openttd`
|
||||
3. The shared directory
|
||||
- Windows:
|
||||
- `C:\Documents and Settings\All Users\Shared Documents\OpenTTD` (2000, XP)
|
||||
- `C:\Users\Public\Documents\OpenTTD` (Vista, 7, 8.1, 10)
|
||||
- macOS: `/Library/Application Support/OpenTTD`
|
||||
- Linux: not available
|
||||
4. The binary directory (where the OpenTTD executable is)
|
||||
- Windows: `C:\Program Files\OpenTTD`
|
||||
- Linux: `/usr/games`
|
||||
5. The installation directory (Linux only)
|
||||
- Linux: `/usr/share/games/openttd`
|
||||
6. The application bundle (macOS only)
|
||||
|
||||
It includes the OpenTTD files (grf+lng) and it will work as long as they
|
||||
are not touched
|
||||
|
||||
Different types of data or extensions go into different subdirectories of the
|
||||
chosen main OpenTTD directory:
|
||||
|
||||
| data type | directory | additional info |
|
||||
| ------------------- | ----------------- | --------------------------- |
|
||||
| Config File | (no subdirectory) | |
|
||||
| Screenshots | screenshot | |
|
||||
| Base Graphics | baseset | (or a subdirectory thereof) |
|
||||
| Sound Sets | baseset | (or a subdirectory thereof) |
|
||||
| NewGRFs | newgrf | (or a subdirectory thereof) |
|
||||
| 32bpp Sets | newgrf | (or a subdirectory thereof) |
|
||||
| Music Sets | baseset | (or a subdirectory thereof) |
|
||||
| AIs | ai | (or a subdirectory thereof) |
|
||||
| AI Libraries | ai/library | (or a subdirectory thereof) |
|
||||
| Game Scripts (GS) | game | (or a subdirectory thereof) |
|
||||
| GS Libraries | game/library | (or a subdirectory thereof) |
|
||||
| Savegames | save | |
|
||||
| Automatic Savegames | save/autosave | |
|
||||
| Scenarios | scenario | |
|
||||
|
||||
The (automatically created) directory content_download is for OpenTTD's internal
|
||||
use and no files should be added to it or its subdirectories manually.
|
||||
|
||||
## Notes:
|
||||
|
||||
- Linux in the previous list means .deb, but most paths should be similar for
|
||||
others.
|
||||
- The previous search order is also used for NewGRFs and openttd.cfg.
|
||||
- If openttd.cfg is not found, then it will be created using the 2, 4, 1, 3,
|
||||
5 order. When built with XDG base directory support, openttd.cfg will be
|
||||
created in $XDG_CONFIG_HOME/openttd which is usually ~/.config/openttd.
|
||||
- Savegames will be relative to the config file only if there is no save/
|
||||
directory in paths with higher priority than the config file path, but
|
||||
autosaves and screenshots will always be relative to the config file.
|
||||
Unless the configuration file is in $XDG_CONFIG_HOME/openttd, then all
|
||||
other files will be saved under $XDG_DATA_HOME/openttd.
|
||||
|
||||
## The preferred setup:
|
||||
|
||||
Place 3rd party files in shared directory (or in personal directory if you do
|
||||
not have write access on shared directory) and have your openttd.cfg config
|
||||
file in personal directory (where the game will then also place savegames and
|
||||
screenshots).
|
||||
|
||||
## 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).
|
||||
|
||||
## 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.
|
||||
|
||||
## 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 this document. If you do not have an openttd.cfg OpenTTD will
|
||||
create one after closing.
|
||||
|
141
docs/logging_and_performance_metrics.md
Normal file
141
docs/logging_and_performance_metrics.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# Logging, frame rate and performance metrics
|
||||
|
||||
## 1.0) 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.
|
||||
|
||||
## 2.0) Frame rate and performance metrics
|
||||
|
||||
The Help menu in-game has a function to open the Frame rate window. This
|
||||
window shows various real-time performance statistics, measuring what parts
|
||||
of the game require the most processing power currently.
|
||||
|
||||
A summary of the statistics can also be retrieved from the console with the
|
||||
`fps` command. This is especially useful on dedicated servers, where the
|
||||
administrator might want to determine what's limiting performance in a slow
|
||||
game.
|
||||
|
||||
The frame rate is given as two figures, the simulation rate and the graphics
|
||||
frame rate. Usually these are identical, as the screen is rendered exactly
|
||||
once per simulated tick, but in the future there might be support for graphics
|
||||
and simulation running at different rates. When the game is paused, the
|
||||
simulation rate drops to zero.
|
||||
|
||||
In addition to the simulation rate, a game speed factor is also calculated.
|
||||
This is based on the target simulation speed, which is 30 milliseconds per
|
||||
game tick. At that speed, the expected frame rate is 33.33 frames/second, and
|
||||
the game speed factor is how close to that target the actual rate is. When
|
||||
the game is in fast forward mode, the game speed factor shows how much
|
||||
speed up is achieved.
|
||||
|
||||
The lower part of the window shows timing statistics for individual parts of
|
||||
the game. The times shown are short-term and long-term averages of how long
|
||||
it takes to process one tick of game time, all figures are in milliseconds.
|
||||
|
||||
Clicking a line in the lower part of the window opens a graph window, giving
|
||||
detailed readings on each tick simulated by the game.
|
||||
|
||||
The following is an explanation of the different statistics:
|
||||
|
||||
- *Game loop* - Total processing time used per simulated "tick" in the game.
|
||||
This includes all pathfinding, world updates, and economy handling.
|
||||
- *Cargo handling* - Time spent loading/unloading cargo at stations, and
|
||||
industries and towns sending/retrieving cargo from stations.
|
||||
- *Train ticks*, *Road vehicle ticks*, *Ship ticks*, *Aircraft ticks* -
|
||||
Time spent on pathfinding and other processing for each player vehicle type.
|
||||
- *World ticks* - Time spent on other world/landscape processing. This
|
||||
includes towns growing, building animations, updates of farmland and trees,
|
||||
and station rating updates.
|
||||
- *GS/AI total*, *Game script*, and *AI players* - Time spent running logic
|
||||
for game scripts and AI players. The total may show as less than the current
|
||||
sum of the individual scripts, this is because AI players at lower
|
||||
difficulty settings do not run every game tick, and hence contribute less
|
||||
to the average across all ticks. Keep in mind that the "Current" figure is
|
||||
also an average, just only over short term.
|
||||
- *Link graph delay* - Time overruns of the cargo distribution link graph
|
||||
update thread. Usually the link graph is updated in a background thread,
|
||||
but these updates need to synchronise with the main game loop occasionally,
|
||||
if the time spent on link graph updates is longer than the time taken to
|
||||
otherwise simulate the game while it was updating, these delays are counted
|
||||
in this figure.
|
||||
- *Graphics rendering* - Total time spent rendering all graphics, including
|
||||
both GUI and world viewports. This typically spikes when panning the view
|
||||
around, and when more things are happening on screen at once.
|
||||
- *World viewport rendering* - Isolated time spent rendering just world
|
||||
viewports. If this figure is significantly lower than the total graphics
|
||||
rendering time, most time is spent rendering GUI than rendering world.
|
||||
- *Video output* - Speed of copying the rendered graphics to the display
|
||||
adapter. Usually this should be very fast (in the range of 0-3 ms), large
|
||||
values for this can indicate a graphics driver problem.
|
||||
- *Sound mixing* - Speed of mixing active audio samples together. Usually
|
||||
this should be very fast (in the range of 0-3 ms), if it is slow, consider
|
||||
switching to the NoSound set.
|
||||
|
||||
If the frame rate window is shaded, the title bar will instead show just the
|
||||
current simulation rate and the game speed factor.
|
||||
|
||||
## 3.0) NewGRF callback profiling
|
||||
|
||||
NewGRF developers can profile callback chains via the `newgrf_profile`
|
||||
console command. The command controls a profiling mode where every sprite
|
||||
request is measured and logged, and written to a CSV file in the end.
|
||||
|
||||
The NewGRF developer tools need to be enabled for the command to function.
|
||||
|
||||
View the syntax for the command in-game with the console command
|
||||
`help newgrf_profile`.
|
||||
|
||||
Profiling only works during game or in the editor, it's not possible to
|
||||
profile across the main menu, world generation, or loading savegames.
|
||||
|
||||
The CSV files contain one line per sprite request during the profiling.
|
||||
They can get very large, especially on large games with many objects from
|
||||
the GRF. Start profiling short periods such as 3 or 7 days, and watch the
|
||||
file sizes.
|
||||
|
||||
The produced CSV file contains the following fields:
|
||||
|
||||
- *Tick* - Game tick counter, this may wrap to zero during recording.
|
||||
Mainly useful to distinguish events from separate ticks.
|
||||
- *Sprite* - Index of the root Action 2 sprite in the GRF file. This is
|
||||
the sprite group being resolved.
|
||||
- *Feature* - NewGRF feature number the sprite group is being resolved for.
|
||||
This will be 0xFF for AI purchase selection and ambient sound callbacks.
|
||||
- *Item* - The id of the item within the GRF. For cargotypes, railtypes,
|
||||
roadtypes, and tramtypes, this is the integer representation of the label.
|
||||
- *CallbackID* - The type of callback being resolved. ID 0 is regular graphics
|
||||
lookup. See the `newgrf_callbacks.h` file in the OpenTTD source code for the
|
||||
full list of callback IDs.
|
||||
- *Microseconds* - Total time spent to resolve the Action 2, in microseconds.
|
||||
- *Depth* - Number of recursive Action 2 lookups were made during resolution.
|
||||
Value zero means the sprite group resolved directly.
|
||||
- *Result* - Result of the callback resolution. For lookups that result in
|
||||
a sprite, this is the index of the base action 2 in the GRF file. For
|
||||
callbacks that give a numeric result, this is the callback result value.
|
||||
For lookups that result in an industry production or tilelayout, this
|
||||
is the sprite index of the action 2 defining the production/tilelayout.
|
@@ -1,7 +1,5 @@
|
||||
#!/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.
|
||||
@@ -69,6 +67,7 @@ if [ -d "$ROOT_DIR/.git" ] || [ -f "$ROOT_DIR/.git" ]; then
|
||||
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
|
||||
SHORTHASH=`echo ${HASH} | cut -c1-10`
|
||||
ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'`
|
||||
YEAR=`echo ${ISODATE} | cut -c1-4`
|
||||
BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`"
|
||||
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`"
|
||||
|
||||
@@ -105,10 +104,11 @@ else
|
||||
SHORTHASH=""
|
||||
BRANCH=""
|
||||
ISODATE=""
|
||||
YEAR=""
|
||||
TAG=""
|
||||
VERSION=""
|
||||
ISTAG="0"
|
||||
ISSTABLETAG="0"
|
||||
fi
|
||||
|
||||
echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG"
|
||||
echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG $YEAR"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
OpenTTD's known bugs
|
||||
Last updated: 2019-10-29
|
||||
Release version: 1.10.0-beta1
|
||||
Last updated: 2020-06-01
|
||||
Release version: 1.10.2
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents more or less nothingness
|
||||
;
|
||||
[metadata]
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents more or less nothingness
|
||||
;
|
||||
[metadata]
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original graphics as on the non-German Transport
|
||||
; Tycoon Deluxe DOS CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original music as on the Transport
|
||||
; Tycoon Deluxe for DOS CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original sounds as on the Transport
|
||||
; Tycoon Deluxe DOS CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original graphics as on the German Transport
|
||||
; Tycoon Deluxe DOS CD. It contains one broken sprite.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original music as on the Transport
|
||||
; Tycoon (with World Editor) for DOS CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original graphics as on the Transport
|
||||
; Tycoon Deluxe for Windows CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original music as on the Transport
|
||||
; Tycoon Deluxe for Windows CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
; $Id$
|
||||
;
|
||||
; This represents the original sounds as on the Transport
|
||||
; Tycoon Deluxe for Windows CD.
|
||||
;
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $Id: openttd.desktop.translation.awk 24100 2012-04-08 14:29:31Z rubidium $
|
||||
|
||||
# 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.
|
||||
|
@@ -63,10 +63,14 @@ Sub Lookup(ini_key, str_id, outfile)
|
||||
For Each file In folder.Files
|
||||
If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then
|
||||
Dim f
|
||||
Set f = FSO.OpenTextFile(file.Path)
|
||||
Set f = CreateObject("ADODB.Stream")
|
||||
f.Charset = "utf-8"
|
||||
f.LineSeparator = 10 ' Assume lines end with \n even for \r\n files
|
||||
f.Open
|
||||
f.LoadFromFile(file.Path)
|
||||
|
||||
Do Until f.atEndOfStream
|
||||
line = f.ReadLine()
|
||||
Do Until f.EOS
|
||||
line = Replace(f.ReadText(-2), Chr(13), "") ' Read a line and remove any \r
|
||||
|
||||
If InStr(1, line, "##isocode ") = 1 Then
|
||||
p = Split(line)
|
||||
@@ -80,8 +84,9 @@ Sub Lookup(ini_key, str_id, outfile)
|
||||
End If
|
||||
i = i + 1
|
||||
End If
|
||||
|
||||
Loop
|
||||
|
||||
f.Close
|
||||
End If
|
||||
Next
|
||||
|
||||
@@ -89,7 +94,7 @@ Sub Lookup(ini_key, str_id, outfile)
|
||||
ISort output
|
||||
|
||||
For Each line In output
|
||||
outfile.Write line & vbCrLf
|
||||
outfile.WriteText line, 1
|
||||
Next
|
||||
|
||||
End Sub
|
||||
@@ -100,7 +105,9 @@ Dim infile
|
||||
Set infile = FSO.OpenTextFile(inputfile)
|
||||
|
||||
Dim outfile
|
||||
Set outfile = FSO.CreateTextFile(outputfile, True)
|
||||
Set outfile = CreateObject("ADODB.Stream")
|
||||
outfile.Charset = "utf-8"
|
||||
outfile.Open
|
||||
|
||||
Do Until infile.atEndOfStream
|
||||
|
||||
@@ -109,15 +116,30 @@ Do Until infile.atEndOfStream
|
||||
If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then
|
||||
p = Split(line, "=")
|
||||
If Trim(p(1)) = "" Then
|
||||
outfile.Write("ORIG_EXTRA.GRF = " & GetExtraGrfHash() & vbCrLf)
|
||||
outfile.WriteText "ORIG_EXTRA.GRF = " & GetExtraGrfHash(), 1
|
||||
Else
|
||||
outfile.Write(line & vbCrLf)
|
||||
outfile.WriteText line, 1
|
||||
End If
|
||||
ElseIf InStr(1, line, "!! ") = 1 Then
|
||||
p = Split(line)
|
||||
Lookup p(1), p(2), outfile
|
||||
Else
|
||||
outfile.Write(line & vbCrLf)
|
||||
outfile.WriteText line, 1
|
||||
End If
|
||||
|
||||
Loop
|
||||
|
||||
' UTF-8 Text ADO Stream includes BOM, so we need to remove it
|
||||
Dim outfile_noBOM
|
||||
Set outfile_noBOM = CreateObject("ADODB.Stream")
|
||||
outfile_noBOM.Type = 1
|
||||
outfile_noBOM.Open
|
||||
|
||||
' Copy Text stream to Binary stream, skiping the BOM
|
||||
outfile.Position = 3
|
||||
outfile.CopyTo outfile_noBOM
|
||||
outfile.Close
|
||||
|
||||
' Write the Binary stream
|
||||
outfile_noBOM.SaveToFile outputfile, 2
|
||||
outfile_noBOM.Close
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,5 +1,3 @@
|
||||
# $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -2,8 +2,6 @@
|
||||
// (Info version 32)
|
||||
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 1017 B After Width: | Height: | Size: 2.2 KiB |
@@ -2,8 +2,6 @@
|
||||
// (Info version 32)
|
||||
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
@@ -1,6 +1,3 @@
|
||||
//
|
||||
// $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.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user