diff --git a/.gitignore b/.gitignore
index cb1e9d1599..4bf58b05c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ bin/ai/*
bin/baseset/*
!bin/baseset/openttd.grf
!bin/baseset/opntitle.dat
+!bin/baseset/orig_extra.grf
!bin/baseset/orig_*.obg
!bin/baseset/orig_*.obs
!bin/baseset/no_sound.obs
@@ -22,6 +23,9 @@ bundles/*
docs/aidocs/*
docs/gamedocs/*
docs/source/*
+.kdev4
+.kdev4/*
+*.kdev4
media/openttd.desktop
media/openttd.desktop.install
objs/*
@@ -33,6 +37,8 @@ projects/*.sdf
projects/*.opensdf
projects/*.vcproj.*.user
projects/*.vcxproj.user
+projects/*.VC.db
+projects/*.VC.opendb
src/rev.cpp
src/os/windows/ottdres.rc
diff --git a/.hgignore b/.hgignore
index debab32b0e..17b2557f80 100644
--- a/.hgignore
+++ b/.hgignore
@@ -13,6 +13,9 @@ config.pwd
docs/aidocs/*
docs/gamedocs/*
docs/source/*
+.kdev4
+.kdev4/*
+*.kdev4
Makefile
Makefile.am
Makefile.bundle
diff --git a/Doxyfile b/Doxyfile
index 957ba60e19..58d7f0a89a 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -195,7 +195,7 @@ EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
-PREDEFINED = ENABLE_NETWORK WITH_ZLIB WITH_LZO WITH_LZMA WITH_SDL WITH_PNG WITH_FONTCONFIG WITH_FREETYPE WITH_ICU UNICODE _UNICODE _GNU_SOURCE FINAL=
+PREDEFINED = ENABLE_NETWORK WITH_ZLIB WITH_LZO WITH_LZMA WITH_SDL WITH_PNG WITH_FONTCONFIG WITH_FREETYPE WITH_ICU_SORT WITH_ICU_LAYOUT UNICODE _UNICODE _GNU_SOURCE FINAL=
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
diff --git a/Makefile.bundle.in b/Makefile.bundle.in
index 969b2ebcf0..4366cf10a1 100644
--- a/Makefile.bundle.in
+++ b/Makefile.bundle.in
@@ -84,7 +84,7 @@ endif
$(Q)cp "$(BIN_DIR)/scripts/"* "$(BUNDLE_DIR)/scripts/"
ifdef MENU_DIR
$(Q)cp "$(ROOT_DIR)/media/openttd.desktop" "$(BUNDLE_DIR)/media/"
- $(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | $(SORT) | $(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.filter.awk" >> "$(BUNDLE_DIR)/media/openttd.desktop"
+ $(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | LC_ALL=C $(SORT) | $(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.filter.awk" >> "$(BUNDLE_DIR)/media/openttd.desktop"
$(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install"
endif
ifeq ($(TTD), openttd.exe)
diff --git a/Makefile.grf.in b/Makefile.grf.in
index 1cc2642320..1625b9e4c0 100644
--- a/Makefile.grf.in
+++ b/Makefile.grf.in
@@ -44,22 +44,18 @@ PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png
# Build the GRF.
ifdef GRFCODEC
-all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm
+all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm
else
all:
endif
-# Make sure the sprites directory exists.
-$(OBJS_DIR)/sprites:
- $(Q)-mkdir "$@"
-
$(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt
$(E) '$(STAGE) Collecting baseset translations'
$(Q) cat $^ > $@
-$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/openttd.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk
+$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/orig_extra.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk
$(E) '$(STAGE) Updating $(notdir $@)'
- $(Q) sed 's/^OPENTTD.GRF = *[0-9a-f]*$$/OPENTTD.GRF = '`$(MD5SUM) $(BIN_DIR)/openttd.grf | sed 's@ .*@@'`'/' $< > $@.tmp
+ $(Q) sed 's/^ORIG_EXTRA.GRF = *[0-9a-f]*$$/ORIG_EXTRA.GRF = '`$(MD5SUM) $(BIN_DIR)/orig_extra.grf | sed 's@ .*@@'`'/' $< > $@.tmp
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $@.tmp >$@
$(Q) rm $@.tmp
@@ -72,8 +68,9 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@
# Compile extra grf
-$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR)/assemble_nfo.awk
+$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk
$(E) '$(STAGE) Assembling openttd.nfo'
+ $(Q)-mkdir -p $(OBJS_DIR)/sprites
$(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null
$(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo
$(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo
@@ -81,6 +78,17 @@ $(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR)
$(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf
$(Q)cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf
+# The copy operation of PNG_FILES is duplicated from the target 'openttd.grf', thus those targets may not run in parallel.
+$(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk | $(BIN_DIR)/openttd.grf
+ $(E) '$(STAGE) Assembling orig_extra.nfo'
+ $(Q)-mkdir -p $(OBJS_DIR)/sprites
+ $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null
+ $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/orig_extra.nfo > $(OBJS_DIR)/sprites/orig_extra.nfo
+ $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/orig_extra.nfo
+ $(E) '$(STAGE) Compiling orig_extra.grf'
+ $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf
+ $(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf
+
# Clean up temporary files.
clean:
$(Q)rm -f *.bak *.grf
diff --git a/Makefile.in b/Makefile.in
index 0d50fc1b1e..d33d8a0d2a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -152,7 +152,7 @@ mrproper:
distclean: mrproper
maintainer-clean: distclean
- $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm
+ $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/orig_extra.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm
depend:
@for dir in $(SRC_DIRS); do \
diff --git a/Makefile.src.in b/Makefile.src.in
index 1d654d283f..0e190a4e62 100644
--- a/Makefile.src.in
+++ b/Makefile.src.in
@@ -210,7 +210,7 @@ endif
{ \
print $$0 \
} \
- ' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | $(SORT) > Makefile.dep
+ ' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | LC_ALL=C $(SORT) > Makefile.dep
$(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak
diff --git a/bin/ai/compat_1.6.nut b/bin/ai/compat_1.6.nut
index fe985b90d0..8fb518e1b5 100644
--- a/bin/ai/compat_1.6.nut
+++ b/bin/ai/compat_1.6.nut
@@ -6,3 +6,5 @@
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
*/
+
+AILog.Info("1.6 API compatibility in effect.");
diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut
new file mode 100644
index 0000000000..1290443c4d
--- /dev/null
+++ b/bin/ai/compat_1.7.nut
@@ -0,0 +1,10 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+GSLog.Info("1.7 API compatibility in effect.");
diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut
new file mode 100644
index 0000000000..fe985b90d0
--- /dev/null
+++ b/bin/ai/compat_1.8.nut
@@ -0,0 +1,8 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
diff --git a/bin/ai/regression/regression_info.nut b/bin/ai/regression/regression_info.nut
index 4e7aec7568..f908ae28ac 100644
--- a/bin/ai/regression/regression_info.nut
+++ b/bin/ai/regression/regression_info.nut
@@ -6,7 +6,7 @@ class Regression extends AIInfo {
function GetShortName() { return "REGR"; }
function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; }
function GetVersion() { return 1; }
- function GetAPIVersion() { return "1.6"; }
+ function GetAPIVersion() { return "1.8"; }
function GetDate() { return "2007-03-18"; }
function CreateInstance() { return "Regression"; }
}
diff --git a/bin/baseset/no_music.obm b/bin/baseset/no_music.obm
index 07dcedf50b..7a70e3b55d 100644
--- a/bin/baseset/no_music.obm
+++ b/bin/baseset/no_music.obm
@@ -21,12 +21,15 @@ description.el_GR = Ένα πάκετο μουσικής χωρίς πραγμα
description.en_AU = A music pack without actual music.
description.en_US = A music pack without actual music.
description.es_ES = Un conjunto de música vacío.
+description.es_MX = Paquete de música vacío
description.et_EE = Muusikakogu ilma muusikata.
+description.eu_ES = Musika gabeko musika paketea.
description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia.
description.fr_FR = Un pack de musiques sans musiques.
description.ga_IE = Pacáiste ceoil gan aon cheol iarbhír ann.
description.gd_GB = Pacaid ciùil anns nach eil fonn sam bith.
description.gl_ES = Un conxunto de músicas sen ningunha música.
+description.he_IL = אוסף מנגינות ללא מנגינות.
description.hr_HR = Glazbeni paket bez ikakve glazbe.
description.hu_HU = Zenei alapcsomag zene nélkül.
description.id_ID = Paket musik tanpa musik sungguhan.
@@ -38,6 +41,7 @@ description.la_VA = Sarcina musicae sine ulla musica.
description.lb_LU = E Musikpack ouni aktuell Musik.
description.lt_LT = Muzikos pakas be muzikos.
description.lv_LV = Mūzikas kopa bez mūzikas
+description.ms_MY = Pek muzik tanpa muzik sebenar.
description.nb_NO = En musikkpakke uten noe musikk.
description.nl_NL = Een muziekset zonder muziek.
description.nn_NO = Ei musikkpakke utan noko musikk.
diff --git a/bin/baseset/no_sound.obs b/bin/baseset/no_sound.obs
index 522c45b9b9..8bd8d30fe0 100644
--- a/bin/baseset/no_sound.obs
+++ b/bin/baseset/no_sound.obs
@@ -21,6 +21,7 @@ description.el_GR = Ένα πάκετο ήχων χώρις ήχους.
description.en_AU = A sound pack without any sounds.
description.en_US = A sound pack without any sounds.
description.es_ES = Un conjunto de sonidos vacío.
+description.es_MX = Paquete de sonidos vacío
description.et_EE = Helikogu ilma helideta.
description.eu_ES = Soinurik gabeko soinu pakete bat
description.fi_FI = Äänipaketti, jossa ei ole ääniä.
@@ -28,6 +29,7 @@ description.fr_FR = Un pack de sons sans sons.
description.ga_IE = Pacáiste fuaimeanna gan aon fhuaimeanna ann.
description.gd_GB = Pacaid fhuaimean anns nach eil fuaim sam bith.
description.gl_ES = Un conxunto de sons sen ningún son
+description.he_IL = אוסף צלילים ללא צלילים.
description.hr_HR = Zvučni paket bez ikakvih zvukova.
description.hu_HU = Hang alapcsomag hangok nélkül.
description.id_ID = Paket efek suara tanpa suara apapun.
@@ -38,6 +40,7 @@ description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다.
description.la_VA = Sarcina sonorum sine ullis sonis.
description.lb_LU = E Soundpack ouni iergendee Sound.
description.lt_LT = Garsų pakas be jokių garsų.
+description.lv_LV = Skaņu kopa bez skaņas.
description.nb_NO = En lydpakke uten noen lyder.
description.nl_NL = Een geluidset zonder geluid.
description.nn_NO = Ei lydpakke utan nokon lydar.
diff --git a/bin/baseset/openttd.grf b/bin/baseset/openttd.grf
index efe35ffd38..85d3fc8adc 100644
Binary files a/bin/baseset/openttd.grf and b/bin/baseset/openttd.grf differ
diff --git a/bin/baseset/orig_dos.obg b/bin/baseset/orig_dos.obg
index 693d9dd95f..2ed8a5a59c 100644
--- a/bin/baseset/orig_dos.obg
+++ b/bin/baseset/orig_dos.obg
@@ -22,12 +22,15 @@ description.el_GR = Αρχικά γραφικά από το Transport Tycoon Del
description.en_AU = Original Transport Tycoon Deluxe DOS edition graphics.
description.en_US = Original Transport Tycoon Deluxe DOS edition graphics.
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS.
+description.es_MX = Gráficos originales de Transport Tycoon Deluxe para DOS.
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni graafika.
+description.eu_ES = Transport Tycoon Deluxe originaleko DOS edizioko grafikoak.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version grafiikat.
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS).
description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS.
description.gd_GB = Grafaigeachd aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para DOS.
+description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת DOS.
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának grafikája.
description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS.
@@ -38,6 +41,8 @@ description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에
description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS.
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Grafik.
description.lt_LT = Originali Transport Tycoon Deluxe DOS leidimo grafika.
+description.lv_LV = Oriģinālā Transport Tycoon Deluxe DOS izdevuma grafika.
+description.ms_MY = Grafik asal Transport Tycoon Deluxe DOS edition.
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS.
description.nl_NL = Originele graphics van de Transport Tycoon Deluxe DOS-versie.
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS.
@@ -59,21 +64,21 @@ description.zh_CN = 运输大亨DOS豪华版原版图形包.
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的圖形。
[files]
-base = TRG1.GRF
-logos = TRGI.GRF
-arctic = TRGC.GRF
-tropical = TRGH.GRF
-toyland = TRGT.GRF
-extra = OPENTTD.GRF
+base = TRG1.GRF
+logos = TRGI.GRF
+arctic = TRGC.GRF
+tropical = TRGH.GRF
+toyland = TRGT.GRF
+extra = ORIG_EXTRA.GRF
[md5s]
-TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
-TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
-TRGC.GRF = ed446637e034104c5559b32c18afe78d
-TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
-TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
-OPENTTD.GRF = 505d96061556d3bb5cec6234096ec5bc
+TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
+TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
+TRGC.GRF = ed446637e034104c5559b32c18afe78d
+TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
+TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
+ORIG_EXTRA.GRF = 0b10a95c0adee710ecca9c3d676be4f3
[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-OPENTTD.GRF = This file was part of your OpenTTD installation.
+default = You can find it on your Transport Tycoon Deluxe CD-ROM.
+ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/orig_dos.obs b/bin/baseset/orig_dos.obs
index 38eb7b5818..ce2d6d22e6 100644
--- a/bin/baseset/orig_dos.obs
+++ b/bin/baseset/orig_dos.obs
@@ -21,12 +21,15 @@ description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe
description.en_AU = Original Transport Tycoon Deluxe DOS edition sounds.
description.en_US = Original Transport Tycoon Deluxe DOS edition sounds.
description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión DOS.
+description.es_MX = Sonidos originales de Transport Tycoon Deluxe para DOS.
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni helid.
+description.eu_ES = Transport Tycoon Deluxe originaleko DOS edizioko soinuak.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version äänet.
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version DOS).
description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán DOS.
description.gd_GB = Fuaimean aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para DOS.
+description.he_IL = צלילי Transport Tycoon Deluxe המקורי בגרסת DOS.
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának hangjai.
description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi DOS.
diff --git a/bin/baseset/orig_dos_de.obg b/bin/baseset/orig_dos_de.obg
index e9344b3f63..598d8ed89d 100644
--- a/bin/baseset/orig_dos_de.obg
+++ b/bin/baseset/orig_dos_de.obg
@@ -22,12 +22,14 @@ description.el_GR = Αρχικά γραφικά από το Transport Tycoon Del
description.en_AU = Original Transport Tycoon Deluxe DOS (German) edition graphics.
description.en_US = Original Transport Tycoon Deluxe DOS (German) edition graphics.
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS (Alemán).
+description.es_MX = Gráficos originales de Transport Tycoon Deluxe para DOS (en alemán).
description.et_EE = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika.
description.fi_FI = Alkuperäiset Saksassa julkaistun Transport Tycoon Deluxen DOS-version grafiikat.
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande).
description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS (Gearmánach).
description.gd_GB = Grafaigeachd aig an deasachadh DOS (Gearmailteach) tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Graficos da edición orixinal (alemá) de Transport Tycoon Deluxe para DOS.
+description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת DOS (גרמנית).
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS (német) verziójának grafikája.
description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS (Jerman).
@@ -38,6 +40,7 @@ description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에
description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS (Germanica).
description.lb_LU = Original Transport Tycoon Deluxe DOS (Däitsch) Editioun Grafik.
description.lt_LT = Originali Transport Tycoon Deluxe DOS (Vokiečių) leidimo grafika.
+description.lv_LV = Oriģinālā Transport Tycoon Deluxe DOS (vācu) izdevuma grafika.
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk).
description.nl_NL = Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie.
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS (tysk).
@@ -59,21 +62,21 @@ description.zh_CN = 运输大亨DOS豪华德语版原版图形包.
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版 (德國版) 的圖形。
[files]
-base = TRG1.GRF
-logos = TRGI.GRF
-arctic = TRGC.GRF
-tropical = TRGH.GRF
-toyland = TRGT.GRF
-extra = OPENTTD.GRF
+base = TRG1.GRF
+logos = TRGI.GRF
+arctic = TRGC.GRF
+tropical = TRGH.GRF
+toyland = TRGT.GRF
+extra = ORIG_EXTRA.GRF
[md5s]
-TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
-TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
-TRGC.GRF = ed446637e034104c5559b32c18afe78d
-TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
-TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
-OPENTTD.GRF = 505d96061556d3bb5cec6234096ec5bc
+TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
+TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
+TRGC.GRF = ed446637e034104c5559b32c18afe78d
+TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
+TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
+ORIG_EXTRA.GRF = 0b10a95c0adee710ecca9c3d676be4f3
[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-OPENTTD.GRF = This file was part of your OpenTTD installation.
+default = You can find it on your Transport Tycoon Deluxe CD-ROM.
+ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/orig_extra.grf b/bin/baseset/orig_extra.grf
new file mode 100644
index 0000000000..46faff3916
Binary files /dev/null and b/bin/baseset/orig_extra.grf differ
diff --git a/bin/baseset/orig_win.obg b/bin/baseset/orig_win.obg
index 11ad4136f8..2b7d43478d 100644
--- a/bin/baseset/orig_win.obg
+++ b/bin/baseset/orig_win.obg
@@ -22,12 +22,14 @@ description.el_GR = Αρχικά γραφικά από το Transport Tycoon Del
description.en_AU = Original Transport Tycoon Deluxe Windows edition graphics.
description.en_US = Original Transport Tycoon Deluxe Windows edition graphics.
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión Windows.
+description.es_MX = Gráficos originales de Transport Tycoon Deluxe para Windows.
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni graafika.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version grafiikat.
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows).
description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán Windows.
description.gd_GB = Grafaigeachd aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para Windows.
+description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת Windows.
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának grafikája.
description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi Windows.
@@ -38,6 +40,8 @@ description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에
description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe Windows.
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Grafik.
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo grafika.
+description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma grafika.
+description.ms_MY = Grafik asal Transport Tycoon Deluxe edisi Windows.
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows.
description.nl_NL = Originele graphics van de Transport Tycoon Deluxe Windows-versie.
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for Windows.
@@ -59,21 +63,21 @@ description.zh_CN = 运输大亨Windows豪华版原版图形包.
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的圖形。
[files]
-base = TRG1R.GRF
-logos = TRGIR.GRF
-arctic = TRGCR.GRF
-tropical = TRGHR.GRF
-toyland = TRGTR.GRF
-extra = OPENTTD.GRF
+base = TRG1R.GRF
+logos = TRGIR.GRF
+arctic = TRGCR.GRF
+tropical = TRGHR.GRF
+toyland = TRGTR.GRF
+extra = ORIG_EXTRA.GRF
[md5s]
-TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
-TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
-TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
-TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
-TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
-OPENTTD.GRF = 505d96061556d3bb5cec6234096ec5bc
+TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
+TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
+TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
+TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
+TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
+ORIG_EXTRA.GRF = 0b10a95c0adee710ecca9c3d676be4f3
[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-OPENTTD.GRF = This file was part of your OpenTTD installation.
+default = You can find it on your Transport Tycoon Deluxe CD-ROM.
+ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/bin/baseset/orig_win.obm b/bin/baseset/orig_win.obm
index 27164c73bc..8e2053e043 100644
--- a/bin/baseset/orig_win.obm
+++ b/bin/baseset/orig_win.obm
@@ -21,12 +21,14 @@ description.el_GR = Αρχική μουσική από το Transport Tycoon Del
description.en_AU = Original Transport Tycoon Deluxe Windows edition music.
description.en_US = Original Transport Tycoon Deluxe Windows edition music.
description.es_ES = Música original de Transport Tycoon Deluxe versión Windows.
+description.es_MX = Música original de Transport Tycoon Deluxe para Windows.
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni muusika.
description.fi_FI = Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki.
description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows).
description.ga_IE = Ceol bunaidh Transport Tycoon Deluxe, eagrán Windows.
description.gd_GB = Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Música da edición orixinal de Transport Tycoon Deluxe para Windows.
+description.he_IL = מנגינות Transport Tycoon Deluxe המקורי בגרסת Windows.
description.hr_HR = Originalna glazba za Transport Tycoon Deluxe Windows izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának zenéje.
description.id_ID = Musik pengiring orisinil Transport Tycoon Deluxe versi Windows.
@@ -38,6 +40,7 @@ description.la_VA = Musica ex editione originale Transport Tycoon Deluxe Windows
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Musik.
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo muzika.
description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika.
+description.ms_MY = Muzik asal Transport Tycoon Deluxe edisi Windows.
description.nb_NO = Original musikk fra Transport Tycoon Deluxe for Windows.
description.nl_NL = Originele muziek van de Transport Tycoon Deluxe Windows-versie.
description.nn_NO = Original musikk frå Transport Tycoon Deluxe for Windows.
diff --git a/bin/baseset/orig_win.obs b/bin/baseset/orig_win.obs
index 9fe250b304..c3e5fb7693 100644
--- a/bin/baseset/orig_win.obs
+++ b/bin/baseset/orig_win.obs
@@ -21,12 +21,15 @@ description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe
description.en_AU = Original Transport Tycoon Deluxe Windows edition sounds.
description.en_US = Original Transport Tycoon Deluxe Windows edition sounds.
description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión Windows.
+description.es_MX = Sonidos originales de Transport Tycoon Deluxe para Windows.
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni helid.
+description.eu_ES = Transport Tycoon Deluxe originaleko Windows edizioko grafikoak.
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version äänet.
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version Windows).
description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán Windows.
description.gd_GB = Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para Windows.
+description.he_IL = צלילי Transport Tycoon Deluxe המקורי בגרסת Windows.
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje.
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának hangjai.
description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi Windows.
diff --git a/bin/game/compat_1.6.nut b/bin/game/compat_1.6.nut
index fe985b90d0..d25189db2a 100644
--- a/bin/game/compat_1.6.nut
+++ b/bin/game/compat_1.6.nut
@@ -6,3 +6,5 @@
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
*/
+
+GSLog.Info("1.6 API compatibility in effect.");
diff --git a/bin/game/compat_1.7.nut b/bin/game/compat_1.7.nut
new file mode 100644
index 0000000000..1290443c4d
--- /dev/null
+++ b/bin/game/compat_1.7.nut
@@ -0,0 +1,10 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+GSLog.Info("1.7 API compatibility in effect.");
diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut
new file mode 100644
index 0000000000..fe985b90d0
--- /dev/null
+++ b/bin/game/compat_1.8.nut
@@ -0,0 +1,8 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
diff --git a/changelog.txt b/changelog.txt
index c110109386..89b3babf84 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,68 @@
+1.6.1 (2016-07-01)
+------------------------------------------------------------------------
+- Fix: Compilation and optimisation issues with GCC6 (r27606, r27605, r27595)
+- Fix: Compilation with --disable-network [FS#6481] (r27602)
+- Fix: [NewGRF] shift-and-add-divide/modulo varadjusts use signed division/modulo (r27600)
+- Fix: Company 0 could accept engine previews before they were offered (r27598)
+
+
+1.6.1-RC1 (2016-06-01)
+------------------------------------------------------------------------
+- Feature: Mexican Spanish (r27564, r27553, r27552)
+- Change: Performance improvement for dedicated servers by skipping drawing calls earlier in the process [FS#6402] (r27579)
+- Fix: Automatic servicing of road vehicles compared path finder costs with tile distances, thus vehicles went to depots which were factor 100 too far away [FS#6410] (r27586)
+- Fix: Enforce a non-zero load amount for all vehicles, so that vehicles can process their cargo reservations [FS#6437] (r27585, r27584)
+- Fix: Do not decrease the column width of depot windows when vehicles with high unitnumbers leave [FS#6415] (r27583)
+- Fix: Button size computation in script configuration window [FS#6461] (r27581)
+- Fix: [NewGRF] Set date of last service on construction also for wagons and articulated parts [FS#6395] (r27580)
+- Fix: Vehicles could not be hidden from the purchase list when they were in exclusive preview [FS#6454] (r27578)
+- Fix: Dock and roadstop picker, client list and town authority window did not auto-resize according to their content when they were positioned at the bottom of the screen [FS#6386] (r27577)
+- Fix: Various incorrect but uncritical size computations in the content client [FS#6449] (r27576, r27570)
+- Fix: Memory leak when disabling palette animation [FS#6404] (r27575)
+- Fix: [NewGRF] The house id as returned by house variable 66 was incorrect when querying neighboured tiles [FS#6432] (r27574)
+- Fix: [Build] Compilation failure with gcc 6.1 due to headers included after safeguards.h [FS#6467] (r27573)
+- Fix: Convenience savegame bump to distinguish 1.6 savegames from 1.5 savegames [FS#6442] (r27572)
+- Fix: [Build] Force sorting to be locale independent, so files are always ordered the same and by that token better diff-able (r27562, r27558)
+- Fix: Typos in comments and string (r27561, r27560)
+- Fix: [Build] bashism that caused different CFLAGS with bash vs dash (r27557)
+- Fix: Use a more appropiate sound effect for convert-rail (r27547)
+- Fix: Remove SetFill from vehicle GUI buttons, so that the viewport is resized instead of them in case of long window titles (r27546)
+- Fix: [Script] Generation of API wrappers (r27545, r27544, r27543)
+- Fix: [Windows] ICU got disabled for Windows builds, breaking RTL support [FS#6427] (r27542)
+- Fix: [NewGRF] Station spritelayouts did not accept the var10 flag for the palette [FS#6435] (r27534)
+
+
+1.6.0 (2016-04-01)
+------------------------------------------------------------------------
+(None)
+
+
+1.6.0-RC1 (2016-03-01)
+------------------------------------------------------------------------
+- Feature: [NewGRF] Allow custom sound IDs in RV property 0x12, ship property 0x10 and aircraft property 0x12 (r27507)
+- Feature: When viewing online content of a particular type, hide content of other types unless they have been (auto)selected for download (r27469, r27468, r27444)
+- Feature: [NewGRF] Move sprite 8 positions in sprite aligner with ctrl+click [FS#6241] (r27451)
+- Feature: Lower the sell-vehicle and sell-chain buttons in the train depot GUI while dragging a vehicle over it [FS#6391] (r27450, r27446)
+- Feature: Make the object placement GUI an independent window (r27438, r27397, r27346)
+- Feature: [Build] Project files and compilation with MSVC2015 (r27385, r27382, r27381, r27380, r27379)
+- Feature: [NewGRF] Allow railtype NewGRF to define separate sprites for the fences on either track side [FS#6315] (r27354, r27343)
+- Feature: [NewGRF] Increase the maximum amount of industry types to 128 per NewGRF and 240 in total (r27279)
+- Feature: Make Ctrl+Remove-Roadstop also remove the road, just like for rail stations [FS#6252] (r27251)
+- Change: [NewGRF] Allow static NewGRF to enable the second rocky tile set (r27497)
+- Change: Round loading percentage in loading indicators and conditional orders towards 50%, so that 0% and 100% mean completely empty or full (r27426)
+- Change: [Build] Rework the configure system to make more use of pkg-config (r27377:r27366, r27361, r27360)
+- Change: Enable YAPF cache debugging with desync debug level 2 (r27332)
+- Change: [strgen] Default plural subparameter position for CARGO_xxx string control codes is subparameter 1 (r27295)
+- Change: [NewGRF] Translate industry variable A6 (r27267)
+- Change: Do not consider cargo that is already being loaded as waiting cargo wrt. the station rating [FS#6165] (r27256)
+- Change: Tune down terrain generation to reduce amount of long slopes (r27230)
+- Change: Generate more detailed curves at the coast (r27229)
+- Change: Slightly more water in the non-custom sea levels (r27228)
+- Change: Be more lenient about road stop removal when at least one stop could be removed [FS#6262] (r27225)
+- Fix: [Win32] Stdin/out/err need to be re-assigned differently if the runtime lib of MSVC2015 is used (r27481)
+- Fix: [Haiku] On Haiku use the appropriate system variable to obtain the include dir [FS#6401] (r27472)
+
+
1.5.3 (2015-12-01)
------------------------------------------------------------------------
(None)
diff --git a/config.lib b/config.lib
index a8c6e129c0..4bacba4f95 100644
--- a/config.lib
+++ b/config.lib
@@ -172,7 +172,7 @@ set_default() {
with_grfcodec
with_nforenum
with_sse
- CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD"
+ CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD PKG_CONFIG_PATH PKG_CONFIG_LIBDIR"
}
detect_params() {
@@ -473,6 +473,8 @@ detect_params() {
CFLAGS_BUILD=* | --CFLAGS_BUILD=* | --CFLAGS-BUILD=*) CFLAGS_BUILD="$optarg";;
CXXFLAGS_BUILD=* | --CXXFLAGS_BUILD=* | --CXXFLAGS-BUILD=*) CXXFLAGS_BUILD="$optarg";;
LDFLAGS_BUILD=* | --LDFLAGS_BUILD=* | --LDFLAGS-BUILD=*) LDFLAGS_BUILD="$optarg";;
+ PKG_CONFIG_PATH=* | --PKG_CONFIG_PATH=* | --PKG-CONFIG-PATH=*) PKG_CONFIG_PATH="$optarg";;
+ PKG_CONFIG_LIBDIR=* | --PKG_CONFIG_LIBDIR=* | --PKG-CONFIG-LIBDIR=*) PKG_CONFIG_LIBDIR="$optarg";;
--ignore-extra-parameters) ignore_extra_parameters="1";;
@@ -517,6 +519,20 @@ save_params() {
echo "" >> $config_log
}
+# Export a variable so tools like pkg-config can see it when invoked.
+# If the variable contains an empty string then unset it.
+# $1 - name of the variable to export or unset
+export_or_unset() {
+ eval local value=\$$1
+ if [ -n "$value" ]; then
+ export $1;
+ log 2 "using $1=$value";
+ else
+ unset $1;
+ log 2 "not using $1";
+ fi
+}
+
check_params() {
# Some params want to be in full uppercase, else they might not work as
# expected.. fix that here
@@ -525,6 +541,16 @@ check_params() {
os=`echo $os | tr '[a-z]' '[A-Z]'`
cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'`
+ # Export some variables to be used by pkg-config
+ #
+ # PKG_CONFIG_LIBDIR variable musn't be set if we are not willing to
+ # override the default pkg-config search path, it musn't be an empty
+ # string. If the variable is empty (e.g. when an empty string comes
+ # from config.cache) then unset it. This way the "don't override" state
+ # will be properly preserved when (re)configuring.
+ export_or_unset PKG_CONFIG_PATH
+ export_or_unset PKG_CONFIG_LIBDIR
+
# Check if all params have valid values
# Endian only allows AUTO, LE and, BE
@@ -1265,7 +1291,12 @@ make_compiler_cflags() {
# remark #2259: non-pointer conversion from ... to ... may lose significant bits
flags="$flags -wd2259"
# Use c++0x mode so static_assert() is available
- cxxflags="$cxxflags -std=c++0x"
+ cxxflags="$cxxflags -std=c++11"
+ fi
+
+ if [ $cc_version -lt 140 ]; then
+ log 1 "configure: error: ICC version is too old: `$1 -dumpversion`, minumum: 14.0"
+ exit 1
fi
if [ "$enable_lto" != "0" ]; then
@@ -1285,7 +1316,7 @@ make_compiler_cflags() {
# -W alone doesn't enable all warnings enabled by -Wall; on the other hand,
# -Weverything enables too many useless warnings that can't be disabled (as of 3.0)
- flags="$flags -Wall -W"
+ flags="$flags -Wall -W -Wextra"
# warning: unused parameter '...'
flags="$flags -Wno-unused-parameter"
@@ -1326,13 +1357,23 @@ make_compiler_cflags() {
flags="$flags -Wno-unused-variable"
fi
+ if [ "$cc_version" -ge "33" ]; then
+ # clang completed C++11 support in version 3.3
+ flags="$flags -std=c++11"
+ else
+ log 1 "configure: error: clang version is too old: `$1 -v 2>&1 | head -n 1`, minumum: 3.3"
+ exit 1
+ fi
+
# rdynamic is used to get useful stack traces from crash reports.
ldflags="$ldflags -rdynamic"
else
# Enable some things only for certain GCC versions
- cc_version=`$1 -dumpversion | cut -c 1,3`
+ # cc_version = major_version * 100 + minor_version
+ # For example: "3.3" -> 303, "4.9.2" -> 409, "6" -> 600, "23.5" -> 2305
+ cc_version=`$1 -dumpversion | $awk -F . '{printf "%d%02d", $1, $2}'`
- if [ $cc_version -lt 33 ]; then
+ if [ $cc_version -lt 303 ]; then
log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support"
exit 1
fi
@@ -1345,20 +1386,20 @@ make_compiler_cflags() {
if [ $enable_assert -eq 0 ]; then
# Do not warn about unused variables when building without asserts
flags="$flags -Wno-unused-variable"
- if [ $cc_version -ge 46 ]; then
+ if [ $cc_version -ge 406 ]; then
# GCC 4.6 gives more warnings, disable them too
flags="$flags -Wno-unused-but-set-variable"
flags="$flags -Wno-unused-but-set-parameter"
fi
fi
- if [ $cc_version -ge 34 ]; then
+ if [ $cc_version -ge 304 ]; then
# Warn when a variable is used to initialise itself:
# int a = a;
flags="$flags -Winit-self"
fi
- if [ $cc_version -ge 40 ]; then
+ if [ $cc_version -ge 400 ]; then
# GCC 4.0+ complains about that we break strict-aliasing.
# On most places we don't see how to fix it, and it doesn't
# break anything. So disable strict-aliasing to make the
@@ -1369,7 +1410,7 @@ make_compiler_cflags() {
flags="$flags -Wcast-qual"
fi
- if [ $cc_version -ge 42 ]; then
+ if [ $cc_version -ge 402 ]; then
# GCC 4.2+ automatically assumes that signed overflows do
# not occur in signed arithmetics, whereas we are not
# sure that they will not happen. It furthermore complains
@@ -1380,25 +1421,37 @@ make_compiler_cflags() {
flags="$flags -Wnon-virtual-dtor"
fi
- if [ $cc_version -ge 43 ]; then
+ if [ $cc_version -ge 403 ] && [ $cc_version -lt 600 ]; then
# Use gnu++0x mode so static_assert() is available.
# Don't use c++0x, it breaks mingw (with gcc 4.4.0).
- cxxflags="$cxxflags -std=gnu++0x"
+ cxxflags="$cxxflags -std=gnu++11"
fi
- if [ $cc_version -eq 45 ]; then
+ if [ $cc_version -eq 405 ]; then
# Prevent optimisation supposing enums are in a range specified by the standard
# For details, see http://gcc.gnu.org/PR43680
flags="$flags -fno-tree-vrp"
fi
- if [ $cc_version -ge 47 ]; then
+ if [ $cc_version -eq 407 ]; then
# Disable -Wnarrowing which gives many warnings, such as:
# warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing]
# They are valid according to the C++ standard, but useless.
cxxflags="$cxxflags -Wno-narrowing"
+ fi
+
+ if [ $cc_version -ge 407 ]; then
# Disable bogus 'attempt to free a non-heap object' warning
flags="$flags -Wno-free-nonheap-object"
+ else
+ log 1 "configure: error: GCC version is too old: `$1 -dumpversion`, minumum: 4.7"
+ exit 1
+ fi
+
+ if [ $cc_version -ge 600 ]; then
+ # -flifetime-dse=2 (default since GCC 6) doesn't play
+ # well with our custom pool item allocator
+ cxxflags="$cxxflags -flifetime-dse=1 -std=gnu++14"
fi
if [ "$enable_lto" != "0" ]; then
@@ -1406,7 +1459,7 @@ make_compiler_cflags() {
has_lto=`$1 -dumpspecs | grep '\%{flto'`
if [ -n "$has_lto" ]; then
# Use LTO only if we see LTO exists and is requested
- if [ $cc_version -lt 46 ]; then
+ if [ $cc_version -lt 406 ]; then
flags="$flags -flto"
else
flags="$flags -flto=jobserver"
@@ -1490,7 +1543,7 @@ make_cflags_and_ldflags() {
fi
if [ $enable_debug -le 2 ]; then
- cc_host_is_gcc=`basename "$cc_host" | grep "gcc" &>/dev/null`
+ cc_host_is_gcc=`basename "$cc_host" | grep "gcc" 2>/dev/null`
if [ -n "$cc_host_is_gcc" ]; then
# Define only when compiling with GCC. Some GLIBC versions use GNU
# extensions in a way that breaks build with at least ICC.
@@ -1498,14 +1551,17 @@ make_cflags_and_ldflags() {
CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
fi
- cc_build_is_gcc=`basename "$cc_build" | grep "gcc" &>/dev/null`
+ 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.
+ # Add -O1 and fortify source to the tools needed for building, on gcc
CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1"
+ elif [ -n "`basename "$cc_build" | grep "clang" 2>/dev/null`" ]; then
+ # Add -O1 to the tools needed for building, on clang
+ CFLAGS_BUILD="$CFLAGS_BUILD -O1"
fi
fi
- if [ "$os" = "OSX" ] && [ $cc_version -eq 40 ]; then
+ if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then
# Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization,
# wrongly optimizing ^= in loops. This disables the failing optimisation.
CFLAGS="$CFLAGS -fno-expensive-optimizations"
@@ -1529,7 +1585,7 @@ make_cflags_and_ldflags() {
LDFLAGS="$LDFLAGS -mwin32"
fi
if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
- if [ $cc_version -lt 46 ]; then
+ if [ $cc_version -lt 406 ]; then
flags="$flags -mno-cygwin"
LDFLAGS="$LDFLAGS -mno-cygwin"
fi
@@ -1542,10 +1598,10 @@ make_cflags_and_ldflags() {
LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32 -limm32"
- if [ $cc_version -ge 44 ]; then
+ if [ $cc_version -ge 404 ]; then
LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++"
fi
- if [ $cc_version -ge 47 ]; then
+ if [ $cc_version -ge 407 ]; then
CFLAGS="$CFLAGS -mno-ms-bitfields"
fi
fi
@@ -1595,23 +1651,6 @@ make_cflags_and_ldflags() {
CFLAGS="$OSX_SYSROOT $CFLAGS"
LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS"
fi
-
- if [ "$enable_universal" = "0" ] && [ $cc_version -gt 40 ]; then
- # Only set the min version when not doing an universal build.
- # Universal builds set the version elsewhere.
- if [ "$cpu_type" = "64" ]; then
- CFLAGS="$CFLAGS -mmacosx-version-min=10.5"
- else
- gcc_cpu=`$cc_host -dumpmachine`
- if [ "`echo $gcc_cpu | cut -c 1-3`" = "ppc" -o "`echo $gcc_cpu | cut -c 1-7`" = "powerpc" ]; then
- # PowerPC build can run on 10.3
- CFLAGS="$CFLAGS -mmacosx-version-min=10.3"
- else
- # Intel is only available starting from 10.4
- CFLAGS="$CFLAGS -mmacosx-version-min=10.4"
- fi
- fi
- fi
fi
if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
@@ -1774,7 +1813,7 @@ make_cflags_and_ldflags() {
# GCC 4.0+ doesn't like the DirectX includes (gives tons of
# warnings on it we won't be able to fix). For now just
# suppress those warnings.
- if [ $cc_version -ge 40 ]; then
+ if [ $cc_version -ge 400 ]; then
CFLAGS="$CFLAGS -Wno-non-virtual-dtor"
fi
fi
@@ -3096,24 +3135,40 @@ detect_nforenum() {
log 1 "checking nforenum... found"
}
-detect_cputype() {
- if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
- log 1 "forcing cpu-type... $cpu_type bits"
- return;
- fi
- echo "#define _SQ64 1" > tmp.64bit.cpp
- echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp
- echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
- echo "int main() { return 0; }" >> tmp.64bit.cpp
- execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
+_detect_cputype_width() {
+ echo "#define _SQ64 1" > $1.cpp
+ echo "#include \"src/stdafx.h\"" >> $1.cpp
+ echo "assert_compile(sizeof(size_t) == $2);" >> $1.cpp
+ echo "int main() { return 0; }" >> $1.cpp
+ execute="$cxx_host $CFLAGS -std=c++11 $1.cpp -o $1 -DTESTING 2>&1"
cpu_type="`eval $execute 2>/dev/null`"
ret=$?
log 2 "executing $execute"
log 2 " returned $cpu_type"
log 2 " exit code $ret"
- if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
+ rm -f $1 $1.cpp
+ return $ret
+}
+
+detect_cputype() {
+ if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
+ log 1 "forcing cpu-type... $cpu_type bits"
+ return;
+ fi
+ _detect_cputype_width tmp.32bit 4
+ result32=$?
+ _detect_cputype_width tmp.64bit 8
+ result64=$?
+
+ if [ "$result32" = 0 ] && [ "$result64" != 0 ]; then
+ cpu_type="32"
+ elif [ "$result32" != 0 ] && [ "$result64" = 0 ]; then
+ cpu_type="64"
+ else
+ log 1 "configure: unable to determine cpu-type (pointer width)"
+ exit 1
+ fi
log 1 "detecting cpu-type... $cpu_type bits"
- rm -f tmp.64bit tmp.64bit.cpp
}
detect_sse_capable_architecture() {
@@ -3563,6 +3618,8 @@ showhelp() {
echo " CFLAGS_BUILD C compiler flags for build time tool generation"
echo " CXXFLAGS_BUILD C++ compiler flags for build time tool generation"
echo " LDFLAGS_BUILD linker flags for build time tool generation"
+ echo " PKG_CONFIG_PATH additional library search paths (see \"man pkg-config\")"
+ echo " PKG_CONFIG_LIBDIR replace the default library search path (see \"man pkg-config\")"
echo ""
echo "Use these variables to override the choices made by 'configure' or to help"
echo "it to find libraries and programs with nonstandard names/locations."
diff --git a/configure b/configure
index 6b2c9d87b7..5edbca1867 100755
--- a/configure
+++ b/configure
@@ -149,7 +149,7 @@ AWKCOMMAND='
# Read the source.list and process it
# Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations
-SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | $PIPE_SORT`"
+SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | LC_ALL=C $PIPE_SORT`"
OBJS_C="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", $0); print $0; }'`"
OBJS_CPP="`echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.cpp$/ { gsub(\".cpp$\", \".o\", $0); print $0; }'`"
diff --git a/known-bugs.txt b/known-bugs.txt
index 34aca33002..f5ae731018 100644
--- a/known-bugs.txt
+++ b/known-bugs.txt
@@ -1,6 +1,6 @@
OpenTTD's known bugs
-Last updated: 2015-02-24
-Release version: 1.5.0-beta2
+Last updated: 2016-07-01
+Release version: 1.6.1
------------------------------------------------------------------------
diff --git a/media/baseset/orig_dos.obg b/media/baseset/orig_dos.obg
index b4cde64007..f9db843af1 100644
--- a/media/baseset/orig_dos.obg
+++ b/media/baseset/orig_dos.obg
@@ -11,21 +11,21 @@ palette = DOS
!! description STR_BASEGRAPHICS_DOS_DESCRIPTION
[files]
-base = TRG1.GRF
-logos = TRGI.GRF
-arctic = TRGC.GRF
-tropical = TRGH.GRF
-toyland = TRGT.GRF
-extra = OPENTTD.GRF
+base = TRG1.GRF
+logos = TRGI.GRF
+arctic = TRGC.GRF
+tropical = TRGH.GRF
+toyland = TRGT.GRF
+extra = ORIG_EXTRA.GRF
[md5s]
-TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
-TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
-TRGC.GRF = ed446637e034104c5559b32c18afe78d
-TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
-TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
-OPENTTD.GRF =
+TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
+TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
+TRGC.GRF = ed446637e034104c5559b32c18afe78d
+TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
+TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
+ORIG_EXTRA.GRF =
[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-OPENTTD.GRF = This file was part of your OpenTTD installation.
+default = You can find it on your Transport Tycoon Deluxe CD-ROM.
+ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/media/baseset/orig_dos_de.obg b/media/baseset/orig_dos_de.obg
index 8cfcc27074..4e12582727 100644
--- a/media/baseset/orig_dos_de.obg
+++ b/media/baseset/orig_dos_de.obg
@@ -11,21 +11,21 @@ palette = DOS
!! description STR_BASEGRAPHICS_DOS_DE_DESCRIPTION
[files]
-base = TRG1.GRF
-logos = TRGI.GRF
-arctic = TRGC.GRF
-tropical = TRGH.GRF
-toyland = TRGT.GRF
-extra = OPENTTD.GRF
+base = TRG1.GRF
+logos = TRGI.GRF
+arctic = TRGC.GRF
+tropical = TRGH.GRF
+toyland = TRGT.GRF
+extra = ORIG_EXTRA.GRF
[md5s]
-TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
-TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
-TRGC.GRF = ed446637e034104c5559b32c18afe78d
-TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
-TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
-OPENTTD.GRF =
+TRG1.GRF = 9311676280e5b14077a8ee41c1b42192
+TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
+TRGC.GRF = ed446637e034104c5559b32c18afe78d
+TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
+TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
+ORIG_EXTRA.GRF =
[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-OPENTTD.GRF = This file was part of your OpenTTD installation.
+default = You can find it on your Transport Tycoon Deluxe CD-ROM.
+ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/media/baseset/orig_win.obg b/media/baseset/orig_win.obg
index 82a5c2a616..393b5d3013 100644
--- a/media/baseset/orig_win.obg
+++ b/media/baseset/orig_win.obg
@@ -11,21 +11,21 @@ palette = Windows
!! description STR_BASEGRAPHICS_WIN_DESCRIPTION
[files]
-base = TRG1R.GRF
-logos = TRGIR.GRF
-arctic = TRGCR.GRF
-tropical = TRGHR.GRF
-toyland = TRGTR.GRF
-extra = OPENTTD.GRF
+base = TRG1R.GRF
+logos = TRGIR.GRF
+arctic = TRGCR.GRF
+tropical = TRGHR.GRF
+toyland = TRGTR.GRF
+extra = ORIG_EXTRA.GRF
[md5s]
-TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
-TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
-TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
-TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
-TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
-OPENTTD.GRF =
+TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358
+TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
+TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
+TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
+TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
+ORIG_EXTRA.GRF =
[origin]
-default = You can find it on your Transport Tycoon Deluxe CD-ROM.
-OPENTTD.GRF = This file was part of your OpenTTD installation.
+default = You can find it on your Transport Tycoon Deluxe CD-ROM.
+ORIG_EXTRA.GRF = This file was part of your OpenTTD installation.
diff --git a/media/extra_grf/canals.nfo b/media/extra_grf/canals.nfo
index c0d0275f35..e464762ee6 100644
--- a/media/extra_grf/canals.nfo
+++ b/media/extra_grf/canals.nfo
@@ -6,7 +6,7 @@
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
//
- -1 * 0 0C "Canal graphics by George / PaulC"
+ -1 * 0 0C "Canal graphics by George"
-1 * 3 05 08 41
// Canal slopes
-1 sprites/canal_locks.png 8bpp 66 8 64 23 -31 0 normal
@@ -77,95 +77,3 @@
-1 sprites/canals.png 8bpp 446 10 24 16 -11 -6 normal
// Canal icon
-1 sprites/canal_locks.png 8bpp 50 232 20 20 0 0 normal
-
-// Differentiation for the climates starts here
-
-// Canal edges (arctic snowy)
- -1 * 4 01 05 01 \b12
- -1 sprites/canals.png 8bpp 30 40 45 22 -11 -1 normal
- -1 sprites/canals.png 8bpp 94 40 41 21 -8 10 normal
- -1 sprites/canals.png 8bpp 142 40 42 21 -31 10 normal
- -1 sprites/canals.png 8bpp 190 40 43 22 -31 -1 normal
- -1 sprites/canals.png 8bpp 238 40 22 22 11 4 normal
- -1 sprites/canals.png 8bpp 270 40 24 16 -11 15 normal
- -1 sprites/canals.png 8bpp 302 40 23 23 -31 4 normal
- -1 sprites/canals.png 8bpp 334 40 24 18 -11 -1 normal
- -1 sprites/canals.png 8bpp 366 40 12 11 21 10 normal
- -1 sprites/canals.png 8bpp 398 40 19 10 -8 21 normal
- -1 sprites/canals.png 8bpp 430 40 11 10 -31 10 normal
- -1 sprites/canals.png 8bpp 446 40 24 16 -11 -6 normal
- -1 * 7 02 05 10 01 00 00 00
-
-// Canal edges (arctic normal)
- -1 * 4 01 05 01 \b12
- -1 sprites/canals.png 8bpp 30 70 45 22 -11 -1 normal
- -1 sprites/canals.png 8bpp 94 70 41 21 -8 10 normal
- -1 sprites/canals.png 8bpp 142 70 42 21 -31 10 normal
- -1 sprites/canals.png 8bpp 190 70 43 22 -31 -1 normal
- -1 sprites/canals.png 8bpp 238 70 22 22 11 4 normal
- -1 sprites/canals.png 8bpp 270 70 24 16 -11 15 normal
- -1 sprites/canals.png 8bpp 302 70 23 23 -31 4 normal
- -1 sprites/canals.png 8bpp 334 70 24 18 -11 -1 normal
- -1 sprites/canals.png 8bpp 366 70 12 11 21 10 normal
- -1 sprites/canals.png 8bpp 398 70 19 10 -8 21 normal
- -1 sprites/canals.png 8bpp 430 70 11 10 -31 10 normal
- -1 sprites/canals.png 8bpp 446 70 24 16 -11 -6 normal
- -1 * 7 02 05 11 01 00 00 00
-// Choose the right arctic canal edges
- -1 * 14 02 05 12 81 81 00 FF 01 10 00 04 04 11 00
- -1 * 6 07 83 01 \7! 01 01
- -1 * 7 03 05 01 02 00 12 00
-
-// Canal edges (tropic desert)
- -1 * 4 01 05 01 \b12
- -1 sprites/canals.png 8bpp 30 100 45 22 -11 -1 normal
- -1 sprites/canals.png 8bpp 94 100 41 21 -8 10 normal
- -1 sprites/canals.png 8bpp 142 100 42 21 -31 10 normal
- -1 sprites/canals.png 8bpp 190 100 43 22 -31 -1 normal
- -1 sprites/canals.png 8bpp 238 100 22 22 11 4 normal
- -1 sprites/canals.png 8bpp 270 100 24 16 -11 15 normal
- -1 sprites/canals.png 8bpp 302 100 23 23 -31 4 normal
- -1 sprites/canals.png 8bpp 334 100 24 18 -11 -1 normal
- -1 sprites/canals.png 8bpp 366 100 12 11 21 10 normal
- -1 sprites/canals.png 8bpp 398 100 19 10 -8 21 normal
- -1 sprites/canals.png 8bpp 430 100 11 10 -31 10 normal
- -1 sprites/canals.png 8bpp 446 100 24 16 -11 -6 normal
- -1 * 7 02 05 13 01 00 00 00
-
-// Canal edges (tropic rainforest)
- -1 * 4 01 05 01 \b12
- -1 sprites/canals.png 8bpp 30 130 45 22 -11 -1 normal
- -1 sprites/canals.png 8bpp 94 130 41 21 -8 10 normal
- -1 sprites/canals.png 8bpp 142 130 42 21 -31 10 normal
- -1 sprites/canals.png 8bpp 190 130 43 22 -31 -1 normal
- -1 sprites/canals.png 8bpp 238 130 22 22 11 4 normal
- -1 sprites/canals.png 8bpp 270 130 24 16 -11 15 normal
- -1 sprites/canals.png 8bpp 302 130 23 23 -31 4 normal
- -1 sprites/canals.png 8bpp 334 130 24 18 -11 -1 normal
- -1 sprites/canals.png 8bpp 366 130 12 11 21 10 normal
- -1 sprites/canals.png 8bpp 398 130 19 10 -8 21 normal
- -1 sprites/canals.png 8bpp 430 130 11 10 -31 10 normal
- -1 sprites/canals.png 8bpp 446 130 24 16 -11 -6 normal
- -1 * 7 02 05 14 01 00 00 00
-// Choose the right tropic canal edges
- -1 * 14 02 05 15 81 81 00 FF 01 13 00 01 01 14 00
- -1 * 6 07 83 01 \7! 02 01
- -1 * 7 03 05 01 02 00 15 00
-
-// Canal edges (toyland)
- -1 * 4 01 05 01 \b12
- -1 sprites/canals.png 8bpp 30 160 45 22 -11 -1 normal
- -1 sprites/canals.png 8bpp 94 160 41 21 -8 10 normal
- -1 sprites/canals.png 8bpp 142 160 42 21 -31 10 normal
- -1 sprites/canals.png 8bpp 190 160 43 22 -31 -1 normal
- -1 sprites/canals.png 8bpp 238 160 22 22 11 4 normal
- -1 sprites/canals.png 8bpp 270 160 24 16 -11 15 normal
- -1 sprites/canals.png 8bpp 302 160 23 23 -31 4 normal
- -1 sprites/canals.png 8bpp 334 160 24 18 -11 -1 normal
- -1 sprites/canals.png 8bpp 366 160 12 11 21 10 normal
- -1 sprites/canals.png 8bpp 398 160 19 10 -8 21 normal
- -1 sprites/canals.png 8bpp 430 160 11 10 -31 10 normal
- -1 sprites/canals.png 8bpp 446 160 24 16 -11 -6 normal
- -1 * 7 02 05 16 01 00 00 00
- -1 * 6 07 83 01 \7! 03 01
- -1 * 7 03 05 01 02 00 16 00
diff --git a/media/extra_grf/canals_extra.nfo b/media/extra_grf/canals_extra.nfo
new file mode 100644
index 0000000000..3103886233
--- /dev/null
+++ b/media/extra_grf/canals_extra.nfo
@@ -0,0 +1,101 @@
+//
+// $Id$
+//
+// This file is part of OpenTTD.
+// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+//
+ -1 * 0 0C "Extra canal graphics by PaulC"
+
+// Differentiation for the climates starts here
+
+// Canal edges (arctic snowy)
+ -1 * 4 01 05 01 \b12
+ -1 sprites/canals.png 8bpp 30 40 45 22 -11 -1 normal
+ -1 sprites/canals.png 8bpp 94 40 41 21 -8 10 normal
+ -1 sprites/canals.png 8bpp 142 40 42 21 -31 10 normal
+ -1 sprites/canals.png 8bpp 190 40 43 22 -31 -1 normal
+ -1 sprites/canals.png 8bpp 238 40 22 22 11 4 normal
+ -1 sprites/canals.png 8bpp 270 40 24 16 -11 15 normal
+ -1 sprites/canals.png 8bpp 302 40 23 23 -31 4 normal
+ -1 sprites/canals.png 8bpp 334 40 24 18 -11 -1 normal
+ -1 sprites/canals.png 8bpp 366 40 12 11 21 10 normal
+ -1 sprites/canals.png 8bpp 398 40 19 10 -8 21 normal
+ -1 sprites/canals.png 8bpp 430 40 11 10 -31 10 normal
+ -1 sprites/canals.png 8bpp 446 40 24 16 -11 -6 normal
+ -1 * 7 02 05 10 01 00 00 00
+
+// Canal edges (arctic normal)
+ -1 * 4 01 05 01 \b12
+ -1 sprites/canals.png 8bpp 30 70 45 22 -11 -1 normal
+ -1 sprites/canals.png 8bpp 94 70 41 21 -8 10 normal
+ -1 sprites/canals.png 8bpp 142 70 42 21 -31 10 normal
+ -1 sprites/canals.png 8bpp 190 70 43 22 -31 -1 normal
+ -1 sprites/canals.png 8bpp 238 70 22 22 11 4 normal
+ -1 sprites/canals.png 8bpp 270 70 24 16 -11 15 normal
+ -1 sprites/canals.png 8bpp 302 70 23 23 -31 4 normal
+ -1 sprites/canals.png 8bpp 334 70 24 18 -11 -1 normal
+ -1 sprites/canals.png 8bpp 366 70 12 11 21 10 normal
+ -1 sprites/canals.png 8bpp 398 70 19 10 -8 21 normal
+ -1 sprites/canals.png 8bpp 430 70 11 10 -31 10 normal
+ -1 sprites/canals.png 8bpp 446 70 24 16 -11 -6 normal
+ -1 * 7 02 05 11 01 00 00 00
+// Choose the right arctic canal edges
+ -1 * 14 02 05 12 81 81 00 FF 01 10 00 04 04 11 00
+ -1 * 6 07 83 01 \7! 01 01
+ -1 * 7 03 05 01 02 00 12 00
+
+// Canal edges (tropic desert)
+ -1 * 4 01 05 01 \b12
+ -1 sprites/canals.png 8bpp 30 100 45 22 -11 -1 normal
+ -1 sprites/canals.png 8bpp 94 100 41 21 -8 10 normal
+ -1 sprites/canals.png 8bpp 142 100 42 21 -31 10 normal
+ -1 sprites/canals.png 8bpp 190 100 43 22 -31 -1 normal
+ -1 sprites/canals.png 8bpp 238 100 22 22 11 4 normal
+ -1 sprites/canals.png 8bpp 270 100 24 16 -11 15 normal
+ -1 sprites/canals.png 8bpp 302 100 23 23 -31 4 normal
+ -1 sprites/canals.png 8bpp 334 100 24 18 -11 -1 normal
+ -1 sprites/canals.png 8bpp 366 100 12 11 21 10 normal
+ -1 sprites/canals.png 8bpp 398 100 19 10 -8 21 normal
+ -1 sprites/canals.png 8bpp 430 100 11 10 -31 10 normal
+ -1 sprites/canals.png 8bpp 446 100 24 16 -11 -6 normal
+ -1 * 7 02 05 13 01 00 00 00
+
+// Canal edges (tropic rainforest)
+ -1 * 4 01 05 01 \b12
+ -1 sprites/canals.png 8bpp 30 130 45 22 -11 -1 normal
+ -1 sprites/canals.png 8bpp 94 130 41 21 -8 10 normal
+ -1 sprites/canals.png 8bpp 142 130 42 21 -31 10 normal
+ -1 sprites/canals.png 8bpp 190 130 43 22 -31 -1 normal
+ -1 sprites/canals.png 8bpp 238 130 22 22 11 4 normal
+ -1 sprites/canals.png 8bpp 270 130 24 16 -11 15 normal
+ -1 sprites/canals.png 8bpp 302 130 23 23 -31 4 normal
+ -1 sprites/canals.png 8bpp 334 130 24 18 -11 -1 normal
+ -1 sprites/canals.png 8bpp 366 130 12 11 21 10 normal
+ -1 sprites/canals.png 8bpp 398 130 19 10 -8 21 normal
+ -1 sprites/canals.png 8bpp 430 130 11 10 -31 10 normal
+ -1 sprites/canals.png 8bpp 446 130 24 16 -11 -6 normal
+ -1 * 7 02 05 14 01 00 00 00
+// Choose the right tropic canal edges
+ -1 * 14 02 05 15 81 81 00 FF 01 13 00 01 01 14 00
+ -1 * 6 07 83 01 \7! 02 01
+ -1 * 7 03 05 01 02 00 15 00
+
+// Canal edges (toyland)
+ -1 * 4 01 05 01 \b12
+ -1 sprites/canals.png 8bpp 30 160 45 22 -11 -1 normal
+ -1 sprites/canals.png 8bpp 94 160 41 21 -8 10 normal
+ -1 sprites/canals.png 8bpp 142 160 42 21 -31 10 normal
+ -1 sprites/canals.png 8bpp 190 160 43 22 -31 -1 normal
+ -1 sprites/canals.png 8bpp 238 160 22 22 11 4 normal
+ -1 sprites/canals.png 8bpp 270 160 24 16 -11 15 normal
+ -1 sprites/canals.png 8bpp 302 160 23 23 -31 4 normal
+ -1 sprites/canals.png 8bpp 334 160 24 18 -11 -1 normal
+ -1 sprites/canals.png 8bpp 366 160 12 11 21 10 normal
+ -1 sprites/canals.png 8bpp 398 160 19 10 -8 21 normal
+ -1 sprites/canals.png 8bpp 430 160 11 10 -31 10 normal
+ -1 sprites/canals.png 8bpp 446 160 24 16 -11 -6 normal
+ -1 * 7 02 05 16 01 00 00 00
+ -1 * 6 07 83 01 \7! 03 01
+ -1 * 7 03 05 01 02 00 16 00
diff --git a/media/extra_grf/chars.nfo b/media/extra_grf/chars.nfo
index 26db641b35..32462f8c1c 100644
--- a/media/extra_grf/chars.nfo
+++ b/media/extra_grf/chars.nfo
@@ -8,245 +8,7 @@
//
-1 * 0 0C "Font characters by PaulC, Bilbo and Jasper Vries"
-// Replace original characters
-
- -1 * 5 0A 01 02 41 00
- -1 sprites/chars.png 8bpp 10 10 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 20 10 4 12 0 -1 normal
- -1 * 5 0A 01 02 86 00
- -1 sprites/chars.png 8bpp 50 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 70 10 9 12 0 -1 normal
- -1 * 5 0A 01 01 8A 00
- -1 sprites/chars.png 8bpp 120 10 6 12 0 -1 normal
- -1 * 5 0A 01 01 A0 00
- -1 sprites/chars.png 8bpp 230 10 10 12 0 -1 normal
- -1 * 5 0A 01 04 A2 00
- -1 sprites/chars.png 8bpp 260 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 290 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 320 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 350 10 8 12 0 -1 normal
- -1 * 5 0A 01 06 A7 00
- -1 sprites/chars.png 8bpp 410 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 440 10 12 12 0 -1 normal
- -1 sprites/chars.png 8bpp 470 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 480 10 7 12 0 -1 normal
- -1 sprites/chars.png 8bpp 500 10 7 12 0 -1 normal
- -1 sprites/chars.png 8bpp 520 10 7 12 0 -1 normal
- -1 * 5 0A 01 03 AE 00
- -1 sprites/chars.png 8bpp 560 10 4 12 0 -1 normal
- -1 sprites/chars.png 8bpp 570 10 4 12 0 -1 normal
- -1 sprites/chars.png 8bpp 580 10 5 12 0 -1 normal
- -1 * 5 0A 01 05 B3 00
- -1 sprites/chars.png 8bpp 620 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 640 10 9 12 0 -1 normal
- -1 sprites/chars.png 8bpp 660 10 9 12 0 -1 normal
- -1 sprites/chars.png 8bpp 680 10 9 12 0 -1 normal
- -1 sprites/chars.png 8bpp 700 10 9 12 0 -1 normal
- -1 * 5 0A 01 03 BB 00
- -1 sprites/chars.png 8bpp 770 10 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 10 70 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 30 70 8 12 0 -1 normal
- -1 * 5 0A 01 01 BF 00
- -1 sprites/chars.png 8bpp 70 70 9 12 0 -1 normal
- -1 * 5 0A 01 05 C1 00
- -1 sprites/chars.png 8bpp 450 70 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 110 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 120 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 130 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 140 70 6 12 0 -1 normal
- -1 * 5 0A 01 01 C7 00
- -1 sprites/chars.png 8bpp 160 70 6 12 0 -1 normal
- -1 * 5 0A 01 03 CA 00
- -1 sprites/chars.png 8bpp 200 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 210 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 220 70 6 12 0 -1 normal
- -1 * 5 0A 01 04 CE 00
- -1 sprites/chars.png 8bpp 230 70 4 12 0 -1 normal
- -1 sprites/chars.png 8bpp 240 70 4 12 0 -1 normal
- -1 sprites/chars.png 8bpp 250 70 5 12 0 -1 normal
- -1 sprites/chars.png 8bpp 260 70 5 12 0 -1 normal
- -1 * 5 0A 01 05 D3 00
- -1 sprites/chars.png 8bpp 290 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 310 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 320 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 330 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 340 70 6 12 0 -1 normal
- -1 * 5 0A 01 03 DB 00
- -1 sprites/chars.png 8bpp 390 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 400 70 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 410 70 6 12 0 -1 normal
- -1 * 5 0A 01 02 DF 00
- -1 sprites/chars.png 8bpp 420 70 7 12 0 -1 normal
- -1 sprites/chars.png 8bpp 430 70 6 12 0 -1 normal
- -1 * 5 0A 01 01 22 01
- -1 sprites/chars.png 8bpp 20 30 2 7 0 0 normal
- -1 * 5 0A 01 01 7D 01
- -1 sprites/chars.png 8bpp 220 30 4 7 0 0 normal
- -1 * 5 0A 01 02 80 01
- -1 sprites/chars.png 8bpp 230 30 9 7 0 0 normal
- -1 sprites/chars.png 8bpp 250 30 3 7 0 0 normal
- -1 * 5 0A 01 01 89 01
- -1 sprites/chars.png 8bpp 470 30 3 7 0 0 normal
- -1 * 5 0A 01 01 9F 01
- -1 sprites/chars.png 8bpp 70 90 3 7 0 0 normal
- -1 * 5 0A 01 01 A9 01
- -1 sprites/chars.png 8bpp 190 90 3 7 0 0 normal
- -1 * 5 0A 01 02 BF 01
- -1 sprites/chars.png 8bpp 420 90 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 430 90 3 7 0 0 normal
- -1 * 5 0A 01 01 02 02
- -1 sprites/chars.png 8bpp 20 40 4 21 0 -2 normal
- -1 * 5 0A 01 01 41 02
- -1 sprites/chars.png 8bpp 30 40 14 21 0 -2 normal
- -1 * 5 0A 01 06 46 02
- -1 sprites/chars.png 8bpp 50 40 10 21 0 -2 normal
- -1 sprites/chars.png 8bpp 70 40 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 90 40 3 21 0 -2 normal
- -1 sprites/chars.png 8bpp 100 40 13 21 0 -2 normal
- -1 sprites/chars.png 8bpp 120 40 7 21 0 -2 normal
- -1 sprites/chars.png 8bpp 130 40 16 21 0 -2 normal
- -1 * 5 0A 01 01 50 02
- -1 sprites/chars.png 8bpp 150 40 16 21 0 -2 normal
- -1 * 5 0A 01 04 52 02
- -1 sprites/chars.png 8bpp 170 40 8 21 0 -2 normal
- -1 sprites/chars.png 8bpp 180 40 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 190 40 6 21 0 -2 normal
- -1 sprites/chars.png 8bpp 200 40 6 21 0 -2 normal
- -1 * 5 0A 01 01 5C 02
- -1 sprites/chars.png 8bpp 210 40 7 21 0 -2 normal
- -1 * 5 0A 01 01 60 02
- -1 sprites/chars.png 8bpp 230 40 16 21 0 -2 normal
- -1 * 5 0A 01 07 62 02
- -1 sprites/chars.png 8bpp 260 40 20 21 0 -2 normal
- -1 sprites/chars.png 8bpp 290 40 20 21 0 -2 normal
- -1 sprites/chars.png 8bpp 320 40 20 21 0 -2 normal
- -1 sprites/chars.png 8bpp 350 40 20 21 0 -2 normal
- -1 sprites/chars.png 8bpp 380 40 20 21 0 -2 normal
- -1 sprites/chars.png 8bpp 410 40 20 21 0 -2 normal
- -1 sprites/chars.png 8bpp 440 40 24 21 0 -2 normal
- -1 * 5 0A 01 18 6A 02
- -1 sprites/chars.png 8bpp 480 40 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 500 40 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 520 40 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 540 40 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 560 40 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 570 40 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 580 40 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 590 40 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 600 40 17 21 0 -2 normal
- -1 sprites/chars.png 8bpp 620 40 18 21 0 -2 normal
- -1 sprites/chars.png 8bpp 640 40 15 21 0 -2 normal
- -1 sprites/chars.png 8bpp 660 40 15 21 0 -2 normal
- -1 sprites/chars.png 8bpp 680 40 15 21 0 -2 normal
- -1 sprites/chars.png 8bpp 700 40 15 21 0 -2 normal
- -1 sprites/chars.png 8bpp 720 40 15 21 0 -2 normal
- -1 sprites/chars.png 8bpp 740 40 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 750 40 16 21 0 -2 normal
- -1 sprites/chars.png 8bpp 770 40 17 21 0 -2 normal
- -1 sprites/chars.png 8bpp 10 100 17 21 0 -2 normal
- -1 sprites/chars.png 8bpp 30 100 17 21 0 -2 normal
- -1 sprites/chars.png 8bpp 50 100 17 21 0 -2 normal
- -1 sprites/chars.png 8bpp 70 100 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 90 100 14 21 0 -2 normal
- -1 sprites/chars.png 8bpp 450 100 14 21 0 -2 normal
- -1 * 5 0A 01 01 85 02
- -1 sprites/chars.png 8bpp 140 100 12 21 0 -2 normal
- -1 * 5 0A 01 01 88 02
- -1 sprites/chars.png 8bpp 170 100 19 21 0 -2 normal
- -1 * 5 0A 01 02 92 02
- -1 sprites/chars.png 8bpp 270 100 11 21 0 -2 normal
- -1 sprites/chars.png 8bpp 290 100 15 21 0 -2 normal
- -1 * 5 0A 01 01 97 02
- -1 sprites/chars.png 8bpp 340 100 11 21 0 -2 normal
- -1 * 5 0A 01 02 99 02
- -1 sprites/chars.png 8bpp 360 100 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 370 100 11 21 0 -2 normal
- -1 * 5 0A 01 01 A0 02
- -1 sprites/chars.png 8bpp 430 100 14 21 0 -2 normal
-
-// New characters, all fonts except monospaced
-
-// U+007B: Left Curly Bracket
-// U+007C: Vertical Line
-// U+007D: Right Curly Bracket
-// U+007E: Tilde
- -1 * 14 12 03 00 04 7B 00 01 04 7B 00 02 04 7B 00
- -1 sprites/chars.png 8bpp 10 130 5 12 0 -1 normal
- -1 sprites/chars.png 8bpp 20 130 3 12 0 -1 normal
- -1 sprites/chars.png 8bpp 30 130 5 12 0 -1 normal
- -1 sprites/chars.png 8bpp 50 130 7 12 0 -1 normal
- -1 sprites/chars.png 8bpp 10 150 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 20 150 1 7 0 0 normal
- -1 sprites/chars.png 8bpp 30 150 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 50 150 4 7 0 0 normal
- -1 sprites/chars.png 8bpp 10 160 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 20 160 3 21 0 -2 normal
- -1 sprites/chars.png 8bpp 30 160 9 21 0 -2 normal
- -1 sprites/chars.png 8bpp 50 160 10 21 0 -2 normal
-
-// U+007F: No-Break Space
- -1 * 14 12 03 00 01 7F 00 01 01 7F 00 02 01 7F 00
- -1 sprites/chars.png 8bpp 70 130 2 12 0 -1 normal
- -1 sprites/chars.png 8bpp 70 150 1 7 0 0 normal
- -1 sprites/chars.png 8bpp 70 160 5 21 0 -2 normal
-
-// U+00AA: Feminine Ordinal Indicator
- -1 * 14 12 03 00 01 AA 00 01 01 AA 00 02 01 AA 00
- -1 sprites/chars.png 8bpp 80 130 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 80 150 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 80 160 7 21 0 -2 normal
-
-// U+00AC: Not Sign
-// U+00AD: Soft Hyphen
- -1 * 14 12 03 00 02 AC 00 01 02 AC 00 02 02 AC 00
- -1 sprites/chars.png 8bpp 90 130 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 110 130 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 90 150 4 7 0 0 normal
- -1 sprites/chars.png 8bpp 110 150 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 90 160 12 21 0 -2 normal
- -1 sprites/chars.png 8bpp 110 160 9 21 0 -2 normal
-
-// U+00AF: Macron
- -1 * 14 12 03 00 01 AF 00 01 01 AF 00 02 01 AF 00
- -1 sprites/chars.png 8bpp 130 130 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 130 150 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 130 160 12 21 0 -2 normal
-
-// U+00B4: Acute Accent
-// U+00B5: Micro Sign
-// U+00B6: Pilcrow Sign
-// U+00B7: Middle Dot
-// U+00B8: Cedilla
-// U+00B9: Superscript One
- -1 * 14 12 03 00 06 B4 00 01 06 B4 00 02 06 B4 00
- -1 sprites/chars.png 8bpp 150 130 4 12 0 -1 normal
- -1 sprites/chars.png 8bpp 160 130 6 12 0 -1 normal
- -1 sprites/chars.png 8bpp 180 130 8 12 0 -1 normal
- -1 sprites/chars.png 8bpp 200 130 3 12 0 -1 normal
- -1 sprites/chars.png 8bpp 210 130 4 12 0 -1 normal
- -1 sprites/chars.png 8bpp 220 130 5 12 0 -1 normal
- -1 sprites/chars.png 8bpp 150 150 2 7 0 0 normal
- -1 sprites/chars.png 8bpp 160 150 3 7 0 0 normal
- -1 sprites/chars.png 8bpp 180 150 6 7 0 0 normal
- -1 sprites/chars.png 8bpp 200 150 1 7 0 0 normal
- -1 sprites/chars.png 8bpp 210 150 2 7 0 0 normal
- -1 sprites/chars.png 8bpp 220 150 2 7 0 0 normal
- -1 sprites/chars.png 8bpp 150 160 4 21 0 -2 normal
- -1 sprites/chars.png 8bpp 160 160 15 21 0 -2 normal
- -1 sprites/chars.png 8bpp 180 160 13 21 0 -2 normal
- -1 sprites/chars.png 8bpp 200 160 3 21 0 -2 normal
- -1 sprites/chars.png 8bpp 210 160 5 21 0 -2 normal
- -1 sprites/chars.png 8bpp 220 160 6 21 0 -2 normal
-
-// U+00BC: Vulgar Fraction One Quarter
-// U+00BD: Vulgar Fraction One Half
- -1 * 14 12 03 00 02 BC 00 01 02 BC 00 02 02 BC 00
- -1 sprites/chars.png 8bpp 230 130 10 12 0 -1 normal
- -1 sprites/chars.png 8bpp 250 130 10 12 0 -1 normal
- -1 sprites/chars.png 8bpp 230 150 9 7 0 0 normal
- -1 sprites/chars.png 8bpp 250 150 9 7 0 0 normal
- -1 sprites/chars.png 8bpp 230 160 16 21 0 -2 normal
- -1 sprites/chars.png 8bpp 250 160 16 21 0 -2 normal
+// Note: Characters in range U+0020..U+00FF may only be defined in chars_orig_extra.nfo.
// New characters, all fonts
diff --git a/media/extra_grf/chars_orig_extra.nfo b/media/extra_grf/chars_orig_extra.nfo
new file mode 100644
index 0000000000..7979e79450
--- /dev/null
+++ b/media/extra_grf/chars_orig_extra.nfo
@@ -0,0 +1,249 @@
+//
+// $Id$
+//
+// This file is part of OpenTTD.
+// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+//
+ -1 * 0 0C "Font characters by PaulC, Bilbo and Jasper Vries"
+
+// Replace original characters
+
+ -1 * 5 0A 01 02 41 00
+ -1 sprites/chars.png 8bpp 10 10 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 20 10 4 12 0 -1 normal
+ -1 * 5 0A 01 02 86 00
+ -1 sprites/chars.png 8bpp 50 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 70 10 9 12 0 -1 normal
+ -1 * 5 0A 01 01 8A 00
+ -1 sprites/chars.png 8bpp 120 10 6 12 0 -1 normal
+ -1 * 5 0A 01 01 A0 00
+ -1 sprites/chars.png 8bpp 230 10 10 12 0 -1 normal
+ -1 * 5 0A 01 04 A2 00
+ -1 sprites/chars.png 8bpp 260 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 290 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 320 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 350 10 8 12 0 -1 normal
+ -1 * 5 0A 01 06 A7 00
+ -1 sprites/chars.png 8bpp 410 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 440 10 12 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 470 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 480 10 7 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 500 10 7 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 520 10 7 12 0 -1 normal
+ -1 * 5 0A 01 03 AE 00
+ -1 sprites/chars.png 8bpp 560 10 4 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 570 10 4 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 580 10 5 12 0 -1 normal
+ -1 * 5 0A 01 05 B3 00
+ -1 sprites/chars.png 8bpp 620 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 640 10 9 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 660 10 9 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 680 10 9 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 700 10 9 12 0 -1 normal
+ -1 * 5 0A 01 03 BB 00
+ -1 sprites/chars.png 8bpp 770 10 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 10 70 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 30 70 8 12 0 -1 normal
+ -1 * 5 0A 01 01 BF 00
+ -1 sprites/chars.png 8bpp 70 70 9 12 0 -1 normal
+ -1 * 5 0A 01 05 C1 00
+ -1 sprites/chars.png 8bpp 450 70 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 110 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 120 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 130 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 140 70 6 12 0 -1 normal
+ -1 * 5 0A 01 01 C7 00
+ -1 sprites/chars.png 8bpp 160 70 6 12 0 -1 normal
+ -1 * 5 0A 01 03 CA 00
+ -1 sprites/chars.png 8bpp 200 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 210 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 220 70 6 12 0 -1 normal
+ -1 * 5 0A 01 04 CE 00
+ -1 sprites/chars.png 8bpp 230 70 4 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 240 70 4 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 250 70 5 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 260 70 5 12 0 -1 normal
+ -1 * 5 0A 01 05 D3 00
+ -1 sprites/chars.png 8bpp 290 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 310 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 320 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 330 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 340 70 6 12 0 -1 normal
+ -1 * 5 0A 01 03 DB 00
+ -1 sprites/chars.png 8bpp 390 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 400 70 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 410 70 6 12 0 -1 normal
+ -1 * 5 0A 01 02 DF 00
+ -1 sprites/chars.png 8bpp 420 70 7 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 430 70 6 12 0 -1 normal
+ -1 * 5 0A 01 01 22 01
+ -1 sprites/chars.png 8bpp 20 30 2 7 0 0 normal
+ -1 * 5 0A 01 01 7D 01
+ -1 sprites/chars.png 8bpp 220 30 4 7 0 0 normal
+ -1 * 5 0A 01 02 80 01
+ -1 sprites/chars.png 8bpp 230 30 9 7 0 0 normal
+ -1 sprites/chars.png 8bpp 250 30 3 7 0 0 normal
+ -1 * 5 0A 01 01 89 01
+ -1 sprites/chars.png 8bpp 470 30 3 7 0 0 normal
+ -1 * 5 0A 01 01 9F 01
+ -1 sprites/chars.png 8bpp 70 90 3 7 0 0 normal
+ -1 * 5 0A 01 01 A9 01
+ -1 sprites/chars.png 8bpp 190 90 3 7 0 0 normal
+ -1 * 5 0A 01 02 BF 01
+ -1 sprites/chars.png 8bpp 420 90 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 430 90 3 7 0 0 normal
+ -1 * 5 0A 01 01 02 02
+ -1 sprites/chars.png 8bpp 20 40 4 21 0 -2 normal
+ -1 * 5 0A 01 01 41 02
+ -1 sprites/chars.png 8bpp 30 40 14 21 0 -2 normal
+ -1 * 5 0A 01 06 46 02
+ -1 sprites/chars.png 8bpp 50 40 10 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 70 40 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 90 40 3 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 100 40 13 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 120 40 7 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 130 40 16 21 0 -2 normal
+ -1 * 5 0A 01 01 50 02
+ -1 sprites/chars.png 8bpp 150 40 16 21 0 -2 normal
+ -1 * 5 0A 01 04 52 02
+ -1 sprites/chars.png 8bpp 170 40 8 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 180 40 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 190 40 6 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 200 40 6 21 0 -2 normal
+ -1 * 5 0A 01 01 5C 02
+ -1 sprites/chars.png 8bpp 210 40 7 21 0 -2 normal
+ -1 * 5 0A 01 01 60 02
+ -1 sprites/chars.png 8bpp 230 40 16 21 0 -2 normal
+ -1 * 5 0A 01 07 62 02
+ -1 sprites/chars.png 8bpp 260 40 20 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 290 40 20 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 320 40 20 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 350 40 20 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 380 40 20 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 410 40 20 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 440 40 24 21 0 -2 normal
+ -1 * 5 0A 01 18 6A 02
+ -1 sprites/chars.png 8bpp 480 40 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 500 40 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 520 40 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 540 40 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 560 40 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 570 40 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 580 40 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 590 40 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 600 40 17 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 620 40 18 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 640 40 15 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 660 40 15 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 680 40 15 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 700 40 15 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 720 40 15 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 740 40 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 750 40 16 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 770 40 17 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 10 100 17 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 30 100 17 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 50 100 17 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 70 100 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 90 100 14 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 450 100 14 21 0 -2 normal
+ -1 * 5 0A 01 01 85 02
+ -1 sprites/chars.png 8bpp 140 100 12 21 0 -2 normal
+ -1 * 5 0A 01 01 88 02
+ -1 sprites/chars.png 8bpp 170 100 19 21 0 -2 normal
+ -1 * 5 0A 01 02 92 02
+ -1 sprites/chars.png 8bpp 270 100 11 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 290 100 15 21 0 -2 normal
+ -1 * 5 0A 01 01 97 02
+ -1 sprites/chars.png 8bpp 340 100 11 21 0 -2 normal
+ -1 * 5 0A 01 02 99 02
+ -1 sprites/chars.png 8bpp 360 100 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 370 100 11 21 0 -2 normal
+ -1 * 5 0A 01 01 A0 02
+ -1 sprites/chars.png 8bpp 430 100 14 21 0 -2 normal
+
+// New characters, all fonts except monospaced
+
+// U+007B: Left Curly Bracket
+// U+007C: Vertical Line
+// U+007D: Right Curly Bracket
+// U+007E: Tilde
+ -1 * 14 12 03 00 04 7B 00 01 04 7B 00 02 04 7B 00
+ -1 sprites/chars.png 8bpp 10 130 5 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 20 130 3 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 30 130 5 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 50 130 7 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 10 150 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 20 150 1 7 0 0 normal
+ -1 sprites/chars.png 8bpp 30 150 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 50 150 4 7 0 0 normal
+ -1 sprites/chars.png 8bpp 10 160 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 20 160 3 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 30 160 9 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 50 160 10 21 0 -2 normal
+
+// U+007F: No-Break Space
+ -1 * 14 12 03 00 01 7F 00 01 01 7F 00 02 01 7F 00
+ -1 sprites/chars.png 8bpp 70 130 2 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 70 150 1 7 0 0 normal
+ -1 sprites/chars.png 8bpp 70 160 5 21 0 -2 normal
+
+// U+00AA: Feminine Ordinal Indicator
+ -1 * 14 12 03 00 01 AA 00 01 01 AA 00 02 01 AA 00
+ -1 sprites/chars.png 8bpp 80 130 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 80 150 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 80 160 7 21 0 -2 normal
+
+// U+00AC: Not Sign
+// U+00AD: Soft Hyphen
+ -1 * 14 12 03 00 02 AC 00 01 02 AC 00 02 02 AC 00
+ -1 sprites/chars.png 8bpp 90 130 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 110 130 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 90 150 4 7 0 0 normal
+ -1 sprites/chars.png 8bpp 110 150 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 90 160 12 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 110 160 9 21 0 -2 normal
+
+// U+00AF: Macron
+ -1 * 14 12 03 00 01 AF 00 01 01 AF 00 02 01 AF 00
+ -1 sprites/chars.png 8bpp 130 130 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 130 150 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 130 160 12 21 0 -2 normal
+
+// U+00B4: Acute Accent
+// U+00B5: Micro Sign
+// U+00B6: Pilcrow Sign
+// U+00B7: Middle Dot
+// U+00B8: Cedilla
+// U+00B9: Superscript One
+ -1 * 14 12 03 00 06 B4 00 01 06 B4 00 02 06 B4 00
+ -1 sprites/chars.png 8bpp 150 130 4 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 160 130 6 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 180 130 8 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 200 130 3 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 210 130 4 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 220 130 5 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 150 150 2 7 0 0 normal
+ -1 sprites/chars.png 8bpp 160 150 3 7 0 0 normal
+ -1 sprites/chars.png 8bpp 180 150 6 7 0 0 normal
+ -1 sprites/chars.png 8bpp 200 150 1 7 0 0 normal
+ -1 sprites/chars.png 8bpp 210 150 2 7 0 0 normal
+ -1 sprites/chars.png 8bpp 220 150 2 7 0 0 normal
+ -1 sprites/chars.png 8bpp 150 160 4 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 160 160 15 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 180 160 13 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 200 160 3 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 210 160 5 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 220 160 6 21 0 -2 normal
+
+// U+00BC: Vulgar Fraction One Quarter
+// U+00BD: Vulgar Fraction One Half
+ -1 * 14 12 03 00 02 BC 00 01 02 BC 00 02 02 BC 00
+ -1 sprites/chars.png 8bpp 230 130 10 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 250 130 10 12 0 -1 normal
+ -1 sprites/chars.png 8bpp 230 150 9 7 0 0 normal
+ -1 sprites/chars.png 8bpp 250 150 9 7 0 0 normal
+ -1 sprites/chars.png 8bpp 230 160 16 21 0 -2 normal
+ -1 sprites/chars.png 8bpp 250 160 16 21 0 -2 normal
diff --git a/media/extra_grf/openttd.nfo b/media/extra_grf/openttd.nfo
index 66149a37e5..7ece5c7149 100644
--- a/media/extra_grf/openttd.nfo
+++ b/media/extra_grf/openttd.nfo
@@ -60,10 +60,11 @@
00
// GRF ID, must start with FF so it gets ignored
- -1 * 0 08 08 FF "OTT"
+//@@WARNING DISABLE 101
+ -1 * 0 08 08 FF FF FF FE
// Name of the GRF
- "OpenTTD's base graphics " 00
+ "OpenTTD's default and fallback extra graphics" 00
// Description of the GRF.
"License: GNU General Public License version 2" 0D
@@ -86,7 +87,6 @@
#include "canals.nfo"
#include "oneway.nfo"
#include "tramtracks.nfo"
-#include "shore.nfo"
#include "sloped_tracks.nfo"
#include "airports.nfo"
#include "roadstops.nfo"
@@ -97,11 +97,5 @@
#include "airport_preview.nfo"
#include "chars.nfo"
#include "mono.nfo"
-#include "fix_graphics.nfo"
-#include "rivers/rapids.nfo"
-#include "rivers/temperate.nfo"
-#include "rivers/arctic.nfo"
-#include "rivers/tropic.nfo"
-#include "rivers/toyland.nfo"
#include "tunnel_portals.nfo"
#include "palette.nfo"
diff --git a/media/extra_grf/orig_extra.nfo b/media/extra_grf/orig_extra.nfo
new file mode 100644
index 0000000000..534badab03
--- /dev/null
+++ b/media/extra_grf/orig_extra.nfo
@@ -0,0 +1,86 @@
+// Automatically generated by GRFCODEC. Do not modify!
+// (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.
+// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+//
+// Sources for extra graphics to complement the original graphics.
+// Checks whether the correct version of OpenTTD is used before
+// allowing it to be used.
+//
+
+//
+// Number of sprites, it is wrong, but GRFcodec automagically gets it right.
+//
+ 0 * 4 00 00 00 00
+
+
+//
+// Check whether we are running OTTD or not.
+//
+ -1 * 0 07 9D 04 \7= 01 00 00 00 01
+ -1 * 0 0B 03 7F FF 80 " is not for TTDPatch. Use ttdpatch(w).grf." 00
+
+
+//
+// Check for OTTD's version number
+//
+
+// First step... Variable A1 might not exist. If that's the case it always
+// skips. As we do not want to skip out of the whole testing, we skip over
+// the real version check.
+ -1 * 0 07 A1 04 \7= FF FF FF FF 02
+
+// Real version check.
+ -1 * 0 07 A1 04 \7> \w20304 01 01 03
+
+// If the version check is supported, the string is translateable via OpenTTD
+// itself. Use it!.
+
+ -1 * 0 0B 03 7F 06 "1.1 (or trunk r20304)" 00
+
+// Some OTTD versions before r11130 did support Action B, so use the English
+// phrase there
+ -1 * 0 0B 03 7F FF "Requires OpenTTD version 1.1 (or trunk r20304) or better." 00
+
+// Final fallback. No Action B support, just skip to the end of the file.
+ -1 * 0 07 A1 04 \7= FF FF FF FF 00
+
+// We are a DOS paletted NewGRF, so tell OpenTTD that. Then it can actually
+// do the right thing. Yay for that feature as that means no duplicate NewGRF!
+ -1 * 0 14
+ "C" "INFO"
+ "B" "PALS" \w1 "D"
+ 00
+ 00
+
+// GRF ID, must start with FF so it gets ignored
+//@@WARNING DISABLE 101
+ -1 * 0 08 08 FF "OTT"
+
+// Name of the GRF
+ "Original baseset extra graphics" 00
+
+// Description of the GRF.
+ "License: GNU General Public License version 2" 0D
+ "Andrew Parkhouse: rivers" 0D
+ "Addi and PaulC: original graphics fixes" 0D
+ "OpenTTD developers: other graphics" 00
+
+//
+// The real data of the GRF is acquired from several subfiles.
+//
+#include "chars_orig_extra.nfo"
+#include "shore.nfo"
+#include "fix_graphics.nfo"
+#include "canals_extra.nfo"
+#include "rivers/rapids.nfo"
+#include "rivers/temperate.nfo"
+#include "rivers/arctic.nfo"
+#include "rivers/tropic.nfo"
+#include "rivers/toyland.nfo"
diff --git a/os/debian/changelog b/os/debian/changelog
index 4dd5b1155f..c8cf30794b 100644
--- a/os/debian/changelog
+++ b/os/debian/changelog
@@ -1,3 +1,27 @@
+openttd (1.6.1-0) unstable; urgency=low
+
+ * New upstream release 1.6.1
+
+ -- OpenTTD Fri, 01 Jul 2016 00:00:00 +0200
+
+openttd (1.6.1~RC1-0) unstable; urgency=low
+
+ * New upstream release 1.6.1-RC1
+
+ -- OpenTTD Wed, 01 Jun 2016 21:00:00 +0200
+
+openttd (1.6.0-0) unstable; urgency=low
+
+ * New upstream release 1.6.0
+
+ -- OpenTTD Fri, 01 Apr 2016 21:00:00 +0200
+
+openttd (1.6.0~RC1-0) unstable; urgency=low
+
+ * New upstream release 1.6.0-RC1
+
+ -- OpenTTD Tue, 01 Mar 2016 21:00:00 +0100
+
openttd (1.5.3-0) unstable; urgency=low
* New upstream release 1.5.3
diff --git a/os/debian/copyright b/os/debian/copyright
index be573b4825..ab62f66a42 100644
--- a/os/debian/copyright
+++ b/os/debian/copyright
@@ -5,7 +5,7 @@ Source: http://www.openttd.org
Files: *
-Copyright: © 2004-2012 Ludvig Strigeous and others.
+Copyright: © 2004-2017 Ludvig Strigeous and others.
License: GPL-2.0
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2.0 as
diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd
index 6fe6dace66..5e30e4c354 100644
--- a/os/os2/installer/make_installer.cmd
+++ b/os/os2/installer/make_installer.cmd
@@ -1,6 +1,6 @@
@echo off
-set OPENTTD_VERSION=1.6.0
+set OPENTTD_VERSION=1.8.0
set OPENSFX_VERSION=0.8.0
set NOSOUND_VERSION=0.8.0
set OPENGFX_VERSION=1.2.0
diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec
index 5ad5a53cab..9685624462 100644
--- a/os/rpm/openttd.spec
+++ b/os/rpm/openttd.spec
@@ -2,7 +2,7 @@
# spec file for package openttd
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
-# Copyright (c) 2007-2012 The OpenTTD developers
+# Copyright (c) 2007-2017 The OpenTTD developers
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,9 +17,9 @@
#
Name: openttd
-Version: 1.6.beta1
+Version: 1.8.beta1
Release: 0
-%define srcver 1.6.0-beta1
+%define srcver 1.8.0-beta1
Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe
License: GPL-2.0
Group: Amusements/Games/Strategy/Other
diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi
index ebe9ed3dcd..76a87b37dd 100644
--- a/os/windows/installer/install.nsi
+++ b/os/windows/installer/install.nsi
@@ -1,6 +1,6 @@
# Version numbers to update
!define APPV_MAJOR 1
-!define APPV_MINOR 6
+!define APPV_MINOR 8
!define APPV_MAINT 0
!define APPV_BUILD 0
!define APPV_EXTRA "-beta1"
@@ -408,6 +408,7 @@ Section "Uninstall"
; Baseset files
Delete "$INSTDIR\baseset\opntitle.dat"
Delete "$INSTDIR\baseset\openttd.grf"
+ Delete "$INSTDIR\baseset\orig_extra.grf"
Delete "$INSTDIR\baseset\orig_win.obg"
Delete "$INSTDIR\baseset\orig_dos.obg"
Delete "$INSTDIR\baseset\orig_dos_de.obg"
diff --git a/projects/dpi_aware.manifest b/projects/dpi_aware.manifest
new file mode 100644
index 0000000000..6f04161596
--- /dev/null
+++ b/projects/dpi_aware.manifest
@@ -0,0 +1,7 @@
+
+
+
+ True/PM
+
+
+
diff --git a/projects/gen-kdev4.sh b/projects/gen-kdev4.sh
new file mode 100755
index 0000000000..4ea5dbc2a8
--- /dev/null
+++ b/projects/gen-kdev4.sh
@@ -0,0 +1,203 @@
+#!/bin/sh
+
+# $Id$
+
+# This file is part of OpenTTD.
+# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+
+# echo without interpretation of backslash escapes and without
+# adding newline at the end - just the string as it is
+rawprint()
+{
+ printf '%s' "$@"
+}
+
+encode_dword()
+{
+ printf '\x%02x' \
+ `expr $1 / 16777216 % 256` \
+ `expr $1 / 65536 % 256` \
+ `expr $1 / 256 % 256` \
+ `expr $1 % 256`
+}
+
+encode_string()
+{
+ # turn string into UTF-16 and hexdump it
+ hex_utf16=`rawprint "$1" | iconv -t UTF-16BE | od -t x1 -A n | tr -d -c '[:xdigit:]'`;
+
+ encode_dword `rawprint "$hex_utf16" | wc -m | xargs -I {} expr {} / 2` # length = num hex digits / 2
+ rawprint "$hex_utf16" | sed 's/../\\x&/g' # put '\x' prefix before every pair of digits
+}
+
+encode_single_define()
+{
+ encode_string `rawprint "$1" | grep -o '^[^=]*'` # everything before '='
+ rawprint '\x00\x00\x00\n\x00'
+ encode_string `rawprint "$1" | sed 's/^[^=]*=\?//'` # everything after '='
+}
+
+# $1 - newline-separated list of defines
+encode_defines()
+{
+ # add some fixed defines and discard empty lines from the tail
+ defines=`printf 'va_list\nva_args\n%s' "$1"`
+
+ # count lines (no newline at the end so add one)
+ encode_dword `printf '%s\n' "$defines" | wc -l`
+
+ while [ -n "$defines" ]; do
+ encode_single_define `rawprint "$defines" | head -n 1`
+ defines=`rawprint "$defines" | tail -n +2`
+ done
+}
+
+encode_includes()
+{
+ encode_dword 3 # number of custom includes
+ encode_string "$1/src/stdafx.h"
+ encode_string "$1/objs/lang"
+ encode_string "$1/objs/setting"
+}
+
+# escape with a backslash (\) characters special to the sed replace string: \ &
+# also escape our custom filed separator that we will be using in sed: @
+escape_sed_special()
+{
+ sed -e 's/[\&@]/\\&/g'
+}
+
+
+
+PROJECT_DIR=`pwd`
+DIR_NAME=`pwd | xargs -0 basename`
+
+USAGE_TEXT='Usage:
+
+ projects/gen-kdev4 [PROJECT_NAME|-h|--help]
+
+PROJECT_NAME is the name of the project that will be displayed in KDevelop.
+Before executing, cd into OpenTTD folder and run ./configure script.
+
+-h, --help
+ print help and exit'
+
+case "$# $1" in
+ '1 -h' | '1 --help') printf 'Generate OpenTTD project files for KDevelop 4+\n\n%s\n' "$USAGE_TEXT"; exit 0;;
+ 1*) PROJECT_NAME="$1";;
+ 0*) PROJECT_NAME="$DIR_NAME";;
+ *) printf 'Wrong arguments given. %s\n' "$USAGE_TEXT" >&2; exit 1;;
+esac
+
+CFLAGS=`grep '^using CFLAGS\.\.\.' config.log 2>/dev/null`
+if [ -z "$CFLAGS" ]; then
+ echo "OpenTTD config.log not found" >&2
+ echo "cd into OpenTTD first and run 'configure'" >&2
+ exit 1
+fi
+DEFINES=`eval "printf '%s\n' $CFLAGS" | grep '^\-D' | cut -c3-`
+
+PROJECT_NAME_SED=s@!!PROJECT_NAME!!@`rawprint "$PROJECT_NAME" | escape_sed_special`@g
+PROJECT_DIR_SED=s@!!PROJECT_DIR!!@`rawprint "$PROJECT_DIR" | escape_sed_special`@g
+CUSTOM_DEFINES_SED=s@!!CUSTOM_DEFINES!!@`encode_defines "$DEFINES" | escape_sed_special`@g
+CUSTOM_INCLUDES_SED=s@!!CUSTOM_INCLUDES!!@`encode_includes "$PROJECT_DIR" | escape_sed_special`@g
+
+mkdir -p .kdev4
+
+sed -e "$PROJECT_NAME_SED" \
+ >"$PROJECT_DIR/$DIR_NAME.kdev4" \
+ << "EOF"
+[Project]
+Manager=KDevCustomMakeManager
+Name=!!PROJECT_NAME!!
+EOF
+
+sed -e "$PROJECT_DIR_SED" -e "$CUSTOM_DEFINES_SED" -e "$CUSTOM_INCLUDES_SED" \
+ >"$PROJECT_DIR/.kdev4/$DIR_NAME.kdev4" \
+ << "EOF"
+[CustomDefinesAndIncludes][ProjectPath0]
+Defines=!!CUSTOM_DEFINES!!
+Includes=!!CUSTOM_INCLUDES!!
+Path=.
+
+[Defines And Includes][Compiler]
+Name=GCC
+Path=gcc
+Type=GCC
+
+[Filters]
+size=10
+
+[Filters][0]
+inclusive=0
+pattern=.*
+targets=3
+
+[Filters][1]
+inclusive=0
+pattern=.svn
+targets=2
+
+[Filters][2]
+inclusive=0
+pattern=.hg
+targets=2
+
+[Filters][3]
+inclusive=0
+pattern=.git
+targets=2
+
+[Filters][4]
+inclusive=0
+pattern=*.rej
+targets=1
+
+[Filters][5]
+inclusive=0
+pattern=*.orig
+targets=1
+
+[Filters][6]
+inclusive=0
+pattern=*~
+targets=1
+
+[Filters][7]
+inclusive=0
+pattern=.*.kate-swp
+targets=1
+
+[Filters][8]
+inclusive=0
+pattern=.*.swp
+targets=1
+
+[Filters][9]
+inclusive=0
+pattern=/objs
+targets=2
+
+[Launch]
+Launch Configurations=Launch Configuration 0
+
+[Launch][Launch Configuration 0]
+Configured Launch Modes=execute
+Configured Launchers=nativeAppLauncher
+Name=Launch OpenTTD\s
+Type=Native Application
+
+[Launch][Launch Configuration 0][Data]
+Arguments=-d 1
+Dependencies=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x00)
+Dependency Action=Nothing
+EnvironmentGroup=
+Executable=file://!!PROJECT_DIR!!/bin/openttd
+External Terminal=konsole --noclose --workdir %workdir -e %exe
+Project Target=
+Use External Terminal=false
+Working Directory=file://!!PROJECT_DIR!!/bin
+isExecutable=true
+EOF
diff --git a/projects/generate b/projects/generate
index bd177bf71b..e82559a911 100755
--- a/projects/generate
+++ b/projects/generate
@@ -22,6 +22,15 @@ then
exit 1
fi
+# openttd_vs141.sln is for MSVC 2017
+# openttd_vs141.vcxproj is for MSVC 2017
+# openttd_vs141.vcxproj.filters is for MSVC 2017
+# langs_vs141.vcxproj is for MSVC 2017
+# strgen_vs141.vcxproj is for MSVC 2017
+# strgen_vs141.vcxproj.filters is for MSVC 2017
+# generate_vs141.vcxproj is for MSVC 2017
+# version_vs141.vcxproj is for MSVC 2017
+
# openttd_vs140.sln is for MSVC 2015
# openttd_vs140.vcxproj is for MSVC 2015
# openttd_vs140.vcxproj.filters is for MSVC 2015
@@ -317,15 +326,21 @@ generate "$openttdvcxproj" "openttd_vs100.vcxproj"
generate "$openttdfiles" "openttd_vs100.vcxproj.filters" "$openttdfilters"
generate "$openttdvcxproj" "openttd_vs140.vcxproj"
generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters"
+generate "$openttdvcxproj" "openttd_vs141.vcxproj"
+generate "$openttdfiles" "openttd_vs141.vcxproj.filters" "$openttdfilters"
generate "$lang" "langs_vs80.vcproj"
generate "$lang" "langs_vs90.vcproj"
generate "$langvcxproj" "langs_vs100.vcxproj"
generate "$langfiles" "langs_vs100.vcxproj.filters"
generate "$langvcxproj" "langs_vs140.vcxproj"
generate "$langfiles" "langs_vs140.vcxproj.filters"
+generate "$langvcxproj" "langs_vs141.vcxproj"
+generate "$langfiles" "langs_vs141.vcxproj.filters"
generate "$settings" "settings_vs80.vcproj" "$settingscommand"
generate "$settings" "settings_vs90.vcproj" "$settingscommand"
generate "$settingsvcxproj" "settings_vs100.vcxproj" "$settingscommand"
generate "$settingsfiles" "settings_vs100.vcxproj.filters"
generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand"
generate "$settingsfiles" "settings_vs140.vcxproj.filters"
+generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand"
+generate "$settingsfiles" "settings_vs141.vcxproj.filters"
diff --git a/projects/generate.vbs b/projects/generate.vbs
index 6692b45e7f..a2f4679a69 100755
--- a/projects/generate.vbs
+++ b/projects/generate.vbs
@@ -10,6 +10,15 @@ Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
+' openttd_vs141.sln is for MSVC 2017
+' openttd_vs141.vcxproj is for MSVC 2017
+' openttd_vs141.vcxproj.filters is for MSVC 2017
+' langs_vs141.vcxproj is for MSVC 2017
+' strgen_vs141.vcxproj is for MSVC 2017
+' strgen_vs141.vcxproj.filters is for MSVC 2017
+' generate_vs141.vcxproj is for MSVC 2017
+' version_vs141.vcxproj is for MSVC 2017
+
' openttd_vs140.sln is for MSVC 2015
' openttd_vs140.vcxproj is for MSVC 2015
' openttd_vs140.vcxproj.filters is for MSVC 2015
@@ -380,6 +389,8 @@ generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs100.vcxproj", Null
generate openttdfiles, ROOT_DIR & "/projects/openttd_vs100.vcxproj.filters", openttdfilters
generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null
generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters
+generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null
+generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", openttdfilters
Dim lang, langvcxproj, langfiles
lang = load_lang_data(ROOT_DIR & "/src/lang", langvcxproj, langfiles)
@@ -389,6 +400,8 @@ generate langvcxproj, ROOT_DIR & "/projects/langs_vs100.vcxproj", Null
generate langfiles, ROOT_DIR & "/projects/langs_vs100.vcxproj.filters", Null
generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null
generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null
+generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null
+generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null
Dim settings, settingsvcxproj, settingscommand, settingsfiles
settings = load_settings_data(ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles)
@@ -398,3 +411,5 @@ generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs100.vcxproj", setting
generate settingsfiles, ROOT_DIR & "/projects/settings_vs100.vcxproj.filters", Null
generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", settingscommand
generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null
+generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand
+generate settingsfiles, ROOT_DIR & "/projects/settings_vs141.vcxproj.filters", Null
diff --git a/projects/generate_vs141.vcxproj b/projects/generate_vs141.vcxproj
new file mode 100644
index 0000000000..2db93cf097
--- /dev/null
+++ b/projects/generate_vs141.vcxproj
@@ -0,0 +1,40 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ generate
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}
+ generate
+
+
+
+ Utility
+ v141
+
+
+
+
+
+
+
+
+
+
+
+
+ Document
+ Running %27generate.vbs%27 ...
+ cscript "$(ProjectDir)generate.vbs"
+ %(FullPath);%(AdditionalInputs)
+ $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs)
+
+
+
+
+
+
diff --git a/projects/langs_vs100.vcxproj b/projects/langs_vs100.vcxproj
index 078a7b374a..fc77e03bec 100644
--- a/projects/langs_vs100.vcxproj
+++ b/projects/langs_vs100.vcxproj
@@ -317,6 +317,12 @@
..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
..\bin\lang\slovenian.lng;%(Outputs)
+
+ Generating spanish_MX language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\spanish_MX.lng;%(Outputs)
+
Generating spanish language file
..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
diff --git a/projects/langs_vs100.vcxproj.filters b/projects/langs_vs100.vcxproj.filters
index fb16aa64e0..0afc8c969a 100644
--- a/projects/langs_vs100.vcxproj.filters
+++ b/projects/langs_vs100.vcxproj.filters
@@ -142,6 +142,9 @@
Translations
+
+ Translations
+
Translations
diff --git a/projects/langs_vs140.vcxproj b/projects/langs_vs140.vcxproj
index 0907bfa6f5..317fd34a11 100644
--- a/projects/langs_vs140.vcxproj
+++ b/projects/langs_vs140.vcxproj
@@ -317,6 +317,12 @@
..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
..\bin\lang\slovenian.lng;%(Outputs)
+
+ Generating spanish_MX language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\spanish_MX.lng;%(Outputs)
+
Generating spanish language file
..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
@@ -373,7 +379,7 @@
-
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
diff --git a/projects/langs_vs140.vcxproj.filters b/projects/langs_vs140.vcxproj.filters
index fb16aa64e0..0afc8c969a 100644
--- a/projects/langs_vs140.vcxproj.filters
+++ b/projects/langs_vs140.vcxproj.filters
@@ -142,6 +142,9 @@
Translations
+
+ Translations
+
Translations
diff --git a/projects/langs_vs140.vcxproj.in b/projects/langs_vs140.vcxproj.in
index f75ef9d6b5..3271fecffa 100644
--- a/projects/langs_vs140.vcxproj.in
+++ b/projects/langs_vs140.vcxproj.in
@@ -50,7 +50,7 @@
!!FILES!!
-
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
diff --git a/projects/langs_vs141.vcxproj b/projects/langs_vs141.vcxproj
new file mode 100644
index 0000000000..2444b0e0e7
--- /dev/null
+++ b/projects/langs_vs141.vcxproj
@@ -0,0 +1,390 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ langs
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}
+ langs
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v141
+
+
+
+
+
+
+
+
+
+ ..\bin\lang\
+ ..\objs\langs\
+
+
+
+ Generating strings.h
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table
+
+
+ ./langs.tlb
+
+
+
+
+
+
+ Generating english language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english.lng;%(Outputs)
+
+
+ Generating afrikaans language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\afrikaans.lng;%(Outputs)
+
+
+ Generating arabic_egypt language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\arabic_egypt.lng;%(Outputs)
+
+
+ Generating basque language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\basque.lng;%(Outputs)
+
+
+ Generating belarusian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\belarusian.lng;%(Outputs)
+
+
+ Generating brazilian_portuguese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\brazilian_portuguese.lng;%(Outputs)
+
+
+ Generating bulgarian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\bulgarian.lng;%(Outputs)
+
+
+ Generating catalan language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\catalan.lng;%(Outputs)
+
+
+ Generating croatian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\croatian.lng;%(Outputs)
+
+
+ Generating czech language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\czech.lng;%(Outputs)
+
+
+ Generating danish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\danish.lng;%(Outputs)
+
+
+ Generating dutch language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\dutch.lng;%(Outputs)
+
+
+ Generating english_AU language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english_AU.lng;%(Outputs)
+
+
+ Generating english_US language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english_US.lng;%(Outputs)
+
+
+ Generating esperanto language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\esperanto.lng;%(Outputs)
+
+
+ Generating estonian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\estonian.lng;%(Outputs)
+
+
+ Generating faroese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\faroese.lng;%(Outputs)
+
+
+ Generating finnish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\finnish.lng;%(Outputs)
+
+
+ Generating french language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\french.lng;%(Outputs)
+
+
+ Generating gaelic language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\gaelic.lng;%(Outputs)
+
+
+ Generating galician language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\galician.lng;%(Outputs)
+
+
+ Generating german language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\german.lng;%(Outputs)
+
+
+ Generating greek language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\greek.lng;%(Outputs)
+
+
+ Generating hebrew language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\hebrew.lng;%(Outputs)
+
+
+ Generating hungarian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\hungarian.lng;%(Outputs)
+
+
+ Generating icelandic language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\icelandic.lng;%(Outputs)
+
+
+ Generating indonesian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\indonesian.lng;%(Outputs)
+
+
+ Generating irish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\irish.lng;%(Outputs)
+
+
+ Generating italian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\italian.lng;%(Outputs)
+
+
+ Generating japanese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\japanese.lng;%(Outputs)
+
+
+ Generating korean language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\korean.lng;%(Outputs)
+
+
+ Generating latin language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\latin.lng;%(Outputs)
+
+
+ Generating latvian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\latvian.lng;%(Outputs)
+
+
+ Generating lithuanian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\lithuanian.lng;%(Outputs)
+
+
+ Generating luxembourgish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\luxembourgish.lng;%(Outputs)
+
+
+ Generating malay language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\malay.lng;%(Outputs)
+
+
+ Generating norwegian_bokmal language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\norwegian_bokmal.lng;%(Outputs)
+
+
+ Generating norwegian_nynorsk language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\norwegian_nynorsk.lng;%(Outputs)
+
+
+ Generating polish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\polish.lng;%(Outputs)
+
+
+ Generating portuguese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\portuguese.lng;%(Outputs)
+
+
+ Generating romanian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\romanian.lng;%(Outputs)
+
+
+ Generating russian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\russian.lng;%(Outputs)
+
+
+ Generating serbian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\serbian.lng;%(Outputs)
+
+
+ Generating simplified_chinese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\simplified_chinese.lng;%(Outputs)
+
+
+ Generating slovak language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\slovak.lng;%(Outputs)
+
+
+ Generating slovenian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\slovenian.lng;%(Outputs)
+
+
+ Generating spanish_MX language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\spanish_MX.lng;%(Outputs)
+
+
+ Generating spanish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\spanish.lng;%(Outputs)
+
+
+ Generating swedish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\swedish.lng;%(Outputs)
+
+
+ Generating tamil language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\tamil.lng;%(Outputs)
+
+
+ Generating thai language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\thai.lng;%(Outputs)
+
+
+ Generating traditional_chinese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\traditional_chinese.lng;%(Outputs)
+
+
+ Generating turkish language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\turkish.lng;%(Outputs)
+
+
+ Generating ukrainian language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\ukrainian.lng;%(Outputs)
+
+
+ Generating vietnamese language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\vietnamese.lng;%(Outputs)
+
+
+ Generating welsh language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\welsh.lng;%(Outputs)
+
+
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+
+
+
+
diff --git a/projects/langs_vs141.vcxproj.filters b/projects/langs_vs141.vcxproj.filters
new file mode 100644
index 0000000000..0afc8c969a
--- /dev/null
+++ b/projects/langs_vs141.vcxproj.filters
@@ -0,0 +1,176 @@
+
+
+
+
+ {2a164580-9033-4a01-974b-b21da507efda}
+
+
+
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+ Translations
+
+
+
diff --git a/projects/langs_vs141.vcxproj.filters.in b/projects/langs_vs141.vcxproj.filters.in
new file mode 100644
index 0000000000..0d60ee9595
--- /dev/null
+++ b/projects/langs_vs141.vcxproj.filters.in
@@ -0,0 +1,12 @@
+
+
+
+
+ {2a164580-9033-4a01-974b-b21da507efda}
+
+
+
+
+!!FILES!!
+
+
diff --git a/projects/langs_vs141.vcxproj.in b/projects/langs_vs141.vcxproj.in
new file mode 100644
index 0000000000..b73d52c5c9
--- /dev/null
+++ b/projects/langs_vs141.vcxproj.in
@@ -0,0 +1,61 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ langs
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}
+ langs
+ MakeFileProj
+
+
+
+ Utility
+ false
+ v141
+
+
+
+
+
+
+
+
+
+ ..\bin\lang\
+ ..\objs\langs\
+
+
+
+ Generating strings.h
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table
+
+
+ ./langs.tlb
+
+
+
+
+
+
+ Generating english language file
+ ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"
+ ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)
+ ..\bin\lang\english.lng;%(Outputs)
+
+!!FILES!!
+
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+
+
+
+
diff --git a/projects/langs_vs80.vcproj b/projects/langs_vs80.vcproj
index 1413a80d27..e683d57353 100644
--- a/projects/langs_vs80.vcproj
+++ b/projects/langs_vs80.vcproj
@@ -738,6 +738,21 @@
/>
+
+
+
+
+
diff --git a/projects/langs_vs90.vcproj b/projects/langs_vs90.vcproj
index db6fef1a43..c1f028233e 100644
--- a/projects/langs_vs90.vcproj
+++ b/projects/langs_vs90.vcproj
@@ -739,6 +739,21 @@
/>
+
+
+
+
+
diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj
index 95b30d6c9a..2211de9b15 100644
--- a/projects/openttd_vs100.vcxproj
+++ b/projects/openttd_vs100.vcxproj
@@ -102,7 +102,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -145,6 +145,9 @@
MachineX86
true
+
+ dpi_aware.manifest
+
@@ -156,7 +159,7 @@
/MP %(AdditionalOptions)
Disabled
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -188,6 +191,9 @@
MachineX86
+
+ dpi_aware.manifest
+
@@ -204,7 +210,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -244,6 +250,9 @@
MachineX64
true
+
+ dpi_aware.manifest
+
@@ -256,7 +265,7 @@
/MP %(AdditionalOptions)
Disabled
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -289,6 +298,9 @@
1048576
MachineX64
+
+ dpi_aware.manifest
+
@@ -574,6 +586,7 @@
+
@@ -669,6 +682,8 @@
+
+
diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters
index 91ddf44efb..dc9300db8c 100644
--- a/projects/openttd_vs100.vcxproj.filters
+++ b/projects/openttd_vs100.vcxproj.filters
@@ -951,6 +951,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1236,6 +1239,12 @@
Core Source Code
+
+ Core Source Code
+
+
+ Core Source Code
+
Core Source Code
diff --git a/projects/openttd_vs100.vcxproj.in b/projects/openttd_vs100.vcxproj.in
index 7a4f0bce81..c8e71c4234 100644
--- a/projects/openttd_vs100.vcxproj.in
+++ b/projects/openttd_vs100.vcxproj.in
@@ -102,7 +102,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -145,6 +145,9 @@
MachineX86
true
+
+ dpi_aware.manifest
+
@@ -156,7 +159,7 @@
/MP %(AdditionalOptions)
Disabled
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -188,6 +191,9 @@
MachineX86
+
+ dpi_aware.manifest
+
@@ -204,7 +210,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -244,6 +250,9 @@
MachineX64
true
+
+ dpi_aware.manifest
+
@@ -256,7 +265,7 @@
/MP %(AdditionalOptions)
Disabled
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -289,6 +298,9 @@
1048576
MachineX64
+
+ dpi_aware.manifest
+
!!FILES!!
diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj
index 85455f0df1..279e342d51 100644
--- a/projects/openttd_vs140.vcxproj
+++ b/projects/openttd_vs140.vcxproj
@@ -105,7 +105,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -151,6 +151,9 @@
true
5.01
+
+ PerMonitorHighDPIAware
+
@@ -163,7 +166,7 @@
Disabled
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -198,6 +201,9 @@
MachineX86
5.01
+
+ PerMonitorHighDPIAware
+
@@ -214,7 +220,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -257,6 +263,9 @@
true
5.02
+
+ PerMonitorHighDPIAware
+
@@ -270,7 +279,7 @@
Disabled
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -306,6 +315,9 @@
MachineX64
5.02
+
+ PerMonitorHighDPIAware
+
@@ -591,6 +603,7 @@
+
@@ -686,6 +699,8 @@
+
+
@@ -1299,15 +1314,15 @@
-
+
{0f066b23-18df-4284-8265-f4a5e7e3b966}
false
-
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
-
+
{1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
false
diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters
index 91ddf44efb..dc9300db8c 100644
--- a/projects/openttd_vs140.vcxproj.filters
+++ b/projects/openttd_vs140.vcxproj.filters
@@ -951,6 +951,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1236,6 +1239,12 @@
Core Source Code
+
+ Core Source Code
+
+
+ Core Source Code
+
Core Source Code
diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in
index 8089278bff..98b6481dcd 100644
--- a/projects/openttd_vs140.vcxproj.in
+++ b/projects/openttd_vs140.vcxproj.in
@@ -105,7 +105,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -151,6 +151,9 @@
true
5.01
+
+ PerMonitorHighDPIAware
+
@@ -163,7 +166,7 @@
Disabled
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -198,6 +201,9 @@
MachineX86
5.01
+
+ PerMonitorHighDPIAware
+
@@ -214,7 +220,7 @@
Size
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
true
Sync
MultiThreaded
@@ -257,6 +263,9 @@
true
5.02
+
+ PerMonitorHighDPIAware
+
@@ -270,7 +279,7 @@
Disabled
true
..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
EnableFastChecks
MultiThreadedDebug
@@ -306,6 +315,9 @@
MachineX64
5.02
+
+ PerMonitorHighDPIAware
+
!!FILES!!
@@ -315,15 +327,15 @@
-
+
{0f066b23-18df-4284-8265-f4a5e7e3b966}
false
-
+
{a133a442-bd0a-4ade-b117-ad7545e4bdd1}
false
-
+
{1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
false
diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln
new file mode 100644
index 0000000000..e314c628a7
--- /dev/null
+++ b/projects/openttd_vs141.sln
@@ -0,0 +1,94 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs141.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35}
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs141.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs141.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs141.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs141.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64
+ {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32
+ {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32
+ {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32
+ {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+ DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+ EndGlobalSection
+EndGlobal
diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj
new file mode 100644
index 0000000000..c735569b33
--- /dev/null
+++ b/projects/openttd_vs141.vcxproj
@@ -0,0 +1,1323 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ openttd
+ {668328A0-B40E-4CDB-BD72-D0064424414A}
+ openttd
+
+
+
+ Application
+ false
+ Unicode
+ v141
+
+
+ Application
+ false
+ Unicode
+ true
+ v141
+
+
+ Application
+ false
+ Unicode
+ v141
+
+
+ Application
+ false
+ Unicode
+ true
+ v141
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(ProjectDir)..\bin
+
+
+
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ 4Bytes
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ false
+
+
+ MachineX86
+ true
+ 5.01
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ false
+
+
+ MachineX86
+ 5.01
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+ X64
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ Default
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ MachineX64
+ true
+ 5.02
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+ X64
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+
+
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ Cdecl
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ MachineX64
+ 5.02
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {0f066b23-18df-4284-8265-f4a5e7e3b966}
+ false
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
+ false
+
+
+
+
diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters
new file mode 100644
index 0000000000..06800ffdaf
--- /dev/null
+++ b/projects/openttd_vs141.vcxproj.filters
@@ -0,0 +1,3050 @@
+
+
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000000}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000001}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000002}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000003}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000004}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000005}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000006}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000007}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000008}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000009}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000010}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000011}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000012}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000013}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000014}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000015}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000016}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000017}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000018}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000019}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000020}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000021}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000022}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000023}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000024}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000025}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000026}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000027}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000028}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000029}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000030}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000031}
+
+
+ {c76ff9f1-1e62-46d8-8d55-000000000032}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ Core Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ GUI Source Code
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Widgets
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Command handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Save/Load handlers
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ Tables
+
+
+ MD5
+
+
+ MD5
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Script
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ Squirrel headers
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI Core
+
+
+ AI API
+
+
+ Game API
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Game Core
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Script API Implementation
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Blitters
+
+
+ Drivers
+
+
+ Drivers
+
+
+ Drivers
+
+
+ Sprite loaders
+
+
+ Sprite loaders
+
+
+ Sprite loaders
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ NewGRF
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Map Accessors
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Misc
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Network Core
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ Pathfinder
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ NPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ YAPF
+
+
+ Video
+
+
+ Video
+
+
+ Video
+
+
+ Video
+
+
+ Music
+
+
+ Music
+
+
+ Music
+
+
+ Sound
+
+
+ Sound
+
+
+ Sound
+
+
+ Windows files
+
+
+ Windows files
+
+
+ Windows files
+
+
+ Threading
+
+
+ Threading
+
+
+
+
+
+
+
diff --git a/projects/openttd_vs141.vcxproj.filters.in b/projects/openttd_vs141.vcxproj.filters.in
new file mode 100644
index 0000000000..cda491072c
--- /dev/null
+++ b/projects/openttd_vs141.vcxproj.filters.in
@@ -0,0 +1,13 @@
+
+
+
+!!FILTERS!!
+
+
+!!FILES!!
+
+
+
+
+
+
diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in
new file mode 100644
index 0000000000..9afda46b7c
--- /dev/null
+++ b/projects/openttd_vs141.vcxproj.in
@@ -0,0 +1,344 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ openttd
+ {668328A0-B40E-4CDB-BD72-D0064424414A}
+ openttd
+
+
+
+ Application
+ false
+ Unicode
+ v141
+
+
+ Application
+ false
+ Unicode
+ true
+ v141
+
+
+ Application
+ false
+ Unicode
+ v141
+
+
+ Application
+ false
+ Unicode
+ true
+ v141
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ false
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ AllRules.ruleset
+
+
+ $(SolutionDir)..\objs\$(Platform)\$(Configuration)\
+ $(ProjectDir)..\bin
+
+
+
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ 4Bytes
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ false
+
+
+ MachineX86
+ true
+ 5.01
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ false
+
+
+ MachineX86
+ 5.01
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+ X64
+ .\Release/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Full
+ AnySuitable
+ true
+ Size
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)
+ true
+ Sync
+ MultiThreaded
+ Default
+ false
+ true
+
+
+
+
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ FastCall
+ Default
+ true
+ true
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ %(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ true
+ MachineX64
+ true
+ 5.02
+
+
+ PerMonitorHighDPIAware
+
+
+
+
+ X64
+ .\Debug/openttd.tlb
+
+
+
+
+ /J /Zc:throwingNew /std:c++latest %(AdditionalOptions)
+ Disabled
+ true
+ ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+
+
+
+
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ false
+ true
+ ProgramDatabase
+ Cdecl
+ Default
+ true
+ true
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0809
+
+
+ winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies)
+ true
+ LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ Windows
+ 1048576
+ 1048576
+ MachineX64
+ 5.02
+
+
+ PerMonitorHighDPIAware
+
+
+
+!!FILES!!
+
+
+
+
+
+
+
+ {0f066b23-18df-4284-8265-f4a5e7e3b966}
+ false
+
+
+ {a133a442-bd0a-4ade-b117-ad7545e4bdd1}
+ false
+
+
+ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec}
+ false
+
+
+
+
diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj
index d5907cc86c..364a034499 100644
--- a/projects/openttd_vs80.vcproj
+++ b/projects/openttd_vs80.vcproj
@@ -52,7 +52,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -156,7 +156,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -257,7 +257,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -362,7 +362,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -1570,6 +1570,10 @@
RelativePath=".\..\src\safeguards.h"
>
+
+
@@ -1954,6 +1958,14 @@
RelativePath=".\..\src\core\bitmath_func.hpp"
>
+
+
+
+
diff --git a/projects/openttd_vs80.vcproj.in b/projects/openttd_vs80.vcproj.in
index 57938f9e91..587871dca0 100644
--- a/projects/openttd_vs80.vcproj.in
+++ b/projects/openttd_vs80.vcproj.in
@@ -52,7 +52,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -156,7 +156,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -257,7 +257,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -362,7 +362,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj
index c84169052d..fb69556ad2 100644
--- a/projects/openttd_vs90.vcproj
+++ b/projects/openttd_vs90.vcproj
@@ -53,7 +53,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -155,7 +155,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -255,7 +255,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -359,7 +359,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -1567,6 +1567,10 @@
RelativePath=".\..\src\safeguards.h"
>
+
+
@@ -1951,6 +1955,14 @@
RelativePath=".\..\src\core\bitmath_func.hpp"
>
+
+
+
+
diff --git a/projects/openttd_vs90.vcproj.in b/projects/openttd_vs90.vcproj.in
index 2793927bdb..ce90ab5f29 100644
--- a/projects/openttd_vs90.vcproj.in
+++ b/projects/openttd_vs90.vcproj.in
@@ -53,7 +53,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -155,7 +155,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -255,7 +255,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -359,7 +359,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj
new file mode 100644
index 0000000000..ed6f5bab18
--- /dev/null
+++ b/projects/settings_vs141.vcxproj
@@ -0,0 +1,54 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ settings
+ {0817F629-589E-4A3B-B81A-8647BC571E35}
+ settings
+
+
+
+ Makefile
+ v141
+
+
+
+
+
+
+
+
+
+..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini
+
+
+
+ ..\objs\settings\table\
+ ..\objs\settings\table\
+ $(SettingsCommandLine)
+ $(SettingsCommandLine)
+ del ..\objs\settings\table\settings.h
+ ..\objs\settings\table\settings.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/settings_vs141.vcxproj.filters b/projects/settings_vs141.vcxproj.filters
new file mode 100644
index 0000000000..8caf9fa0a6
--- /dev/null
+++ b/projects/settings_vs141.vcxproj.filters
@@ -0,0 +1,35 @@
+
+
+
+
+ {21deca6c-8df4-4f34-9dad-17d7781cd5a0}
+
+
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+ INI
+
+
+
+
+
+
+
diff --git a/projects/settings_vs141.vcxproj.filters.in b/projects/settings_vs141.vcxproj.filters.in
new file mode 100644
index 0000000000..08f90670d2
--- /dev/null
+++ b/projects/settings_vs141.vcxproj.filters.in
@@ -0,0 +1,15 @@
+
+
+
+
+ {21deca6c-8df4-4f34-9dad-17d7781cd5a0}
+
+
+
+!!FILES!!
+
+
+
+
+
+
diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in
new file mode 100644
index 0000000000..e4a60227cb
--- /dev/null
+++ b/projects/settings_vs141.vcxproj.in
@@ -0,0 +1,48 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ settings
+ {0817F629-589E-4A3B-B81A-8647BC571E35}
+ settings
+
+
+
+ Makefile
+ v141
+
+
+
+
+
+
+
+
+
+!!FILTERS!!
+
+
+
+ ..\objs\settings\table\
+ ..\objs\settings\table\
+ $(SettingsCommandLine)
+ $(SettingsCommandLine)
+ del ..\objs\settings\table\settings.h
+ ..\objs\settings\table\settings.h
+
+
+!!FILES!!
+
+
+
+
+
+
+
+
+
diff --git a/projects/settingsgen_vs141.vcxproj b/projects/settingsgen_vs141.vcxproj
new file mode 100644
index 0000000000..2b356f2eab
--- /dev/null
+++ b/projects/settingsgen_vs141.vcxproj
@@ -0,0 +1,83 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ settingsgen
+ {E9548DE9-F089-49B7-93A6-30BE2CC311C7}
+ settings
+
+
+
+ Application
+ MultiByte
+ v141
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.30319.1
+ ..\objs\settings\
+ ..\objs\settings\
+ settings_gen
+
+
+
+
+
+
+
+ %(Inputs)
+
+
+ MinSpace
+ Size
+ SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ All
+ $(IntDir)$(TargetName).pdb
+ Level3
+ true
+ ProgramDatabase
+ MultiThreadedDebug
+
+
+ $(OutDir)settings_gen.exe
+ true
+ false
+
+
+ Console
+ 5.01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/settingsgen_vs141.vcxproj.filters b/projects/settingsgen_vs141.vcxproj.filters
new file mode 100644
index 0000000000..c8afe0c8ed
--- /dev/null
+++ b/projects/settingsgen_vs141.vcxproj.filters
@@ -0,0 +1,32 @@
+
+
+
+
+ {a4678737-b3b3-4be5-9db1-fa6ccd164c59}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/strgen_vs141.vcxproj b/projects/strgen_vs141.vcxproj
new file mode 100644
index 0000000000..addc6f10a5
--- /dev/null
+++ b/projects/strgen_vs141.vcxproj
@@ -0,0 +1,95 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ strgen
+ {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}
+ strgen
+
+
+
+ Application
+ false
+ MultiByte
+ v141
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\strgen\
+ $(SolutionDir)..\objs\strgen\
+ false
+ AllRules.ruleset
+
+
+
+
+
+ .\Debug/strgen.tlb
+
+
+
+
+ /MP %(AdditionalOptions)
+ MinSpace
+ Size
+ STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ Default
+ MultiThreadedDebug
+
+
+ All
+ $(IntDir)
+ $(IntDir)
+ $(IntDir)$(TargetName).pdb
+ Level3
+ true
+ true
+ ProgramDatabase
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x041d
+
+
+ true
+ true
+ $(IntDir)strgen.pdb
+ Console
+ false
+
+
+ MachineX86
+ 5.01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/strgen_vs141.vcxproj.filters b/projects/strgen_vs141.vcxproj.filters
new file mode 100644
index 0000000000..58864ee691
--- /dev/null
+++ b/projects/strgen_vs141.vcxproj.filters
@@ -0,0 +1,35 @@
+
+
+
+
+ {5894294c-d4dc-41f0-be31-e56cff4e0405}
+ cpp;c;cxx;rc;def;r;odl;idl;hpj;bat
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/version_vs141.vcxproj b/projects/version_vs141.vcxproj
new file mode 100644
index 0000000000..5d8ee8c74f
--- /dev/null
+++ b/projects/version_vs141.vcxproj
@@ -0,0 +1,42 @@
+
+
+
+
+ Debug
+ Win32
+
+
+
+ version
+ {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}
+ version
+
+
+
+ Makefile
+ MultiByte
+ v141
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)..\objs\version\
+ $(SolutionDir)..\objs\version\
+ cscript "$(ProjectDir)/determineversion.vbs"
+ cscript "$(ProjectDir)/determineversion.vbs"
+ ..\src\rev.cpp
+ del ..\src\rev.cpp
+
+
+
+
+
+
+
+
+
diff --git a/readme.txt b/readme.txt
index 817f397b51..e378bd5d22 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,5 @@
-Last updated: 2015-02-24
-Release version: 1.5.0-beta2
+Last updated: 2016-07-01
+Release version: 1.6.1
------------------------------------------------------------------------
diff --git a/source.list b/source.list
index 34a665ec19..bc7ee18e25 100644
--- a/source.list
+++ b/source.list
@@ -313,6 +313,7 @@ road_type.h
roadstop_base.h
roadveh.h
safeguards.h
+scope.h
screenshot.h
sdl.h
sound/sdl_s.h
@@ -346,6 +347,7 @@ story_type.h
strgen/strgen.h
string_base.h
string_func.h
+string_func_extra.h
string_type.h
stringfilter_type.h
strings_func.h
@@ -425,6 +427,8 @@ core/alloc_type.hpp
core/backup_type.hpp
core/bitmath_func.cpp
core/bitmath_func.hpp
+core/container_func.hpp
+core/dyn_arena_alloc.hpp
core/endian_func.hpp
core/endian_type.hpp
core/enum_type.hpp
diff --git a/src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp b/src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
index 67b299bcec..540975fb5c 100644
--- a/src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
+++ b/src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
@@ -119,10 +119,10 @@ static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
const SQChar *sErr = 0;
if(sq_gettop(v)>=1) {
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
- pf(v,"\nAN ERROR HAS OCCURED [%s]\n",sErr);
+ pf(v,"\nAN ERROR HAS OCCURRED [%s]\n",sErr);
}
else{
- pf(v,"\nAN ERROR HAS OCCURED [unknown]\n");
+ pf(v,"\nAN ERROR HAS OCCURRED [unknown]\n");
}
sqstd_printcallstack(v);
}
diff --git a/src/3rdparty/squirrel/squirrel/sqapi.cpp b/src/3rdparty/squirrel/squirrel/sqapi.cpp
index f02fee29f6..0d769bf1f7 100644
--- a/src/3rdparty/squirrel/squirrel/sqapi.cpp
+++ b/src/3rdparty/squirrel/squirrel/sqapi.cpp
@@ -798,7 +798,8 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
switch(type) {
case OT_TABLE:
if(type(mt) == OT_TABLE) {
- if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, "delagate cycle"); v->Pop();}
+ if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, "delagate cycle");
+ v->Pop();}
else if(type(mt)==OT_NULL) {
_table(self)->SetDelegate(NULL); v->Pop(); }
else return sq_aux_invalidtype(v,type);
diff --git a/src/3rdparty/squirrel/squirrel/sqdebug.cpp b/src/3rdparty/squirrel/squirrel/sqdebug.cpp
index 74272e432a..b163fae52e 100644
--- a/src/3rdparty/squirrel/squirrel/sqdebug.cpp
+++ b/src/3rdparty/squirrel/squirrel/sqdebug.cpp
@@ -105,7 +105,7 @@ void SQVM::Raise_IdxError(const SQObject &o)
void SQVM::Raise_CompareError(const SQObject &o1, const SQObject &o2)
{
SQObjectPtr oval1 = PrintObjVal(o1), oval2 = PrintObjVal(o2);
- Raise_Error("comparsion between '%.50s' and '%.50s'", _stringval(oval1), _stringval(oval2));
+ Raise_Error("comparison between '%.50s' and '%.50s'", _stringval(oval1), _stringval(oval2));
}
diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp
index 973002b49d..c66c4aca59 100644
--- a/src/3rdparty/squirrel/squirrel/sqvm.cpp
+++ b/src/3rdparty/squirrel/squirrel/sqvm.cpp
@@ -215,7 +215,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
_RET_SUCCEED(_integer(res))
}
}
- //continues through (no break needed)
+ FALLTHROUGH;
default:
_RET_SUCCEED( _userpointer(o1) < _userpointer(o2)?-1:1 );
}
@@ -287,6 +287,7 @@ void SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
//else keeps going to the default
}
}
+ FALLTHROUGH;
default:
seprintf(buf, lastof(buf),"(%s : 0x%p)",GetTypeName(o),(void*)_rawval(o));
}
@@ -539,7 +540,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
_generator(o1)->Resume(this, arg_2+1);
_FINISH(0);
}
- /* FALL THROUGH */
+ FALLTHROUGH;
default:
Raise_Error("cannot iterate %s", GetTypeName(o1));
}
@@ -769,7 +770,7 @@ exception_restore:
ct_stackbase = _stackbase;
goto common_call;
}
- /* FALL THROUGH */
+ FALLTHROUGH;
case _OP_CALL: {
ct_tailcall = false;
ct_target = arg0;
@@ -1101,7 +1102,7 @@ exception_trap:
_lasterror = currerror;
return false;
}
- assert(0);
+ NOT_REACHED();
}
bool SQVM::CreateClassInstance(SQClass *theclass, SQObjectPtr &inst, SQObjectPtr &constructor)
@@ -1330,7 +1331,7 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr
return true;
}
}
- //keeps going
+ FALLTHROUGH;
case OT_USERDATA:
if(_delegable(self)->_delegate) {
SQObjectPtr t;
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp
index 8944e8bc4f..101a97d0a9 100644
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -28,6 +28,7 @@
#include "../widgets/dropdown_type.h"
#include "../widgets/dropdown_func.h"
#include "../hotkeys.h"
+#include "../core/geometry_func.hpp"
#include "ai.hpp"
#include "ai_gui.hpp"
@@ -305,7 +306,6 @@ struct AISettingsWindow : public Window {
timeout(0)
{
this->ai_config = GetConfig(slot);
- this->RebuildVisibleSettings();
this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_AIS_SCROLLBAR);
@@ -313,7 +313,7 @@ struct AISettingsWindow : public Window {
this->SetWidgetDisabledState(WID_AIS_RESET, _game_mode != GM_MENU && Company::IsValidID(this->slot));
- this->vscroll->SetCount((int)this->visible_settings.size());
+ this->RebuildVisibleSettings();
}
virtual void SetStringParameters(int widget) const
@@ -341,6 +341,8 @@ struct AISettingsWindow : public Window {
visible_settings.push_back(&(*it));
}
}
+
+ this->vscroll->SetCount((int)this->visible_settings.size());
}
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
@@ -530,21 +532,23 @@ struct AISettingsWindow : public Window {
virtual void OnQueryTextFinished(char *str)
{
if (StrEmpty(str)) return;
- ScriptConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin();
+ VisibleSettingsList::const_iterator it = this->visible_settings.begin();
for (int i = 0; i < this->clicked_row; i++) it++;
- if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (it->flags & SCRIPTCONFIG_INGAME) == 0) return;
+ const ScriptConfigItem config_item = **it;
+ if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (config_item.flags & SCRIPTCONFIG_INGAME) == 0) return;
int32 value = atoi(str);
- this->ai_config->SetSetting((*it).name, value);
+ this->ai_config->SetSetting(config_item.name, value);
this->SetDirty();
}
virtual void OnDropdownSelect(int widget, int index)
{
assert(this->clicked_dropdown);
- ScriptConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin();
+ VisibleSettingsList::const_iterator it = this->visible_settings.begin();
for (int i = 0; i < this->clicked_row; i++) it++;
- if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (it->flags & SCRIPTCONFIG_INGAME) == 0) return;
- this->ai_config->SetSetting((*it).name, index);
+ const ScriptConfigItem config_item = **it;
+ if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (config_item.flags & SCRIPTCONFIG_INGAME) == 0) return;
+ this->ai_config->SetSetting(config_item.name, index);
this->SetDirty();
}
@@ -766,6 +770,22 @@ struct AIConfigWindow : public Window {
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
size->height = 8 * this->line_height;
break;
+
+ case WID_AIC_CHANGE: {
+ SetDParam(0, STR_AI_CONFIG_CHANGE_GAMESCRIPT);
+ Dimension dim = GetStringBoundingBox(STR_AI_CONFIG_CHANGE);
+
+ SetDParam(0, STR_AI_CONFIG_CHANGE_NONE);
+ dim = maxdim(dim, GetStringBoundingBox(STR_AI_CONFIG_CHANGE));
+
+ SetDParam(0, STR_AI_CONFIG_CHANGE_AI);
+ dim = maxdim(dim, GetStringBoundingBox(STR_AI_CONFIG_CHANGE));
+
+ dim.width += padding.width;
+ dim.height += padding.height;
+ *size = maxdim(*size, dim);
+ break;
+ }
}
}
diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp
index ec7c896cee..2afd5d4199 100644
--- a/src/ai/ai_info.cpp
+++ b/src/ai/ai_info.cpp
@@ -28,7 +28,8 @@ static bool CheckAPIVersion(const char *api_version)
{
return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 ||
strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 ||
- strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0;
+ strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 ||
+ strcmp(api_version, "1.8") == 0;
}
#if defined(WIN32)
diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp
index 4eb2071479..5f16de3f91 100644
--- a/src/ai/ai_scanner.cpp
+++ b/src/ai/ai_scanner.cpp
@@ -114,7 +114,7 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo
*e = '\0';
e++;
versionParam = atoi(e);
- /* FALL THROUGH, like we were calling this function with a version. */
+ /* Continue, like we were calling this function with a version. */
}
if (force_exact_match) {
diff --git a/src/aircraft.h b/src/aircraft.h
index 0805ae8ec6..f0ca1c4abb 100644
--- a/src/aircraft.h
+++ b/src/aircraft.h
@@ -93,7 +93,7 @@ struct Aircraft FINAL : public SpecializedVehicle {
void UpdateDeltaXY(Direction direction);
ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_INC : EXPENSES_AIRCRAFT_RUN; }
bool IsPrimaryVehicle() const { return this->IsNormalAircraft(); }
- SpriteID GetImage(Direction direction, EngineImageType image_type) const;
+ void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const;
int GetDisplaySpeed() const { return this->cur_speed; }
int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed; }
int GetSpeedOldUnits() const { return this->vcache.cached_max_speed * 10 / 128; }
@@ -141,7 +141,7 @@ struct Aircraft FINAL : public SpecializedVehicle {
*/
#define FOR_ALL_AIRCRAFT(var) FOR_ALL_VEHICLES_OF_TYPE(Aircraft, var)
-SpriteID GetRotorImage(const Aircraft *v, EngineImageType image_type);
+void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result);
Station *GetTargetAirportIfValid(const Aircraft *v);
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index a9e020c84b..d038044962 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -153,64 +153,69 @@ static StationID FindNearestHangar(const Aircraft *v)
return index;
}
-SpriteID Aircraft::GetImage(Direction direction, EngineImageType image_type) const
+void Aircraft::GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const
{
uint8 spritenum = this->spritenum;
if (is_custom_sprite(spritenum)) {
- SpriteID sprite = GetCustomVehicleSprite(this, direction, image_type);
- if (sprite != 0) return sprite;
+ GetCustomVehicleSprite(this, direction, image_type, result);
+ if (result->IsValid()) return;
spritenum = this->GetEngine()->original_image_index;
}
assert(IsValidImageIndex(spritenum));
- return direction + _aircraft_sprite[spritenum];
+ result->Set(direction + _aircraft_sprite[spritenum]);
}
-SpriteID GetRotorImage(const Aircraft *v, EngineImageType image_type)
+void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result)
{
assert(v->subtype == AIR_HELICOPTER);
const Aircraft *w = v->Next()->Next();
if (is_custom_sprite(v->spritenum)) {
- SpriteID sprite = GetCustomRotorSprite(v, false, image_type);
- if (sprite != 0) return sprite;
+ GetCustomRotorSprite(v, false, image_type, result);
+ if (result->IsValid()) return;
}
/* Return standard rotor sprites if there are no custom sprites for this helicopter */
- return SPR_ROTOR_STOPPED + w->state;
+ result->Set(SPR_ROTOR_STOPPED + w->state);
}
-static SpriteID GetAircraftIcon(EngineID engine, EngineImageType image_type)
+static void GetAircraftIcon(EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result)
{
const Engine *e = Engine::Get(engine);
uint8 spritenum = e->u.air.image_index;
if (is_custom_sprite(spritenum)) {
- SpriteID sprite = GetCustomVehicleIcon(engine, DIR_W, image_type);
- if (sprite != 0) return sprite;
+ GetCustomVehicleIcon(engine, DIR_W, image_type, result);
+ if (result->IsValid()) return;
spritenum = e->original_image_index;
}
assert(IsValidImageIndex(spritenum));
- return DIR_W + _aircraft_sprite[spritenum];
+ result->Set(DIR_W + _aircraft_sprite[spritenum]);
}
void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
{
- SpriteID sprite = GetAircraftIcon(engine, image_type);
- const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
+ VehicleSpriteSeq seq;
+ GetAircraftIcon(engine, image_type, &seq);
+
+ Rect rect;
+ seq.GetBounds(&rect);
preferred_x = Clamp(preferred_x,
- left - UnScaleGUI(real_sprite->x_offs),
- right - UnScaleGUI(real_sprite->width) - UnScaleGUI(real_sprite->x_offs));
- DrawSprite(sprite, pal, preferred_x, y);
+ left - UnScaleGUI(rect.left),
+ right - UnScaleGUI(rect.right));
+
+ seq.Draw(preferred_x, y, pal, pal == PALETTE_CRASH);
if (!(AircraftVehInfo(engine)->subtype & AIR_CTOL)) {
- SpriteID rotor_sprite = GetCustomRotorIcon(engine, image_type);
- if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
- DrawSprite(rotor_sprite, PAL_NONE, preferred_x, y - ScaleGUITrad(5));
+ VehicleSpriteSeq rotor_seq;
+ GetCustomRotorIcon(engine, image_type, &rotor_seq);
+ if (!rotor_seq.IsValid()) rotor_seq.Set(SPR_ROTOR_STOPPED);
+ rotor_seq.Draw(preferred_x, y - ScaleGUITrad(5), PAL_NONE, false);
}
}
@@ -225,12 +230,16 @@ void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID en
*/
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
{
- const Sprite *spr = GetSprite(GetAircraftIcon(engine, image_type), ST_NORMAL);
+ VehicleSpriteSeq seq;
+ GetAircraftIcon(engine, image_type, &seq);
- width = UnScaleGUI(spr->width);
- height = UnScaleGUI(spr->height);
- xoffs = UnScaleGUI(spr->x_offs);
- yoffs = UnScaleGUI(spr->y_offs);
+ Rect rect;
+ seq.GetBounds(&rect);
+
+ width = UnScaleGUI(rect.right - rect.left + 1);
+ height = UnScaleGUI(rect.bottom - rect.top + 1);
+ xoffs = UnScaleGUI(rect.left);
+ yoffs = UnScaleGUI(rect.top);
}
/**
@@ -318,7 +327,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *
v->date_of_last_service = _date;
v->build_year = u->build_year = _cur_year;
- v->cur_image = u->cur_image = SPR_IMG_QUERY;
+ v->sprite_seq.Set(SPR_IMG_QUERY);
+ u->sprite_seq.Set(SPR_IMG_QUERY);
v->random_bits = VehicleRandomBits();
u->random_bits = VehicleRandomBits();
@@ -350,7 +360,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *
w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE;
w->spritenum = 0xFF;
w->subtype = AIR_ROTOR;
- w->cur_image = SPR_ROTOR_STOPPED;
+ w->sprite_seq.Set(SPR_ROTOR_STOPPED);
w->random_bits = VehicleRandomBits();
/* Use rotor's air.state to store the rotor animation frame */
w->state = HRS_ROTOR_STOPPED;
@@ -469,21 +479,21 @@ static void HelicopterTickHandler(Aircraft *v)
int tick = ++u->tick_counter;
int spd = u->cur_speed >> 4;
- SpriteID img;
+ VehicleSpriteSeq seq;
if (spd == 0) {
u->state = HRS_ROTOR_STOPPED;
- img = GetRotorImage(v, EIT_ON_MAP);
- if (u->cur_image == img) return;
+ GetRotorImage(v, EIT_ON_MAP, &seq);
+ if (u->sprite_seq == seq) return;
} else if (tick >= spd) {
u->tick_counter = 0;
u->state++;
if (u->state > HRS_ROTOR_MOVING_3) u->state = HRS_ROTOR_MOVING_1;
- img = GetRotorImage(v, EIT_ON_MAP);
+ GetRotorImage(v, EIT_ON_MAP, &seq);
} else {
return;
}
- u->cur_image = img;
+ u->sprite_seq = seq;
u->UpdatePositionAndViewport();
}
@@ -503,7 +513,9 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z)
v->UpdatePosition();
v->UpdateViewport(true, false);
- if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v, EIT_ON_MAP);
+ if (v->subtype == AIR_HELICOPTER) {
+ GetRotorImage(v, EIT_ON_MAP, &v->Next()->Next()->sprite_seq);
+ }
Aircraft *u = v->Next();
@@ -514,7 +526,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z)
safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE);
u->z_pos = GetSlopePixelZ(safe_x, safe_y);
- u->cur_image = v->cur_image;
+ u->sprite_seq.CopyWithoutPalette(v->sprite_seq); // the shadow is never coloured
u->UpdatePositionAndViewport();
@@ -1238,7 +1250,9 @@ void Aircraft::MarkDirty()
{
this->colourmap = PAL_NONE;
this->UpdateViewport(true, false);
- if (this->subtype == AIR_HELICOPTER) this->Next()->Next()->cur_image = GetRotorImage(this, EIT_ON_MAP);
+ if (this->subtype == AIR_HELICOPTER) {
+ GetRotorImage(this, EIT_ON_MAP, &this->Next()->Next()->sprite_seq);
+ }
}
diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp
index c3379d3951..6693b1f8ad 100644
--- a/src/aircraft_gui.cpp
+++ b/src/aircraft_gui.cpp
@@ -83,11 +83,14 @@ void DrawAircraftImage(const Vehicle *v, int left, int right, int y, VehicleID s
{
bool rtl = _current_text_dir == TD_RTL;
- SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type);
- const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
+ VehicleSpriteSeq seq;
+ v->GetImage(rtl ? DIR_E : DIR_W, image_type, &seq);
- int width = UnScaleGUI(real_sprite->width);
- int x_offs = UnScaleGUI(real_sprite->x_offs);
+ Rect rect;
+ seq.GetBounds(&rect);
+
+ int width = UnScaleGUI(rect.right - rect.left + 1);
+ int x_offs = UnScaleGUI(rect.left);
int x = rtl ? right - width - x_offs : left - x_offs;
bool helicopter = v->subtype == AIR_HELICOPTER;
@@ -95,17 +98,18 @@ void DrawAircraftImage(const Vehicle *v, int left, int right, int y, VehicleID s
int heli_offs = 0;
PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
- DrawSprite(sprite, pal, x, y + y_offs);
+ seq.Draw(x, y + y_offs, pal, (v->vehstatus & VS_CRASHED) != 0);
if (helicopter) {
const Aircraft *a = Aircraft::From(v);
- SpriteID rotor_sprite = GetCustomRotorSprite(a, true, image_type);
- if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
+ VehicleSpriteSeq rotor_seq;
+ GetCustomRotorSprite(a, true, image_type, &rotor_seq);
+ if (!rotor_seq.IsValid()) rotor_seq.Set(SPR_ROTOR_STOPPED);
heli_offs = ScaleGUITrad(5);
- DrawSprite(rotor_sprite, PAL_NONE, x, y + y_offs - heli_offs);
+ rotor_seq.Draw(x, y + y_offs - heli_offs, PAL_NONE, false);
}
if (v->index == selection) {
x += x_offs;
- y += UnScaleGUI(real_sprite->y_offs) + y_offs - heli_offs;
- DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(real_sprite->height) + heli_offs + 1, COLOUR_WHITE, FR_BORDERONLY);
+ y += UnScaleGUI(rect.top) + y_offs - heli_offs;
+ DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(rect.bottom - rect.top + 1) + heli_offs + 1, COLOUR_WHITE, FR_BORDERONLY);
}
}
diff --git a/src/airport.cpp b/src/airport.cpp
index a50c049c23..7985e017aa 100644
--- a/src/airport.cpp
+++ b/src/airport.cpp
@@ -27,7 +27,7 @@
* @param delta_z Height of the airport above the land.
*/
#define AIRPORT_GENERIC(name, terminals, num_helipads, flags, delta_z) \
- static AirportFTAClass _airportfta_ ## name(_airport_moving_data_ ## name, terminals, \
+ static const AirportFTAClass _airportfta_ ## name(_airport_moving_data_ ## name, terminals, \
num_helipads, _airport_entries_ ## name, flags, _airport_fta_ ## name, delta_z);
/**
diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp
index 193c5ac4a8..04c9f95a97 100644
--- a/src/articulated_vehicles.cpp
+++ b/src/articulated_vehicles.cpp
@@ -433,6 +433,7 @@ void AddArticulatedParts(Vehicle *first)
v->x_pos = first->x_pos;
v->y_pos = first->y_pos;
v->z_pos = first->z_pos;
+ v->date_of_last_service = first->date_of_last_service;
v->build_year = first->build_year;
v->vehstatus = first->vehstatus & ~VS_STOPPED;
@@ -440,7 +441,7 @@ void AddArticulatedParts(Vehicle *first)
v->max_age = 0;
v->engine_type = engine_type;
v->value = 0;
- v->cur_image = SPR_IMG_QUERY;
+ v->sprite_seq.Set(SPR_IMG_QUERY);
v->random_bits = VehicleRandomBits();
if (flip_image) v->spritenum++;
diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp
index 691042a1d5..1074d1dd78 100644
--- a/src/autoreplace_gui.cpp
+++ b/src/autoreplace_gui.cpp
@@ -87,7 +87,7 @@ class ReplaceVehicleWindow : public Window {
byte sort_criteria; ///< Criteria of sorting vehicles.
bool descending_sort_order; ///< Order of sorting vehicles.
bool show_hidden_engines; ///< Whether to show the hidden engines.
- RailType sel_railtype; ///< Type of rail tracks selected.
+ RailType sel_railtype; ///< Type of rail tracks selected. #INVALID_RAILTYPE to show all.
Scrollbar *vscroll[2];
/**
@@ -104,7 +104,7 @@ class ReplaceVehicleWindow : public Window {
/* Ensure that the wagon/engine selection fits the engine. */
if ((rvi->railveh_type == RAILVEH_WAGON) == show_engines) return false;
- if (draw_left && show_engines) {
+ if (draw_left && this->sel_railtype != INVALID_RAILTYPE) {
/* Ensure that the railtype is specific to the selected one */
if (rvi->railtype != this->sel_railtype) return false;
}
@@ -211,24 +211,7 @@ class ReplaceVehicleWindow : public Window {
public:
ReplaceVehicleWindow(WindowDesc *desc, VehicleType vehicletype, GroupID id_g) : Window(desc)
{
- if (vehicletype == VEH_TRAIN) {
- /* For rail vehicles find the most used vehicle type, which is usually
- * better than 'just' the first/previous vehicle type. */
- uint type_count[RAILTYPE_END];
- memset(type_count, 0, sizeof(type_count));
-
- const Engine *e;
- FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
- if (e->u.rail.railveh_type == RAILVEH_WAGON) continue;
- type_count[e->u.rail.railtype] += GetGroupNumEngines(_local_company, id_g, e->index);
- }
-
- this->sel_railtype = RAILTYPE_BEGIN;
- for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) {
- if (type_count[this->sel_railtype] < type_count[rt]) this->sel_railtype = rt;
- }
- }
-
+ this->sel_railtype = INVALID_RAILTYPE;
this->replace_engines = true; // start with locomotives (all other vehicles will not read this bool)
this->engines[0].ForceRebuild();
this->engines[1].ForceRebuild();
@@ -288,12 +271,9 @@ public:
break;
}
- case WID_RV_TRAIN_ENGINEWAGON_TOGGLE: {
- StringID str = this->GetWidget(widget)->widget_data;
- SetDParam(0, STR_REPLACE_ENGINES);
- Dimension d = GetStringBoundingBox(str);
- SetDParam(0, STR_REPLACE_WAGONS);
- d = maxdim(d, GetStringBoundingBox(str));
+ case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
+ Dimension d = GetStringBoundingBox(STR_REPLACE_ENGINES);
+ d = maxdim(d, GetStringBoundingBox(STR_REPLACE_WAGONS));
d.width += padding.width;
d.height += padding.height;
*size = maxdim(*size, d);
@@ -367,7 +347,7 @@ public:
break;
}
- case WID_RV_TRAIN_ENGINEWAGON_TOGGLE:
+ case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN:
SetDParam(0, this->replace_engines ? STR_REPLACE_ENGINES : STR_REPLACE_WAGONS);
break;
}
@@ -432,12 +412,8 @@ public:
this->SetWidgetDisabledState(WID_RV_STOP_REPLACE, this->sel_engine[0] == INVALID_ENGINE || !EngineHasReplacementForCompany(c, this->sel_engine[0], this->sel_group));
if (this->window_number == VEH_TRAIN) {
- /* sets the colour of that art thing */
- this->GetWidget(WID_RV_TRAIN_FLUFF_LEFT)->colour = _company_colours[_local_company];
- this->GetWidget(WID_RV_TRAIN_FLUFF_RIGHT)->colour = _company_colours[_local_company];
-
/* Show the selected railtype in the pulldown menu */
- this->GetWidget(WID_RV_TRAIN_RAILTYPE_DROPDOWN)->widget_data = GetRailTypeInfo(sel_railtype)->strings.replace_text;
+ this->GetWidget(WID_RV_TRAIN_RAILTYPE_DROPDOWN)->widget_data = sel_railtype == INVALID_RAILTYPE ? STR_REPLACE_ALL_RAILTYPE : GetRailTypeInfo(sel_railtype)->strings.replace_text;
}
this->DrawWidgets();
@@ -483,15 +459,16 @@ public:
DisplayVehicleSortDropDown(this, static_cast(this->window_number), this->sort_criteria, WID_RV_SORT_DROPDOWN);
break;
- case WID_RV_TRAIN_ENGINEWAGON_TOGGLE:
- this->replace_engines = !(this->replace_engines);
- this->engines[0].ForceRebuild();
- this->reset_sel_engine = true;
- this->SetDirty();
+ case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
+ DropDownList *list = new DropDownList();
+ *list->Append() = new DropDownListStringItem(STR_REPLACE_ENGINES, 1, false);
+ *list->Append() = new DropDownListStringItem(STR_REPLACE_WAGONS, 0, false);
+ ShowDropDownList(this, list, this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN);
break;
+ }
case WID_RV_TRAIN_RAILTYPE_DROPDOWN: // Railtype selection dropdown menu
- ShowDropDownList(this, GetRailTypeDropDownList(true), sel_railtype, WID_RV_TRAIN_RAILTYPE_DROPDOWN);
+ ShowDropDownList(this, GetRailTypeDropDownList(true, true), sel_railtype, WID_RV_TRAIN_RAILTYPE_DROPDOWN);
break;
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: // toggle renew_keep_length
@@ -566,6 +543,14 @@ public:
break;
}
+ case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
+ this->replace_engines = index != 0;
+ this->engines[0].ForceRebuild();
+ this->reset_sel_engine = true;
+ this->SetDirty();
+ break;
+ }
+
case WID_RV_START_REPLACE:
this->ReplaceClick_StartReplace(index != 0);
break;
@@ -611,7 +596,13 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = {
EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
- NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(),
+ NWidget(NWID_VERTICAL),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP),
+ EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(),
+ EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 1),
@@ -631,20 +622,16 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = {
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
+ NWidget(NWID_VERTICAL),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_WAGONREMOVE_TOGGLE), SetMinimalSize(138, 12), SetDataTip(STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP), SetFill(1, 0), SetResize(1, 0),
+ EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(NWID_PUSHBUTTON_DROPDOWN, COLOUR_GREY, WID_RV_START_REPLACE), SetMinimalSize(139, 12), SetDataTip(STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON),
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_INFO_TAB), SetMinimalSize(167, 12), SetDataTip(0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB), SetResize(1, 0),
EndContainer(),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_STOP_REPLACE), SetMinimalSize(150, 12), SetDataTip(STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_TOGGLE), SetMinimalSize(139, 12), SetDataTip(STR_REPLACE_ENGINE_WAGON_SELECT, STR_REPLACE_ENGINE_WAGON_SELECT_HELP),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_TRAIN_FLUFF_LEFT), SetMinimalSize(15, 12), EndContainer(),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetResize(1, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_TRAIN_FLUFF_RIGHT), SetMinimalSize(16, 12), EndContainer(),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_WAGONREMOVE_TOGGLE), SetMinimalSize(138, 12), SetDataTip(STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(),
};
diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp
index a3083e40b3..532ad23cc7 100644
--- a/src/blitter/32bpp_anim.cpp
+++ b/src/blitter/32bpp_anim.cpp
@@ -20,6 +20,11 @@
/** Instantiation of the 32bpp with animation blitter factory. */
static FBlitter_32bppAnim iFBlitter_32bppAnim;
+Blitter_32bppAnim::~Blitter_32bppAnim()
+{
+ free(this->anim_buf);
+}
+
template
inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom)
{
@@ -34,13 +39,14 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
}
Colour *dst = (Colour *)bp->dst + bp->top * bp->pitch + bp->left;
- uint16 *anim = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_width + bp->left;
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'bp->dst' into an 'anim_buf' offset below.
+ uint16 *anim = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_pitch + bp->left;
const byte *remap = bp->remap; // store so we don't have to access it via bp everytime
for (int y = 0; y < bp->height; y++) {
Colour *dst_ln = dst + bp->pitch;
- uint16 *anim_ln = anim + this->anim_buf_width;
+ uint16 *anim_ln = anim + this->anim_buf_pitch;
const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px);
src_px++;
@@ -274,9 +280,8 @@ void Blitter_32bppAnim::DrawColourMappingRect(void *dst, int width, int height,
}
Colour *udst = (Colour *)dst;
- uint16 *anim;
-
- anim = this->anim_buf + ((uint32 *)dst - (uint32 *)_screen.dst_ptr);
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'dst' into an 'anim_buf' offset below.
+ uint16 *anim = this->anim_buf + ((uint32 *)dst - (uint32 *)_screen.dst_ptr);
if (pal == PALETTE_TO_TRANSPARENT) {
do {
@@ -287,7 +292,7 @@ void Blitter_32bppAnim::DrawColourMappingRect(void *dst, int width, int height,
anim++;
}
udst = udst - width + _screen.pitch;
- anim = anim - width + this->anim_buf_width;
+ anim = anim - width + this->anim_buf_pitch;
} while (--height);
return;
}
@@ -300,7 +305,7 @@ void Blitter_32bppAnim::DrawColourMappingRect(void *dst, int width, int height,
anim++;
}
udst = udst - width + _screen.pitch;
- anim = anim - width + this->anim_buf_width;
+ anim = anim - width + this->anim_buf_pitch;
} while (--height);
return;
}
@@ -314,7 +319,8 @@ void Blitter_32bppAnim::SetPixel(void *video, int x, int y, uint8 colour)
/* Set the colour in the anim-buffer too, if we are rendering to the screen */
if (_screen_disable_anim) return;
- this->anim_buf[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * this->anim_buf_width] = colour | (DEFAULT_BRIGHTNESS << 8);
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'video' into an 'anim_buf' offset below.
+ this->anim_buf[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * this->anim_buf_pitch] = colour | (DEFAULT_BRIGHTNESS << 8);
}
void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 colour)
@@ -326,9 +332,8 @@ void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 colou
}
Colour colour32 = LookupColourInPalette(colour);
- uint16 *anim_line;
-
- anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'video' into an 'anim_buf' offset below.
+ uint16 *anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
do {
Colour *dst = (Colour *)video;
@@ -342,7 +347,7 @@ void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 colou
anim++;
}
video = (uint32 *)video + _screen.pitch;
- anim_line += this->anim_buf_width;
+ anim_line += this->anim_buf_pitch;
} while (--height);
}
@@ -352,6 +357,7 @@ void Blitter_32bppAnim::CopyFromBuffer(void *video, const void *src, int width,
assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
Colour *dst = (Colour *)video;
const uint32 *usrc = (const uint32 *)src;
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'video' into an 'anim_buf' offset below.
uint16 *anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
for (; height > 0; height--) {
@@ -365,7 +371,7 @@ void Blitter_32bppAnim::CopyFromBuffer(void *video, const void *src, int width,
/* Copy back the anim-buffer */
memcpy(anim_line, usrc, width * sizeof(uint16));
usrc = (const uint32 *)((const uint16 *)usrc + width);
- anim_line += this->anim_buf_width;
+ anim_line += this->anim_buf_pitch;
/* Okay, it is *very* likely that the image we stored is using
* the wrong palette animated colours. There are two things we
@@ -392,11 +398,11 @@ void Blitter_32bppAnim::CopyToBuffer(const void *video, void *dst, int width, in
assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
uint32 *udst = (uint32 *)dst;
const uint32 *src = (const uint32 *)video;
- const uint16 *anim_line;
if (this->anim_buf == NULL) return;
- anim_line = ((const uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'video' into an 'anim_buf' offset below.
+ const uint16 *anim_line = ((const uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
for (; height > 0; height--) {
memcpy(udst, src, width * sizeof(uint32));
@@ -405,7 +411,7 @@ void Blitter_32bppAnim::CopyToBuffer(const void *video, void *dst, int width, in
/* Copy the anim-buffer */
memcpy(udst, anim_line, width * sizeof(uint16));
udst = (uint32 *)((uint16 *)udst + width);
- anim_line += this->anim_buf_width;
+ anim_line += this->anim_buf_pitch;
}
}
@@ -417,8 +423,8 @@ void Blitter_32bppAnim::ScrollBuffer(void *video, int &left, int &top, int &widt
/* We need to scroll the anim-buffer too */
if (scroll_y > 0) {
- dst = this->anim_buf + left + (top + height - 1) * this->anim_buf_width;
- src = dst - scroll_y * this->anim_buf_width;
+ dst = this->anim_buf + left + (top + height - 1) * this->anim_buf_pitch;
+ src = dst - scroll_y * this->anim_buf_pitch;
/* Adjust left & width */
if (scroll_x >= 0) {
@@ -431,13 +437,13 @@ void Blitter_32bppAnim::ScrollBuffer(void *video, int &left, int &top, int &widt
uint th = height - scroll_y;
for (; th > 0; th--) {
memcpy(dst, src, tw * sizeof(uint16));
- src -= this->anim_buf_width;
- dst -= this->anim_buf_width;
+ src -= this->anim_buf_pitch;
+ dst -= this->anim_buf_pitch;
}
} else {
/* Calculate pointers */
- dst = this->anim_buf + left + top * this->anim_buf_width;
- src = dst - scroll_y * this->anim_buf_width;
+ dst = this->anim_buf + left + top * this->anim_buf_pitch;
+ src = dst - scroll_y * this->anim_buf_pitch;
/* Adjust left & width */
if (scroll_x >= 0) {
@@ -452,8 +458,8 @@ void Blitter_32bppAnim::ScrollBuffer(void *video, int &left, int &top, int &widt
uint th = height + scroll_y;
for (; th > 0; th--) {
memmove(dst, src, tw * sizeof(uint16));
- src += this->anim_buf_width;
- dst += this->anim_buf_width;
+ src += this->anim_buf_pitch;
+ dst += this->anim_buf_pitch;
}
}
@@ -490,6 +496,7 @@ void Blitter_32bppAnim::PaletteAnimate(const Palette &palette)
anim++;
}
dst += _screen.pitch - this->anim_buf_width;
+ anim += this->anim_buf_pitch - this->anim_buf_width;
}
/* Make sure the backend redraws the whole screen */
@@ -503,11 +510,13 @@ Blitter::PaletteAnimation Blitter_32bppAnim::UsePaletteAnimation()
void Blitter_32bppAnim::PostResize()
{
- if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) {
+ if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height ||
+ _screen.pitch != this->anim_buf_pitch) {
/* The size of the screen changed; we can assume we can wipe all data from our buffer */
free(this->anim_buf);
- this->anim_buf = CallocT(_screen.width * _screen.height);
this->anim_buf_width = _screen.width;
this->anim_buf_height = _screen.height;
+ this->anim_buf_pitch = _screen.pitch;
+ this->anim_buf = CallocT(this->anim_buf_height * this->anim_buf_pitch);
}
}
diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp
index e707c4437d..1b35c17663 100644
--- a/src/blitter/32bpp_anim.hpp
+++ b/src/blitter/32bpp_anim.hpp
@@ -20,14 +20,20 @@ protected:
uint16 *anim_buf; ///< In this buffer we keep track of the 8bpp indexes so we can do palette animation
int anim_buf_width; ///< The width of the animation buffer.
int anim_buf_height; ///< The height of the animation buffer.
+ int anim_buf_pitch; ///< The pitch of the animation buffer.
Palette palette; ///< The current palette.
public:
Blitter_32bppAnim() :
anim_buf(NULL),
anim_buf_width(0),
- anim_buf_height(0)
- {}
+ anim_buf_height(0),
+ anim_buf_pitch(0)
+ {
+ this->palette = _cur_palette;
+ }
+
+ ~Blitter_32bppAnim();
/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
/* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal);
diff --git a/src/blitter/32bpp_anim_sse4.cpp b/src/blitter/32bpp_anim_sse4.cpp
index 7d4b66fca6..987cb0c6ac 100644
--- a/src/blitter/32bpp_anim_sse4.cpp
+++ b/src/blitter/32bpp_anim_sse4.cpp
@@ -35,7 +35,8 @@ inline void Blitter_32bppSSE4_Anim::Draw(const Blitter::BlitterParams *bp, ZoomL
{
const byte * const remap = bp->remap;
Colour *dst_line = (Colour *) bp->dst + bp->top * bp->pitch + bp->left;
- uint16 *anim_line = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_width + bp->left;
+ assert(_screen.pitch == this->anim_buf_pitch); // precondition for translating 'bp->dst' into an 'anim_buf' offset below.
+ uint16 *anim_line = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_pitch + bp->left;
int effective_width = bp->width;
/* Find where to start reading in the source sprite. */
@@ -353,7 +354,7 @@ next_line:
if (mode != BM_TRANSPARENT) src_mv_line += si->sprite_width;
src_rgba_line = (const Colour*) ((const byte*) src_rgba_line + si->sprite_line_size);
dst_line += bp->pitch;
- anim_line += this->anim_buf_width;
+ anim_line += this->anim_buf_pitch;
}
}
IGNORE_UNINITIALIZED_WARNING_STOP
diff --git a/src/blitter/8bpp_simple.cpp b/src/blitter/8bpp_simple.cpp
index ed5dd3f7ae..2131a04682 100644
--- a/src/blitter/8bpp_simple.cpp
+++ b/src/blitter/8bpp_simple.cpp
@@ -48,7 +48,7 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom
break;
case BM_BLACK_REMAP:
- colour = 0;
+ if (*src != 0) *dst = 0;
break;
default:
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index bd4bf3b59b..655a18d7f8 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -719,7 +719,15 @@ static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_numb
return y;
}
-/* Draw aircraft specific details */
+/**
+ * Draw aircraft specific details in the buy window.
+ * @param left Left edge of the window to draw in.
+ * @param right Right edge of the window to draw in.
+ * @param y Top of the area to draw in.
+ * @param engine_number Engine to display.
+ * @param refittable If set, the aircraft can be refitted.
+ * @return Bottom of the used area.
+ */
static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_number, bool refittable)
{
const Engine *e = Engine::Get(engine_number);
@@ -755,6 +763,12 @@ static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_
DrawString(left, right, y, STR_PURCHASE_INFO_RUNNINGCOST);
y += FONT_HEIGHT_NORMAL;
+ /* Aircraft type */
+ SetDParam(0, e->GetAircraftTypeText());
+ DrawString(left, right, y, STR_PURCHASE_INFO_AIRCRAFT_TYPE);
+ y += FONT_HEIGHT_NORMAL;
+
+ /* Aircraft range, if available. */
uint16 range = e->GetRange();
if (range != 0) {
SetDParam(0, range);
diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp
index 2e9589aee2..f9eb88df54 100644
--- a/src/clear_cmd.cpp
+++ b/src/clear_cmd.cpp
@@ -56,7 +56,7 @@ void DrawHillyLandTile(const TileInfo *ti)
if (ti->tileh != SLOPE_FLAT) {
DrawGroundSprite(SPR_FLAT_ROUGH_LAND + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
} else {
- DrawGroundSprite(_landscape_clear_sprites_rough[GB(ti->x ^ ti->y, 4, 3)], PAL_NONE);
+ DrawGroundSprite(_landscape_clear_sprites_rough[GB(TileHash(ti->x, ti->y), 0, 3)], PAL_NONE);
}
}
diff --git a/src/command_func.h b/src/command_func.h
index c4cc51e3da..3369475675 100644
--- a/src/command_func.h
+++ b/src/command_func.h
@@ -81,7 +81,7 @@ CommandCallback CcBuildBridge;
/* dock_gui.cpp */
CommandCallback CcBuildDocks;
-CommandCallback CcBuildCanal;
+CommandCallback CcPlaySound_SPLAT_WATER;
/* depot_gui.cpp */
CommandCallback CcCloneVehicle;
@@ -97,19 +97,19 @@ CommandCallback CcAddVehicleNewGroup;
CommandCallback CcBuildIndustry;
/* main_gui.cpp */
-CommandCallback CcPlaySound10;
+CommandCallback CcPlaySound_EXPLOSION;
CommandCallback CcPlaceSign;
CommandCallback CcTerraform;
CommandCallback CcGiveMoney;
/* rail_gui.cpp */
-CommandCallback CcPlaySound1E;
+CommandCallback CcPlaySound_SPLAT_RAIL;
CommandCallback CcRailDepot;
CommandCallback CcStation;
CommandCallback CcBuildRailTunnel;
/* road_gui.cpp */
-CommandCallback CcPlaySound1D;
+CommandCallback CcPlaySound_SPLAT_OTHER;
CommandCallback CcBuildRoadTunnel;
CommandCallback CcRoadDepot;
CommandCallback CcRoadStop;
diff --git a/src/company_base.h b/src/company_base.h
index 0017761216..4d76e6251a 100644
--- a/src/company_base.h
+++ b/src/company_base.h
@@ -52,10 +52,10 @@ extern CompanyPool _company_pool;
/** Statically loadable part of Company pool item */
struct CompanyProperties {
uint32 name_2; ///< Parameter of #name_1.
- uint16 name_1; ///< Name of the company if the user did not change it.
+ StringID name_1; ///< Name of the company if the user did not change it.
char *name; ///< Name of the company if the user changed it.
- uint16 president_name_1; ///< Name of the president if the user did not change it.
+ StringID president_name_1; ///< Name of the president if the user did not change it.
uint32 president_name_2; ///< Parameter of #president_name_1
char *president_name; ///< Name of the president if the user changed it.
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index 2fa3cdab37..c8a71fedef 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -162,7 +162,7 @@ static bool IsValidCompanyManagerFace(CompanyManagerFace cmf)
for (CompanyManagerFaceVariable cmfv = CMFV_CHEEKS; cmfv < CMFV_END; cmfv++) {
switch (cmfv) {
case CMFV_MOUSTACHE: if (!has_moustache) continue; break;
- case CMFV_LIPS: // FALL THROUGH
+ case CMFV_LIPS:
case CMFV_NOSE: if (has_moustache) continue; break;
case CMFV_TIE_EARRING: if (!has_tie_earring) continue; break;
case CMFV_GLASSES: if (!has_glasses) continue; break;
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index eb99cb9359..7bda7c192f 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -322,7 +322,8 @@ struct CompanyFinancesWindow : Window {
case WID_CF_EXPS_PRICE2:
case WID_CF_EXPS_PRICE3:
size->height = _expenses_list_types[type].GetHeight();
- /* FALL THROUGH */
+ FALLTHROUGH;
+
case WID_CF_BALANCE_VALUE:
case WID_CF_LOAN_VALUE:
case WID_CF_TOTAL_VALUE:
@@ -640,7 +641,8 @@ public:
size->width = 0;
break;
}
- /* FALL THROUGH */
+ FALLTHROUGH;
+
case WID_SCL_PRI_COL_DROPDOWN: {
int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10;
for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) {
@@ -896,7 +898,7 @@ void DrawCompanyManagerFace(CompanyManagerFace cmf, int colour, int x, int y)
for (CompanyManagerFaceVariable cmfv = CMFV_CHEEKS; cmfv < CMFV_END; cmfv++) {
switch (cmfv) {
case CMFV_MOUSTACHE: if (!has_moustache) continue; break;
- case CMFV_LIPS: // FALL THROUGH
+ case CMFV_LIPS:
case CMFV_NOSE: if (has_moustache) continue; break;
case CMFV_TIE_EARRING: if (!has_tie_earring) continue; break;
case CMFV_GLASSES: if (!has_glasses) continue; break;
@@ -1369,7 +1371,7 @@ public:
/* OK button */
case WID_SCMF_ACCEPT:
DoCommandP(0, 0, this->face, CMD_SET_COMPANY_MANAGER_FACE);
- /* FALL THROUGH */
+ FALLTHROUGH;
/* Cancel button */
case WID_SCMF_CANCEL:
@@ -2385,7 +2387,7 @@ struct CompanyWindow : Window
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
- if (DoCommandP(tile, OBJECT_HQ, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS))) {
+ if (DoCommandP(tile, OBJECT_HQ, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS)) && !_shift_pressed) {
ResetObjectToPlace();
this->RaiseButtons();
}
diff --git a/src/console.cpp b/src/console.cpp
index 511019281a..6e9b46f6b0 100644
--- a/src/console.cpp
+++ b/src/console.cpp
@@ -434,7 +434,10 @@ void IConsoleCmdExec(const char *cmdstr)
* enclosed in "" are taken as one token. We can only go as far as the amount
* of characters in our stream or the max amount of tokens we can handle */
for (cmdptr = cmdstr, t_index = 0, tstream_i = 0; *cmdptr != '\0'; cmdptr++) {
- if (t_index >= lengthof(tokens) || tstream_i >= lengthof(tokenstream)) break;
+ if (tstream_i >= lengthof(tokenstream)) {
+ IConsoleError("command line too long");
+ return;
+ }
switch (*cmdptr) {
case ' ': // Token separator
@@ -452,6 +455,10 @@ void IConsoleCmdExec(const char *cmdstr)
case '"': // Tokens enclosed in "" are one token
longtoken = !longtoken;
if (!foundtoken) {
+ if (t_index >= lengthof(tokens)) {
+ IConsoleError("command line too long");
+ return;
+ }
tokens[t_index++] = &tokenstream[tstream_i];
foundtoken = true;
}
@@ -461,11 +468,15 @@ void IConsoleCmdExec(const char *cmdstr)
tokenstream[tstream_i++] = *++cmdptr;
break;
}
- /* FALL THROUGH */
+ FALLTHROUGH;
default: // Normal character
tokenstream[tstream_i++] = *cmdptr;
if (!foundtoken) {
+ if (t_index >= lengthof(tokens)) {
+ IConsoleError("command line too long");
+ return;
+ }
tokens[t_index++] = &tokenstream[tstream_i - 1];
foundtoken = true;
}
@@ -473,7 +484,7 @@ void IConsoleCmdExec(const char *cmdstr)
}
}
- for (uint i = 0; tokens[i] != NULL; i++) {
+ for (uint i = 0; i < lengthof(tokens) && tokens[i] != NULL; i++) {
DEBUG(console, 8, "Token %d is: '%s'", i, tokens[i]);
}
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index 8d9e04113d..3b65224de8 100644
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -45,6 +45,38 @@
/* scriptfile handling */
static bool _script_running; ///< Script is running (used to abort execution when #ConReturn is encountered).
+/** File list storage for the console, for caching the last 'ls' command. */
+class ConsoleFileList : public FileList {
+public:
+ ConsoleFileList() : FileList()
+ {
+ this->file_list_valid = false;
+ }
+
+ /** Declare the file storage cache as being invalid, also clears all stored files. */
+ void InvalidateFileList()
+ {
+ this->Clear();
+ this->file_list_valid = false;
+ }
+
+ /**
+ * (Re-)validate the file storage cache. Only makes a change if the storage was invalid, or if \a force_reload.
+ * @param Always reload the file storage cache.
+ */
+ void ValidateFileList(bool force_reload = false)
+ {
+ if (force_reload || !this->file_list_valid) {
+ this->BuildFileList(FT_SAVEGAME, SLO_LOAD);
+ this->file_list_valid = true;
+ }
+ }
+
+ bool file_list_valid; ///< If set, the file list is valid.
+};
+
+static ConsoleFileList _console_file_list; ///< File storage cache for the console.
+
/* console command defines */
#define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[])
#define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo)
@@ -286,7 +318,7 @@ DEF_CONSOLE_CMD(ConSave)
char *filename = str_fmt("%s.sav", argv[1]);
IConsolePrint(CC_DEFAULT, "Saving map...");
- if (SaveOrLoad(filename, SL_SAVE, SAVE_DIR) != SL_OK) {
+ if (SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, SAVE_DIR) != SL_OK) {
IConsolePrint(CC_ERROR, "Saving map failed");
} else {
IConsolePrintF(CC_DEFAULT, "Map successfully saved to %s", filename);
@@ -315,42 +347,6 @@ DEF_CONSOLE_CMD(ConSaveConfig)
return true;
}
-/**
- * Get savegame file informations.
- * @param file The savegame filename to return information about. Can be the actual name
- * or a numbered entry into the filename list.
- * @return FiosItem The information on the file.
- */
-static const FiosItem *GetFiosItem(const char *file)
-{
- _saveload_mode = SLD_LOAD_GAME;
- BuildFileList();
-
- for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) {
- if (strcmp(file, item->name) == 0) return item;
- if (strcmp(file, item->title) == 0) return item;
- }
-
- /* If no name matches, try to parse it as number */
- char *endptr;
- int i = strtol(file, &endptr, 10);
- if (file == endptr || *endptr != '\0') i = -1;
-
- if (IsInsideMM(i, 0, _fios_items.Length())) return _fios_items.Get(i);
-
- /* As a last effort assume it is an OpenTTD savegame and
- * that the ".sav" part was not given. */
- char long_file[MAX_PATH];
- seprintf(long_file, lastof(long_file), "%s.sav", file);
- for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) {
- if (strcmp(long_file, item->name) == 0) return item;
- if (strcmp(long_file, item->title) == 0) return item;
- }
-
- return NULL;
-}
-
-
DEF_CONSOLE_CMD(ConLoad)
{
if (argc == 0) {
@@ -361,24 +357,21 @@ DEF_CONSOLE_CMD(ConLoad)
if (argc != 2) return false;
const char *file = argv[1];
- const FiosItem *item = GetFiosItem(file);
+ _console_file_list.ValidateFileList();
+ const FiosItem *item = _console_file_list.FindItem(file);
if (item != NULL) {
- switch (item->type) {
- case FIOS_TYPE_FILE: case FIOS_TYPE_OLDFILE: {
- _switch_mode = SM_LOAD_GAME;
- SetFiosType(item->type);
-
- strecpy(_file_to_saveload.name, FiosBrowseTo(item), lastof(_file_to_saveload.name));
- strecpy(_file_to_saveload.title, item->title, lastof(_file_to_saveload.title));
- break;
- }
- default: IConsolePrintF(CC_ERROR, "%s: Not a savegame.", file);
+ if (GetAbstractFileType(item->type) == FT_SAVEGAME) {
+ _switch_mode = SM_LOAD_GAME;
+ _file_to_saveload.SetMode(item->type);
+ _file_to_saveload.SetName(FiosBrowseTo(item));
+ _file_to_saveload.SetTitle(item->title);
+ } else {
+ IConsolePrintF(CC_ERROR, "%s: Not a savegame.", file);
}
} else {
IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file);
}
- FiosFreeSavegameList();
return true;
}
@@ -393,7 +386,8 @@ DEF_CONSOLE_CMD(ConRemove)
if (argc != 2) return false;
const char *file = argv[1];
- const FiosItem *item = GetFiosItem(file);
+ _console_file_list.ValidateFileList();
+ const FiosItem *item = _console_file_list.FindItem(file);
if (item != NULL) {
if (!FiosDelete(item->name)) {
IConsolePrintF(CC_ERROR, "%s: Failed to delete file", file);
@@ -402,7 +396,7 @@ DEF_CONSOLE_CMD(ConRemove)
IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file);
}
- FiosFreeSavegameList();
+ _console_file_list.InvalidateFileList();
return true;
}
@@ -415,13 +409,11 @@ DEF_CONSOLE_CMD(ConListFiles)
return true;
}
- BuildFileList();
-
- for (uint i = 0; i < _fios_items.Length(); i++) {
- IConsolePrintF(CC_DEFAULT, "%d) %s", i, _fios_items[i].title);
+ _console_file_list.ValidateFileList(true);
+ for (uint i = 0; i < _console_file_list.Length(); i++) {
+ IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list[i].title);
}
- FiosFreeSavegameList();
return true;
}
@@ -436,7 +428,8 @@ DEF_CONSOLE_CMD(ConChangeDirectory)
if (argc != 2) return false;
const char *file = argv[1];
- const FiosItem *item = GetFiosItem(file);
+ _console_file_list.ValidateFileList(true);
+ const FiosItem *item = _console_file_list.FindItem(file);
if (item != NULL) {
switch (item->type) {
case FIOS_TYPE_DIR: case FIOS_TYPE_DRIVE: case FIOS_TYPE_PARENT:
@@ -448,7 +441,7 @@ DEF_CONSOLE_CMD(ConChangeDirectory)
IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file);
}
- FiosFreeSavegameList();
+ _console_file_list.InvalidateFileList();
return true;
}
@@ -462,8 +455,8 @@ DEF_CONSOLE_CMD(ConPrintWorkingDirectory)
}
/* XXX - Workaround for broken file handling */
- FiosGetSavegameList(SLD_LOAD_GAME);
- FiosFreeSavegameList();
+ _console_file_list.ValidateFileList(true);
+ _console_file_list.InvalidateFileList();
FiosGetDescText(&path, NULL);
IConsolePrint(CC_DEFAULT, path);
@@ -560,29 +553,36 @@ DEF_CONSOLE_CMD(ConBan)
DEF_CONSOLE_CMD(ConUnBan)
{
-
if (argc == 0) {
- IConsoleHelp("Unban a client from a network game. Usage: 'unban '");
+ IConsoleHelp("Unban a client from a network game. Usage: 'unban '");
IConsoleHelp("For a list of banned IP's, see the command 'banlist'");
return true;
}
if (argc != 2) return false;
- uint index = (strchr(argv[1], '.') == NULL) ? atoi(argv[1]) : 0;
- index--;
- uint i = 0;
-
- for (char **iter = _network_ban_list.Begin(); iter != _network_ban_list.End(); iter++, i++) {
- if (strcmp(_network_ban_list[i], argv[1]) == 0 || index == i) {
- free(_network_ban_list[i]);
- _network_ban_list.Erase(iter);
- IConsolePrint(CC_DEFAULT, "IP unbanned.");
- return true;
- }
+ /* Try by IP. */
+ uint index;
+ for (index = 0; index < _network_ban_list.Length(); index++) {
+ if (strcmp(_network_ban_list[index], argv[1]) == 0) break;
+ }
+
+ /* Try by index. */
+ if (index >= _network_ban_list.Length()) {
+ index = atoi(argv[1]) - 1U; // let it wrap
+ }
+
+ if (index < _network_ban_list.Length()) {
+ char msg[64];
+ seprintf(msg, lastof(msg), "Unbanned %s", _network_ban_list[index]);
+ IConsolePrint(CC_DEFAULT, msg);
+ free(_network_ban_list[index]);
+ _network_ban_list.Erase(_network_ban_list.Get(index));
+ } else {
+ IConsolePrint(CC_DEFAULT, "Invalid list index or IP not in ban-list.");
+ IConsolePrint(CC_DEFAULT, "For a list of banned IP's, see the command 'banlist'");
}
- IConsolePrint(CC_DEFAULT, "IP not in ban-list.");
return true;
}
diff --git a/src/core/container_func.hpp b/src/core/container_func.hpp
new file mode 100644
index 0000000000..276c1f7f54
--- /dev/null
+++ b/src/core/container_func.hpp
@@ -0,0 +1,42 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+/** @file container_func.hpp Functions related to use of containers. */
+
+#ifndef CONTAINER_FUNC_HPP
+#define CONTAINER_FUNC_HPP
+
+#include
+
+template unsigned int container_unordered_remove_if (C &container, UP predicate) {
+ unsigned int removecount = 0;
+ for (auto it = container.begin(); it != container.end();) {
+ if (predicate(*it)) {
+ removecount++;
+ if (std::next(it) != container.end()) {
+ *it = std::move(container.back());
+ container.pop_back();
+ } else {
+ container.pop_back();
+ break;
+ }
+ } else {
+ ++it;
+ }
+ }
+ return removecount;
+}
+
+template unsigned int container_unordered_remove(C &container, const V &value) {
+ return container_unordered_remove_if (container, [&](const typename C::value_type &v) {
+ return v == value;
+ });
+}
+
+#endif /* CONTAINER_FUNC_HPP */
diff --git a/src/core/dyn_arena_alloc.hpp b/src/core/dyn_arena_alloc.hpp
new file mode 100644
index 0000000000..2a074d6aa1
--- /dev/null
+++ b/src/core/dyn_arena_alloc.hpp
@@ -0,0 +1,102 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+/** @file dyn_arena_alloc.hpp Dynamic chunk-size arena allocator. */
+
+#ifndef DYN_ARENA_ALLOC_HPP
+#define DYN_ARENA_ALLOC_HPP
+
+#include
+
+/**
+ * Custom arena allocator for uniform-size allocations of a variable size.
+ * The allocation and chunk sizes may only be changed when the arena is empty.
+ */
+class DynUniformArenaAllocator {
+ std::vector used_blocks;
+
+ void *current_block = nullptr;
+ void *last_freed = nullptr;
+ size_t next_position = 0;
+
+ size_t item_size = 0;
+ size_t items_per_chunk = 0;
+
+ void NewBlock()
+ {
+ current_block = malloc(item_size * items_per_chunk);
+ assert(current_block != nullptr);
+ next_position = 0;
+ used_blocks.push_back(current_block);
+ }
+
+ public:
+ DynUniformArenaAllocator() = default;
+ DynUniformArenaAllocator(const DynUniformArenaAllocator &other) = delete;
+ DynUniformArenaAllocator& operator=(const DynUniformArenaAllocator &other) = delete;
+
+ ~DynUniformArenaAllocator()
+ {
+ EmptyArena();
+ }
+
+ void EmptyArena()
+ {
+ current_block = nullptr;
+ last_freed = nullptr;
+ next_position = 0;
+ for (void *block : used_blocks) {
+ free(block);
+ }
+ used_blocks.clear();
+ }
+
+ void ResetArena()
+ {
+ EmptyArena();
+ item_size = 0;
+ items_per_chunk = 0;
+ }
+
+ void *Allocate() {
+ assert(item_size != 0);
+ if (last_freed) {
+ void *ptr = last_freed;
+ last_freed = *reinterpret_cast(ptr);
+ return ptr;
+ } else {
+ if (current_block == nullptr || next_position == items_per_chunk) {
+ NewBlock();
+ }
+ void *out = reinterpret_cast(current_block) + (item_size * next_position);
+ next_position++;
+ return out;
+ }
+ }
+
+ void Free(void *ptr) {
+ if (!ptr) return;
+ assert(current_block != nullptr);
+
+ *reinterpret_cast(ptr) = last_freed;
+ last_freed = ptr;
+ }
+
+ void SetParameters(size_t item_size, size_t items_per_chunk)
+ {
+ if (item_size < sizeof(void *)) item_size = sizeof(void *);
+ if (this->item_size == item_size && this->items_per_chunk == items_per_chunk) return;
+
+ assert(current_block == nullptr);
+ this->item_size = item_size;
+ this->items_per_chunk = items_per_chunk;
+ }
+};
+
+#endif /* DYN_ARENA_ALLOC_HPP */
diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp
index df9142462b..2149d1d269 100644
--- a/src/core/math_func.hpp
+++ b/src/core/math_func.hpp
@@ -318,6 +318,18 @@ static inline uint CeilDiv(uint a, uint b)
return (a + b - 1) / b;
}
+/**
+ * Computes ceil(a / b) for non-negative a and b (templated).
+ * @param a Numerator
+ * @param b Denominator
+ * @return Quotient, rounded up
+ */
+template
+static inline T CeilDivT(T a, T b)
+{
+ return (a + b - 1) / b;
+}
+
/**
* Computes ceil(a / b) * b for non-negative a and b.
* @param a Numerator
@@ -329,6 +341,18 @@ static inline uint Ceil(uint a, uint b)
return CeilDiv(a, b) * b;
}
+/**
+ * Computes ceil(a / b) * b for non-negative a and b (templated).
+ * @param a Numerator
+ * @param b Denominator
+ * @return a rounded up to the nearest multiple of b.
+ */
+template
+static inline T CeilT(T a, T b)
+{
+ return CeilDivT(a, b) * b;
+}
+
/**
* Computes round(a / b) for signed a and unsigned b.
* @param a Numerator
diff --git a/src/core/multimap.hpp b/src/core/multimap.hpp
index e906677141..da6a33ef45 100644
--- a/src/core/multimap.hpp
+++ b/src/core/multimap.hpp
@@ -15,7 +15,7 @@
#include