diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000000..57d42d6921 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,34 @@ +daysUntilClose: 7 +staleLabel: stale +closeComment: false +exemptMilestones: true +exemptAssignees: true + +issues: + daysUntilStale: 60 + exemptLabels: + - pinned + - security + - "good first issue" + - regression + markComment: > + This issue has been automatically marked as stale because it has not had any activity in the last two months. + + If you believe the issue is still relevant, please test on the latest nightly and report back. + + It will be closed if no further activity occurs within 7 days. + + Thank you for your contributions. + +pulls: + daysUntilStale: 30 + exemptLabels: + - pinned + markComment: > + This pull request has been automatically marked as stale because it has not had any activity in the last month. + + Please feel free to give a status update now, ping for review, or re-open when it's ready. + + It will be closed if no further activity occurs within 7 days. + + Thank you for your contributions. diff --git a/Makefile.grf.in b/Makefile.grf.in index 1625b9e4c0..8e8113a033 100644 --- a/Makefile.grf.in +++ b/Makefile.grf.in @@ -42,11 +42,22 @@ MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum") NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png +# List of target files. +OBT_FILES := $(BIN_DIR)/orig_dos.obg +OBT_FILES += $(BIN_DIR)/orig_dos_de.obg +OBT_FILES += $(BIN_DIR)/orig_win.obg +OBT_FILES += $(BIN_DIR)/orig_dos.obs +OBT_FILES += $(BIN_DIR)/orig_win.obs +OBT_FILES += $(BIN_DIR)/no_sound.obs +OBT_FILES += $(BIN_DIR)/orig_dos.obm +OBT_FILES += $(BIN_DIR)/orig_win.obm +OBT_FILES += $(BIN_DIR)/no_music.obm +OBT_FILES += $(BIN_DIR)/orig_tto.obm + # Build the GRF. +all: $(OBT_FILES) ifdef GRFCODEC -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: +all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf endif $(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt @@ -67,6 +78,10 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/ $(E) '$(STAGE) Updating $(notdir $@)' $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ +# Guard against trying to run GRFCODEC/NFORENUM without either being set. +ifdef GRFCODEC +ifdef NFORENUM + # Compile extra grf $(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk $(E) '$(STAGE) Assembling openttd.nfo' @@ -89,9 +104,12 @@ $(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf $(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf +endif +endif + # Clean up temporary files. clean: - $(Q)rm -f *.bak *.grf + $(Q)rm -f *.bak *.grf $(OBT_FILES) # Clean up temporary files mrproper: clean diff --git a/Makefile.src.in b/Makefile.src.in index d2ba675673..f9f6d2a51b 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -254,7 +254,7 @@ $(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP) $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' - $(Q)$(WINDRES) -o $@ -I `basename $<` $< + $(Q)$(WINDRES) -o $@ $< $(BIN_DIR)/$(TTD): $(TTD) $(Q)cp $(TTD) $(BIN_DIR)/$(TTD) diff --git a/README.md b/README.md index 833a4d8cf5..2d586a34af 100644 --- a/README.md +++ b/README.md @@ -876,8 +876,7 @@ no graphical user interface; you would be building a dedicated server. The following compilers are known to compile OpenTTD: -- Microsoft Visual C++ (MSVC) 2005, 2008 and 2010. - Version 2005 gives bogus warnings about scoping issues. +- Microsoft Visual C++ (MSVC) 2015, 2017 and 2019. - GNU Compiler Collection (GCC) 3.3 - 4.4, 4.6 - 4.8. - Versions 4.1 and earlier give bogus warnings about uninitialised variables. - Versions 4.4, 4.6 give bogus warnings about freeing non-heap objects. @@ -888,7 +887,8 @@ The following compilers are known to compile OpenTTD: The following compilers are known not to compile OpenTTD: -- Microsoft Visual C++ (MSVC) 2003 and earlier. +- Microsoft Visual C++ (MSVC) 2013 and earlier. + These old versions do not support modern C++ language features. - GNU Compiler Collection (GCC) 3.2 and earlier. These old versions fail due to OpenTTD's template usage. - GNU Compiler Collection (GCC) 4.5. It optimizes enums too aggressively. diff --git a/bin/baseset/no_music.obm b/bin/baseset/no_music.obm deleted file mode 100644 index 7a70e3b55d..0000000000 --- a/bin/baseset/no_music.obm +++ /dev/null @@ -1,103 +0,0 @@ -; $Id$ -; -; This represents more or less nothingness -; -[metadata] -name = NoMusic -shortname = NULL -version = 0 -fallback = true -description = A music pack without actual music. -description.af_ZA = 'n Musiek stel sonder enige musiek. -description.ar_EG = مجموعة موسيقى بدون موسيقى -description.be_BY = "Пусты" набор музычнага афармлення, які не зьмяшчае ніякай музыкі. -description.bg_BG = Празен музикален пакет. -description.ca_ES = Una llista de música sense cap peça. -description.cs_CZ = Prázná hudební sada. -description.cy_GB = Pecyn cerddoriaeth heb unrhyw gerddoriaeth ynddo. -description.da_DK = En musikpakke uden musik. -description.de_DE = Ein Musikset ohne Musik. -description.el_GR = Ένα πάκετο μουσικής χωρίς πραγματική μουσική. -description.en_AU = A music pack without actual music. -description.en_US = A music pack without actual music. -description.es_ES = Un conjunto de música vacío. -description.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. -description.is_IS = Tónlistarpakki sem er í raun án tónlistar. -description.it_IT = Un pacchetto musicale non contenente alcuna musica. -description.ja_JP = 空の音楽パック -description.ko_KR = 실제 음악이 없는 음악 목록입니다. -description.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. -description.pl_PL = Zestaw utworów muzycznych nie zawierający żadnej muzyki. -description.pt_BR = Um pacote de músicas sem músicas. -description.pt_PT = Um conjunto de música vazio. -description.ro_RO = Un set de muzică fără muzică inclusă. -description.ru_RU = "Пустой" набор музыкального оформления, не содержащий никакой музыки. -description.sk_SK = Sada hudby neobsahujúca hudbu. -description.sl_SI = Glasbeni paket z vključeno glasbo. -description.sr_RS = Prazan skup muzičkih numera. -description.sv_SE = Ett musikpaket utan någon musik. -description.ta_IN = இசை இல்லாத இசைத்தொகுப்பு. -description.th_TH = ชุดเพลงประกอบแบบไม่มีเสียงเพลง -description.tr_TR = Müzik içermeyen boş bir müzik paketi. -description.uk_UA = Порожній набір музики. -description.vi_VN = Gói âm nhạc này không có nhạc nào. -description.zh_CN = 一个没有实际内容的音乐包. -description.zh_TW = 不含任何音樂的音樂集。 - -[files] -theme = -old_0 = -old_1 = -old_2 = -old_3 = -old_4 = -old_5 = -old_6 = -old_7 = -old_8 = -old_9 = -new_0 = -new_1 = -new_2 = -new_3 = -new_4 = -new_5 = -new_6 = -new_7 = -new_8 = -new_9 = -ezy_0 = -ezy_1 = -ezy_2 = -ezy_3 = -ezy_4 = -ezy_5 = -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[md5s] - -[names] - -[origin] -default = This file was part of your OpenTTD installation. diff --git a/bin/baseset/no_sound.obs b/bin/baseset/no_sound.obs deleted file mode 100644 index c68b0165ab..0000000000 --- a/bin/baseset/no_sound.obs +++ /dev/null @@ -1,71 +0,0 @@ -; $Id$ -; -; This represents more or less nothingness -; -[metadata] -name = NoSound -shortname = NULL -version = 2 -fallback = true -description = A sound pack without any sounds. -description.af_ZA = 'n Klank stel sonder enige klanke. -description.ar_EG = مجموعة صوت بدوت اصوات مضافة -description.be_BY = "Пусты" набор гукавога афармленьня, які не зьмяшчае ніякіх гукаў. -description.bg_BG = Празен звуков пакет. -description.ca_ES = Una llista de sons buida. -description.cs_CZ = Prázdná sada zvuků. -description.cy_GB = Pecyn sain heb unrhyw effeithiau sain ynddo. -description.da_DK = En lydpakke uden lyde. -description.de_DE = Basissounds ohne Sound. -description.el_GR = Ένα πάκετο ήχων χώρις ήχους. -description.en_AU = A sound pack without any sounds. -description.en_US = A sound pack without any sounds. -description.es_ES = Un conjunto de sonidos vacío. -description.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ä. -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. -description.is_IS = Hljóðpakki án hljóðs. -description.it_IT = Un pacchetto sonoro non contenente alcun suono. -description.ja_JP = 空の効果音パック -description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다. -description.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.ms_MY = Sebuah pek suara tanpa apa-apa suara -description.nb_NO = En lydpakke uten noen lyder. -description.nl_NL = Een geluidset zonder geluid. -description.nn_NO = Ei lydpakke utan nokon lydar. -description.pl_PL = Zestaw dźwięków nie zawierający żadnych dźwięków. -description.pt_BR = Um pacote de sons sem sons. -description.pt_PT = Um conjunto de sons vazio. -description.ro_RO = Un set de sunete fără nici un sunet inclus. -description.ru_RU = "Пустой" набор звукового оформления, не содержащий никаких звуков. -description.sk_SK = Zvuková sada neobsahujúca zvuky. -description.sl_SI = Zvočni paket brez zvoka. -description.sr_RS = Prazan skup zvukova. -description.sv_SE = Ett ljudpaket utan några ljud. -description.ta_IN = ஒலிகள் இல்லாத ஒலி தொகுப்பு. -description.th_TH = ชุดเสียงแบบไร้เสียง -description.tr_TR = Ses içermeyen boş bir ses kümesi. -description.uk_UA = Порожній набір звуків. -description.vi_VN = Gói âm thanh này không có âm thanh nào. -description.zh_CN = 一个空的音效包. -description.zh_TW = 不含任何音效的音效集。 - -[files] -samples = - -[md5s] - -[origin] -default = This file was part of your OpenTTD installation. diff --git a/bin/baseset/orig_dos.obg b/bin/baseset/orig_dos.obg deleted file mode 100644 index 81b40aed36..0000000000 --- a/bin/baseset/orig_dos.obg +++ /dev/null @@ -1,84 +0,0 @@ -; $Id$ -; -; This represents the original graphics as on the non-German Transport -; Tycoon Deluxe DOS CD. -; -[metadata] -name = original_dos -shortname = TTDD -version = 1 -palette = DOS -description = Original Transport Tycoon Deluxe DOS edition graphics. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe grafieke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة الدوس -description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для DOS. -description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS. -description.ca_ES = Gràfics originals del Transport Tycoon Deluxe pel DOS. -description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro DOS). -description.cy_GB = Graffeg gwreiddiol fersiwn DOS o Transport Tycoon Deluxe. -description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS-version. -description.de_DE = Original Transport Tycoon Deluxe DOS Basisgrafiken. -description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS. -description.en_AU = Original Transport Tycoon Deluxe DOS edition graphics. -description.en_US = Original Transport Tycoon Deluxe DOS edition graphics. -description.es_ES = Gráficos originales de Transport Tycoon Deluxe, versión DOS. -description.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. -description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS útgáfunni. -description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 그래픽입니다. -description.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. -description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS. -description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS. -description.pt_PT = Gráficos originais da edição DOS de Transport Tycoon Deluxe. -description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS. -description.ru_RU = Графика из Transport Tycoon Deluxe для DOS. -description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS). -description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico DOS. -description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe DOS izdanja. -description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு அசைவூட்டங்கள். -description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS edition -description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü grafikleri. -description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition. -description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS -description.zh_CN = 运输大亨DOS豪华版原版图形包. -description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的圖形。 - -[files] -base = TRG1.GRF -logos = TRGI.GRF -arctic = TRGC.GRF -tropical = TRGH.GRF -toyland = TRGT.GRF -extra = ORIG_EXTRA.GRF - -[md5s] -TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 -TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 -TRGC.GRF = ed446637e034104c5559b32c18afe78d -TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 -TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 -ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c - -[origin] -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.obm b/bin/baseset/orig_dos.obm deleted file mode 100644 index cdacc8e7f5..0000000000 --- a/bin/baseset/orig_dos.obm +++ /dev/null @@ -1,76 +0,0 @@ -; $Id$ -; -; This represents the original music as on the Transport -; Tycoon Deluxe for DOS CD. -; -[metadata] -name = original_dos -shortname = TTDD -version = 1 -description = Original Transport Tycoon Deluxe DOS edition music. - -[files] -theme = gm.cat -old_0 = gm.cat -old_1 = gm.cat -old_2 = gm.cat -old_3 = gm.cat -old_4 = gm.cat -old_5 = gm.cat -old_6 = gm.cat -old_7 = gm.cat -old_8 = -old_9 = -new_0 = gm.cat -new_1 = gm.cat -new_2 = gm.cat -new_3 = gm.cat -new_4 = gm.cat -new_5 = gm.cat -new_6 = gm.cat -new_7 = -new_8 = -new_9 = -ezy_0 = gm.cat -ezy_1 = gm.cat -ezy_2 = gm.cat -ezy_3 = gm.cat -ezy_4 = gm.cat -ezy_5 = gm.cat -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[md5s] -gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb - -[catindex] -theme = 0 -old_0 = 1 -old_1 = 8 -old_2 = 2 -old_3 = 9 -old_4 = 14 -old_5 = 15 -old_6 = 19 -old_7 = 13 -new_0 = 6 -new_1 = 11 -new_2 = 10 -new_3 = 17 -new_4 = 21 -new_5 = 18 -new_6 = 5 -ezy_0 = 12 -ezy_1 = 7 -ezy_2 = 16 -ezy_3 = 3 -ezy_4 = 20 -ezy_5 = 4 - -[names] -; Names get read from the CAT file - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_dos.obs b/bin/baseset/orig_dos.obs deleted file mode 100644 index 9b5b413e60..0000000000 --- a/bin/baseset/orig_dos.obs +++ /dev/null @@ -1,70 +0,0 @@ -; $Id$ -; -; This represents the original sounds as on the Transport -; Tycoon Deluxe DOS CD. -; -[metadata] -name = original_dos -shortname = TTDO -version = 0 -description = Original Transport Tycoon Deluxe DOS edition sounds. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe klanke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة الدوس -description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для DOS. -description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за DOS. -description.ca_ES = Sons originals del Transport Tycoon Deluxe pel DOS. -description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro DOS). -description.cy_GB = Effeithiau sain gwreiddiol fersiwn DOS o Transport Tycoon Deluxe. -description.da_DK = Originallyd fra Transport Tycoon Deluxe DOS-version. -description.de_DE = Original Transport Tycoon Deluxe DOS Basissounds. -description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση DOS. -description.en_AU = Original Transport Tycoon Deluxe DOS edition sounds. -description.en_US = Original Transport Tycoon Deluxe DOS edition sounds. -description.es_ES = Sonidos originales de Transport Tycoon Deluxe, versión DOS. -description.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. -description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe DOS útgáfunni. -description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (DOS) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 효과음입니다. -description.la_VA = Soni ex editione originale Transport Tycoon Deluxe DOS. -description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Sound. -description.lt_LT = Originalūs Transport Tycoon Deluxe DOS leidimo garsai. -description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS. -description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe DOS-versie. -description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for DOS. -description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe DOS. -description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição DOS. -description.pt_PT = Sons originais da edição DOS de Transport Tycoon Deluxe. -description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru DOS. -description.ru_RU = Набор звукового оформления из игры Transport Tycoon Deluxe для DOS. -description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (DOS). -description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice DOS. -description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe DOS izdanja. -description.sv_SE = Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு ஒலிகள். -description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe DOS edition -description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü sesleri. -description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe DOS edition. -description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên DOS -description.zh_CN = 运输大亨DOS豪华版原版音效包. -description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的音效。 - -[files] -samples = SAMPLE.CAT - -[md5s] -SAMPLE.CAT = 422ea3dd074d2859bb51639a6e0e85da - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_dos_de.obg b/bin/baseset/orig_dos_de.obg deleted file mode 100644 index fc5e1b868a..0000000000 --- a/bin/baseset/orig_dos_de.obg +++ /dev/null @@ -1,83 +0,0 @@ -; $Id$ -; -; This represents the original graphics as on the German Transport -; Tycoon Deluxe DOS CD. It contains one broken sprite. -; -[metadata] -name = original_dos_de -shortname = TTDD -version = 0 -palette = DOS -description = Original Transport Tycoon Deluxe DOS (German) edition graphics. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS (German) uitgawe grafieke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الالمانية نسخة الدوس -description.be_BY = Арыґінальная ґрафіка зь нямецкай версіі Transport Tycoon Deluxe для DOS. -description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS (немски) . -description.ca_ES = Gràfics originals del Transport Tycoon Deluxe (alemany) pel DOS. -description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (německá verze pro DOS). -description.cy_GB = Graffeg gwreiddiol fersiwn DOS (Almaenig) o Transport Tycoon Deluxe. -description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS (Tysk) version. -description.de_DE = Original Transport Tycoon Deluxe DOS (Deutsch) Basisgrafiken. -description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS (Γερμανικό). -description.en_AU = Original Transport Tycoon Deluxe DOS (German) edition graphics. -description.en_US = Original Transport Tycoon Deluxe DOS (German) edition graphics. -description.es_ES = Gráficos originales de Transport Tycoon Deluxe, versión DOS (Alemán). -description.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). -description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS (þýsku) útgáfunni. -description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), edizione DOS. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS・ドイツ版) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션(독일)의 그래픽입니다. -description.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.ms_MY = Grafik asal Transport Tycoon DOS (German) edition -description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk). -description.nl_NL = Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie. -description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS (tysk). -description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS (German). -description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS alemã. -description.pt_PT = Gráficos originais da edição DOS (Alemã) de Transport Tycoon Deluxe. -description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS (ediţia germană). -description.ru_RU = Графика из немецкой версии Transport Tycoon Deluxe для DOS. -description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS) (v jazyku nemčina). -description.sl_SI = Originalna grafika Transport Tycoon Deluxe za nemško različico DOS. -description.sr_RS = Originalni skup grafika nemačkog Transport Tycoon Deluxe DOS izdanja. -description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska). -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS (செருமன்) பதிப்பு அசைவூட்டங்கள். -description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS (German) edition -description.tr_TR = Özgün Transport Tycoon Deluxe DOS (Almanca) sürümü grafikleri. -description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition (німецького). -description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS (tiếng Đức) -description.zh_CN = 运输大亨DOS豪华德语版原版图形包. -description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版 (德國版) 的圖形。 - -[files] -base = TRG1.GRF -logos = TRGI.GRF -arctic = TRGC.GRF -tropical = TRGH.GRF -toyland = TRGT.GRF -extra = ORIG_EXTRA.GRF - -[md5s] -TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 -TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 -TRGC.GRF = ed446637e034104c5559b32c18afe78d -TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 -TRGT.GRF = fcde1d7e8a74197d72a62695884b909e -ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c - -[origin] -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_tto.obm b/bin/baseset/orig_tto.obm deleted file mode 100644 index 13b3efb110..0000000000 --- a/bin/baseset/orig_tto.obm +++ /dev/null @@ -1,71 +0,0 @@ -; $Id$ -; -; This represents the original music as on the Transport -; Tycoon (with World Editor) for DOS CD. -; -[metadata] -name = original_tto -shortname = TTOD -version = 1 -description = Original Transport Tycoon (Original/World Editor) music. - -[files] -theme = gm-tto.cat -old_0 = gm-tto.cat -old_1 = gm-tto.cat -old_2 = gm-tto.cat -old_3 = gm-tto.cat -old_4 = gm-tto.cat -old_5 = gm-tto.cat -old_6 = gm-tto.cat -old_7 = gm-tto.cat -old_8 = -old_9 = -new_0 = gm-tto.cat -new_1 = gm-tto.cat -new_2 = gm-tto.cat -new_3 = gm-tto.cat -new_4 = gm-tto.cat -new_5 = gm-tto.cat -new_6 = gm-tto.cat -new_7 = gm-tto.cat -new_8 = -new_9 = -ezy_0 = -ezy_1 = -ezy_2 = -ezy_3 = -ezy_4 = -ezy_5 = -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[catindex] -theme = 0 -old_0 = 1 -old_1 = 6 -old_2 = 2 -old_3 = 7 -old_4 = 11 -old_5 = 12 -old_6 = 15 -old_7 = 10 -new_0 = 4 -new_1 = 5 -new_2 = 9 -new_3 = 8 -new_4 = 13 -new_5 = 16 -new_6 = 14 -new_7 = 3 - -[md5s] -gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e - -[names] -; Names get read from the CAT file - -[origin] -default = You can find it on your Transport Tycoon CD-ROM. diff --git a/bin/baseset/orig_win.obg b/bin/baseset/orig_win.obg deleted file mode 100644 index 1a7e566087..0000000000 --- a/bin/baseset/orig_win.obg +++ /dev/null @@ -1,83 +0,0 @@ -; $Id$ -; -; This represents the original graphics as on the Transport -; Tycoon Deluxe for Windows CD. -; -[metadata] -name = original_windows -shortname = TTDW -version = 0 -palette = Windows -description = Original Transport Tycoon Deluxe Windows edition graphics. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe grafieke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة وندوز -description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для Windows. -description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за Windows. -description.ca_ES = Gràfics originals del Transport Tycoon Deluxe pel Windows. -description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro Windows). -description.cy_GB = Graffeg gwreiddiol fersiwn Windows o Transport Tycoon Deluxe. -description.da_DK = Originalgrafik fra Transport Tycoon Deluxe Windows-version. -description.de_DE = Original Transport Tycoon Deluxe Windows Basisgrafiken. -description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση Windows. -description.en_AU = Original Transport Tycoon Deluxe Windows edition graphics. -description.en_US = Original Transport Tycoon Deluxe Windows edition graphics. -description.es_ES = Gráficos originales de Transport Tycoon Deluxe, versión Windows. -description.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. -description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe Windows útgáfunni. -description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windows. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (Windows) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 그래픽입니다. -description.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. -description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe Windows. -description.pt_BR = Gráficos Originais do Transport Tycoon, Edição Windows. -description.pt_PT = Gráficos originais da edição Windows de Transport Tycoon Deluxe. -description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru Windows. -description.ru_RU = Графика из Transport Tycoon Deluxe для Windows. -description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (Windows). -description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico oken(windows). -description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe Windows izdanja. -description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு அசைவூட்டங்கள். -description.th_TH = กราฟฟิกต้ำตำหรับของ Transport Tycoon Deluxe Windows edition -description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü grafikleri. -description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe Windows edition. -description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên Windows -description.zh_CN = 运输大亨Windows豪华版原版图形包. -description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的圖形。 - -[files] -base = TRG1R.GRF -logos = TRGIR.GRF -arctic = TRGCR.GRF -tropical = TRGHR.GRF -toyland = TRGTR.GRF -extra = ORIG_EXTRA.GRF - -[md5s] -TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358 -TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 -TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b -TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 -TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 -ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c - -[origin] -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 deleted file mode 100644 index 712d2e5275..0000000000 --- a/bin/baseset/orig_win.obm +++ /dev/null @@ -1,158 +0,0 @@ -; $Id$ -; -; This represents the original music as on the Transport -; Tycoon Deluxe for Windows CD. -; -[metadata] -name = original_windows -shortname = TTDW -version = 1 -description = Original Transport Tycoon Deluxe Windows edition music. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe musiek. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الموسيقية نسخة وندوز -description.be_BY = Арыґінальны набор музычнага афармленьня з гульні Transport Tycoon Deluxe для Windows. -description.bg_BG = Оригинална музика на Transport Tycoon Deluxe за Windows. -description.ca_ES = Música original del Transport Tycoon Deluxe pel Windows. -description.cs_CZ = Původní hudba Transport Tycoon Deluxe (verze pro Windows). -description.cy_GB = Cerddoriaeth gwreiddiol fersion Windows o Transport Tycoon Deluxe. -description.da_DK = Originalmusik fra Transport Tycoon Deluxe Windows-version. -description.de_DE = Original Transport Tycoon Deluxe Windows Musikset. -description.el_GR = Αρχική μουσική από το Transport Tycoon Deluxe έκδοση Windows. -description.en_AU = Original Transport Tycoon Deluxe Windows edition music. -description.en_US = Original Transport Tycoon Deluxe Windows edition music. -description.es_ES = Música original de Transport Tycoon Deluxe, versión Windows. -description.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. -description.is_IS = Upprunalega tónlistin úr Transport Tycoon Deluxe Windows útgáfunni. -description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Windows. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 音楽 (Windows) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 음악입니다. -description.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. -description.pl_PL = Oryginalna edycja utworów muzycznych w Transport Tycoon Deluxe Windows. -description.pt_BR = Música Original do Transport Tycoon Deluxe, Edição Windows -description.pt_PT = Música original da edição Windows de Transport Tycoon Deluxe. -description.ro_RO = Setul de muzică original al Transport Tycoon Deluxe pentru Windows. -description.ru_RU = Набор музыкального оформления из игры Transport Tycoon Deluxe для Windows. -description.sk_SK = Pôvodná hudba z Transport Tycoon Deluxe (Windows). -description.sl_SI = Originalna glasba Transport Tycoon Deluxe različice oken(windows). -description.sr_RS = Originalni skup muzičkih numera Transport Tycoon Deluxe Windows izdanja. -description.sv_SE = Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு இசை. -description.th_TH = เพลงต้นตำหรับชอง Transport Tycoon Deluxe Windows edition -description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü müzikleri. -description.uk_UA = Оригінальна музика з Transport Tycoon Deluxe Windows edition. -description.vi_VN = Nhạc gốc từ phiên bản Transport Tycoon Deluxe trên Windows -description.zh_CN = Transport Tycoon Deluxe(运输大亨Windows豪华版)的原版音乐包 -description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音樂。 - -[files] -theme = GM_TT00.GM -old_0 = GM_TT02.GM -old_1 = GM_TT06.GM -old_2 = GM_TT03.GM -old_3 = GM_TT12.GM -old_4 = GM_TT08.GM -old_5 = GM_TT13.GM -old_6 = GM_TT14.GM -old_7 = GM_TT10.GM -old_8 = -old_9 = -new_0 = GM_TT04.GM -new_1 = GM_TT01.GM -new_2 = GM_TT05.GM -new_3 = GM_TT15.GM -new_4 = GM_TT11.GM -new_5 = GM_TT16.GM -new_6 = GM_TT09.GM -new_7 = -new_8 = -new_9 = -ezy_0 = GM_TT18.GM -ezy_1 = GM_TT19.GM -ezy_2 = GM_TT21.GM -ezy_3 = GM_TT17.GM -ezy_4 = GM_TT20.GM -ezy_5 = GM_TT07.GM -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[md5s] -GM_TT00.GM = 45cfec1b9d8c7a0ad45e755833cbf221 -GM_TT01.GM = ab14ed3392d848abd2a2e90a9d75d121 -GM_TT02.GM = dd4f696e4be5987ce738257b08b50171 -GM_TT03.GM = a1bfde23343df9e4063419bf29c166b8 -GM_TT04.GM = 4e6943aa0c455203d76c79389054747d -GM_TT05.GM = cee281cb85a2e2343552d97640545a47 -GM_TT06.GM = 26d1de5efa8675f94065784e9d539e49 -GM_TT07.GM = 6f2691e17558f552ec4c565e4ab7139c -GM_TT08.GM = a42bf2cb3340a822f1a69646fc7a487d -GM_TT09.GM = eb35761a58a8df3c59ed8929cce13916 -GM_TT10.GM = 42fecd686720a785d20a78590c466a82 -GM_TT11.GM = 50ef1ef02e49d2112786dd45e69dc3ee -GM_TT12.GM = 4ce707a0e0e72419f0681dd9bd95271b -GM_TT13.GM = e765753be29d889ec818f38009103619 -GM_TT14.GM = 270e2d63bd32b95a4d007ce15a6ce45f -GM_TT15.GM = 89e116a1c0c69f1845cc903a9bfbe460 -GM_TT16.GM = f824e2371b3bedfe61aad4b9c62dd6be -GM_TT17.GM = 1b23eebb0796c1ab99cd97fa7082cf7b -GM_TT18.GM = 15650de3bad645d0e88c4f5c7a2df92a -GM_TT19.GM = 7aec079e15bd09588660b85545ac4dfc -GM_TT20.GM = 1509097889dee617aa1e9a1738a5a930 -GM_TT21.GM = a8d0aaad02e1a762d8d54cf81da56bab - -[names] -GM_TT00.GM = Tycoon DELUXE Theme -GM_TT01.GM = Snarl Up -GM_TT02.GM = Easy Driver -GM_TT03.GM = Little Red Diesel -GM_TT04.GM = City Groove -GM_TT05.GM = Aliens Ate My Railway -GM_TT06.GM = Stoke It -GM_TT07.GM = Don't Walk! -GM_TT08.GM = Sawyer's Tune -GM_TT09.GM = Fell Apart On Me -GM_TT10.GM = Can't Get There From Here -GM_TT11.GM = Hard Drivin' -GM_TT12.GM = Road Hog -GM_TT13.GM = Hold That Train! -GM_TT14.GM = Broomer's Oil Rag -GM_TT15.GM = Goss Groove -GM_TT16.GM = Small Town -GM_TT17.GM = Cruise Control -GM_TT18.GM = Stroll On -GM_TT19.GM = Funk Central -GM_TT20.GM = Jammit -GM_TT21.GM = Movin' On - -; MIDI timecodes where the playback should attemp to start and stop short. -; This is to allow fixing undesired silences in original MIDI files. -; However not all music drivers may support this. -[timingtrim] -; Theme has two beats silence at the beginning which prevents clean looping. -GM_TT00.GM = 768:53760 -; Can't Get There From Here from the Windows version has a long silence at the end, -; followed by a solo repeat. This isn't in the original DOS version music and is likely -; unintentional from the people who converted the music from the DOS version. -; Actual song ends after measure 152. -GM_TT10.GM = 0:235008 - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_win.obs b/bin/baseset/orig_win.obs deleted file mode 100644 index 3a4cfc8a38..0000000000 --- a/bin/baseset/orig_win.obs +++ /dev/null @@ -1,71 +0,0 @@ -; $Id$ -; -; This represents the original sounds as on the Transport -; Tycoon Deluxe for Windows CD. -; -[metadata] -name = original_windows -shortname = TTDO -version = 0 -description = Original Transport Tycoon Deluxe Windows edition sounds. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe klanke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة وندوز -description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для Windows. -description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за Windows. -description.ca_ES = Sons originals del Transport Tycoon Deluxe pel Windows. -description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro Windows). -description.cy_GB = Effeithiau sain gwreiddiol fersiwn Windows o Transport Tycoon Deluxe. -description.da_DK = Originallyd fra Transport Tycoon Deluxe Windows-version. -description.de_DE = Original Transport Tycoon Deluxe Windows Basissounds. -description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση Windows. -description.en_AU = Original Transport Tycoon Deluxe Windows edition sounds. -description.en_US = Original Transport Tycoon Deluxe Windows edition sounds. -description.es_ES = Sonidos originales de Transport Tycoon Deluxe, versión Windows. -description.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. -description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe Windows útgáfunni. -description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (Windows) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 효과음입니다. -description.la_VA = Soni ex editione originale Transport Tycoon Deluxe Windows. -description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Sound. -description.lt_LT = Originalūs Transport Tycoon Deluxe Windows leidimo garsai. -description.ms_MY = Bunyi asal Transport Tycoon Deluxe edisi Windows -description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows. -description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe Windows-versie. -description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for Windows. -description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe Windows. -description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição Windows. -description.pt_PT = Sons originais da edição Windows de Transport Tycoon Deluxe. -description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru Windows. -description.ru_RU = Набор звукового оформления из игры Transport Tycoon Deluxe для Windows. -description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (Windows). -description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice oken(windows). -description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe Windows izdanja. -description.sv_SE = Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு ஒலிகள். -description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe Windows edition -description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü sesleri. -description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe Windows edition. -description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên Windows -description.zh_CN = Transport Tycoon Deluxe Windows (运输大亨Windows豪华版)的原版音效包. -description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音效。 - -[files] -samples = SAMPLE.CAT - -[md5s] -SAMPLE.CAT = 9212e81e72badd4bbe1eaeae66458e10 - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/docs/Readme_Windows_MSVC.md b/docs/Readme_Windows_MSVC.md index c60904c72a..90ab2af657 100644 --- a/docs/Readme_Windows_MSVC.md +++ b/docs/Readme_Windows_MSVC.md @@ -18,7 +18,7 @@ done during installing Visual Studio, by selecting `Visual C++ ATL for x86 and x64` depending on your version). If not, you can get it at this location: -- [MS Windows Platform SDK](http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en) +- [MS Windows Platform SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk) Install the SDK by following the instructions as given. @@ -55,6 +55,7 @@ Open the appropriate `sln` (Solution) file for your version of Visual Studio: - VS 2015: projects/openttd_vs140.sln - VS 2017: projects/openttd_vs141.sln +- VS 2019: projects/openttd_vs142.sln Set the build mode to `Release` in `Build > Configuration manager > Active solution configuration`. diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs new file mode 100644 index 0000000000..fffb577482 --- /dev/null +++ b/media/baseset/translations.vbs @@ -0,0 +1,123 @@ +Option Explicit + +' This file is part of OpenTTD. +' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +Dim FSO +Set FSO = CreateObject("Scripting.FileSystemObject") + +Dim inputfile, outputfile, langpath, extra_grf +inputfile = WScript.Arguments(0) +outputfile = WScript.Arguments(1) +langpath = WScript.Arguments(2) + +If WScript.Arguments.Length > 3 Then + extra_grf = WScript.Arguments(3) +End If + +Function GetExtraGrfHash + Dim WSO, exe, line + + Set WSO = WScript.CreateObject("WScript.Shell") + Set exe = WSO.Exec("certutil -hashfile " & extra_grf & " MD5") + + Do Until exe.StdOut.AtEndOfStream + line = exe.StdOut.ReadLine + If Len(line) = 32 Then GetExtraGrfHash = line + Loop + + Set WSO = Nothing +End Function + +' Simple insertion sort, copied from translations.awk +Sub ISort(a) + Dim i, j, n, hold + n = UBound(a) + + For i = 1 To n + j = i + hold = a(j) + Do While a(j - 1) > hold + j = j - 1 + a(j + 1) = a(j) + + If j = 0 Then Exit Do + Loop + a(j) = hold + Next +End Sub + +Sub Lookup(ini_key, str_id, outfile) + Dim folder, file, line, p, lang, i + + ' Ensure only complete string matches + str_id = str_id & " " + + Set folder = FSO.GetFolder(langpath) + + Dim output() + ReDim output(folder.Files.Count) + + For Each file In folder.Files + If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then + Dim f + Set f = FSO.OpenTextFile(file.Path) + + Do Until f.atEndOfStream + line = f.ReadLine() + + If InStr(1, line, "##isocode ") = 1 Then + p = Split(line) + lang = p(1) + ElseIf InStr(1, line, str_id) = 1 Then + p = Split(line, ":", 2) + If lang = "en_GB" Then + output(i) = ini_key & " = " & p(1) + Else + output(i) = ini_key & "." & lang & " = " & p(1) + End If + i = i + 1 + End If + + Loop + End If + Next + + ReDim Preserve output(i - 1) + ISort output + + For Each line In output + outfile.Write line & vbCrLf + Next + +End Sub + +Dim line, p + +Dim infile +Set infile = FSO.OpenTextFile(inputfile) + +Dim outfile +Set outfile = FSO.CreateTextFile(outputfile, True) + +Do Until infile.atEndOfStream + + line = infile.ReadLine() + + If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then + p = Split(line, "=") + If Trim(p(1)) = "" Then + outfile.Write("ORIG_EXTRA.GRF = " & GetExtraGrfHash() & vbCrLf) + Else + outfile.Write(line & vbCrLf) + End If + ElseIf InStr(1, line, "!! ") = 1 Then + p = Split(line) + Lookup p(1), p(2), outfile + Else + outfile.Write(line & vbCrLf) + End If + +Loop diff --git a/projects/basesets_vs140.vcxproj b/projects/basesets_vs140.vcxproj new file mode 100644 index 0000000000..4e5ed52c4a --- /dev/null +++ b/projects/basesets_vs140.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v140 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs140.vcxproj.filters b/projects/basesets_vs140.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs140.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs140.vcxproj.filters.in b/projects/basesets_vs140.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs140.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs140.vcxproj.in b/projects/basesets_vs140.vcxproj.in new file mode 100644 index 0000000000..0471100a3e --- /dev/null +++ b/projects/basesets_vs140.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v140 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/basesets_vs141.vcxproj b/projects/basesets_vs141.vcxproj new file mode 100644 index 0000000000..a01f24989b --- /dev/null +++ b/projects/basesets_vs141.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v141 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs141.vcxproj.filters b/projects/basesets_vs141.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs141.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs141.vcxproj.filters.in b/projects/basesets_vs141.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs141.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs141.vcxproj.in b/projects/basesets_vs141.vcxproj.in new file mode 100644 index 0000000000..69dbd2e078 --- /dev/null +++ b/projects/basesets_vs141.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v141 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/basesets_vs142.vcxproj b/projects/basesets_vs142.vcxproj new file mode 100644 index 0000000000..d483708aa7 --- /dev/null +++ b/projects/basesets_vs142.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs142.vcxproj.filters b/projects/basesets_vs142.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs142.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs142.vcxproj.filters.in b/projects/basesets_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs142.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs142.vcxproj.in b/projects/basesets_vs142.vcxproj.in new file mode 100644 index 0000000000..9743d83e7a --- /dev/null +++ b/projects/basesets_vs142.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v142 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/dpi_aware.manifest b/projects/dpi_aware.manifest index 6f04161596..ee1c7ea224 100644 --- a/projects/dpi_aware.manifest +++ b/projects/dpi_aware.manifest @@ -1,7 +1,29 @@ - + + + + + + + + + - - True/PM + + True/PM + + + + + + + + + + + + + + diff --git a/projects/generate b/projects/generate index af59a83fb2..595fa3acc6 100755 --- a/projects/generate +++ b/projects/generate @@ -22,6 +22,16 @@ then exit 1 fi +# openttd_vs142.sln is for MSVC 2019 +# openttd_vs142.vcxproj is for MSVC 2019 +# openttd_vs142.vcxproj.filters is for MSVC 2019 +# langs_vs142.vcxproj is for MSVC 2019 +# strgen_vs142.vcxproj is for MSVC 2019 +# strgen_vs142.vcxproj.filters is for MSVC 2019 +# generate_vs142.vcxproj is for MSVC 2019 +# version_vs142.vcxproj is for MSVC 2019 +# basesets_vs142.vcxproj is for MSVC 2019 + # openttd_vs141.sln is for MSVC 2017 # openttd_vs141.vcxproj is for MSVC 2017 # openttd_vs141.vcxproj.filters is for MSVC 2017 @@ -30,6 +40,7 @@ fi # strgen_vs141.vcxproj.filters is for MSVC 2017 # generate_vs141.vcxproj is for MSVC 2017 # version_vs141.vcxproj is for MSVC 2017 +# basesets_vs141.vcxproj is for MSVC 2017 # openttd_vs140.sln is for MSVC 2015 # openttd_vs140.vcxproj is for MSVC 2015 @@ -39,6 +50,7 @@ fi # strgen_vs140.vcxproj.filters is for MSVC 2015 # generate_vs140.vcxproj is for MSVC 2015 # version_vs140.vcxproj is for MSVC 2015 +# basesets_vs140.vcxproj is for MSVC 2015 @@ -124,17 +136,7 @@ load_main_data() { gsub(" ", "", $0); gsub("^#", "", $0); gsub("^ ", "", $0); - - if (first_time != 0) { - print "#1 "; - } else { - first_time = 1; - } - filter = $0; - print "#1 "; print "#3 "; printf "#3 {c76ff9f1-1e62-46d8-8d55-%012d}\n", i; print "#3 "; @@ -148,10 +150,6 @@ load_main_data() { if (deep == skip) { gsub(" ", "", $0); gsub("/", "\\\\", $0); - print "#1 "; - print "#1 "; split($0, file, "."); cltype = "ClInclude" if (file[2] == "cpp") cltype = "ClCompile"; @@ -162,7 +160,6 @@ load_main_data() { print "#4 "; } } - END { print "#1 "; } '`" eval "$2=\"\$RES\"" @@ -180,21 +177,6 @@ load_lang_data() { continue fi RES="$RES -#1 -#1 -#1 -#1 -#1 #2 #2 Generating "$i" language file #2 ..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang \"%(FullPath)\" @@ -217,10 +199,6 @@ load_settings_data() { do i=`basename $i` RES="$RES -#1 -#1 #2 #4 #4 INI @@ -231,6 +209,44 @@ load_settings_data() { eval "$2=\"\$RES\$RES2\"" } +load_baseset_data() { + FIRST="" + RES="" + RES2=" +#4 " + # Windows Folder sort and Linux Folder sort are slightly different. + # By removing the extension and sorting it on Linux, they are the same. + for i in `ls $2 | sed s~.txt$~~g | sort` + do + if [ "$FIRST" != "" ]; then + RES2="$RES2;" + else + FIRST=1 + fi + i=`basename $i` + RES2="$RES2..\\src\\lang\\$i.txt" + done + RES2="$RES2" + # Windows Folder sort and Linux Folder sort are slightly different. + # By fiddling with the extension and sorting it on Linux, they are the same. + for i in `ls $1 | sed s~\\\.~000~g | sort | sed s~000~.~g` + do + i=`basename $i` + RES="$RES +#2 +#2 Generating "$i" baseset metadata file +#2 cscript //nologo ..\\media\\baseset\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\src\\lang ..\\bin\\baseset\\orig_extra.grf +#2 \$(Langs);..\\bin\\baseset\\orig_extra.grf;%(AdditionalInputs) +#2 ..\\bin\\baseset\\"$i";%(Outputs) +#2 +#3 +#3 Baseset Metadata +#3 " + done + + eval "$3=\"\$RES\$RES2\"" +} + generate() { echo "Generating $2..." if [ $# -eq 3 ]; then @@ -287,28 +303,42 @@ load_main_data "$ROOT_DIR/source.list" openttd openttdfiles=`echo "$openttd" | grep "^#4" | sed "s~#4~~g"` openttdfilters=`echo "$openttd" | grep "^#3" | sed "s~#3~~g"` openttdvcxproj=`echo "$openttd" | grep "^#2" | sed "s~#2~~g"` -openttd=`echo "$openttd" | grep "^#1" | sed "s~#1~~g"` load_lang_data "$ROOT_DIR/src/lang/*.txt" lang langfiles=`echo "$lang" | grep "^#3" | sed "s~#3~~g"` langvcxproj=`echo "$lang" | grep "^#2" | sed "s~#2~~g"` -lang=`echo "$lang" | grep "^#1" | sed "s~#1~~g"` load_settings_data "$ROOT_DIR/src/table/*.ini" settings settingsfiles=`echo "$settings" | grep "^#4" | sed "s~#4~~g"` settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"` settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"` -settings=`echo "$settings" | grep "^#1" | sed "s~#1~~g"` + +load_baseset_data "$ROOT_DIR/media/baseset/*.ob?" "$ROOT_DIR/src/lang/*.txt" baseset +basesetfiles=`echo "$baseset" | grep "^#3" | sed "s-#3--g"` +basesetvcxproj=`echo "$baseset" | grep "^#2" | sed "s~#2~~g"` +basesetlangs=`echo "$baseset" | grep "^#4" | sed "s~#4~~g"` 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 "$openttdvcxproj" "openttd_vs142.vcxproj" +generate "$openttdfiles" "openttd_vs142.vcxproj.filters" "$openttdfilters" generate "$langvcxproj" "langs_vs140.vcxproj" generate "$langfiles" "langs_vs140.vcxproj.filters" generate "$langvcxproj" "langs_vs141.vcxproj" generate "$langfiles" "langs_vs141.vcxproj.filters" +generate "$langvcxproj" "langs_vs142.vcxproj" +generate "$langfiles" "langs_vs142.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" +generate "$settingsvcxproj" "settings_vs142.vcxproj" "$settingscommand" +generate "$settingsfiles" "settings_vs142.vcxproj.filters" +generate "$basesetvcxproj" "basesets_vs140.vcxproj" "$basesetlangs" +generate "$basesetfiles" "basesets_vs140.vcxproj.filters" +generate "$basesetvcxproj" "basesets_vs141.vcxproj" "$basesetlangs" +generate "$basesetfiles" "basesets_vs141.vcxproj.filters" +generate "$basesetvcxproj" "basesets_vs142.vcxproj" "$basesetlangs" +generate "$basesetfiles" "basesets_vs142.vcxproj.filters" diff --git a/projects/generate.vbs b/projects/generate.vbs old mode 100755 new mode 100644 index 5439ed7c0d..e8cf13d03d --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -10,6 +10,16 @@ Option Explicit Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") +' openttd_vs142.sln is for MSVC 2019 +' openttd_vs142.vcxproj is for MSVC 2019 +' openttd_vs142.vcxproj.filters is for MSVC 2019 +' langs_vs142.vcxproj is for MSVC 2019 +' strgen_vs142.vcxproj is for MSVC 2019 +' strgen_vs142.vcxproj.filters is for MSVC 2019 +' generate_vs142.vcxproj is for MSVC 2019 +' version_vs142.vcxproj is for MSVC 2019 +' basesets_vs142.vcxproj is for MSVC 2019 + ' openttd_vs141.sln is for MSVC 2017 ' openttd_vs141.vcxproj is for MSVC 2017 ' openttd_vs141.vcxproj.filters is for MSVC 2017 @@ -18,6 +28,7 @@ Set FSO = CreateObject("Scripting.FileSystemObject") ' strgen_vs141.vcxproj.filters is for MSVC 2017 ' generate_vs141.vcxproj is for MSVC 2017 ' version_vs141.vcxproj is for MSVC 2017 +' basesets_vs141.vcxproj is for MSVC 2017 ' openttd_vs140.sln is for MSVC 2015 ' openttd_vs140.vcxproj is for MSVC 2015 @@ -27,6 +38,7 @@ Set FSO = CreateObject("Scripting.FileSystemObject") ' strgen_vs140.vcxproj.filters is for MSVC 2015 ' generate_vs140.vcxproj is for MSVC 2015 ' version_vs140.vcxproj is for MSVC 2015 +' basesets_vs140.vcxproj is for MSVC 2015 Sub safety_check(filename) Dim file, line, regexp, list @@ -140,9 +152,8 @@ Sub headers_check(filename, dir) End If End Sub -Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) - Dim res, file, line, deep, skip, first_filter, first_file, filter, cltype, index - res = "" +Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) + Dim file, line, deep, skip, first_filter, first_file, filter, cltype, index index = 0 ' Read the source.list and process it Set file = FSO.OpenTextFile(filename, 1, 0, 0) @@ -176,16 +187,11 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) if deep = skip Then line = Replace(line, "# ", "") if first_filter <> 0 Then - res = res & " " & vbCrLf filters = filters & vbCrLf Else first_filter = 1 End If filter = line - res = res & _ - " " & vbCrLf filters = filters & _ " " & vbCrLf & _ " {c76ff9f1-1e62-46d8-8d55-" & String(12 - Len(CStr(index)), "0") & index & "}" & vbCrLf & _ @@ -201,11 +207,6 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) Else first_file = 1 End If - res = res & _ - " " & vbCrLf & _ - " " & vbCrLf Select Case Split(Line, ".")(1) Case "cpp" cltype = "ClCompile" @@ -223,42 +224,22 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) End Select End If Wend - res = res & " " file.Close() - load_main_data = res -End Function +End Sub -Function load_lang_data(dir, ByRef vcxproj, ByRef files) - Dim res, folder, file, first_time - res = "" +Sub load_lang_data(dir, ByRef vcxproj, ByRef files) + Dim folder, file, first_time Set folder = FSO.GetFolder(dir) For Each file In folder.Files file = FSO.GetFileName(file) If file <> "english.txt" And FSO.GetExtensionName(file) = "txt" Then file = Left(file, Len(file) - 4) If first_time <> 0 Then - res = res & vbCrLf vcxproj = vcxproj & vbCrLf files = files & vbCrLf Else first_time = 1 End If - res = res & _ - " " & vbCrLf & _ - " " & vbCrLf & _ - " " & vbCrLf & _ - " " & vbCrLf & _ - " " vcxproj = vcxproj & _ " " & vbCrLf & _ " Generating " & file & " language file" & vbCrLf & _ @@ -272,29 +253,21 @@ Function load_lang_data(dir, ByRef vcxproj, ByRef files) " " End If Next - load_lang_data = res -End Function +End Sub -Function load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) - Dim res, folder, file, first_time - res = "" +Sub load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) + Dim folder, file, first_time command = "..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble" Set folder = FSO.GetFolder(dir) For Each file In folder.Files file = FSO.GetFileName(file) If FSO.GetExtensionName(file) = "ini" Then if first_time <> 0 Then - res = res & vbCrLf vcxproj = vcxproj & vbCrLf files = files & vbCrLf Else first_time = 1 End If - res = res & _ - " " & vbCrLf & _ - " " vcxproj = vcxproj & _ " " command = command & " ..\src\table\" & file @@ -304,8 +277,49 @@ Function load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) " " End If Next - load_settings_data = res -End Function +End Sub + +Sub load_baseset_data(dir, langdir, ByRef vcxproj, ByRef files, ByRef langs) + Dim folder, file, ext, first_time + Set folder = FSO.GetFolder(langdir) + langs = " " + For Each file In folder.Files + If first_time <> 0 Then + langs = langs & ";" + Else + first_time = 1 + End If + file = FSO.GetFileName(file) + ext = FSO.GetExtensionName(file) + langs = langs & "..\src\lang\" & file + Next + langs = langs & "" + first_time = 0 + Set folder = FSO.GetFolder(dir) + For Each file In folder.Files + file = FSO.GetFileName(file) + ext = FSO.GetExtensionName(file) + If ext = "obm" Or ext = "obg" Or ext = "obs" Then + If first_time <> 0 Then + vcxproj = vcxproj & vbCrLf + files = files & vbCrLf + Else + first_time = 1 + End If + vcxproj = vcxproj & _ + " " & vbCrLf & _ + " Generating " & file & " baseset metadata file" & vbCrLf & _ + " cscript //nologo ..\media\baseset\translations.vbs " & Chr(34) & "%(FullPath)" & Chr(34) & " " & Chr(34) & "$(OutputPath)" & file & Chr(34) & " ..\src\lang ..\bin\baseset\orig_extra.grf" & vbCrLf & _ + " $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)" & vbCrLf & _ + " ..\bin\baseset\" & file & ";%(Outputs)" & vbCrLf & _ + " " + files = files & _ + " " & vbCrLf & _ + " Baseset Metadata" & vbCrLf & _ + " " + End If + Next +End Sub Sub generate(data, dest, data2) Dim srcfile, destfile, line @@ -358,23 +372,38 @@ End If safety_check ROOT_DIR & "/source.list" headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed for DoFiles -Dim openttd, openttdvcxproj, openttdfilters, openttdfiles -openttd = load_main_data(ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles) +Dim openttdvcxproj, openttdfilters, openttdfiles +load_main_data ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles 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 +generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs142.vcxproj", Null +generate openttdfiles, ROOT_DIR & "/projects/openttd_vs142.vcxproj.filters", openttdfilters -Dim lang, langvcxproj, langfiles -lang = load_lang_data(ROOT_DIR & "/src/lang", langvcxproj, langfiles) +Dim langvcxproj, langfiles +load_lang_data ROOT_DIR & "/src/lang", langvcxproj, langfiles 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 +generate langvcxproj, ROOT_DIR & "/projects/langs_vs142.vcxproj", Null +generate langfiles, ROOT_DIR & "/projects/langs_vs142.vcxproj.filters", Null -Dim settings, settingsvcxproj, settingscommand, settingsfiles -settings = load_settings_data(ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles) +Dim settingsvcxproj, settingscommand, settingsfiles +load_settings_data ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles 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 +generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs142.vcxproj", settingscommand +generate settingsfiles, ROOT_DIR & "/projects/settings_vs142.vcxproj.filters", Null + +Dim basesetvcxproj, basesetfiles, basesetlangs +load_baseset_data ROOT_DIR & "/media/baseset", ROOT_DIR & "/src/lang", basesetvcxproj, basesetfiles, basesetlangs +generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetlangs +generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null +generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs +generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null +generate settingsvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", settingscommand +generate settingsfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj new file mode 100644 index 0000000000..3e55d7a1d4 --- /dev/null +++ b/projects/generate_vs142.vcxproj @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + generate + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} + generate + 8.1 + + + + Utility + v142 + + + + + + + + + + + + + Document + Running %27generate.vbs%27 ... + cscript "$(ProjectDir)generate.vbs" + %(FullPath);%(AdditionalInputs) + + + + + + diff --git a/projects/langs_vs142.vcxproj b/projects/langs_vs142.vcxproj new file mode 100644 index 0000000000..0a11156bb0 --- /dev/null +++ b/projects/langs_vs142.vcxproj @@ -0,0 +1,390 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + + + Generating afrikaans language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\afrikaans.lng;%(Outputs) + + + Generating arabic_egypt language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\arabic_egypt.lng;%(Outputs) + + + Generating basque language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\basque.lng;%(Outputs) + + + Generating belarusian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\belarusian.lng;%(Outputs) + + + Generating brazilian_portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\brazilian_portuguese.lng;%(Outputs) + + + Generating bulgarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\bulgarian.lng;%(Outputs) + + + Generating catalan language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\catalan.lng;%(Outputs) + + + Generating croatian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\croatian.lng;%(Outputs) + + + Generating czech language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\czech.lng;%(Outputs) + + + Generating danish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\danish.lng;%(Outputs) + + + Generating dutch language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\dutch.lng;%(Outputs) + + + Generating english_AU language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_AU.lng;%(Outputs) + + + Generating english_US language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_US.lng;%(Outputs) + + + Generating esperanto language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\esperanto.lng;%(Outputs) + + + Generating estonian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\estonian.lng;%(Outputs) + + + Generating faroese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\faroese.lng;%(Outputs) + + + Generating finnish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\finnish.lng;%(Outputs) + + + Generating french language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\french.lng;%(Outputs) + + + Generating gaelic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\gaelic.lng;%(Outputs) + + + Generating galician language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\galician.lng;%(Outputs) + + + Generating german language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\german.lng;%(Outputs) + + + Generating greek language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\greek.lng;%(Outputs) + + + Generating hebrew language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hebrew.lng;%(Outputs) + + + Generating hungarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hungarian.lng;%(Outputs) + + + Generating icelandic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\icelandic.lng;%(Outputs) + + + Generating indonesian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\indonesian.lng;%(Outputs) + + + Generating irish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\irish.lng;%(Outputs) + + + Generating italian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\italian.lng;%(Outputs) + + + Generating japanese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\japanese.lng;%(Outputs) + + + Generating korean language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\korean.lng;%(Outputs) + + + Generating latin language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latin.lng;%(Outputs) + + + Generating latvian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latvian.lng;%(Outputs) + + + Generating lithuanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\lithuanian.lng;%(Outputs) + + + Generating luxembourgish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\luxembourgish.lng;%(Outputs) + + + Generating malay language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\malay.lng;%(Outputs) + + + Generating norwegian_bokmal language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_bokmal.lng;%(Outputs) + + + Generating norwegian_nynorsk language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) + + + Generating polish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\polish.lng;%(Outputs) + + + Generating portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\portuguese.lng;%(Outputs) + + + Generating romanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\romanian.lng;%(Outputs) + + + Generating russian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\russian.lng;%(Outputs) + + + Generating serbian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\serbian.lng;%(Outputs) + + + Generating simplified_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\simplified_chinese.lng;%(Outputs) + + + Generating slovak language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovak.lng;%(Outputs) + + + Generating slovenian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovenian.lng;%(Outputs) + + + Generating spanish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish.lng;%(Outputs) + + + Generating spanish_MX language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish_MX.lng;%(Outputs) + + + Generating swedish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\swedish.lng;%(Outputs) + + + Generating tamil language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\tamil.lng;%(Outputs) + + + Generating thai language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\thai.lng;%(Outputs) + + + Generating traditional_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\traditional_chinese.lng;%(Outputs) + + + Generating turkish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\turkish.lng;%(Outputs) + + + Generating ukrainian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\ukrainian.lng;%(Outputs) + + + Generating vietnamese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\vietnamese.lng;%(Outputs) + + + Generating welsh language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\welsh.lng;%(Outputs) + + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/langs_vs142.vcxproj.filters b/projects/langs_vs142.vcxproj.filters new file mode 100644 index 0000000000..bf5257ec82 --- /dev/null +++ b/projects/langs_vs142.vcxproj.filters @@ -0,0 +1,176 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + diff --git a/projects/langs_vs142.vcxproj.filters.in b/projects/langs_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..0d60ee9595 --- /dev/null +++ b/projects/langs_vs142.vcxproj.filters.in @@ -0,0 +1,12 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + +!!FILES!! + + diff --git a/projects/langs_vs142.vcxproj.in b/projects/langs_vs142.vcxproj.in new file mode 100644 index 0000000000..f24c7cad78 --- /dev/null +++ b/projects/langs_vs142.vcxproj.in @@ -0,0 +1,61 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + +!!FILES!! + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln index c9beb2a1e1..e2b7632f7e 100644 --- a/projects/openttd_vs140.sln +++ b/projects/openttd_vs140.sln @@ -19,6 +19,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs140.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs140.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -83,6 +85,14 @@ Global {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index eba6ad01f6..0d1b4bf0b5 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1429,6 +1429,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index c5e120401f..951f8b6048 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -365,6 +365,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln index f163125cbe..6e328ba764 100644 --- a/projects/openttd_vs141.sln +++ b/projects/openttd_vs141.sln @@ -19,6 +19,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs141.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -83,6 +85,14 @@ Global {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 9f5595b4ec..549e801008 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1429,6 +1429,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index 2a8a78af75..d28f500f1c 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -365,6 +365,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln new file mode 100644 index 0000000000..f07fb388d5 --- /dev/null +++ b/projects/openttd_vs142.sln @@ -0,0 +1,103 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs142.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs142.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs142.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs142.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs142.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs142.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs142.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs142.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj new file mode 100644 index 0000000000..28f8c96fd1 --- /dev/null +++ b/projects/openttd_vs142.vcxproj @@ -0,0 +1,1438 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters new file mode 100644 index 0000000000..fa3313c427 --- /dev/null +++ b/projects/openttd_vs142.vcxproj.filters @@ -0,0 +1,3308 @@ + + + + + {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} + + + {c76ff9f1-1e62-46d8-8d55-000000000033} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + 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 + + + Core Source Code + + + Core Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + 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 + + + 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 + + + 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 + + + Tables + + + MD5 + + + MD5 + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI API + + + Game API + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Drivers + + + Drivers + + + Drivers + + + Sprite loaders + + + Sprite loaders + + + Sprite loaders + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + Video + + + Video + + + Video + + + Video + + + Music + + + Music + + + Music + + + Music + + + Sound + + + Sound + + + Sound + + + Sound + + + Windows files + + + Windows files + + + Windows files + + + Windows files + + + Threading + + + Threading + + + Threading + + + Threading + + + Threading + + + Threading + + + Threading + + + Threading + + + Btree containers + + + Btree containers + + + Btree containers + + + Btree containers + + + Btree containers + + + Btree containers + + + Btree containers + + + + + + + diff --git a/projects/openttd_vs142.vcxproj.filters.in b/projects/openttd_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..126bd61459 --- /dev/null +++ b/projects/openttd_vs142.vcxproj.filters.in @@ -0,0 +1,13 @@ + + + +!!FILTERS!! + + +!!FILES!! + + + + + + diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in new file mode 100644 index 0000000000..91689e8bde --- /dev/null +++ b/projects/openttd_vs142.vcxproj.in @@ -0,0 +1,374 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + +!!FILES!! + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest index 52ed17bcb9..c7905ee709 100644 --- a/projects/os_versions.manifest +++ b/projects/os_versions.manifest @@ -12,6 +12,6 @@ - + diff --git a/projects/regression_vs142.vcxproj b/projects/regression_vs142.vcxproj new file mode 100644 index 0000000000..3ddcc6f37a --- /dev/null +++ b/projects/regression_vs142.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v142 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj new file mode 100644 index 0000000000..a2dda134b5 --- /dev/null +++ b/projects/settings_vs142.vcxproj @@ -0,0 +1,60 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v142 + + + + + + + + + +..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + + + + + + + + + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settings_vs142.vcxproj.filters b/projects/settings_vs142.vcxproj.filters new file mode 100644 index 0000000000..8caf9fa0a6 --- /dev/null +++ b/projects/settings_vs142.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + + + + + diff --git a/projects/settings_vs142.vcxproj.filters.in b/projects/settings_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..08f90670d2 --- /dev/null +++ b/projects/settings_vs142.vcxproj.filters.in @@ -0,0 +1,15 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + +!!FILES!! + + + + + + diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in new file mode 100644 index 0000000000..3e49b7ca02 --- /dev/null +++ b/projects/settings_vs142.vcxproj.in @@ -0,0 +1,54 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v142 + + + + + + + + + +!!FILTERS!! + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + +!!FILES!! + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj new file mode 100644 index 0000000000..ca0418c15c --- /dev/null +++ b/projects/settingsgen_vs142.vcxproj @@ -0,0 +1,84 @@ + + + + + Debug + Win32 + + + + settingsgen + {E9548DE9-F089-49B7-93A6-30BE2CC311C7} + settings + 8.1 + + + + Application + MultiByte + v142 + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\objs\settings\ + ..\objs\settings\ + settings_gen + + + + + + + + %(Inputs) + + + MinSpace + Size + SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + All + $(IntDir)$(TargetName).pdb + Level3 + true + ProgramDatabase + MultiThreadedDebug + + + $(OutDir)settings_gen.exe + true + false + + + Console + 5.01 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/settingsgen_vs142.vcxproj.filters b/projects/settingsgen_vs142.vcxproj.filters new file mode 100644 index 0000000000..c8afe0c8ed --- /dev/null +++ b/projects/settingsgen_vs142.vcxproj.filters @@ -0,0 +1,32 @@ + + + + + {a4678737-b3b3-4be5-9db1-fa6ccd164c59} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj new file mode 100644 index 0000000000..5329d68daa --- /dev/null +++ b/projects/strgen_vs142.vcxproj @@ -0,0 +1,96 @@ + + + + + Debug + Win32 + + + + strgen + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} + strgen + 8.1 + + + + Application + false + MultiByte + v142 + + + + + + + + + + $(SolutionDir)..\objs\strgen\ + $(SolutionDir)..\objs\strgen\ + false + AllRules.ruleset + + + + + + .\Debug/strgen.tlb + + + + + /MP %(AdditionalOptions) + MinSpace + Size + STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + Default + MultiThreadedDebug + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x041d + + + true + true + $(IntDir)strgen.pdb + Console + false + + + MachineX86 + 5.01 + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/strgen_vs142.vcxproj.filters b/projects/strgen_vs142.vcxproj.filters new file mode 100644 index 0000000000..58864ee691 --- /dev/null +++ b/projects/strgen_vs142.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {5894294c-d4dc-41f0-be31-e56cff4e0405} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + + + diff --git a/projects/version_vs142.vcxproj b/projects/version_vs142.vcxproj new file mode 100644 index 0000000000..31971e35c9 --- /dev/null +++ b/projects/version_vs142.vcxproj @@ -0,0 +1,42 @@ + + + + + Debug + Win32 + + + + version + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} + version + + + + Makefile + MultiByte + v142 + + + + + + + + + + $(SolutionDir)..\objs\version\ + $(SolutionDir)..\objs\version\ + cscript "$(ProjectDir)/determineversion.vbs" + cscript "$(ProjectDir)/determineversion.vbs" + ..\src\rev.cpp + del ..\src\rev.cpp + + + + + + + + + diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 4b248f5efc..8dad16fabc 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -378,7 +378,7 @@ struct AISettingsWindow : public Window { for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) { const ScriptConfigItem &config_item = **it; int current_value = config->GetSetting((config_item).name); - bool editable = _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0; + bool editable = this->IsEditableItem(config_item); StringID str; TextColour colour; @@ -441,7 +441,7 @@ struct AISettingsWindow : public Window { VisibleSettingsList::const_iterator it = this->visible_settings.begin(); for (int i = 0; i < num; i++) it++; 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; + if (!this->IsEditableItem(config_item)) return; if (this->clicked_row != num) { DeleteChildWindows(WC_QUERY_STRING); @@ -586,6 +586,12 @@ struct AISettingsWindow : public Window { { this->RebuildVisibleSettings(); } + +private: + bool IsEditableItem(const ScriptConfigItem config_item) const + { + return _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0; + } }; /** Widgets for the AI settings window. */ diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 3f75d131a0..49ab304fb2 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -129,21 +129,15 @@ static StationID FindNearestHangar(const Aircraft *v) const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type); FOR_ALL_STATIONS(st) { - if (!IsInfraUsageAllowed(VEH_AIRCRAFT, v->owner, st->owner) || !(st->facilities & FACIL_AIRPORT)) continue; + if (!IsInfraUsageAllowed(VEH_AIRCRAFT, v->owner, st->owner) || !(st->facilities & FACIL_AIRPORT) || !st->airport.HasHangar()) continue; const AirportFTAClass *afc = st->airport.GetFTA(); - if (!st->airport.HasHangar() || ( - /* the airport needs to have facilities for this plane type */ - (AircraftVehInfo(v->engine_type)->subtype & AIR_CTOL) ? - !(afc->flags & AirportFTAClass::AIRPLANES) : - !(afc->flags & AirportFTAClass::HELICOPTERS) - ) || ( - /* don't crash the plane if we know it can't land at the airport */ - (afc->flags & AirportFTAClass::SHORT_STRIP) && - (avi->subtype & AIR_FAST) && - !_cheats.no_jetcrash.value)) { - continue; - } + + /* don't crash the plane if we know it can't land at the airport */ + if ((afc->flags & AirportFTAClass::SHORT_STRIP) && (avi->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) continue; + + /* the plane won't land at any helicopter station */ + if (!(afc->flags & AirportFTAClass::AIRPLANES) && (avi->subtype & AIR_CTOL)) continue; /* v->tile can't be used here, when aircraft is flying v->tile is set to 0 */ uint distance = DistanceSquare(vtile, st->airport.tile); @@ -392,7 +386,7 @@ bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination, { const Station *st = GetTargetAirportIfValid(this); /* If the station is not a valid airport or if it has no hangars */ - if (st == NULL || !st->airport.HasHangar()) { + if (st == NULL || !CanVehicleUseStation(this, st) || !st->airport.HasHangar()) { /* the aircraft has to search for a hangar on its own */ StationID station = FindNearestHangar(this); @@ -1624,7 +1618,7 @@ static void AircraftEventHandler_AtTerminal(Aircraft *v, const AirportFTAClass * go_to_hangar = Station::Get(v->targetairport)->airport.HasHangar(); } - if (go_to_hangar) { + if (go_to_hangar && Station::Get(v->targetairport)->airport.HasHangar()) { v->state = HANGAR; } else { /* airplane goto state takeoff, helicopter to helitakeoff */ diff --git a/src/blitter/common.hpp b/src/blitter/common.hpp index ad3267c716..3e4911d003 100644 --- a/src/blitter/common.hpp +++ b/src/blitter/common.hpp @@ -7,7 +7,7 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -/** @file base.hpp Common functionality for all blitter implemenytations. */ +/** @file common.hpp Common functionality for all blitter implementations. */ #ifndef BLITTER_COMMON_HPP #define BLITTER_COMMON_HPP diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 2d774d3fc4..df94780d2d 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1092,7 +1092,7 @@ struct BuildVehicleWindow : Window { * This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */ if (this->vehicle_type == VEH_TRAIN) { this->cargo_filter[filter_items] = CF_NONE; - this->cargo_filter_texts[filter_items] = STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE; + this->cargo_filter_texts[filter_items] = STR_PURCHASE_INFO_NONE; filter_items++; } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index f48e381154..1f38a755ca 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -652,9 +652,11 @@ public: virtual void OnPaint() { + bool local = (CompanyID)this->window_number == _local_company; + /* Disable dropdown controls if no scheme is selected */ - this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, this->sel == 0); - this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, this->sel == 0); + this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, !local || this->sel == 0); + this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, !local || this->sel == 0); this->DrawWidgets(); } @@ -662,6 +664,10 @@ public: virtual void SetStringParameters(int widget) const { switch (widget) { + case WID_SCL_CAPTION: + SetDParam(0, (CompanyID)this->window_number); + break; + case WID_SCL_PRI_COL_DROPDOWN: case WID_SCL_SEC_COL_DROPDOWN: { const Company *c = Company::Get((CompanyID)this->window_number); @@ -793,6 +799,9 @@ public: virtual void OnDropdownSelect(int widget, int index) { + bool local = (CompanyID)this->window_number == _local_company; + if (!local) return; + for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { /* Changed colour for the selected scheme, or all visible schemes if CTRL is pressed. */ if (HasBit(this->sel, scheme) || (_ctrl_pressed && _livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme))) { diff --git a/src/gfx.cpp b/src/gfx.cpp index 5826916965..586bc14ab1 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1320,7 +1320,11 @@ void DrawDirtyBlocks() /* Wait a while and update _realtime_tick so we are given the rights */ if (!IsFirstModalProgressLoop()) CSleep(MODAL_PROGRESS_REDRAW_TIMEOUT); _realtime_tick += MODAL_PROGRESS_REDRAW_TIMEOUT; + + /* Modal progress thread may need blitter access while we are waiting for it. */ + VideoDriver::GetInstance()->ReleaseBlitterLock(); _modal_progress_paint_mutex->BeginCritical(); + VideoDriver::GetInstance()->AcquireBlitterLock(); _modal_progress_work_mutex->BeginCritical(); /* When we ended with the modal progress, do not draw the blocks. diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 6dd1a96419..52a2522424 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -159,7 +159,7 @@ private: Dimension column_size[VGC_END]; ///< Size of the columns in the group list. /** return true if group has children */ - bool AddParents(GUIGroupList *source, GroupID parent, int indent, bool parent_collapsed) + bool AddChildren(GUIGroupList *source, GroupID parent, int indent, bool parent_collapsed) { bool is_collapsed = this->collapsed_groups.Contains(parent); bool overall_collapsed = is_collapsed || parent_collapsed; @@ -173,7 +173,7 @@ private: *this->groups.Append() = *g; *this->indents.Append() = indent; } - bool child_has_children = AddParents(source, (*g)->index, indent + 1, overall_collapsed); + bool child_has_children = AddChildren(source, (*g)->index, indent + 1, overall_collapsed); if (child_has_children) *this->collapsable_groups.Append() = (*g)->index; } } @@ -218,7 +218,7 @@ private: list.ForceResort(); list.Sort(&GroupNameSorter); - AddParents(&list, INVALID_GROUP, 0, false); + AddChildren(&list, INVALID_GROUP, 0, false); this->groups.Compact(); this->groups.RebuildDone(); @@ -302,7 +302,7 @@ private: str = STR_GROUP_NAME; } int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width + 1 : left + WD_FRAMERECT_LEFT + 8; - DrawString(x + indent * LEVEL_WIDTH, x + this->column_size[VGC_NAME].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); + DrawString(x + (rtl ? 0 : indent), x + this->column_size[VGC_NAME].width - 1 - (rtl ? indent : 0), y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); /* draw collapse state */ x = rtl ? x - 8 - this->column_size[VGC_COLLAPSED].width : x + 8 + this->column_size[VGC_NAME].width; @@ -660,7 +660,7 @@ public: assert(g->owner == this->owner); - DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i], g->replace_protection); + DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, g->replace_protection); y1 += this->tiny_step_height; } diff --git a/src/house.h b/src/house.h index fab5256253..f0767421ae 100644 --- a/src/house.h +++ b/src/house.h @@ -31,6 +31,8 @@ static const HouseID NEW_HOUSE_OFFSET = 110; ///< Offset for new houses. static const HouseID NUM_HOUSES = 512; ///< Total number of houses. static const HouseID INVALID_HOUSE_ID = 0xFFFF; +static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile + /** * There can only be as many classes as there are new houses, plus one for * NO_CLASS, as the original houses don't have classes. @@ -97,30 +99,30 @@ DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags) struct HouseSpec { /* Standard properties */ - Year min_year; ///< introduction year of the house - Year max_year; ///< last year it can be built - byte population; ///< population (Zero on other tiles in multi tile house.) - byte removal_cost; ///< cost multiplier for removing it - StringID building_name; ///< building name - uint16 remove_rating_decrease; ///< rating decrease if removed - byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) - byte cargo_acceptance[3]; ///< acceptance level for the cargo slots - CargoID accepts_cargo[3]; ///< 3 input cargo slots - BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...) - HouseZones building_availability; ///< where can it be built (climates, zones) - bool enabled; ///< the house is available to build (true by default, but can be disabled by newgrf) + Year min_year; ///< introduction year of the house + Year max_year; ///< last year it can be built + byte population; ///< population (Zero on other tiles in multi tile house.) + byte removal_cost; ///< cost multiplier for removing it + StringID building_name; ///< building name + uint16 remove_rating_decrease; ///< rating decrease if removed + byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) + byte cargo_acceptance[HOUSE_NUM_ACCEPTS]; ///< acceptance level for the cargo slots + CargoID accepts_cargo[HOUSE_NUM_ACCEPTS]; ///< input cargo slots + BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...) + HouseZones building_availability; ///< where can it be built (climates, zones) + bool enabled; ///< the house is available to build (true by default, but can be disabled by newgrf) /* NewHouses properties */ - GRFFileProps grf_prop; ///< Properties related the the grf file - uint16 callback_mask; ///< Bitmask of house callbacks that have to be called - byte random_colour[4]; ///< 4 "random" colours - byte probability; ///< Relative probability of appearing (16 is the standard value) - HouseExtraFlags extra_flags; ///< some more flags - HouseClassID class_id; ///< defines the class this house has (not grf file based) - AnimationInfo animation; ///< information about the animation. - byte processing_time; ///< Periodic refresh multiplier - byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it - CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. + GRFFileProps grf_prop; ///< Properties related the the grf file + uint16 callback_mask; ///< Bitmask of house callbacks that have to be called + byte random_colour[4]; ///< 4 "random" colours + byte probability; ///< Relative probability of appearing (16 is the standard value) + HouseExtraFlags extra_flags; ///< some more flags + HouseClassID class_id; ///< defines the class this house has (not grf file based) + AnimationInfo animation; ///< information about the animation. + byte processing_time; ///< Periodic refresh multiplier + byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it + CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. Money GetRemovalCost() const; diff --git a/src/landscape.cpp b/src/landscape.cpp index eec7f8e714..afb8bc1aed 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -93,6 +93,70 @@ extern const byte _slope_to_sprite_offset[32] = { */ static SnowLine *_snow_line = NULL; +/** + * Map 2D viewport or smallmap coordinate to 3D world or tile coordinate. + * Function takes into account height of tiles and foundations. + * + * @param x X viewport 2D coordinate. + * @param y Y viewport 2D coordinate. + * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map. + * @param[out] clamped Whether coordinates were clamped. + * @return 3D world coordinate of point visible at the given screen coordinate (3D perspective). + * + * @note Inverse of #RemapCoords2 function. Smaller values may get rounded. + * @see InverseRemapCoords + */ +Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) +{ + if (clamped != NULL) *clamped = false; // Not clamping yet. + + /* Initial x/y world coordinate is like if the landscape + * was completely flat on height 0. */ + Point pt = InverseRemapCoords(x, y); + + const uint min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0; + const uint max_x = MapMaxX() * TILE_SIZE - 1; + const uint max_y = MapMaxY() * TILE_SIZE - 1; + + if (clamp_to_map) { + /* Bring the coordinates near to a valid range. At the top we allow a number + * of extra tiles. This is mostly due to the tiles on the north side of + * the map possibly being drawn higher due to the extra height levels. */ + int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS); + Point old_pt = pt; + pt.x = Clamp(pt.x, -extra_tiles * TILE_SIZE, max_x); + pt.y = Clamp(pt.y, -extra_tiles * TILE_SIZE, max_y); + if (clamped != NULL) *clamped = (pt.x != old_pt.x) || (pt.y != old_pt.y); + } + + /* Now find the Z-world coordinate by fix point iteration. + * This is a bit tricky because the tile height is non-continuous at foundations. + * The clicked point should be approached from the back, otherwise there are regions that are not clickable. + * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely) + * So give it a z-malus of 4 in the first iterations. */ + int z = 0; + if (clamp_to_map) { + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2; + } else { + for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + max(z, 4) - 4, pt.y + max(z, 4) - 4) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + max(z, m) - m, pt.y + max(z, m) - m) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + z, pt.y + z ) / 2; + } + + pt.x += z; + pt.y += z; + if (clamp_to_map) { + Point old_pt = pt; + pt.x = Clamp(pt.x, min_coord, max_x); + pt.y = Clamp(pt.y, min_coord, max_y); + if (clamped != NULL) *clamped = *clamped || (pt.x != old_pt.x) || (pt.y != old_pt.y); + } + + return pt; +} + /** * Applies a foundation to a slope. * @@ -288,6 +352,23 @@ int GetSlopePixelZ(int x, int y) return _tile_type_procs[GetTileType(tile)]->get_slope_z_proc(tile, x, y); } +/** + * Return world \c z coordinate of a given point of a tile, + * also for tiles outside the map (virtual "black" tiles). + * + * @param x World X coordinate in tile "units", may be ouside the map. + * @param y World Y coordinate in tile "units", may be ouside the map. + * @return World Z coordinate at tile ground level, including slopes and foundations. + */ +int GetSlopePixelZOutsideMap(int x, int y) +{ + if (IsInsideBS(x, 0, MapSizeX() * TILE_SIZE) && IsInsideBS(y, 0, MapSizeY() * TILE_SIZE)) { + return GetSlopePixelZ(x, y); + } else { + return _tile_type_procs[MP_VOID]->get_slope_z_proc(INVALID_TILE, x, y); + } +} + /** * Determine the Z height of a corner relative to TileZ. * diff --git a/src/landscape.h b/src/landscape.h index cb08d9d9ec..43d9e5f2e6 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -40,6 +40,7 @@ Slope GetFoundationSlope(TileIndex tile, int *z = NULL); uint GetPartialPixelZ(int x, int y, Slope corners); int GetSlopePixelZ(int x, int y); +int GetSlopePixelZOutsideMap(int x, int y); void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2); /** @@ -108,6 +109,7 @@ static inline Point RemapCoords2(int x, int y) * @param y Y coordinate of the 2D coordinate. * @return X and Y components of equivalent world or tile coordinate. * @note Inverse of #RemapCoords function. Smaller values may get rounded. + * @see InverseRemapCoords2 */ static inline Point InverseRemapCoords(int x, int y) { @@ -115,6 +117,8 @@ static inline Point InverseRemapCoords(int x, int y) return pt; } +Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false, bool *clamped = NULL); + uint ApplyFoundationToSlope(Foundation f, Slope *s); /** * Applies a foundation to a slope. diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 0050d57814..5d64cb6571 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3451,6 +3451,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrira STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Razina proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je najavila uskoro zatvaranje! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/english.txt b/src/lang/english.txt index 3501c52283..da67bec49e 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2027,7 +2027,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1} # Livery window -STR_LIVERY_CAPTION :{WHITE}New Colour Scheme +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Colour Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general colour schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train colour schemes @@ -3415,8 +3415,13 @@ STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. compatible version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{RAW_STRING} -STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{RAW_STRING} +STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Default (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Default (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING1} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :None STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No information available STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matching file not found @@ -4132,6 +4137,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacity STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING2} STR_PURCHASE_INFO_ALL_TYPES :All cargo types +STR_PURCHASE_INFO_NONE :None STR_PURCHASE_INFO_ALL_BUT :All but {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tractive Effort: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Range: {GOLD}{COMMA} tiles diff --git a/src/lang/french.txt b/src/lang/french.txt index 141015a026..eecd99d2e3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1821,7 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Modifier STR_CHEAT_SETUP_PROD :{LTBLUE}Permettre la modification des valeurs de production{NBSP}: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nouvelle couleur +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Couleur STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montrer les livrées générales STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montrer les livrées de trains @@ -2894,7 +2894,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version{ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Version compatible min.{NBSP}: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum{NBSP}: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette{NBSP}: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Défaut (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Défaut (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Ancienne (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Ancienne (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramètres{NBSP}: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Aucuns STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Pas d'informations disponibles STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Module correspondant non trouvé @@ -3459,6 +3464,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Wagons motorisés{NBSP}: {GOLD}+{POWER}{BLACK} − Poids{NBSP}: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Réaménageable pour{NBSP}: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tous les types de cargaison +STR_PURCHASE_INFO_NONE :Aucune cargaison STR_PURCHASE_INFO_ALL_BUT :Tous sauf {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Effort de traction max.{NBSP}: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rayon d'action{NBSP}: {GOLD}{COMMA}{NBSP}cases diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 29124837b4..96c4a48f8c 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -191,6 +191,7 @@ STR_COLOUR_ORANGE :Arancio STR_COLOUR_BROWN :Marrone STR_COLOUR_GREY :Grigio STR_COLOUR_WHITE :Bianco +STR_COLOUR_RANDOM :Casuale # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -931,6 +932,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizzata. STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraniano (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nuovo rublo russo (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso messicano (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi @@ -1282,6 +1284,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non è p STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenzione infrastrutture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Se abilitata, le infrastrutture causano dei costi di manutenzione. I costi crescono in modo più che proporzionale alla dimensione della rete, influenzando maggiormente le compagnie più grandi rispetto alle piccole +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Colore iniziale compagnia: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Sceglie il colore iniziale della compagnia STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Non rendere mai obsoleti i tipi di aeroporto: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Abilitando questa impostazione, tutti i tipi di aeroporto rimangono disponibili indefinitamente dopo essere stati introdotti @@ -2919,7 +2923,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versione STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versione minima compatibile: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Somma MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Tavolozza: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Predefinita (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Predefinita (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nessuno STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informazioni non disponibili STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}File corrispondente non trovato @@ -3381,6 +3390,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Livello di produzione: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industria ha annunciato che a breve chiuderà! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3481,6 +3493,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagoni motorizzati: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Riadattabile per: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tutti i tipi di carico +STR_PURCHASE_INFO_NONE :Niente STR_PURCHASE_INFO_ALL_BUT :Tutto tranne {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Sforzo di trazione massimo: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} riquadr{P o i} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d1aaa00c1b..47388de711 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :주황 STR_COLOUR_BROWN :갈색 STR_COLOUR_GREY :회색 STR_COLOUR_WHITE :흰색 +STR_COLOUR_RANDOM :무작위 # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -937,6 +938,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :사용자 설 STR_GAME_OPTIONS_CURRENCY_GEL :그루지야 라리 (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :이란 리알 (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :신 러시아 루블 (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :멕시코 페소 (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식 @@ -1282,6 +1284,8 @@ STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY_HELPTEXT :이 옵션은 STR_CONFIG_SETTING_FLIP_DIRECTION_ALL_TRAINS :모든 열차가 차량기지에서 뒤집어질 수 있게 함: {STRING} STR_CONFIG_SETTING_FLIP_DIRECTION_ALL_TRAINS_HELPTEXT :NewGRF에서 차량기지에서 열차의 방향을 뒤집을 수 없도록 설정되어 있어도 무시하고 열차를 차량기지에서 뒤집을 수 있게 합니다. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :시작시 회사 색상: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택하세요. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다. @@ -2023,7 +2027,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}현재 STR_CHEAT_SETUP_PROD :{LTBLUE}1차 산업시설 생산량 조절 허용: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}새 색상 +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 색상 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}기본 색상 선택 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}열차 색상 선택 @@ -3411,7 +3415,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}버전: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}최소 이용 가능한 버전: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5합: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}색상표: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :도스 +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :도스 / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Windows +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Windows / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}매개 변숫값: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :없음 STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}관련 정보 없음 STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}일치하는 파일을 찾을 수 없습니다 @@ -3980,6 +3989,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}받는 화물: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}생산 화물: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} + STR_INDUSTRY_VIEW_TRANSPORTED_TOOLTIP :{BLACK}{STRING}{STRING} STR_INDUSTRY_VIEW_TRANSPORTED_TOOLTIP_EXTENSION :{}{BLACK}{CARGO_LONG} ({COMMA}%) @@ -4123,6 +4136,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}수용 STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}전원 화물차: {GOLD}+{POWER}{BLACK} 무게: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}개조가능 화물: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :모든 화물 +STR_PURCHASE_INFO_NONE :없음 STR_PURCHASE_INFO_ALL_BUT :{CARGO_LIST} 이외의 모든 화물 STR_PURCHASE_INFO_MAX_TE :{BLACK}최고 견인력: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}항속거리: {GOLD}{COMMA} 칸 @@ -4568,6 +4582,7 @@ STR_ORDER_CONDITIONAL_AGE :연령 (년) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :정비 필요성 STR_ORDER_CONDITIONAL_UNCONDITIONALLY :항상 STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :남은 수명 (년) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :최대 신뢰도 STR_ORDER_CONDITIONAL_CARGO_WAITING :대기 화물 STR_ORDER_CONDITIONAL_ACCEPTANCE_DROPDOWN :받는 화물 STR_ORDER_CONDITIONAL_FREE_PLATFORMS :빈 승강장 diff --git a/src/lang/polish.txt b/src/lang/polish.txt index a96f1d8fd0..cf8ed9274b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -568,6 +568,7 @@ STR_COLOUR_ORANGE :Pomarańczowy STR_COLOUR_BROWN :Brązowy STR_COLOUR_GREY :Szary STR_COLOUR_WHITE :Biały +STR_COLOUR_RANDOM :Losowy # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -854,6 +855,7 @@ STR_ABOUT_MENU_SCREENSHOT :Zrzut ekranu STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zrzut ekranu z pełnym przybliżeniem STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zrzut ekranu z przybliżeniem domyślnym STR_ABOUT_MENU_GIANT_SCREENSHOT :Zrzut ekranu całej mapy +STR_ABOUT_MENU_SHOW_FRAMERATE :Pokaż ilość klatek na sekundę STR_ABOUT_MENU_ABOUT_OPENTTD :Info o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Wyrównywanie sprite'ów STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Włącz/wyłącz ramki @@ -1056,6 +1058,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Wyczyść STR_PLAYLIST_CHANGE_SET :{BLACK}Zmień zestaw STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Wyczyść obecny program (tylko Wlasny1 lub Wlasny2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Zmień wybór muzyki na następny zainstalowany zestaw STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik na ścieżce aby dodać do obecnego programu (Wlasny1 i Wlasny2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknij na ścieżce muzycznej aby usunąć ją z wybranego programu (Wlasny1 lub Wlasny2) @@ -1192,6 +1195,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Prezes) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponsoruje konstrukcję nowego miasta {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Zostało wybudowane nowe miasto o nazwie {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Rozpoczęto budowę nowe{G go j go} {STRING.d} blisko {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Now{G y a e} {STRING} został{G 0 "" a o} posadzon{G 0 y a e} blisko {TOWN}! @@ -1304,6 +1308,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Południow STR_GAME_OPTIONS_CURRENCY_CUSTOM :Własna... STR_GAME_OPTIONS_CURRENCY_GEL :Lari gruzińskie (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial irański (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nowy rubel rosyjski (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso meksykańskie (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Pojazdy drogowe @@ -1633,6 +1639,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmiana t STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Utrzymywanie infrastruktury: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kiedy włączone, utrzymanie infrastruktury jest naliczane w kosztach. Koszty wzrastają nadproporcjonalnie do rozmiarów sieci połączeń, a więc dotykają bardziej duże niż małe firmy +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wybierz początkowy kolor dla firmy STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Pozwól budować stare lotniska: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Włączona opcja sprawia, że każdy typ lotniska będzie dostępny na zawsze od chwili wprowadzenia @@ -1776,7 +1783,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Wlącz obsług STR_CONFIG_SETTING_LOADING_INDICATORS :Pokazuj wskaźniki załadunku: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wybierz, czy wskaźnik załadunku pokazuje się nad ładowanym/rozładowywanym pojazdem STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokazuj rozkłady jazdy w tickach, a nie w dniach: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tyknięciach gry zamiast w dniach +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tickach gry zamiast w dniach STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjazdy i odjazdy w rozkładach: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach STR_CONFIG_SETTING_QUICKGOTO :Szybkie tworzenie poleceń pojazdu: {STRING} @@ -3071,14 +3078,28 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę. STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji. STR_FRAMERATE_CURRENT :{WHITE}Obecny +STR_FRAMERATE_AVERAGE :{WHITE}Średnia +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} klatek/sek. +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} klatek/sek. +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} klatek/sek. +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} sek. ############ Leave those lines in this order!! STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Opóźnienie wykresu połączeń: +STR_FRAMERATE_DRAWING :{BLACK}Renderowanie grafiki: STR_FRAMERATE_VIDEO :{WHITE}Wyjście video: STR_FRAMERATE_SOUND :{WHITE}Miksowanie dźwięku: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_DRAWING :Renderowanie grafiki STR_FRAMETIME_CAPTION_VIDEO :Wyjście wideo STR_FRAMETIME_CAPTION_SOUND :Miksowanie dźwięku ############ End of leave-in-this-order @@ -3368,6 +3389,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Wpisz na STR_TOWN_DIRECTORY_CAPTION :{WHITE}Miasta STR_TOWN_DIRECTORY_NONE :{ORANGE}- Żaden - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Miasto){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nazwy miast - klik na nazwie aby wycentrować widok na mieście. Ctrl+klik otwiera nowy podgląd na lokację miasta STR_TOWN_POPULATION :{BLACK}Populacja świata: {COMMA} @@ -4187,6 +4209,7 @@ STR_ORDER_CONDITIONAL_AGE :Wiek (w latach) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Wymaga serwisowania STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Zawsze STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Pozostały czas życia (w latach) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksymalna niezawodność STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Jak porównać dane pojazdu z zadaną wartością STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :jest równy diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 319e6c40bf..8c49d6656a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -603,7 +603,7 @@ STR_ABOUT_MENU_SCREENSHOT :Снимок э STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Снимок экрана в макс. приближении STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Снимок экрана в обычном масштабе STR_ABOUT_MENU_GIANT_SCREENSHOT :Снимок всей карты -STR_ABOUT_MENU_SHOW_FRAMERATE :Показать кол-во кадров/с +STR_ABOUT_MENU_SHOW_FRAMERATE :Информация о скорости игры STR_ABOUT_MENU_ABOUT_OPENTTD :Об игре STR_ABOUT_MENU_SPRITE_ALIGNER :Выравнивание спрайтов STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Переключить ограничивающие рамки @@ -1975,7 +1975,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Изме STR_CHEAT_SETUP_PROD :{LTBLUE}Разрешить изменение производительности: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Новая цветовая схема +STR_LIVERY_CAPTION :{WHITE}Цвета компании «{COMPANY}» STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Настройка основной цветовой схемы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Настройка цветовой схемы поездов @@ -2558,9 +2558,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комб STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутный светофор{}Позволяет нескольким поездам находиться в одном сигнальном блоке, если каждый из них может зарезервировать безопасный путь. Допускает следование поездов в обе стороны. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Односторонний маршрутн. светофор{}Позволяет нескольким поездам находиться в одном сигнальном блоке, если каждый из них может зарезервировать безопасный путь. Не допускает следования поездов в обратную сторону. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Изменение типа сигнала{}Когда кнопка нажата, щёлкните для преобразования существующего сигнала в сигнал выбранного типа и варианта, или щёлкните с нажатым Ctrl для перебора существующих вариантов. Shift+щелчок - оценка стоимости преобразования. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Плотность расстановки сигналов при протягивании. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Уменьшить плотность сигналов при протягивании -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличить плотность сигналов при протягивании +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Расстояние между сигналами при протягивании. +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Уменьшить расстояние между сигналами при протягивании +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличить расстояние между сигналами при протягивании # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Выберите железнодорожный мост @@ -2890,9 +2890,16 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Команда разработчиков OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Скорость игры STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скорость расчёта игры: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Вывод на экран: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущая скорость игры: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактическая скорость игры +STR_FRAMERATE_CURRENT :{WHITE}Сейчас +STR_FRAMERATE_AVERAGE :{WHITE}В среднем STR_FRAMERATE_DATA_POINTS :{BLACK}Данные по {COMMA} измерени{P ю ям ям} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} мс @@ -2903,11 +2910,32 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Расчёт игрового цикла: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Расчёт объёмов груза: +STR_FRAMERATE_GL_TRAINS :{BLACK} Движение поездов: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Движение автомобилей: +STR_FRAMERATE_GL_SHIPS :{BLACK} Движение кораблей: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Движение воздушных судов: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Изменения на карте: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Задержка графа распределения: +STR_FRAMERATE_DRAWING :{BLACK}Отрисовка изображения: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна: +STR_FRAMERATE_VIDEO :{BLACK}Вывод на экран: +STR_FRAMERATE_SOUND :{BLACK}Обработка звука: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Расчёт игрового цикла +STR_FRAMETIME_CAPTION_GL_ECONOMY :Расчёт объёмов груза +STR_FRAMETIME_CAPTION_GL_TRAINS :Движение поездов +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Движение автомобилей +STR_FRAMETIME_CAPTION_GL_SHIPS :Движение кораблей +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Движение воздушных судов +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Расчёт изменений на карте STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Задержка графа распределения -STR_FRAMETIME_CAPTION_DRAWING :Отрисовка графики +STR_FRAMETIME_CAPTION_DRAWING :Отрисовка изображения +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Отрисовка изображения в доп. окнах +STR_FRAMETIME_CAPTION_VIDEO :Вывод на экран +STR_FRAMETIME_CAPTION_SOUND :Обработка звука ############ End of leave-in-this-order @@ -3051,7 +3079,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Верс STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Совместимо с версией не ниже: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Палитра: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Стандартная (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Стандартная (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Устаревшая (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Устаревшая (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Параметры: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Нет STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Нет доступной информации STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл не найден @@ -3133,6 +3166,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Запроше STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} был отключён из-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недопустимый/неизвестный формат расположения спрайтов (спрайт {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Слишком много элементов в списке значений (спрайт {3:NUM}, свойство {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Неверная обработка продукции предприятия (спрайт {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Осторожно! @@ -3615,6 +3649,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ёмко STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Ведущие вагоны: {GOLD}+{POWER}{BLACK} Вес: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Может перевозить: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Все типы грузов +STR_PURCHASE_INFO_NONE :Нет STR_PURCHASE_INFO_ALL_BUT :Всё, кроме {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. тяговое усилие: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Дальность: {GOLD}{COMMA} клет{P ка ки ок} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 80047f50b0..fcdbd4552f 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -931,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada.. STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraní (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo Rublo Ruso (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera @@ -1073,7 +1074,7 @@ STR_RIVERS_FEW :Pocos STR_RIVERS_MODERATE :Medio STR_RIVERS_LOT :Muchos -STR_DISASTER_NONE :Ninguna +STR_DISASTER_NONE :Ninguno STR_DISASTER_REDUCED :Reducidas STR_DISASTER_NORMAL :Normales @@ -1597,7 +1598,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_TOWN_GROWTH :Velocidad crecimiento población: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidad de crecimiento de los municipios -STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ninguna +STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ninguno STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Lenta STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rápida @@ -1812,7 +1813,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificación de los valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuevo Esquema de Color +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de Color STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar esquema de colores general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Ver esquema de color de los trenes @@ -2720,6 +2721,8 @@ STR_FRAMERATE_SOUND :{BLACK}Mezcla d ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes +STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks de barcos +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks de aeronaves STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico STR_FRAMETIME_CAPTION_VIDEO :Salida de vídeo STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido @@ -2867,6 +2870,7 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. ve STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguno STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hay información disponible STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado @@ -3327,6 +3331,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3826,6 +3831,7 @@ STR_ORDER_CONDITIONAL_AGE :Edad (años) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requiere mantenimiento STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Siempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tiempo de vida restante (años) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilidad máxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar los datos del vehículo al valor dado STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :es igual a diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index a669734133..d47f4249d9 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1548,12 +1548,12 @@ STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar interfa STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar una ventana para elegir los tipos de señales a instalar. Si no se activa, se instalan las señales y se selecciona un tipo determinado mediante Ctrl+Clic, sin que aparezca ninguna interfaz STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal predeterminada a instalar: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal predeterminada a utilizar -STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de bloqueo +STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de tramo STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Señales de ruta STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Señales de ruta de un sentido STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cambiar entre tipos de señales: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Elegir entre qué señales se debe cambiar al usar Ctrl+Clic con la herramienta de señales -STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de bloqueo +STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de tramo STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo señales de ruta STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas @@ -2329,7 +2329,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trenes (para comprar y dar mantenimiento a trenes). Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir punto guía sobre vías férreas. Ctrl activa la unión de puntos guías. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estación de ferrocarril. Ctrl activa la ampliación de estaciones. Mayús muestra una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Instalar señales de ferrocarril. Ctrl cambia entre señales mecánicas y eléctricas{}Al arrastrar sobre las vías se instalan señales a lo largo de un tramo recto elegido. Ctrl instala señales hasta el siguiente desvío u otra señal{}Ctrl+Clic cambia a la herramienta de selección de señales. Mayús muestra una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Poner señales. Ctrl intercambia señales mecánicas y eléctricas{}Arrastrar sobre un tramo recto permite poner señales intercaladas. Ctrl pone señales hasta un desvío u otra señal{}Ctrl+Clic cambia al modo de selección de señales. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir puente de ferrocarril. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel de ferrocarril. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Quitar vías férreas, señales, estaciones y puntos guías. Al mantener pulsado Ctrl se quitan también las vías al retirar estaciones o puntos guías @@ -2367,17 +2367,17 @@ STR_STATION_CLASS_WAYP :Puntos guías # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Selección de señales -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Señal de bloqueo (mecánica){}Es el tipo de señal más básico que permite a un único tren ocupar al mismo tiempo un tramo de vía entre dos señales -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Señal de entrada (mecánica){}Abierta si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará cerrada -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Señal de salida (mecánica){}Igual que una señal de bloqueo pero es necesaria para activar la posición correcta de las señales de entrada y combo -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Señal de combo (mecánica){}La señal hace lo mismo que una señal de entrada y salida a la vez, lo que permite construir grandes "árboles" de señales condicionales -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Señal de ruta (mecánica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Señal de tramo (mecánica){}Es la señal más básica. Permite a un solo tren ocupar un tramo de vía entre dos señales +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Señal de entrada (mecánica){}Se abre si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará cerrada +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Señal de salida (mecánica){}Igual que una señal de tramo pero es necesaria para activar la posición correcta de las señales de entrada y combo +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Señal combo (mecánica){}Hace lo mismo que las señales de entrada y de salida, lo que permite construir amplios "árboles" de señales condicionales +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Señal de ruta (mecánica){}Permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (mecánica){}Igual que una señal de ruta pero no puede ser pasada por detrás -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Señal de bloqueo (eléctrica){}Es el tipo de señal más básico que permite a un único tren ocupar al mismo tiempo un tramo de vía entre dos señales -STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Señal de entrada (eléctrica){}Verde si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará en rojo -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal de salida (eléctrica){}Igual que una señal de bloqueo pero es necesaria para activar el color correcto de las señales de entrada y combo -STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}La señal hace lo mismo que una señal de entrada y salida a la vez, lo que permite construir grandes "árboles" de señales condicionales -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Señal de tramo (eléctrica){}Es la señal más básica. Permite a un solo tren ocupar un tramo de vía entre dos señales +STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Señal de entrada (eléctrica){}En verde si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará en rojo +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal de salida (eléctrica){}Igual que una señal de tramo pero es necesaria para activar el color correcto de las señales de entrada y combo +STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}Hace lo mismo que las señales de entrada y de salida, lo que permite construir amplios "árboles" de señales condicionales +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Igual que una señal de ruta pero no puede ser pasada por detrás STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversión de señal{}Activar para pulsar sobre una señal existente y convertirla en el tipo y variante elegidos. Ctrl+Clic permite cambiar entre variantes de señales. Mayús+Clic muestra una estimación del precio de conversión STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia entre señales @@ -2894,7 +2894,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Por defecto (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Por defecto (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Tradicional (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Tradicional (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguna STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hay información disponible STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado @@ -3459,6 +3464,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagones con motor: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reforma: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todo tipo de carga +STR_PURCHASE_INFO_NONE :Ninguno STR_PURCHASE_INFO_ALL_BUT :Todo excepto {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. fuerza de tracción: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} casillas diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 5dcbb51abc..8083c1027a 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -239,13 +239,16 @@ inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixe const int top = dpi->top - padding; const int bottom = dpi->top + dpi->height + padding; - // Cut-down Cohen–Sutherland algorithm + /* + * This method is an implementation of the Cohen-Sutherland line-clipping algorithm. + * See: https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm + */ - const unsigned char INSIDE = 0; // 0000 - const unsigned char LEFT = 1; // 0001 - const unsigned char RIGHT = 2; // 0010 - const unsigned char BOTTOM = 4; // 0100 - const unsigned char TOP = 8; // 1000 + const uint8 INSIDE = 0; // 0000 + const uint8 LEFT = 1; // 0001 + const uint8 RIGHT = 2; // 0010 + const uint8 BOTTOM = 4; // 0100 + const uint8 TOP = 8; // 1000 int x0 = pta.x; int y0 = pta.y; @@ -253,7 +256,7 @@ inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixe int y1 = ptb.y; auto out_code = [&](int x, int y) -> unsigned char { - unsigned char out = INSIDE; + uint8 out = INSIDE; if (x < left) { out |= LEFT; } else if (x > right) { @@ -267,8 +270,8 @@ inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixe return out; }; - unsigned char c0 = out_code(x0, y0); - unsigned char c1 = out_code(x1, y1); + uint8 c0 = out_code(x0, y0); + uint8 c1 = out_code(x1, y1); while (true) { if (c0 == 0 || c1 == 0) return true; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e8e439c0eb..45b08dda7d 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2365,6 +2365,10 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) break; } + case 0x23: + buf->Skip(buf->ReadByte() * 2); + break; + default: ret = HandleAction0PropertyDefault(buf, prop); break; @@ -2597,6 +2601,28 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, con housespec->max_year = buf->ReadWord(); break; + case 0x23: { // variable length cargo types accepted + uint count = buf->ReadByte(); + if (count > lengthof(housespec->accepts_cargo)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + /* Always write the full accepts_cargo array, and check each index for being inside the + * provided data. This ensures all values are properly initialized, and also avoids + * any risks of array overrun. */ + for (uint i = 0; i < lengthof(housespec->accepts_cargo); i++) { + if (i < count) { + housespec->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + housespec->cargo_acceptance[i] = buf->ReadByte(); + } else { + housespec->accepts_cargo[i] = CT_INVALID; + housespec->cargo_acceptance[i] = 0; + } + } + break; + } + default: ret = HandleAction0PropertyDefault(buf, prop); break; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 08f399fbcc..8cf564758a 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -113,15 +113,15 @@ static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint SetDParam(0, STR_JUST_RAW_STRING); SetDParamStr(1, buff); } else { - SetDParam(0, STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE); + SetDParam(0, STR_NEWGRF_SETTINGS_PARAMETER_NONE); } y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PARAMETER); /* Draw the palette of the NewGRF */ if (c->palette & GRFP_BLT_32BPP) { - SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Legacy (W) / 32 bpp" : "Default (D) / 32 bpp"); + SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP); } else { - SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Legacy (W)" : "Default (D)"); + SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT); } y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PALETTE); } diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 94f20e0df3..6a501ef2d4 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -2519,6 +2519,13 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool } else { if (v->type != VEH_AIRCRAFT) { v->SetDestTile(Depot::Get(order->GetDestination())->xy); + } else { + Aircraft *a = Aircraft::From(v); + DestinationID destination = a->current_order.GetDestination(); + if (a->targetairport != destination) { + /* The aircraft is now heading for a different hangar than the next in the orders */ + a->SetDestTile(a->GetOrderStationLocation(destination)); + } } return true; } diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index 616d8bb3eb..ad51be76c6 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -14,7 +14,7 @@ #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS -#ifdef MSVC +#ifndef __MINGW32__ #include "winres.h" #else #define IDC_STATIC (-1) // all static controls @@ -117,5 +117,9 @@ END #endif // !_MAC +#ifdef __MINGW32__ +1 24 "..\\..\\..\\projects\\dpi_aware.manifest" +#endif + #endif // Neutral (Default) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index aba4b9829a..b3ffa199fa 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -59,7 +59,7 @@ public: /* handle special case - when next tile is destination tile */ if (tile == v->dest_tile) { /* convert tracks to trackdirs */ - TrackdirBits trackdirs = (TrackdirBits)(tracks | ((int)tracks << 8)); + TrackdirBits trackdirs = TrackBitsToTrackdirBits(tracks); /* limit to trackdirs reachable from enterdir */ trackdirs &= DiagdirReachesTrackdirs(enterdir); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index be03eb6c0d..e70d5e370c 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -282,8 +282,9 @@ * 201 #6885 Extend NewGRF persistant storages. * 202 #6867 Increase industry cargo slots to 16 in, 16 out * 203 #7072 Add path cache for ships + * 204 #7065 Add extra rotation stages for ships. */ -extern const uint16 SAVEGAME_VERSION = 203; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 204; ///< Current savegame version of OpenTTD. const uint16 SAVEGAME_VERSION_EXT = 0x8000; ///< Savegame extension indicator mask SavegameType _savegame_type; ///< type of savegame we are loading diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 2fd2f94311..5e4d541cd0 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -371,6 +371,14 @@ void AfterLoadVehicles(bool part_of_load) v->SetServiceIntervalIsPercent(c->settings.vehicle.servint_ispercent); } } + + if (IsSavegameVersionBefore(204)) { + /* Ship rotation added */ + Ship *s; + FOR_ALL_SHIPS(s) { + s->rotation = s->direction; + } + } } v = nullptr; @@ -792,8 +800,9 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) static const SaveLoad _ship_desc[] = { SLE_WRITEBYTE(Vehicle, type, VEH_SHIP), SLE_VEH_INCLUDE(), - SLE_VAR(Ship, state, SLE_UINT8), - SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), + SLE_VAR(Ship, state, SLE_UINT8), + SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), + SLE_CONDVAR(Ship, rotation, SLE_UINT8, 204, SL_MAX_VERSION), SLE_CONDNULL(16, 2, 143), // old reserved space diff --git a/src/script/api/generate_widget.awk b/src/script/api/generate_widget.awk index 81d9592d77..cdbe59d970 100644 --- a/src/script/api/generate_widget.awk +++ b/src/script/api/generate_widget.awk @@ -24,6 +24,8 @@ BEGIN { skiptillend = 0; } +{ CR = (match($0, "\\r$") > 0 ? "\r" : "") } + /@enum/ { print; add_indent = gensub("[^ ]*", "", "g"); @@ -42,7 +44,7 @@ BEGIN { active_comment = 0; comment = ""; file = filearray[i]; - print add_indent "/* automatically generated from " file " */" + print add_indent "/* automatically generated from " file " */" CR while ((getline < file) > 0) { sub(rm_indent, ""); @@ -65,7 +67,7 @@ BEGIN { } # Forget doxygen comment, if no enum follows - if (active_comment == 2 && $0 != "") { + if (active_comment == 2 && $0 != "" CR) { active_comment = 0; comment = ""; } @@ -78,22 +80,21 @@ BEGIN { sub(" *//", " //"); match($0, "^( *)([A-Za-z0-9_]+),(.*)", parts); - enumwidth - length(parts[2]) - if (parts[3] == "") { - printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] ",") + if (parts[3] == "" CR) { + printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] "," CR) } else { - printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), parts[3]; + printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), (parts[3]); } - } else if ($0 == "") { - print ""; + } else if ($0 == "" CR) { + print "" CR; } else { print add_indent $0; } } if (match($0, "^ *\\};") > 0) { - if (active != 0) print ""; + if (active != 0) print "" CR; active = 0; } } diff --git a/src/script/api/generate_widget.vbs b/src/script/api/generate_widget.vbs new file mode 100644 index 0000000000..0bd38bb299 --- /dev/null +++ b/src/script/api/generate_widget.vbs @@ -0,0 +1,192 @@ +Option Explicit + +' $Id$ +' +' This file is part of OpenTTD. +' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +Dim FSO, filename, skiptillend, eof +Set FSO = CreateObject("Scripting.FileSystemObject") + +filename = "script_window.hpp" +skiptillend = False +eof = vbCrLf + +If Not FSO.FileExists(filename) Then + WScript.Echo filename & " not found" + WScript.Quit 1 +End If + +Function GetFiles(pattern) + Dim parent, re, files, f + Set files = CreateObject("Scripting.Dictionary") + Set re = New RegExp + + parent = FSO.GetParentFolderName(pattern) + pattern = FSO.GetFileName(pattern) + + ' Convert pattern to a valid regex + re.Global = True + re.Pattern = "\." + pattern = re.Replace(pattern, "\.") + re.Pattern = "\*" + pattern = re.Replace(pattern, ".*") + re.Pattern = pattern + + ' Get the file list + For Each f In FSO.GetFolder(parent).Files + If re.Test(f.Path) Then + f = parent & "/" & f.Name + files.Add f, f + End If + Next + + ' Sort the file list + Set GetFiles = CreateObject("Scripting.Dictionary") + While files.Count <> 0 + Dim first + first = "" + For Each f in files + If first = "" Or StrComp(first, f) = 1 Then first = f + Next + GetFiles.Add first, first + files.Remove(First) + Wend +End Function + +Sub Generate(line, file) + Dim re, add_indent, enum_pattern, file_pattern, f, active, active_comment, comment, rm_indent + Set re = New RegExp + + re.Global = True + re.Pattern = "[^ ]*" + add_indent = re.Replace(line, "") + re.Global = False + re.Pattern = ".*@enum *" + line = Split(re.Replace(line, "")) + enum_pattern = line(0) + file_pattern = line(1) + For Each f In GetFiles(file_pattern).Items + active = 0 + active_comment = 0 + comment = "" + file.Write add_indent & "/* automatically generated from " & f & " */" & eof + Set f = FSO.OpenTextFile(f, 1) + While Not f.AtEndOfStream + re.Pattern = rm_indent + line = re.Replace(f.ReadLine, "") + + ' Remember possible doxygen comment before enum declaration + re.Pattern = "/\*\*" + If active = 0 And re.Test(line) Then + comment = add_indent & line + active_comment = 1 + ElseIf active_comment = 1 Then + comment = comment & vbCrLf & add_indent & line + End If + + ' Check for enum match + re.Pattern = "^ *enum *" & enum_pattern & " *\{" + If re.Test(line) Then + re.Global = True + re.Pattern = "[^ ]*" + rm_indent = re.Replace(line, "") + re.Global = False + active = 1 + If active_comment > 0 Then file.Write comment & eof + active_comment = 0 + comment = "" + End If + + ' Forget doxygen comment, if no enum follows + If active_comment = 2 And line <> "" Then + active_comment = 0 + comment = "" + End If + re.Pattern = "\*/" + If active_comment = 1 And re.Test(line) Then active_comment = 2 + + If active <> 0 Then + re.Pattern = "^ *[A-Za-z0-9_]* *[,=]" + If re.Test(line) Then + Dim parts + ' Transform enum values + re.Pattern = " *=[^,]*" + line = re.Replace(line, "") + re.Pattern = " *//" + line = re.Replace(line, " //") + + re.Pattern = "^( *)([A-Za-z0-9_]+),(.*)" + Set parts = re.Execute(line) + + With parts.Item(0).SubMatches + If .Item(2) = "" Then + file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & eof + Else + file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & String(44 - Len(.Item(1)), " ") & .Item(2) & eof + End If + End With + ElseIf line = "" Then + file.Write eof + Else + file.Write add_indent & line & eof + End If + End If + + re.Pattern = "^ *\};" + If re.Test(line) Then + If active <> 0 Then file.Write eof + active = 0 + End If + Wend + f.Close + Next +End Sub + +Sub Parse(line, file) + Dim re + Set re = New RegExp + + re.pattern = "@enum" + If re.Test(line) Then + file.Write line & eof + Generate line, file + skiptillend = True + Exit Sub + End If + + re.pattern = "@endenum" + If re.Test(line) Then + file.Write line & eof + skiptillend = False + Exit Sub + End If + + If Not skiptillend Then + file.Write line & eof + End If +End Sub + +Dim file, source, lines, i + +WScript.Echo "Starting to parse " & filename +Set file = FSO.OpenTextFile(filename, 1) +If Not file.AtEndOfStream Then + source = file.ReadAll +End IF +file.Close + +lines = Split(source, eof) +If UBound(lines) = 0 Then + eof = vbLf + lines = Split(source, eof) +End If + +Set file = FSO.OpenTextFile(filename, 2) +For i = LBound(lines) To UBound(lines) - 1 ' Split adds an extra line, we must ignore it + Parse lines(i), file +Next +file.Close +WScript.Echo "Done" diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 4cdd6a9d0e..64f8e166ea 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -170,7 +170,7 @@ break; default: - EnforcePrecondition(false, days_between_town_growth <= MAX_TOWN_GROWTH_TICKS); + EnforcePrecondition(false, (days_between_town_growth * DAY_TICKS / TOWN_GROWTH_TICKS) <= MAX_TOWN_GROWTH_TICKS); /* Don't use growth_rate 0 as it means GROWTH_NORMAL */ growth_rate = max(days_between_town_growth * DAY_TICKS, 2u) - 1; break; diff --git a/src/ship.h b/src/ship.h index e61d4b5915..cd815db0b8 100644 --- a/src/ship.h +++ b/src/ship.h @@ -28,8 +28,9 @@ typedef std::deque ShipPathCache; * All ships have this type. */ struct Ship FINAL : public SpecializedVehicle { - TrackBitsByte state; ///< The "track" the ship is following. - ShipPathCache path; ///< Cached path. + TrackBitsByte state; ///< The "track" the ship is following. + ShipPathCache path; ///< Cached path. + DirectionByte rotation; ///< Visible direction. /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Ship() : SpecializedVehicleBase() {} diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 900b3021d6..3758bb49e2 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -129,6 +129,8 @@ void Ship::GetImage(Direction direction, EngineImageType image_type, VehicleSpri { uint8 spritenum = this->spritenum; + if (image_type == EIT_ON_MAP) direction = this->rotation; + if (is_custom_sprite(spritenum)) { GetCustomVehicleSprite(this, direction, image_type, result); if (result->IsValid()) return; @@ -312,7 +314,7 @@ void Ship::UpdateDeltaXY() {32, 6, -16, -3}, // NW }; - const int8 *bb = _delta_xy_table[this->direction]; + const int8 *bb = _delta_xy_table[this->rotation]; this->x_offs = bb[3]; this->y_offs = bb[2]; this->x_extent = bb[1]; @@ -378,10 +380,10 @@ static bool CheckShipLeaveDepot(Ship *v) if (north_tracks) { /* Leave towards north */ - v->direction = DiagDirToDir(north_dir); + v->rotation = v->direction = DiagDirToDir(north_dir); } else if (south_tracks) { /* Leave towards south */ - v->direction = DiagDirToDir(south_dir); + v->rotation = v->direction = DiagDirToDir(south_dir); } else { /* Both ways blocked */ return false; @@ -482,7 +484,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > SHIP_MAX_ORDER_DISTANCE + 5) { /* No destination or destination too far, don't invoke pathfinder. */ track = TrackBitsToTrack(v->state); - if (track != TRACK_X && track != TRACK_Y) track = TrackToOppositeTrack(track); + if (!IsDiagonalTrack(track)) track = TrackToOppositeTrack(track); if (!HasBit(tracks, track)) { /* Can't continue in same direction so pick first available track. */ if (_settings_game.pf.forbid_90_deg) { @@ -694,7 +696,6 @@ static void ShipController(Ship *v) { uint32 r; const byte *b; - Direction dir; Track track; TrackBits tracks; @@ -714,6 +715,16 @@ static void ShipController(Ship *v) v->ShowVisualEffect(); + /* Rotating on spot */ + if (v->direction != v->rotation) { + if ((v->tick_counter & 7) == 0) { + DirDiff diff = DirDifference(v->direction, v->rotation); + v->rotation = ChangeDir(v->rotation, diff > DIRDIFF_REVERSE ? DIRDIFF_45LEFT : DIRDIFF_45RIGHT); + v->UpdateViewport(true, true); + } + return; + } + if (!ShipAccelerate(v)) return; GetNewVehiclePosResult gp = GetNewVehiclePos(v); @@ -804,7 +815,22 @@ static void ShipController(Ship *v) if (old_wc != new_wc) v->UpdateCache(); } - v->direction = (Direction)b[2]; + Direction new_direction = (Direction)b[2]; + DirDiff diff = DirDifference(new_direction, v->direction); + switch (diff) { + case DIRDIFF_SAME: + case DIRDIFF_45RIGHT: + case DIRDIFF_45LEFT: + /* Continue at speed */ + v->rotation = v->direction = new_direction; + break; + + default: + /* Stop for rotation */ + v->cur_speed = 0; + v->direction = new_direction; + break; + } } } else { /* On a bridge */ @@ -831,8 +857,8 @@ getout: return; reverse_direction: - dir = ReverseDir(v->direction); - v->direction = dir; + v->direction = ReverseDir(v->direction); + v->cur_speed = 0; v->path.clear(); goto getout; } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index f2e960d77a..a1044a70c6 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -827,8 +827,8 @@ void SmallMapWindow::DrawMapIndicators() const /* Find main viewport. */ const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; - Point upper_left_smallmap_coord = TranslateXYToTileCoord(vp, vp->left, vp->top, false); - Point lower_right_smallmap_coord = TranslateXYToTileCoord(vp, vp->left + vp->width - 1, vp->top + vp->height - 1, false); + Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top); + Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1); Point upper_left = this->RemapTile(upper_left_smallmap_coord.x / (int)TILE_SIZE, upper_left_smallmap_coord.y / (int)TILE_SIZE); upper_left.x -= this->subscroll; @@ -1557,7 +1557,7 @@ void SmallMapWindow::SetNewScroll(int sx, int sy, int sub) void SmallMapWindow::SmallMapCenterOnCurrentPos() { const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; - Point viewport_center = TranslateXYToTileCoord(vp, vp->left + vp->width / 2, vp->top + vp->height / 2); + Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2); int sub; const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); diff --git a/src/table/town_land.h b/src/table/town_land.h index e4098334ac..6476015119 100644 --- a/src/table/town_land.h +++ b/src/table/town_land.h @@ -1812,8 +1812,11 @@ assert_compile(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4); * @see HouseSpec */ #define MS(mnd, mxd, p, rc, bn, rr, mg, ca1, ca2, ca3, bf, ba, cg1, cg2, cg3) \ - {mnd, mxd, p, rc, bn, rr, mg, {ca1, ca2, ca3}, {cg1, cg2, cg3}, bf, ba, true, \ - GRFFileProps(INVALID_HOUSE_ID), 0, {0, 0, 0, 0}, 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0} + {mnd, mxd, p, rc, bn, rr, mg, \ + {ca1, ca2, ca3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \ + {cg1, cg2, cg3, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, \ + bf, ba, true, GRFFileProps(INVALID_HOUSE_ID), 0, {0, 0, 0, 0}, \ + 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0} /** House specifications from original data */ static const HouseSpec _original_house_specs[] = { /** diff --git a/src/table/townname.h b/src/table/townname.h index e4674f7530..2e81801521 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -762,7 +762,7 @@ static const char * const _name_french_real[] = { "Blois", "Troyes", "Charolles", - "Grenoble", + "Toulouse", "Chamb\xC3\xA9ry", "Tours", "St. Brieuc", @@ -773,7 +773,7 @@ static const char * const _name_french_real[] = { "Vichy", "St. Valery", "Beaujolais", - "Narbonne", + "Reims", "Albi", "Paris", "Biarritz", @@ -2041,8 +2041,8 @@ static const char * const _name_romanian_real[] = { static const char * const _name_slovak_real[] = { "Bratislava", "Banovce nad Bebravou", - "Banska Bystrica", - "Banska Stiavnica", + "Bansk\xC3\xA1 Bystrica", + "Bansk\xC3\xA1 \xC5\xA0tiavnica", "Bardejov", "Brezno", "Brezova pod Bradlom", @@ -2050,9 +2050,9 @@ static const char * const _name_slovak_real[] = { "Cadca", "Cierna nad Tisou", "Detva", - "Detva", - "Dolny Kubin", + "Pre\xC5\xA1ov", "Dolny Kubin", + "Spi\xC5\xA1sk\xC3\xA1 Nov\xC3\xA1 Ves", "Dunajska Streda", "Gabcikovo", "Galanta", @@ -2064,8 +2064,8 @@ static const char * const _name_slovak_real[] = { "Humenne", "Hurbanovo", "Kezmarok", - "Komarno", - "Kosice", + "Kom\xC3\xA1rno", + "Ko\xC5\xA1ice", "Kremnica", "Krompachy", "Kuty", @@ -2081,15 +2081,15 @@ static const char * const _name_slovak_real[] = { "Myjava", "Namestovo", "Nitra", - "Nova Bana", - "Nove Mesto nad Vahom", - "Nove Zamky", + "Nov\xC3\xA1 Ba\xC5\x88""a", + "Nov\xC3\xA9"" Mesto nad V\xC3\xA1hom", + "Nov\xC3\xA9"" Z\xC3\xA1""mky", "Partizanske", "Pezinok", "Piestany", "Poltar", "Poprad", - "Povazska Bystrica", + "Pova\xC5\xBEsk\xC3\xA1 Bystrica", "Prievidza", "Puchov", "Revuca", @@ -2123,7 +2123,7 @@ static const char * const _name_slovak_real[] = { "Zahorska Bystrica", "Zdiar", "Ziar nad Hronom", - "Zilina", + "\xC5\xBDilina", "Zlate Moravce", "Zvolen", }; diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 3657e7f6eb..703b3ae478 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -309,6 +309,14 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } if (flags & DC_EXEC) { + /* Mark affected areas dirty. */ + for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) { + MarkTileDirtyByTile(*it); + TileIndexToHeightMap::const_iterator new_height = ts.tile_to_new_height.find(tile); + if (new_height == ts.tile_to_new_height.end()) continue; + MarkTileDirtyByTile(*it, ZOOM_LVL_END, 0, new_height->second); + } + /* change the height */ for (TileIndexToHeightMap::const_iterator it = ts.tile_to_new_height.begin(); it != ts.tile_to_new_height.end(); it++) { @@ -318,91 +326,6 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin SetTileHeight(tile, (uint)height); } - /* Finally mark the dirty tiles dirty */ - for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) { - MarkTileDirtyByTile(*it); - - int height = TerraformGetHeightOfTile(&ts, *it); - - /* Now, if we alter the height of the map edge, we need to take care - * about repainting the affected areas outside map as well. - * Remember: - * Outside map, we assume that our landscape descends to - * height zero as fast as possible. - * Those simulated tiles (they don't exist as datastructure, - * only as concept in code) need to be repainted properly, - * otherwise we will get ugly glitches. - * - * Furthermore, note that we have to take care about the possibility, - * that landscape was higher before the change, - * so also tiles a bit outside need to be repainted. - */ - int x = TileX(*it); - int y = TileY(*it); - if (x == 0) { - if (y == 0) { - /* Height of the northern corner is altered. */ - for (int cx = 0; cx >= -height - 1; cx--) { - for (int cy = 0; cy >= -height - 1; cy--) { - /* This means, tiles in the sector north of that - * corner need to be repainted. - */ - if (cx + cy >= -height - 2) { - /* But only tiles that actually might have changed. */ - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } else if (y < (int)MapMaxY()) { - for (int cx = 0; cx >= -height - 1; cx--) { - MarkTileDirtyByTileOutsideMap(cx, y); - } - } else { - for (int cx = 0; cx >= -height - 1; cx--) { - for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) { - if (cx + ((int)MapMaxY() - cy) >= -height - 2) { - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } - } else if (x < (int)MapMaxX()) { - if (y == 0) { - for (int cy = 0; cy >= -height - 1; cy--) { - MarkTileDirtyByTileOutsideMap(x, cy); - } - } else if (y < (int)MapMaxY()) { - /* Nothing to be done here, we are inside the map. */ - } else { - for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) { - MarkTileDirtyByTileOutsideMap(x, cy); - } - } - } else { - if (y == 0) { - for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) { - for (int cy = 0; cy >= -height - 1; cy--) { - if (((int)MapMaxX() - cx) + cy >= -height - 2) { - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } else if (y < (int)MapMaxY()) { - for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) { - MarkTileDirtyByTileOutsideMap(cx, y); - } - } else { - for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) { - for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) { - if (((int)MapMaxX() - cx) + ((int)MapMaxY() - cy) >= -height - 2) { - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } - } - } - if (c != NULL) c->terraform_limit -= (uint32)ts.tile_to_new_height.size() << 16; } return total_cost; diff --git a/src/tile_map.cpp b/src/tile_map.cpp index d73beeb886..200a203089 100644 --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -14,60 +14,6 @@ #include "safeguards.h" -/** - * Returns the tile height for a coordinate outside map. Such a height is - * needed for painting the area outside map using completely black tiles. - * The idea is descending to heightlevel 0 as fast as possible. - * @param x The X-coordinate (same unit as TileX). - * @param y The Y-coordinate (same unit as TileY). - * @return The height in the same unit as TileHeight. - */ -uint TileHeightOutsideMap(int x, int y) -{ - /* In all cases: Descend to heightlevel 0 as fast as possible. - * So: If we are at the 0-side of the map (x<0 or y<0), we must - * subtract the distance to coordinate 0 from the heightlevel at - * coordinate 0. - * In other words: Subtract e.g. -x. If we are at the MapMax - * side of the map, we also need to subtract the distance to - * the edge of map, e.g. MapMaxX - x. - * - * NOTE: Assuming constant heightlevel outside map would be - * simpler here. However, then we run into painting problems, - * since whenever a heightlevel change at the map border occurs, - * we would need to repaint anything outside map. - * In contrast, by doing it this way, we can localize this change, - * which means we may assume constant heightlevel for all tiles - * at more than distance from the - * map border. - */ - if (x < 0) { - if (y < 0) { - return max((int)TileHeight(TileXY(0, 0)) - (-x) - (-y), 0); - } else if (y < (int)MapMaxY()) { - return max((int)TileHeight(TileXY(0, y)) - (-x), 0); - } else { - return max((int)TileHeight(TileXY(0, (int)MapMaxY())) - (-x) - (y - (int)MapMaxY()), 0); - } - } else if (x < (int)MapMaxX()) { - if (y < 0) { - return max((int)TileHeight(TileXY(x, 0)) - (-y), 0); - } else if (y < (int)MapMaxY()) { - return TileHeight(TileXY(x, y)); - } else { - return max((int)TileHeight(TileXY(x, (int)MapMaxY())) - (y - (int)MapMaxY()), 0); - } - } else { - if (y < 0) { - return max((int)TileHeight(TileXY((int)MapMaxX(), 0)) - (x - (int)MapMaxX()) - (-y), 0); - } else if (y < (int)MapMaxY()) { - return max((int)TileHeight(TileXY((int)MapMaxX(), y)) - (x - (int)MapMaxX()), 0); - } else { - return max((int)TileHeight(TileXY((int)MapMaxX(), (int)MapMaxY())) - (x - (int)MapMaxX()) - (y - (int)MapMaxY()), 0); - } - } -} - /** * Get a tile's slope given the heigh of its four corners. * @param hnorth The height at the northern corner in the same unit as TileHeight. @@ -114,30 +60,26 @@ static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsout */ Slope GetTileSlope(TileIndex tile, int *h) { - assert(tile < MapSize()); - - uint x = TileX(tile); - uint y = TileY(tile); - if (x == MapMaxX() || y == MapMaxY()) { - if (h != NULL) *h = TileHeight(tile); - return SLOPE_FLAT; - } + uint x1 = TileX(tile); + uint y1 = TileY(tile); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); - int hnorth = TileHeight(tile); // Height of the North corner. - int hwest = TileHeight(tile + TileDiffXY(1, 0)); // Height of the West corner. - int heast = TileHeight(tile + TileDiffXY(0, 1)); // Height of the East corner. - int hsouth = TileHeight(tile + TileDiffXY(1, 1)); // Height of the South corner. + int hnorth = TileHeight(tile); // Height of the North corner. + int hwest = TileHeight(TileXY(x2, y1)); // Height of the West corner. + int heast = TileHeight(TileXY(x1, y2)); // Height of the East corner. + int hsouth = TileHeight(TileXY(x2, y2)); // Height of the South corner. return GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth, h); } /** - * Return the slope of a given tile outside the map. + * Return the slope of a given tile, also for tiles outside the map (virtual "black" tiles). * - * @param x X-coordinate of the tile outside to compute height of. - * @param y Y-coordinate of the tile outside to compute height of. - * @param h If not \c NULL, pointer to storage of z height. - * @return Slope of the tile outside map, except for the HALFTILE part. + * @param x X coordinate of the tile to compute slope of, may be ouside the map. + * @param y Y coordinate of the tile to compute slope of, may be ouside the map. + * @param h If not \c NULL, pointer to storage of z height. + * @return Slope of the tile, except for the HALFTILE part. */ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h) { @@ -159,17 +101,15 @@ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h) */ bool IsTileFlat(TileIndex tile, int *h) { - assert(tile < MapSize()); - - if (!IsInnerTile(tile)) { - if (h != NULL) *h = TileHeight(tile); - return true; - } + uint x1 = TileX(tile); + uint y1 = TileY(tile); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); uint z = TileHeight(tile); - if (TileHeight(tile + TileDiffXY(1, 0)) != z) return false; - if (TileHeight(tile + TileDiffXY(0, 1)) != z) return false; - if (TileHeight(tile + TileDiffXY(1, 1)) != z) return false; + if (TileHeight(TileXY(x2, y1)) != z) return false; + if (TileHeight(TileXY(x1, y2)) != z) return false; + if (TileHeight(TileXY(x2, y2)) != z) return false; if (h != NULL) *h = z; return true; @@ -182,33 +122,19 @@ bool IsTileFlat(TileIndex tile, int *h) */ int GetTileZ(TileIndex tile) { - if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0; + uint x1 = TileX(tile); + uint y1 = TileY(tile); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); - int h = TileHeight(tile); // N corner - h = min(h, TileHeight(tile + TileDiffXY(1, 0))); // W corner - h = min(h, TileHeight(tile + TileDiffXY(0, 1))); // E corner - h = min(h, TileHeight(tile + TileDiffXY(1, 1))); // S corner + int h = TileHeight(tile); // N corner + h = min(h, TileHeight(TileXY(x2, y1))); // W corner + h = min(h, TileHeight(TileXY(x1, y2))); // E corner + h = min(h, TileHeight(TileXY(x2, y2))); // S corner return h; } -/** - * Get bottom height of the tile outside map. - * - * @param x X-coordinate of the tile outside to compute height of. - * @param y Y-coordinate of the tile outside to compute height of. - * @return Minimum height of the tile outside the map. - */ -int GetTilePixelZOutsideMap(int x, int y) -{ - uint h = TileHeightOutsideMap(x, y); // N corner. - h = min(h, TileHeightOutsideMap(x + 1, y)); // W corner. - h = min(h, TileHeightOutsideMap(x, y + 1)); // E corner. - h = min(h, TileHeightOutsideMap(x + 1, y + 1)); // S corner - - return h * TILE_HEIGHT; -} - /** * Get top height of the tile inside the map. * @param t Tile to compute height of @@ -216,31 +142,15 @@ int GetTilePixelZOutsideMap(int x, int y) */ int GetTileMaxZ(TileIndex t) { - if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return TileHeightOutsideMap(TileX(t), TileY(t)); + uint x1 = TileX(t); + uint y1 = TileY(t); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); - int h = TileHeight(t); // N corner - h = max(h, TileHeight(t + TileDiffXY(1, 0))); // W corner - h = max(h, TileHeight(t + TileDiffXY(0, 1))); // E corner - h = max(h, TileHeight(t + TileDiffXY(1, 1))); // S corner + int h = TileHeight(t); // N corner + h = max(h, TileHeight(TileXY(x2, y1))); // W corner + h = max(h, TileHeight(TileXY(x1, y2))); // E corner + h = max(h, TileHeight(TileXY(x2, y2))); // S corner return h; } - -/** - * Get top height of the tile outside the map. - * - * @see Detailed description in header. - * - * @param x X-coordinate of the tile outside to compute height of. - * @param y Y-coordinate of the tile outside to compute height of. - * @return Maximum height of the tile. - */ -int GetTileMaxPixelZOutsideMap(int x, int y) -{ - uint h = TileHeightOutsideMap(x, y); - h = max(h, TileHeightOutsideMap(x + 1, y)); - h = max(h, TileHeightOutsideMap(x, y + 1)); - h = max(h, TileHeightOutsideMap(x + 1, y + 1)); - - return h * TILE_HEIGHT; -} diff --git a/src/tile_map.h b/src/tile_map.h index d6ee5b94bd..b185e3eed9 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -37,7 +37,17 @@ static inline uint TileHeight(TileIndex tile) return _m[tile].height; } -uint TileHeightOutsideMap(int x, int y); +/** + * Returns the height of a tile, also for tiles outside the map (virtual "black" tiles). + * + * @param x X coordinate of the tile, may be ouside the map. + * @param y Y coordinate of the tile, may be ouside the map. + * @return The height in the same unit as TileHeight. + */ +static inline uint TileHeightOutsideMap(int x, int y) +{ + return TileHeight(TileXY(Clamp(x, 0, MapMaxX()), Clamp(y, 0, MapMaxY()))); +} /** * Sets the height of a tile. @@ -70,11 +80,10 @@ static inline uint TilePixelHeight(TileIndex tile) } /** - * Returns the tile height for a coordinate outside map. Such a height is - * needed for painting the area outside map using completely black tiles. - * The idea is descending to heightlevel 0 as fast as possible. - * @param x The X-coordinate (same unit as TileX). - * @param y The Y-coordinate (same unit as TileY). + * Returns the height of a tile in pixels, also for tiles outside the map (virtual "black" tiles). + * + * @param x X coordinate of the tile, may be ouside the map. + * @param y Y coordinate of the tile, may be ouside the map. * @return The height in pixels in the same unit as TilePixelHeight. */ static inline uint TilePixelHeightOutsideMap(int x, int y) @@ -293,8 +302,6 @@ static inline int GetTilePixelZ(TileIndex tile) return GetTileZ(tile) * TILE_HEIGHT; } -int GetTilePixelZOutsideMap(int x, int y); - /** * Get top height of the tile * @param tile Tile to compute height of @@ -305,9 +312,6 @@ static inline int GetTileMaxPixelZ(TileIndex tile) return GetTileMaxZ(tile) * TILE_HEIGHT; } -int GetTileMaxPixelZOutsideMap(int x, int y); - - /** * Calculate a hash value from a tile position * diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 18653d017c..cdc0833f26 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -121,12 +121,14 @@ public: */ class DropDownListCompanyItem : public DropDownListItem { Dimension icon_size; + Dimension lock_size; public: bool greyed; DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed) { this->icon_size = GetSpriteSize(SPR_COMPANY_ICON); + this->lock_size = GetSpriteSize(SPR_LOCK); } virtual ~DropDownListCompanyItem() {} @@ -141,12 +143,12 @@ public: CompanyID company = (CompanyID)this->result; SetDParam(0, company); SetDParam(1, company); - return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + 3; + return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6; } uint Height(uint width) const { - return max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL); + return max(max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL); } void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const @@ -159,8 +161,12 @@ public: int icon_offset = (bottom - top - icon_size.height) / 2; int text_offset = (bottom - top - FONT_HEIGHT_NORMAL) / 2; + int lock_offset = (bottom - top - lock_size.height) / 2; DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset); + if (NetworkCompanyIsPassworded(company)) { + DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset); + } SetDParam(0, company); SetDParam(1, company); @@ -170,7 +176,7 @@ public: } else { col = sel ? TC_WHITE : TC_BLACK; } - DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 0), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col); + DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 3 + this->lock_size.width : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 3 + this->lock_size.width), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col); } }; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index f8201bc30e..49810590f7 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -784,7 +784,7 @@ void AddAcceptedHouseCargo(HouseID house_id, TileIndex tile, CargoArray &accepta { const HouseSpec *hs = HouseSpec::Get(house_id); Town *t = (tile == INVALID_TILE) ? NULL : Town::GetByTile(tile); - CargoID accepts[3]; + CargoID accepts[lengthof(hs->accepts_cargo)]; /* Set the initial accepted cargo types */ for (uint8 i = 0; i < lengthof(accepts); i++) { diff --git a/src/viewport.cpp b/src/viewport.cpp index 438f69976b..7a63bcc438 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -519,65 +519,27 @@ ViewPort *IsPtInWindowViewport(const Window *w, int x, int y) } /** - * Translate screen coordinate in a viewport to a tile coordinate + * Translate screen coordinate in a viewport to underlying tile coordinate. + * + * Returns exact point of the map that is visible in the given place + * of the viewport (3D perspective), height of tiles and foundations matter. + * * @param vp Viewport that contains the (\a x, \a y) screen coordinate - * @param x Screen x coordinate - * @param y Screen y coordinate - * @param clamp_to_map Clamp the coordinate outside of the map to the closest tile within the map. - * @return Tile coordinate + * @param x Screen x coordinate, distance in pixels from the left edge of viewport frame + * @param y Screen y coordinate, distance in pixels from the top edge of viewport frame + * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map + * @return Tile coordinate or (-1, -1) if given x or y is not within viewport frame */ Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y, bool clamp_to_map) { - Point pt; - int a, b; - int z; - - if ( (uint)(x -= vp->left) >= (uint)vp->width || - (uint)(y -= vp->top) >= (uint)vp->height) { - Point pt = {-1, -1}; - return pt; - } - - x = (ScaleByZoom(x, vp->zoom) + vp->virtual_left) >> (2 + ZOOM_LVL_SHIFT); - y = (ScaleByZoom(y, vp->zoom) + vp->virtual_top) >> (1 + ZOOM_LVL_SHIFT); - - a = y - x; - b = y + x; - - if (clamp_to_map) { - /* Bring the coordinates near to a valid range. This is mostly due to the - * tiles on the north side of the map possibly being drawn too high due to - * the extra height levels. So at the top we allow a number of extra tiles. - * This number is based on the tile height and pixels. */ - int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS); - a = Clamp(a, -extra_tiles * TILE_SIZE, MapMaxX() * TILE_SIZE - 1); - b = Clamp(b, -extra_tiles * TILE_SIZE, MapMaxY() * TILE_SIZE - 1); + if (!IsInsideBS(x, vp->left, vp->width) || !IsInsideBS(y, vp->top, vp->height)) { + Point pt = { -1, -1 }; + return pt; } - /* (a, b) is the X/Y-world coordinate that belongs to (x,y) if the landscape would be completely flat on height 0. - * Now find the Z-world coordinate by fix point iteration. - * This is a bit tricky because the tile height is non-continuous at foundations. - * The clicked point should be approached from the back, otherwise there are regions that are not clickable. - * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely) - * So give it a z-malus of 4 in the first iterations. - */ - z = 0; - - int min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0; - - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(a + max(z, 4) - 4, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + max(z, 4) - 4, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; - for (int malus = 3; malus > 0; malus--) z = GetSlopePixelZ(Clamp(a + max(z, malus) - malus, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + max(z, malus) - malus, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(a + z, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + z, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; - - if (clamp_to_map) { - pt.x = Clamp(a + z, min_coord, MapMaxX() * TILE_SIZE - 1); - pt.y = Clamp(b + z, min_coord, MapMaxY() * TILE_SIZE - 1); - } else { - pt.x = a + z; - pt.y = b + z; - } - - return pt; + return InverseRemapCoords2( + ScaleByZoom(x - vp->left, vp->zoom) + vp->virtual_left, + ScaleByZoom(y - vp->top, vp->zoom) + vp->virtual_top, clamp_to_map); } /* When used for zooming, check area below current coordinates (x,y) @@ -1214,29 +1176,41 @@ static void DrawTileSelection(const TileInfo *ti) } /** - * Returns the y coordinate in the viewport coordinate system where the given - * tile is painted. - * @param tile Any tile. - * @return The viewport y coordinate where the tile is painted. + * Returns the Y coordinate in the viewport coordinate system where a given + * tile should be painted. Can be used on virtual "black" tiles outside map. + * + * @param tile Tile coordinates of the tile. Map outside is allowed. + * @return Viewport Y coordinate where the northern corner of the tile is located (foundations not included). */ -static int GetViewportY(Point tile) +static inline int GetTilePaintY(Point tile) { - /* Each increment in X or Y direction moves down by half a tile, i.e. TILE_PIXELS / 2. */ - return (tile.y * (int)(TILE_PIXELS / 2) + tile.x * (int)(TILE_PIXELS / 2) - TilePixelHeightOutsideMap(tile.x, tile.y)) << ZOOM_LVL_SHIFT; + return RemapCoords(tile.x * TILE_SIZE, tile.y * TILE_SIZE, TilePixelHeightOutsideMap(tile.x, tile.y)).y; } /** - * Add the landscape to the viewport, i.e. all ground tiles and buildings. + * Add sprites of a single tile to the viewport. + * + * @param[in,out] ti Filled-in tile information of the tile. On return, \a z coordinate will be updated and include foundations (if any). + * @param tile_type Type of the tile (#GetTileType) or #MP_VOID for virtual "black" tiles outside map. */ -static void ViewportAddLandscape() +static void ViewportAddTile(TileInfo *ti, TileType tile_type) { - assert(_vd.dpi.top <= _vd.dpi.top + _vd.dpi.height); - assert(_vd.dpi.left <= _vd.dpi.left + _vd.dpi.width); + _vd.foundation_part = FOUNDATION_PART_NONE; + _vd.foundation[0] = -1; + _vd.foundation[1] = -1; + _vd.last_foundation_child[0] = NULL; + _vd.last_foundation_child[1] = NULL; - Point upper_left = InverseRemapCoords(_vd.dpi.left, _vd.dpi.top); - Point upper_right = InverseRemapCoords(_vd.dpi.left + _vd.dpi.width, _vd.dpi.top); + _cur_ti = ti; + _tile_type_procs[tile_type]->draw_tile_proc(ti); +} - /* Transformations between tile coordinates and viewport rows/columns: See vp_column_row +/** + * Add the landscape to the viewport, i.e. all ground tiles, buildings and bridges. + */ +static void ViewportAddLandscape() +{ + /* Transformations between tile x/y coordinates and 45-degree rotated rows/columns: * column = y - x * row = x + y * x = (row - column) / 2 @@ -1244,38 +1218,46 @@ static void ViewportAddLandscape() * Note: (row, columns) pairs are only valid, if they are both even or both odd. */ - /* Columns overlap with neighbouring columns by a half tile. - * - Left column is column of upper_left (rounded down) and one column to the left. - * - Right column is column of upper_right (rounded up) and one column to the right. - * Note: Integer-division does not round down for negative numbers, so ensure rounding with another increment/decrement. - */ - int left_column = (upper_left.y - upper_left.x) / (int)TILE_SIZE - 2; - int right_column = (upper_right.y - upper_right.x) / (int)TILE_SIZE + 2; - - int potential_bridge_height = ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; - - /* Rows overlap with neighbouring rows by a half tile. - * The first row that could possibly be visible is the row above upper_left (if it is at height 0). - * Due to integer-division not rounding down for negative numbers, we need another decrement. - */ - int row = (upper_left.x + upper_left.y) / (int)TILE_SIZE - 2; - bool last_row = false; - for (; !last_row; row++) { - last_row = true; - for (int column = left_column; column <= right_column; column++) { - /* Valid row/column? */ - if ((row + column) % 2 != 0) continue; - - Point tilecoord; - tilecoord.x = (row - column) / 2; - tilecoord.y = (row + column) / 2; - assert(column == tilecoord.y - tilecoord.x); - assert(row == tilecoord.y + tilecoord.x); - + /* Rectangle to repaint. Includes oversize for tile sprites. + * There is no oversize for the bottom side of a tile so the first tile we draw + * in a column must have its northern corner above or at the 'top' bound. */ + const int left = _vd.dpi.left - MAX_TILE_EXTENT_RIGHT; // inclusive + const int top = _vd.dpi.top; // unlike to other bounds, this one is relative to S tile corner, not N, not inclusive (for S corner) + const int right = _vd.dpi.left + _vd.dpi.width + MAX_TILE_EXTENT_LEFT; // not inclusive + const int bottom_empty = _vd.dpi.top + _vd.dpi.height; // bottom bound for void tiles and tiles outside map, includes only clear ground sprites, not inclusive + const int bottom_building = bottom_empty + MAX_TILE_EXTENT_TOP; // bottom bound that accounts for buildings but does not include oversize for bridges, not inclusive + const int bottom = bottom_building + ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; // bottom bound that includes entire oversize, also for bridges, not inclusive + assert(left < right && top < bottom); + + /* Base 2 logarithm of the distance between tile columns in a viewport. + * It will be used to achieve proper rounding easily. */ + assert_compile(TILE_SIZE == 1 << 4); + static const uint column_log = ZOOM_LVL_SHIFT + 4 + 1; // +1 comes from the factor 2 that is used when remapping to horizontal 'x' screen coordinate (see RemapCoords) + + /* Horizontal iteration bounds. */ + int first_col = left >> column_log; // inclusive, round toward -inf + int last_col = -(-right >> column_log); // not inclusive, round toward +inf + + /* Use tile that intersects with the left-top corner of the repaint + * rectangle as an approximate start row of the iteration. */ + Point start = InverseRemapCoords2(left, top, false); // warning, it will take foundations into account, might return a tile that is further to S, but that's OK because coordinates will be moved toward N later if needed + int first_row = (start.x >> 4) + (start.y >> 4); + /* Combine with the first column, round toward S. */ + start.x = (first_row - first_col + 1) >> 1; + start.y = (first_row + first_col + 1) >> 1; + + /* Iterate over columns of tiles. */ + while (first_col++ < last_col) { + /* Fix column start tile - move it toward N until it reaches the 'top' bound. */ + int y_pos; + while (top < (y_pos = GetTilePaintY(start))) start.x--, start.y--; + + /* Iterate over tiles in a column. */ + Point tilecoord = start; + do { TileType tile_type; TileInfo tile_info; - _cur_ti = &tile_info; - tile_info.x = tilecoord.x * TILE_SIZE; // FIXME tile_info should use signed integers + tile_info.x = tilecoord.x * TILE_SIZE; // FIXME: tile_info should use signed integers tile_info.y = tilecoord.y * TILE_SIZE; if (IsInsideBS(tilecoord.x, 0, MapSizeX()) && IsInsideBS(tilecoord.y, 0, MapSizeY())) { @@ -1287,61 +1269,35 @@ static void ViewportAddLandscape() tile_type = MP_VOID; } - if (tile_type != MP_VOID) { - /* We are inside the map => paint landscape. */ - tile_info.tileh = GetTilePixelSlope(tile_info.tile, &tile_info.z); - } else { - /* We are outside the map => paint black. */ - tile_info.tileh = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); + /* Check if tile is "visible". + * + * Until 'bottom_empty' every tile is visible, also "black" tiles outside map. + * Since 'bottom_empty' only tiles with a content might be visible. */ + if (y_pos >= bottom_empty) { + if (tilecoord.x >= (int)MapSizeX() || tilecoord.y >= (int)MapSizeY()) break; // No more non-void tiles in this column? Then stop. + if (tile_type == MP_VOID) continue; // No content on the tile? Then skip. + + /* Since 'bottom_building' only bridges might be visible. */ + if (y_pos >= bottom_building) { + if (!IsBridgeAbove(tile_info.tile)) continue; // no bridge above, skip + if (RemapCoords(tile_info.x, tile_info.y, GetBridgePixelHeight(GetNorthernBridgeEnd(tile_info.tile))).y >= bottom_building) continue; // bridge isn't high enough, skip + } } - int viewport_y = GetViewportY(tilecoord); - - if (viewport_y + MAX_TILE_EXTENT_BOTTOM < _vd.dpi.top) { - /* The tile in this column is not visible yet. - * Tiles in other columns may be visible, but we need more rows in any case. */ - last_row = false; - continue; + /* Paint the tile. */ + tile_info.tileh = (tile_info.tile != INVALID_TILE) ? GetTilePixelSlope(tile_info.tile, &tile_info.z) : GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); + ViewportAddTile(&tile_info, tile_type); + if (tile_info.tile != INVALID_TILE) { + DrawTileSelection(&tile_info); + DrawTileZoning(&tile_info); } - int min_visible_height = viewport_y - (_vd.dpi.top + _vd.dpi.height); - bool tile_visible = min_visible_height <= 0; - - if (tile_type != MP_VOID) { - /* Is tile with buildings visible? */ - if (min_visible_height < MAX_TILE_EXTENT_TOP) tile_visible = true; - - if (IsBridgeAbove(tile_info.tile)) { - /* Is the bridge visible? */ - TileIndex bridge_tile = GetNorthernBridgeEnd(tile_info.tile); - int bridge_height = ZOOM_LVL_BASE * (GetBridgePixelHeight(bridge_tile) - TilePixelHeight(tile_info.tile)); - if (min_visible_height < bridge_height + MAX_TILE_EXTENT_TOP) tile_visible = true; - } - - /* Would a higher bridge on a more southern tile be visible? - * If yes, we need to loop over more rows to possibly find one. */ - if (min_visible_height < potential_bridge_height + MAX_TILE_EXTENT_TOP) last_row = false; - } else { - /* Outside of map. If we are on the north border of the map, there may still be a bridge visible, - * so we need to loop over more rows to possibly find one. */ - if ((tilecoord.x <= 0 || tilecoord.y <= 0) && min_visible_height < potential_bridge_height + MAX_TILE_EXTENT_TOP) last_row = false; - } + /* Next tile. */ + } while (tilecoord.x++, tilecoord.y++, y_pos = GetTilePaintY(tilecoord), y_pos < bottom); - if (tile_visible) { - last_row = false; - _vd.foundation_part = FOUNDATION_PART_NONE; - _vd.foundation[0] = -1; - _vd.foundation[1] = -1; - _vd.last_foundation_child[0] = NULL; - _vd.last_foundation_child[1] = NULL; - - _tile_type_procs[tile_type]->draw_tile_proc(&tile_info); - if (tile_info.tile != INVALID_TILE) { - DrawTileSelection(&tile_info); - DrawTileZoning(&tile_info); - } - } - } + /* Go one tile toward SE. This will advance us to next column. Bias toward S will + * take care of slopes too. Coordinates will be moved toward N later if needed. */ + start.y++; } } @@ -2775,121 +2731,33 @@ void Window::DrawViewport() const } /** - * Continue criteria for the SearchMapEdge function. - * @param iter Value to check. - * @param iter_limit Maximum value for the iter - * @param sy Screen y coordinate calculated for the tile at hand - * @param sy_limit Limit to the screen y coordinate - * @return True when we should continue searching. - */ -typedef bool ContinueMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit); - -/** Continue criteria for searching a no-longer-visible tile in negative direction, starting at some tile. */ -static inline bool ContinueLowerMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit) { return iter > 0 && sy > sy_limit; } -/** Continue criteria for searching a no-longer-visible tile in positive direction, starting at some tile. */ -static inline bool ContinueUpperMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit) { return iter < iter_limit && sy < sy_limit; } - -/** - * Searches, starting at the given tile, by applying the given offset to iter, for a no longer visible tile. - * The whole sense of this function is keeping the to-be-written code small, thus it is a little bit abstracted - * so the same function can be used for both the X and Y locations. As such a reference to one of the elements - * in curr_tile was needed. - * @param curr_tile A tile - * @param iter Reference to either the X or Y of curr_tile. - * @param iter_limit Upper search limit for the iter value. - * @param offset Search in steps of this size - * @param sy_limit Search limit to be passed to the criteria - * @param continue_criteria Search as long as this criteria is true - * @return The final value of iter. - */ -static int SearchMapEdge(Point &curr_tile, int &iter, int iter_limit, int offset, int sy_limit, ContinueMapEdgeSearch continue_criteria) -{ - int sy; - do { - iter = Clamp(iter + offset, 0, iter_limit); - sy = GetViewportY(curr_tile); - } while (continue_criteria(iter, iter_limit, sy, sy_limit)); - - return iter; -} - -/** - * Determine the clamping of either the X or Y coordinate to the map. - * @param curr_tile A tile - * @param iter Reference to either the X or Y of curr_tile. - * @param iter_limit Upper search limit for the iter value. - * @param start Start value for the iteration. - * @param other_ref Reference to the opposite axis in curr_tile than of iter. - * @param other_value Start value for of the opposite axis - * @param vp_value Value of the viewport location in the opposite axis as for iter. - * @param other_limit Limit for the other value, so if iter is X, then other_limit is for Y. - * @param vp_top Top of the viewport. - * @param vp_bottom Bottom of the viewport. - * @return Clamped version of vp_value. + * Ensure that a given viewport has a valid scroll position. + * + * There must be a visible piece of the map in the center of the viewport. + * If there isn't, the viewport will be scrolled to nearest such location. + * + * @param vp The viewport. + * @param[in,out] scroll_x Viewport X scroll. + * @param[in,out] scroll_y Viewport Y scroll. */ -static inline int ClampXYToMap(Point &curr_tile, int &iter, int iter_limit, int start, int &other_ref, int other_value, int vp_value, int other_limit, int vp_top, int vp_bottom) +static inline void ClampViewportToMap(const ViewPort *vp, int *scroll_x, int *scroll_y) { - bool upper_edge = other_value < _settings_game.construction.max_heightlevel / 4; - - /* - * First get an estimate of the tiles relevant for us at that edge. Relevant in the sense - * "at least close to the visible area". Thus, we don't look at exactly each tile, inspecting - * e.g. every tenth should be enough. After all, the desired screen limit is set such that - * the bordermost tiles are painted in the middle of the screen when one hits the limit, - * i.e. it is no harm if there is some small error in that calculation - */ - - other_ref = upper_edge ? 0 : other_limit; - iter = start; - int min_iter = SearchMapEdge(curr_tile, iter, iter_limit, upper_edge ? -10 : +10, vp_top, upper_edge ? ContinueLowerMapEdgeSearch : ContinueUpperMapEdgeSearch); - iter = start; - int max_iter = SearchMapEdge(curr_tile, iter, iter_limit, upper_edge ? +10 : -10, vp_bottom, upper_edge ? ContinueUpperMapEdgeSearch : ContinueLowerMapEdgeSearch); + /* Centre of the viewport is hot spot. */ + Point pt = { + *scroll_x + vp->virtual_width / 2, + *scroll_y + vp->virtual_height / 2 + }; - max_iter = min(max_iter + _settings_game.construction.max_heightlevel / 4, iter_limit); - min_iter = min(min_iter, max_iter); + /* Find nearest tile that is within borders of the map. */ + bool clamped; + pt = InverseRemapCoords2(pt.x, pt.y, true, &clamped); - /* Now, calculate the highest heightlevel of these tiles. Again just as an estimate. */ - int max_heightlevel_at_edge = 0; - for (iter = min_iter; iter <= max_iter; iter += 10) { - max_heightlevel_at_edge = max(max_heightlevel_at_edge, (int)TileHeight(TileXY(curr_tile.x, curr_tile.y))); + if (clamped) { + /* Convert back to viewport coordinates and remove centering. */ + pt = RemapCoords2(pt.x, pt.y); + *scroll_x = pt.x - vp->virtual_width / 2; + *scroll_y = pt.y - vp->virtual_height / 2; } - - /* Based on that heightlevel, calculate the limit. For the upper edge a tile with height zero would - * get a limit of zero, on the other side it depends on the number of tiles along the axis. */ - return upper_edge ? - max(vp_value, -max_heightlevel_at_edge * (int)(TILE_HEIGHT * 2 * ZOOM_LVL_BASE)) : - min(vp_value, (other_limit * TILE_SIZE * 4 - max_heightlevel_at_edge * TILE_HEIGHT * 2) * ZOOM_LVL_BASE); -} - -static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y) -{ - int original_y = y; - - /* Centre of the viewport is hot spot */ - x += vp->virtual_width / 2; - y += vp->virtual_height / 2; - - /* Convert viewport coordinates to map coordinates - * Calculation is scaled by 4 to avoid rounding errors */ - int vx = -x + y * 2; - int vy = x + y * 2; - - /* Find out which tile corresponds to (vx,vy) if one assumes height zero. The cast is necessary to prevent C++ from - * converting the result to an uint, which gives an overflow instead of a negative result... */ - int tx = vx / (int)(TILE_SIZE * 4 * ZOOM_LVL_BASE); - int ty = vy / (int)(TILE_SIZE * 4 * ZOOM_LVL_BASE); - - Point curr_tile; - vx = ClampXYToMap(curr_tile, curr_tile.y, MapMaxY(), ty, curr_tile.x, tx, vx, MapMaxX(), original_y, original_y + vp->virtual_height); - vy = ClampXYToMap(curr_tile, curr_tile.x, MapMaxX(), tx, curr_tile.y, ty, vy, MapMaxY(), original_y, original_y + vp->virtual_height); - - /* Convert map coordinates to viewport coordinates */ - x = (-vx + vy) / 2; - y = ( vx + vy) / 4; - - /* Remove centering */ - x -= vp->virtual_width / 2; - y -= vp->virtual_height / 2; } /** @@ -2909,7 +2777,7 @@ void UpdateViewportPosition(Window *w) SetViewportPosition(w, pt.x, pt.y, false); } else { /* Ensure the destination location is within the map */ - ClampViewportToMap(vp, w->viewport->dest_scrollpos_x, w->viewport->dest_scrollpos_y); + ClampViewportToMap(vp, &w->viewport->dest_scrollpos_x, &w->viewport->dest_scrollpos_y); int delta_x = w->viewport->dest_scrollpos_x - w->viewport->scrollpos_x; int delta_y = w->viewport->dest_scrollpos_y - w->viewport->scrollpos_y; @@ -2929,7 +2797,7 @@ void UpdateViewportPosition(Window *w) w->viewport->scrollpos_y == w->viewport->dest_scrollpos_y); } - ClampViewportToMap(vp, w->viewport->scrollpos_x, w->viewport->scrollpos_y); + ClampViewportToMap(vp, &w->viewport->scrollpos_x, &w->viewport->scrollpos_y); if (_scrolling_viewport == w) UpdateActiveScrollingViewport(w); @@ -3104,11 +2972,12 @@ void ConstrainAllViewportsZoom() * @param tile The tile to mark dirty. * @param mark_dirty_if_zoomlevel_is_below To tell if an update is relevant or not (for example, animations in map mode are not). * @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.) + * @param tile_height_override Height of the tile (#TileHeight). * @ingroup dirty */ -void MarkTileDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below, int bridge_level_offset) +void MarkTileDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below, int bridge_level_offset, int tile_height_override) { - Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, TilePixelHeight(tile)); + Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, tile_height_override * TILE_HEIGHT); MarkAllViewportsDirty( pt.x - 31 * ZOOM_LVL_BASE, pt.y - 122 * ZOOM_LVL_BASE - ZOOM_LVL_BASE * TILE_HEIGHT * bridge_level_offset, @@ -3118,22 +2987,6 @@ void MarkTileDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel ); } -/** - * Mark a (virtual) tile outside the map dirty for repaint. - * @param x Tile X position. - * @param y Tile Y position. - * @ingroup dirty - */ -void MarkTileDirtyByTileOutsideMap(int x, int y) -{ - Point pt = RemapCoords(x * TILE_SIZE, y * TILE_SIZE, TilePixelHeightOutsideMap(x, y)); - MarkAllViewportsDirty( - pt.x - MAX_TILE_EXTENT_LEFT, - pt.y, // no buildings outside of map - pt.x + MAX_TILE_EXTENT_RIGHT, - pt.y + MAX_TILE_EXTENT_BOTTOM); -} - void MarkTileLineDirty(const TileIndex from_tile, const TileIndex to_tile) { assert(from_tile != INVALID_TILE); diff --git a/src/viewport_func.h b/src/viewport_func.h index 610cf43b8d..28e14872cf 100644 --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -15,7 +15,7 @@ #include "gfx_type.h" #include "viewport_type.h" #include "window_type.h" -#include "tile_type.h" +#include "tile_map.h" #include "station_type.h" #include "vehicle_base.h" @@ -90,9 +90,19 @@ void UpdateAllVirtCoords(); extern Point _tile_fract_coords; -void MarkTileDirtyByTile(const TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below = ZOOM_LVL_END, int bridge_level_offset = 0); +void MarkTileDirtyByTile(const TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below, int bridge_level_offset, int tile_height_override); -void MarkTileDirtyByTileOutsideMap(int x, int y); +/** + * Mark a tile given by its index dirty for repaint. + * @param tile The tile to mark dirty. + * @param mark_dirty_if_zoomlevel_is_below To tell if an update is relevant or not (for example, animations in map mode are not). + * @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.) + * @ingroup dirty + */ +static inline void MarkTileDirtyByTile(TileIndex tile, const ZoomLevel mark_dirty_if_zoomlevel_is_below = ZOOM_LVL_END, int bridge_level_offset = 0) +{ + MarkTileDirtyByTile(tile, mark_dirty_if_zoomlevel_is_below, bridge_level_offset, TileHeight(tile)); +} ViewportMapType ChangeRenderMode(const ViewPort *vp, bool down); diff --git a/src/void_cmd.cpp b/src/void_cmd.cpp index ffe54df992..a2a45e7227 100644 --- a/src/void_cmd.cpp +++ b/src/void_cmd.cpp @@ -10,7 +10,7 @@ /** @file void_cmd.cpp Handling of void tiles. */ #include "stdafx.h" -#include "tile_cmd.h" +#include "landscape.h" #include "command_func.h" #include "viewport_func.h" #include "slope_func.h" @@ -28,7 +28,12 @@ static void DrawTile_Void(TileInfo *ti) static int GetSlopePixelZ_Void(TileIndex tile, uint x, uint y) { - return TilePixelHeight(tile); + /* This function may be called on tiles outside the map, don't asssume + * that 'tile' is a valid tile index. See GetSlopePixelZOutsideMap. */ + int z; + Slope tileh = GetTilePixelSlopeOutsideMap(x >> 4, y >> 4, &z); + + return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } static Foundation GetFoundation_Void(TileIndex tile, Slope tileh)