From 3433ae02f474f0305ef2f93a79f3c21533d54237 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Sun, 12 Mar 2017 16:41:12 +0300 Subject: [PATCH] Update openttd to 1.7.0-RC1 --HG-- branch : openttd --- Makefile.bundle.in | 2 +- Makefile.grf.in | 26 +- Makefile.in | 4 +- Makefile.src.in | 2 +- bin/ai/regression/regression_info.nut | 4 +- bin/baseset/openttd.grf | Bin 825852 -> 508098 bytes bin/baseset/opntitle.dat | Bin 138710 -> 65416 bytes changelog.txt | 39 +++ config.lib | 67 ++-- configure | 2 +- known-bugs.txt | 4 +- media/baseset/orig_dos.obg | 30 +- media/baseset/orig_dos_de.obg | 30 +- media/baseset/orig_win.obg | 30 +- media/extra_grf/canals.nfo | 96 +----- media/extra_grf/openttd.nfo | 14 +- os/debian/changelog | 6 + os/debian/copyright | 2 +- os/os2/installer/make_installer.cmd | 2 +- os/rpm/openttd.spec | 6 +- os/windows/installer/install.nsi | 9 +- projects/openttd_vs100.vcxproj | 4 +- projects/openttd_vs100.vcxproj.in | 4 +- projects/openttd_vs140.vcxproj | 4 +- projects/openttd_vs140.vcxproj.in | 4 +- projects/openttd_vs80.vcproj | 4 +- projects/openttd_vs80.vcproj.in | 4 +- projects/openttd_vs90.vcproj | 4 +- projects/openttd_vs90.vcproj.in | 4 +- readme.txt | 4 +- src/ai/ai_gui.cpp | 2 +- src/ai/ai_info.cpp | 4 +- src/aircraft.h | 6 +- src/aircraft_cmd.cpp | 86 ++--- src/aircraft_gui.cpp | 26 +- src/articulated_vehicles.cpp | 4 +- src/autoreplace_gui.cpp | 83 +++-- src/blitter/32bpp_anim.cpp | 2 +- src/blitter/32bpp_anim.hpp | 6 +- src/clear_cmd.cpp | 4 +- src/command_func.h | 10 +- src/company_base.h | 6 +- src/console_cmds.cpp | 115 ++++--- src/core/smallvec_type.hpp | 4 +- src/crashlog.cpp | 4 +- src/depot_gui.cpp | 11 +- src/disaster_vehicle.cpp | 7 +- src/dock_gui.cpp | 8 +- src/economy.cpp | 2 +- src/effectvehicle.cpp | 91 +++--- src/elrail.cpp | 40 +-- src/elrail_func.h | 14 +- src/engine.cpp | 48 +-- src/engine_type.h | 3 +- src/fileio_type.h | 92 +++++- src/fios.cpp | 160 +++++++--- src/fios.h | 159 ++++++---- src/fios_gui.cpp | 315 +++++++++---------- src/game/game_info.cpp | 4 +- src/game/game_text.hpp | 5 +- src/genworld.cpp | 8 +- src/genworld_gui.cpp | 7 +- src/gfx.cpp | 118 ++++--- src/gfx_func.h | 11 +- src/gfx_type.h | 32 +- src/gfxinit.cpp | 45 ++- src/group_gui.cpp | 6 +- src/heightmap.cpp | 37 ++- src/heightmap.h | 8 +- src/industry_gui.cpp | 160 +++++++--- src/intro_gui.cpp | 58 ++-- src/landscape.cpp | 5 +- src/lang/afrikaans.txt | 56 ++-- src/lang/arabic_egypt.txt | 55 ++-- src/lang/basque.txt | 73 +++-- src/lang/belarusian.txt | 56 ++-- src/lang/brazilian_portuguese.txt | 56 ++-- src/lang/bulgarian.txt | 56 ++-- src/lang/catalan.txt | 70 +++-- src/lang/croatian.txt | 64 ++-- src/lang/czech.txt | 61 ++-- src/lang/danish.txt | 58 ++-- src/lang/dutch.txt | 59 ++-- src/lang/english.txt | 64 ++-- src/lang/english_AU.txt | 56 ++-- src/lang/english_US.txt | 62 ++-- src/lang/esperanto.txt | 9 +- src/lang/estonian.txt | 56 ++-- src/lang/faroese.txt | 54 ++-- src/lang/finnish.txt | 56 ++-- src/lang/french.txt | 66 ++-- src/lang/gaelic.txt | 56 ++-- src/lang/galician.txt | 56 ++-- src/lang/german.txt | 56 ++-- src/lang/greek.txt | 62 ++-- src/lang/hebrew.txt | 56 ++-- src/lang/hungarian.txt | 56 ++-- src/lang/icelandic.txt | 56 ++-- src/lang/indonesian.txt | 56 ++-- src/lang/irish.txt | 56 ++-- src/lang/italian.txt | 78 ++--- src/lang/japanese.txt | 60 ++-- src/lang/korean.txt | 82 ++--- src/lang/latin.txt | 62 ++-- src/lang/latvian.txt | 92 +++--- src/lang/lithuanian.txt | 56 ++-- src/lang/luxembourgish.txt | 59 ++-- src/lang/malay.txt | 70 +++-- src/lang/norwegian_bokmal.txt | 56 ++-- src/lang/norwegian_nynorsk.txt | 56 ++-- src/lang/polish.txt | 59 ++-- src/lang/portuguese.txt | 92 +++--- src/lang/romanian.txt | 92 ++++-- src/lang/russian.txt | 244 ++++++++------- src/lang/serbian.txt | 56 ++-- src/lang/simplified_chinese.txt | 56 ++-- src/lang/slovak.txt | 56 ++-- src/lang/slovenian.txt | 56 ++-- src/lang/spanish.txt | 142 +++++---- src/lang/spanish_MX.txt | 115 ++++--- src/lang/swedish.txt | 56 ++-- src/lang/tamil.txt | 54 ++-- src/lang/thai.txt | 67 ++-- src/lang/traditional_chinese.txt | 56 ++-- src/lang/turkish.txt | 58 ++-- src/lang/ukrainian.txt | 56 ++-- src/lang/unfinished/chuvash.txt | 3 +- src/lang/unfinished/frisian.txt | 55 ++-- src/lang/unfinished/ido.txt | 5 +- src/lang/unfinished/macedonian.txt | 6 +- src/lang/unfinished/maltese.txt | 3 +- src/lang/unfinished/marathi.txt | 4 +- src/lang/unfinished/persian.txt | 54 ++-- src/lang/unfinished/urdu.txt | 23 +- src/lang/vietnamese.txt | 56 ++-- src/lang/welsh.txt | 66 ++-- src/language.h | 12 +- src/linkgraph/demands.cpp | 18 +- src/linkgraph/linkgraph_gui.h | 6 +- src/linkgraph/linkgraphjob.cpp | 4 +- src/linkgraph/mcf.cpp | 27 +- src/linkgraph/refresh.cpp | 21 +- src/linkgraph/refresh.h | 9 +- src/main_gui.cpp | 4 +- src/misc_gui.cpp | 15 +- src/music/cocoa_m.cpp | 10 +- src/music/win32_m.cpp | 5 +- src/network/core/config.h | 5 +- src/network/core/tcp_connect.cpp | 4 +- src/network/network_client.cpp | 6 +- src/network/network_command.cpp | 10 +- src/network/network_content.cpp | 2 +- src/network/network_gui.cpp | 8 +- src/network/network_udp.cpp | 8 +- src/newgrf.cpp | 118 +++---- src/newgrf.h | 5 +- src/newgrf_commons.h | 2 +- src/newgrf_config.cpp | 20 +- src/newgrf_config.h | 6 +- src/newgrf_engine.cpp | 50 ++- src/newgrf_engine.h | 18 +- src/newgrf_gui.cpp | 13 +- src/newgrf_house.cpp | 2 +- src/newgrf_spritegroup.cpp | 2 +- src/newgrf_text.cpp | 22 +- src/object_cmd.cpp | 12 +- src/openttd.cpp | 39 +-- src/os/macosx/osx_stdafx.h | 15 +- src/os/os2/os2.cpp | 6 +- src/os/unix/unix.cpp | 5 +- src/os/windows/ottdres.rc.in | 8 +- src/os/windows/win32.cpp | 41 ++- src/os/windows/win32.h | 8 +- src/pathfinder/npf/aystar.h | 4 +- src/pathfinder/npf/npf.cpp | 90 +++--- src/pathfinder/yapf/yapf_road.cpp | 2 +- src/rail.h | 5 +- src/rail_cmd.cpp | 34 +- src/rail_gui.cpp | 36 ++- src/rail_gui.h | 4 +- src/rev.cpp.in | 4 +- src/road_cmd.cpp | 13 +- src/road_gui.cpp | 78 +++-- src/road_internal.h | 4 +- src/roadveh.h | 4 +- src/roadveh_cmd.cpp | 51 +-- src/roadveh_gui.cpp | 6 +- src/saveload/afterload.cpp | 10 +- src/saveload/company_sl.cpp | 9 +- src/saveload/newgrf_sl.cpp | 14 +- src/saveload/oldloader_sl.cpp | 8 +- src/saveload/saveload.cpp | 112 +++++-- src/saveload/saveload.h | 31 +- src/saveload/signs_sl.cpp | 4 +- src/saveload/station_sl.cpp | 9 +- src/saveload/strings_sl.cpp | 5 +- src/saveload/town_sl.cpp | 5 +- src/saveload/vehicle_sl.cpp | 16 +- src/script/api/ai_changelog.hpp | 75 +---- src/script/api/game/game_window.hpp.sq | 9 +- src/script/api/game_changelog.hpp | 44 +-- src/script/api/script_error.cpp | 23 +- src/script/api/script_execmode.hpp | 2 +- src/script/api/script_list.cpp | 13 +- src/script/api/script_testmode.hpp | 2 +- src/script/api/script_text.hpp | 2 +- src/script/api/script_types.hpp | 4 +- src/script/api/script_window.hpp | 11 +- src/script/api/squirrel_export.awk | 2 +- src/ship.h | 4 +- src/ship_cmd.cpp | 48 +-- src/ship_gui.cpp | 19 +- src/smallmap_gui.cpp | 81 ++--- src/sound/win32_s.cpp | 5 +- src/spritecache.cpp | 21 +- src/spritecache.h | 3 +- src/station_cmd.cpp | 72 +++-- src/story.cpp | 2 +- src/strgen/strgen.cpp | 10 +- src/strings.cpp | 64 ++-- src/strings_func.h | 45 ++- src/strings_type.h | 33 +- src/table/control_codes.h | 61 ++-- src/table/elrail_data.h | 12 +- src/table/newgrf_debug_data.h | 4 +- src/table/settings.ini | 6 +- src/terraform_gui.cpp | 6 +- src/thread/thread.h | 5 +- src/thread/thread_morphos.cpp | 4 +- src/thread/thread_none.cpp | 4 +- src/thread/thread_os2.cpp | 4 +- src/thread/thread_pthread.cpp | 22 +- src/thread/thread_win32.cpp | 17 +- src/tile_cmd.h | 3 +- src/toolbar_gui.cpp | 417 ++++++++++++++++++++++--- src/town_cmd.cpp | 28 +- src/town_gui.cpp | 2 +- src/train.h | 4 +- src/train_cmd.cpp | 93 +++--- src/train_gui.cpp | 19 +- src/tunnelbridge_cmd.cpp | 19 +- src/vehicle.cpp | 73 ++++- src/vehicle_base.h | 79 ++++- src/vehicle_cmd.cpp | 6 +- src/vehicle_gui.cpp | 101 ++++-- src/vehicle_gui.h | 6 +- src/vehicle_gui_base.h | 4 +- src/vehiclelist.cpp | 10 +- src/vehiclelist.h | 7 +- src/video/cocoa/wnd_quartz.mm | 24 +- src/video/dedicated_v.cpp | 9 +- src/video/sdl_v.cpp | 28 +- src/video/sdl_v.h | 6 +- src/video/video_driver.hpp | 15 +- src/video/win32_v.cpp | 15 +- src/video/win32_v.h | 6 +- src/viewport_gui.cpp | 4 +- src/widget.cpp | 17 +- src/widgets/autoreplace_widget.h | 6 +- src/widgets/intro_widget.h | 6 +- src/widgets/toolbar_widget.h | 5 +- src/window.cpp | 5 +- 262 files changed, 5052 insertions(+), 3913 deletions(-) diff --git a/Makefile.bundle.in b/Makefile.bundle.in index d15da4904c..aafd3ca261 100644 --- a/Makefile.bundle.in +++ b/Makefile.bundle.in @@ -1,4 +1,4 @@ -# $Id: Makefile.bundle.in 27588 2016-05-29 18:56:42Z frosch $ +# $Id: Makefile.bundle.in 27558 2016-05-11 18:39:18Z rubidium $ # This file is part of OpenTTD. # OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. diff --git a/Makefile.grf.in b/Makefile.grf.in index 6c6ad429c7..2d2709f58c 100644 --- a/Makefile.grf.in +++ b/Makefile.grf.in @@ -1,4 +1,4 @@ -# $Id: Makefile.grf.in 27263 2015-05-02 09:59:55Z frosch $ +# $Id: Makefile.grf.in 27730 2017-01-14 15:48:19Z frosch $ # 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. @@ -44,22 +44,18 @@ PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png # Build the GRF. ifdef GRFCODEC -all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm +all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm else all: endif -# Make sure the sprites directory exists. -$(OBJS_DIR)/sprites: - $(Q)-mkdir "$@" - $(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt $(E) '$(STAGE) Collecting baseset translations' $(Q) cat $^ > $@ -$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/openttd.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk +$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/orig_extra.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) sed 's/^OPENTTD.GRF = *[0-9a-f]*$$/OPENTTD.GRF = '`$(MD5SUM) $(BIN_DIR)/openttd.grf | sed 's@ .*@@'`'/' $< > $@.tmp + $(Q) sed 's/^ORIG_EXTRA.GRF = *[0-9a-f]*$$/ORIG_EXTRA.GRF = '`$(MD5SUM) $(BIN_DIR)/orig_extra.grf | sed 's@ .*@@'`'/' $< > $@.tmp $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $@.tmp >$@ $(Q) rm $@.tmp @@ -72,8 +68,9 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/ $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ # Compile extra grf -$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR)/assemble_nfo.awk +$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk $(E) '$(STAGE) Assembling openttd.nfo' + $(Q)-mkdir -p $(OBJS_DIR)/sprites $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo @@ -81,6 +78,17 @@ $(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR) $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf $(Q)cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf +# The copy operation of PNG_FILES is duplicated from the target 'openttd.grf', thus those targets may not run in parallel. +$(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk | $(BIN_DIR)/openttd.grf + $(E) '$(STAGE) Assembling orig_extra.nfo' + $(Q)-mkdir -p $(OBJS_DIR)/sprites + $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null + $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/orig_extra.nfo > $(OBJS_DIR)/sprites/orig_extra.nfo + $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/orig_extra.nfo + $(E) '$(STAGE) Compiling orig_extra.grf' + $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf + $(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf + # Clean up temporary files. clean: $(Q)rm -f *.bak *.grf diff --git a/Makefile.in b/Makefile.in index f6c61a7cb9..e230baf5af 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# $Id: Makefile.in 25595 2013-07-13 06:44:22Z rubidium $ +# $Id: Makefile.in 27730 2017-01-14 15:48:19Z frosch $ # 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. @@ -152,7 +152,7 @@ mrproper: distclean: mrproper maintainer-clean: distclean - $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm + $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/orig_extra.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm depend: @for dir in $(SRC_DIRS); do \ diff --git a/Makefile.src.in b/Makefile.src.in index 22dbab8b80..3a4c7827ca 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -1,4 +1,4 @@ -# $Id: Makefile.src.in 27588 2016-05-29 18:56:42Z frosch $ +# $Id: Makefile.src.in 27558 2016-05-11 18:39:18Z rubidium $ # This file is part of OpenTTD. # OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. diff --git a/bin/ai/regression/regression_info.nut b/bin/ai/regression/regression_info.nut index 1f1e8e1267..49cc4478b3 100644 --- a/bin/ai/regression/regression_info.nut +++ b/bin/ai/regression/regression_info.nut @@ -1,4 +1,4 @@ -/* $Id: regression_info.nut 27192 2015-03-17 20:33:44Z frosch $ */ +/* $Id: regression_info.nut 27518 2016-03-01 20:00:22Z frosch $ */ class Regression extends AIInfo { function GetAuthor() { return "OpenTTD NoAI Developers Team"; } @@ -6,7 +6,7 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.6"; } + function GetAPIVersion() { return "1.7"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } } diff --git a/bin/baseset/openttd.grf b/bin/baseset/openttd.grf index efe35ffd3897113f03b34162f7b177b8375010bf..168d00fbd858c29245a6d8f029e5f9d342502cb7 100644 GIT binary patch delta 122 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%0DHHM;QO*NlVw8BP%9Jh98Puu4nEkSt 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 diff --git a/bin/baseset/opntitle.dat b/bin/baseset/opntitle.dat index 264aaff60b5e58cad978bd390ad459da6cc06808..a51c644e2b980ba89c7627c00f6d210c346327d0 100644 GIT binary patch literal 65416 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%0DZG{Zu| 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 hYFDj|VPL%Vk9p?| literal 138710 zcmeYd35jB0VPvS7^JZ`MWSN_lYSXT-I<@B18K=j6k_@~FZ7L3YFC`0hC^5BW$I{$m+z3)#> zuF7HvY58;1hoSe~t6fiu&sFcA`}y1Vf2AVs7gyhp+rQT>{Pr>3{~xPPPd{4NBOd#& z``(?~F%$23?y0nX_i+1;-C{2uCo+C`EFItB|EA2=@ZUlHx(nO%|1A}B%fDt9QP=f# z-QDfUfATlau8F-}<~gaPO7-OIcmG;z=2buX|NKY%4YkTYyV4`32qxHkICeYZ=PnD+ z>hg!)_sjFEBDJ~IxJC2tDtvVRFZ5&TiIdg;+-?c}=bJCxUw^08)y+n>%>L!CoUONd z?Gw6B9DE-fxkg2Q0Qx_J=Qy#zsynQ|xv9B;9V`C%V5n;j#0_M;7diL)lk}zdiq^(Y)AU0t zj>o=_2-moD_u_$_7iWL7|90W;bc-_Y8Q(ImSM7Y1|D`p0j`u!&28+sxJ6Hv{DiVD} zVy3s1)v!-rYnyvq)^f+Ddi@ZU!sSz+KaO~L?`~q#+rE$7lVdmWDb|GsME_v^*Wvl` zTjGyLaxWY0|82b3zIIyl>>sUnLl2pHY`(YmA8Y>E_iG>aiyU~tH7#?8?PW*48>_|b zr=5TM!O?U1t+TbBhfeQs_;&D~-;;^r9&anYmpxQ}{9vt~CbQK}=85%;-UWe z_0@WRV6>FM4#7LqcON+T>6+~hjvu~qAI|rCO3G&TzFzZx#~K9WVzIT)MRovDa zZ!Yk|F-9aS)}}y7Wwma@{rWnoX-5v5-^&aQZwWED#y|bn%R|M7e#cxCaX2gS;>%hV z&(qOY*81E0lPEYOdhp-t+dW?jWFG97dEEbWr9#Q~*$oW2>;Gy6-#c;mSK$JtBIfVM zqm4K%)o&5xh6tbe;} zO15VA-}xHVw$uCd`enn9%ocIGckjP*yTkgU$l#zt8g7ExsM`tK`QMmkr-PsTS8id97u@-Euv8!;;Ceal2<&G}?+f^Y4&;AN>7M zoY*1ZDU&AOcR9Z+q;B^&ds&O5&yS9un!O?<*vx0ela(*q|Elldi(hx6{%6=WTUExC zm=?Q&42PRa!WwyOLX&UT3a(xvtbJf_+1r0#_Zok$QdQmao#T9ka#H>LBl@>oS`X>{ zi7`tLerUO4Zr+w_2?zXG>#~2(7pQ;!)VE{)_O9T@+%`^yU8dZU4LWU!9$0{&4%D9_5GDhvZv72upccf3z+;_S<#h+Aj`VU!0x) zG(YqIn!jCAa`EJQZ9nW={*{-g{@Ne!`0?cO$xI5rt8^NEu`m8B|F$maU1NuR$7#m* zZ3oTo)xYp&@M8YupZotUYuvx1T=9Pj{+k)*Y&mjGKzl|HXa5i8tJjY;#Yc24>wEA< zSg+yT@2;c+wLw-H2WC84&&w-+XVT4#qSuQ5f8Q3!gqvSR7`$x?q$O6R^%+N}O~=y}N{Y>Y*#qC4#y!rl{{4U!UPhTYWA^G+j$vQ^2AEk_E_H0`3Wfl8e zdEv4StN(Ru_7M#!%>O^k=KFo0b+zfC`8{zry<`*vOQ$_`$~YqWZvUevX>ShQ&t!3q zP~cp5_QZ!5|6blIvhC4zu`PMY6|ETP{_;pYF>7HO)jJ@#X<@1GltN6-KL z{>RqAGx3&0x%MB!I@4KaY;J9{<2~?Hd+%wNw?0+hbdzK~R~Kzq-W59S#iScOMf?)> zGxDwO)dvJi+w5EU(`16ucg1J8m2sS)b?g!cdP*VEk4~~bwacqBY6VYxa zz;Zxyj{?8-J}H;`4feuE=f0TLew|~#(1v%--(N+)v(71Sv%WO-(_Re`qw4}u4Vrq~ z8eu2+{v?H~D*suV+j3uqMQ@VbS0VOtyBzfg>1BapFV4SIcw}3*G2-f)`vnt^Uu65M zIwvHwIgR(&p6z^nO^a2HY;(?>J1+XCuH#Va+=S|Ts)tp3mI^6*hNf!Qy?Vh?xX-0m z?BP8-k*Hk^k$K^4O&?YZUOKuV?#lVMZXtQfw}g(n9pq8t7-sF_#n06q3&+{W+6(4ccf{*Tsy`$oT%%(-THd6sqFvZ|Z;g^hLpZocIQ>@7FkRWIkw&wUr< zb;;=Ga>qx!f37Soc@cht>yDL9y_UuIfHN7K`IrA3*vFs1S-h^YbL|tA0*yIlAAYai z`k^%aQp?AyM?PfRNVDy@{O!~~;oCKb`0txdu~eJAM~>-_;lGyc@78Voz59^u8k4vy z(J@P0S@`cfT&%exws}RqQgx9*q_f@{_J>p0W_3xkez$pRI;++6+qP|wB78UFTZYOmgQ$!V7}73-IA~T|J4U>H`eZ+9pAj-`VWrC-aZvC#|vuDxYtN9L@m{N zB=Wy;vX7sQZ$ZDXuwQfxgJOfV&n@weRu7LOu^fF8t9ixO27Yo(Te3^-ulB!l|8KqD zduN&MLiMk{ufDI=+RnFAYx*6FZGw+ZESLCUAEWU2??JuN{GtMj$*&8HVty`I-n}{_VMv|-)C|jGk;jV{oRpQ7pEk(PT49Xe5pp^ ztB4CvOQEQ8(8O>NzjsD*rZ?ZLdw%}-y`A?Kd))}1^-Mx1cwOVeZy(s3FCCf$L^6}H0m-+39vOVD{yI#WeMZ--W z#ZcC{ZqGVwAMU>KbY=Wc<)1G;K5keTY`W0q-?jD5HeJ1aO)nO+2K?c&zi3hC@PDO8 z2j@J&9}dz#9(I*X(u!Qo6`{>&@L+D0vxJ@G|L&RQ3-5mVvAEx7F1wh+zQ+4&FT2NC zG4HSb%_GP-`S+Iny9+Ny?iLK@5>I&gG;38}wTzYPOoOkCVhR_(a|q?V`oLJH9oH_k zSu6bRzw{eQp?^0$HMnaXapjPJ(B)UV`Wx=+H|W~FJjt!zoyzkgT&zEJn)6#Zsl&>D zq^`@yAFyweul|!ZWz9AA;Ds;myy?&m;uD(VUc}xQs~$e}Z|eW*T?Y+=8f6b_=4Mx} zSXW&0*TUe%o+pgjYkVzwbtl^eT<#R=y(JaX!}z~@n{;bQxukhkUT~0#g=)7V zO3z8uuU;?Uox-}-{j+-POhNT8_se~bP55WZen)kc(A{!*+puoAi~8DZ%Kx^$^_RJ0 zQzP50dgMe+t~Ym;AIyqIG)Hz456v3~1- zWUi3)-HkcVy97<5><%%n4RhT(H}c)4{~Ui6mCOnnb}XM~bM?%mYSZ-ahu*VJSzlhY z<*OU(KBwWJ3Um2&)53b)? z{BDlGl@fX0qNs!@g{xUl)C13RCu#yn?pje)I|ot<9V<-@W+lB4w}PIli=$Fjd_t3l!4 zZA)%QDG45&UY41)&hb)USJ|w!&&$?rx{_b{;s~Ef_M`S6EBz%?Lp?=Td$S&pG#Bww zEzneu+0FQu;lAzdhx0j^J6v}$|7W=WP(Nj1U&6mjyk};-7B$yX*yUm_blatt_5B5% z6gPbbv&6h2^Sb04ajj1J(z~P{mRGNsvGP3M(Oo8M=cjA0^^y$UA2hGIKZ27d==hD@ zA1;3?{L$Zk`qL5Jh7%1_mx_jIUtYE|ugN@qfpmxY+nP^Dlsp6`-hXDgB-1vTO>U*X z4(G!i{ADrs_?CO$Q~f57(ahia$qMViu&{e9KG{VksO ziLvgxW^-WfZ_OXoZ|c`G6$jLBW4L3SWh&rrmJ)AUx3zliG=_hdJ|4(FX8CMCr<(j`&I5vHVSys9EbnYK^;l#S*|J0W+{r!ri?UDPwczc#*DG6SNYgZM` zeW1y-fnky^$A|c;xZB*NX79tk%`g(as=M-$`Lh_sXRJ>1o`}VtQrYrKpy`xDeeUt3 z6(x_AR6hwnexdcp_~GBlmp50wd|+MuFhTcUh)~ORBVPU$npbD9Q~r1DxW|;wsy3sW5`4*0B8IdDHqH|Nr-xeCXE01 zu+Jwqd4Jft(xUzE`;Gtk_OpnFhBiF4)|<=nB|5r+VgF4<+ih}%OT!m_Z@v?*Zl?5M z`tt5qi=yVtlaW7rgyV&(pdpJ+!~f-d)_f;fWWCQY|CuE7(xgMZNjm$-bgFxqkMS`}_I+FMV>Ob*Id~qJ0t{tbfHXRXW0;z*sY@ zFI=}+_B(~pX_8mh)>CKb0Pxc+WBW_l(gh#@9e z%*tY>!j74f-6yb3DHi?rZQawuDM97GPI1tu^4@zFS}8 zOGIburPKOX1q3G?+9dtMcxwInqwhJQPwdaT^G`qL|H4~W?WGS{Hfv55IJR`zgtM=j zrEh#n=TNWw+k58W|I;ErYGD>;8@6z;>yyX|bIDO4EMpPnrKIQ0!Zv zSR1FB`!;R0!1V|ESFvrZJ^4@nb;CdFlHkfehnJpH*Eq0h-rcpw<{Bj}kDJ)i`O)NH zy)a+T;d**MA z-bLr^-^991&6w5k{_1PDh0{Onk&O7md9mC4fj&=tsn~^j>EEmpEM4Zy9z{$yHA+ie zm}t&&!dmr^&HOuU?9<}-zsau_|6u>&z>HgcHx za;YmNCr;n9?uh>{{nY=`jq;c3vvnTWR%BXEcyFgtqwBKeL+$ZN2Gi!OnydESe(t$< zVkWEqebNus6$*Z4xH0p{Tm`Z2RbQv5K3)~EJ52fAu82=!^0xmvw5~s2azfVm-XE?9 z%D?8fJ?mfmU-E5ybcLu|BFDeO?(c-yHZXN)(rh|_feI<%BF&td)AtMI~cARKl&KGhxd?H-r9fe zVqQ=7vdKof#Y8Vn4>MZ8u{ybS+RKis9Q87pF&XNL3IEka82T7k?B3r0dMZhXt$quG zeBR^l)%tpKo=mzDT7K-RXXLd1yN`sGqzXSid0)A%G*egdlvlKig6jW8fAw_jlUB?Z z*YiG*8Nu+iY))#*(tyWvF6R9aVd!J@+Eu@N-akp31~1dU<|5mU_Gd`u3o!65{{Q(SuPZ-zKiRwT+4i0PWiRVmX1(;h^H=Ng73S>sl5r1}cz!5;JYv_> zkz-x_%}D>>K-x_Wm(P_BUdEoNTIZx^nOvSW61)Ie&lzwOaW4}R-smf=Pubq=k zrCOrs_jBL#jQwz!@4^Y-uA{pMQy9tZbc9q~JSx+kP_ zwBysRs?TnmpYZ?b-_~k z8RNW;{cB{#X1`Aov&zF;|(-tWx+ZiG1-tNAM;nOkZ zx|L!7zBR;a-9O6CTKD6FuGe`JL55$;0}_~y{Z;Ut^&?D&HS~8<=69dftRFnLtPgDM z%Q7llvv6r&A?H``-i5n%v1=H7Ne%mUEkQShQTC7f{cBGr%;4`iB6|P*3JarMySl&6 zOZq?AyYidzeUlDb0Y`Ud{e>UiYc^f(Q{DWGG2)DaR{JiMm!{#Djhh{QoMLo7dNmiF;NQx=2KI$Nku+cauAB z%de^b;hfpT^)Y@DYuMgOGoj+kXJ%Kj6sG^J-f%j@$mnuQ&w{7g8IpYW^q2m~{?PsZ zwTjV`uWvYJw2BHAZs}Pedb5>V;CIu%BZ>dNDaZByKQ!_3@t?m>Sd03-KI@$xY4zpl z$JmK=lfUn;`ui*X-_iO5Uo!-rcA7=1Zd*80isjy1mEaA3{cN40j%ViYGv?B&lJ`E! ztP}J)(s6t7f7f4@dlDLE=6rwX;!=1l#iIMonp+m~VhyvFD%ZLFe8G6~^1c5*9{2D6 zwmvQX|1O<_ohzn1Ui_c8QuN?^o0ikOy)0%a#XL*xuPev~MX!Bc?5}G3TEJ7;R{3zr z;#}1&&rO%6-E57I;k{We#i;S`(7(+REbHU4H6tGUTK)O-y)H(3-v6Qh?DxH2cfR%? zxBq-Q-8)=o<~kRa{E%O|?#<)xGIcK<_VcXT&@kVM-|^@xE?WziaCYMb7FI3N}K@zGVU;C1Yi6}}xjqn9lp zbX5Mbee6^D{qO%-?0)~+Rq==GVn6tD-W z2JNZ!I(=DZ_j^o(BYscfYhjt#CjD^wEEC25`;}^bzJBok>+kn}KiKY^_o3=f;_tWjx!*nhv?+C` z?Z??($@c}7<@bKvKfO<5|MdkGr^J6gkXWoz>t?+w-7E9@Kkbw2*1Yh{ircs*$nt2) z?2sd!!r>MlU(^+Ouln|&CG!QtewXYP2D^V1wvGXjCJu(h-oLKO@B1EFZd+gU_t)g- z=jH3SnD%&-L`^by)VkNF_DOf4fpV^H$Rq>HkDjwz|9REsEfvyz5Wu-Xn~i0o(!a7* z^Jgh9o+r;DE~2nXxuq{qX5q#Mnx8+MR5s?Y)<_LG-|??FEMDJ@UOq_Az9b|mGf-sx_0$!+o|T~ zZEDS($=rs$X+OGO321+sD;m>qym9B;MU#qJ-`ZQwoi4zb6#UOLY~B8MAGrVK-|uRZ zR%LYBWyYE^dqr2Q%GZz&%2q3G&YvfHYt_FX6N3ydL8FGJn%3X%SN*>Bnsc??(J$&z zSD0lVac4K*ELGywC=yi_f6&?LHgQ_&mvrBM^Sc=Xx*q<&zG6-Jt^eQW+gJYkVI*Pq zICA6L8!5VrY>nTnI%xc+{Fd=NGwYE0PL171K6_m%JzTy?W~N!;5uWBP(m#^9BT`>& z@D1c~41cggVDVOqvZ_KUosQy{g_`-#-=~IUUQjN*?r6T^k3N^hzRUkRqRVdifAE$) z_EfCy%e0IsSG5x^m1MCQ&Mi%JxfZvihgDgiL2d4l^-NyRGu&4uD}GDe-DvN2Ey!kr z<_B5dtwLNlpZ@#2;G+x!@k~zj6Mr`HtbS{f&6zyq zy}^vW1?L|+U(8~h9sPH|lY-Tk50TH7b8y&HtK}7H`mMSAG)N=pT&3;~hWVFo$wW5D z-QKRArh4NDr|)u$<&&FlFJh7TXHxike=?)MxuPX+KE7r;a3xXWRGGYi`ByPBJnXycM)(xSOxu&U?`C0#6 zTlCSh|I);%Q-W_kTfQRlPJ+!z%jX^SQ#LWZ+kbiU=g*&4t-2GwoheB2aoCaA?xQPh zRFCL$e_-u$)?lAz_`Y=Rw@lyVe$i|HYn{*UJjYb`XJ?(Ps$a99i1EMmU+#NteO-Lw z%9&-;6}astMzMMaRNQXeshoSG$26j^P`dVi%&C`b@`jz}AF^2rx_DO)p&qB>8V^!M<-pSoWHX|kn4?i@6P>Nu=8oLC?0@Xc?j8QQiN7~# zm&2)l5AxHTW>43T-&OA$e0`FjP3)ZAtUC|zKV|!O^pE6{hn$C_ckY;6&B>JAA+t;0 z{7F$>%Z2?7ziQK&Y|HB!uK0emyCBzp>*m6wPdn3NIuoS6`}415*wDUvBHz!zN^X&q z%>u%Y&8)r`2I(0+;4j;sDslOF18dU}?Uer;S&BS^7%f3tg`K%BCneGKRQ-ES-Y9l6usx4f@Z$|9$Bf3VWrD<;Vjk5%f}Qq|dmU;K|N zK9XCId8n(D`LDrN=ZF1Tink)dz4q9926NQ4td@OVeE9DE&#c9Vw@Eyh^t0i=cYM=^ zn2cu;Dw7}7FJ*my&!j}!?@!Rf_P@(tyt`84u9JA+{L1MaUsdGngS<8bd=AamEOKiz zRN9bw*(Ry6XDbo33kUzVOpTZ` z|E%eu?!WD2M;&^yudjRi_U+%JrFTmY{y#F4F-|9Yk;&GG_V215S7zOPQJpW6WjbZa zuC0+bCoz9n)KZafY581Mo=ZL~ZuWglTUKdaRCoI05$E+U;R%z&3zj~+x|ixg9qym z{FnaFIREJ6&CY9O12*28rk?WDny-z)kCUpZ zUVV>Y3kYaxvI|(*`pW0|(p@YyzbE{^`dv`}eB@U3Nx$X?@=KjhKEF~>YB}GzME(OT zJX0Dj?vH4WvR)#&TYQ#?(8G5#9#~~f3;RE7y2)GBGfNZa2UsoLSK_qKK+MqU+r-!< z+`F%YNnI_aXdC|4D!M@A=1CuNijW&zd072Oq3|^lsSy&i>6q zf&We{j!TbjzEiK;ZuY1C*YbKT^Txd=*#6Y*Yq%CA^*uRCA$7W2wZ(}}PB|%-SKntm zxXw0Z-edf%+(=la04B1CJbI zabn!`zvnI6595?Ql8^dZ!+c~;l|Q<)#CBFO--VuO-yFYKn@+y=Y2T`6Hv?WjWmP(q zc|G&KR-WpS`{cy|7R#n=9;gfkuh_vSfA489@e1EA?uz;k|96Tn zwy@Z|YTiH9sE0YPosP!;4f=Y2XJ=EC&7$I(!Xx`6;?uYN_xiu_xmRr2EQ5~QT6MmL z9gEfYVnmWZs9ks2>@92bl6_6xc9rE`M@8?PU3l7A{ccu%TWdqG=zK#BpL@k8b{`GO zUoQIKI4kSy-}_BIz7Mz__ow?yb9{$uM9UBD815_QlsXhh|qO*11VPI{xqZslOlodHresn}6k3 zbja4C{olLKAO9hnZt>Ax{BM5{pKlZ=qr)u4b2%z=fA-B`+~2!2cj9H&yQV2kZE0!l z#^;tUxE9`RclF1z)b1a?X+ih7Tl%yPJe0rAbnD;juk26m|6q%a>5rGWKWkdU50-Q4 z(^MnowEfUend!H*I!$Zg%8;c6J%7{17H^H*-SalpZrS16@7Br~wX#abuZnW1{U&HF ze2|56cT1a!XWC7rw{h-!cx0WlTwUHwm}RE)AjqBJ=XoZLkt zW3E5r)0VXOv+3^g`~1z1zw95? zqn-#=|2cjvit}ZCYI50yc{`Ij0+c57I4{c4`(}N>tJn9>g!&-H?BDOVME&edzr>}? zx1jQXeyHHSD=QjKG%zs`s z$e&gblYN+dd9j=A8LgO=;xp{h+wxgoWY@$7HZ2IdFiY6w|M5lt+<6@ewD){3SE~B! z@?ri?*|OR9{_Nb{l$znA?4glS*R(vgLj9r=!xfheR?%59A=%%e)~YRy(!3lLm)C7r z%xSzWIPz$kQHl_s?tg{QA|HN+{|80Rh5ec{Z_AQ`fOidU3(qml&0Q1O*P`6({73iE z@&yK-A@dJ>tX8}9U;O!n|4s5!_`h$@JfkGQSW(sVw>?wmhxm>EFBwUexk zFqd-J>qphz7gn^e)rEX3nQ&#r2Ep{{q8>hH4GwT^)SnnoxJ}a6u(9D_$_L)4yRUYH zew@4{j{e)0=hi-|Gk?j;!E6bJ@xR zXPx7eT3Do1y=9-2U8C+2MIGNGmpS5Ie#o3C6_mgh?R_URN=%E*@cnJ|KLG~Zwk+kv zQ&`jMV+H>HnPS!O=lzAE|GBpd4{{Zh@c(*ll$p@*<@}X}7L8G7PyPF#*AciWlq+*J zv#UkWNxsD=G9)QCEu@7b3A;#($X(}%vsW3`d9p7Top3& z%fhd(8?MfKzw@xE&;D6g^w}CDPD-f?{XBjv@Z==Lz**U>d;L$c{?5g^@a=%(q@}U>bw!KTZ3%SDZrzmpN9UTY#FzS&*XF;=(QW*| zomI+o4o*&FU7iGk@9fpSva5 zy{05e`$FmLoARZ?p{Kb-|7>AM{(mUOHemO<_KK!nHb=J~ssEq1{b%X>(l|BvhR2bT z9nN>_1ItT3?+6!LyJf}(J=ry#^UmJi(AFTo+2Pt6=2K_hdahwn@cp`?^N3S|?B^xQ zf2^uS-tJwLHdk(fB}1`b&Q!evPEE3#*gk!a`5u3C$t1Q9=l#8}@nk5ZN}SJpeB?@* z<0A8=7Z$s(PgK}h$>6Vh#Pv^w=v=k}EndekwM8Y|td2Y@%Stv)x~Elo`HWYlqL6!P z`wEp~>T4qYDtB$rnDAf{4}-1kl06k0J%e@~arHTu>Uyrn^u~jNmag)+-Tw{9)76cvel9a5^0wdIn@ z))#tBkG!}GQf&YD%#7!{=(4-$zp7c=qFC9=NtJ;w)C)h(;j*(ireE1QW$NT@2R<>j zO`B-PSnP7QK}|8RVS`Yj!MW#NQj@F`7*7g*xv!{oqW^@@CwI3G4O1+m!kaJIB{}Zj z8~)qeZ%td~jtv(-^%Cw#V9%FW;>{{?Ajrb=B*T#SM1@UajQ47csjfxYfi=Jf`Ea z)vx&{Yx-gy{AYPuS*Os`cPEN*zf9<}kBjFr)NFjocv`(cbM3YKMRTn;E1R+#2t5yY zAY-ieBF26#%SBNw|3lu|%S%j~jvrNk<5RZ9>uf&OXQhw;fAse8gGW~xx#QNx>Jzx8KNVf&z4GWC*N)t46++YSGOdjI_v zo6h8)_n9GCO1&pqUjDpDy%b-vZ_WEEHf6?7W#0c(-!Rw&l*yjDbLW)b+IRd13-|gR z{ZzW>yzxGd4&iQTsW$?9?$_sPyEaRQ?mDQhSRzvBva)-srBkEj5Y+V4 zfwNdwcJ}ShKXX_9zMomoR8yV&FQk(3kpC5<59(Q)3mJRd1RhOdo4fMb`YnDqBj>^UtKNPu z1ZVL|T&Y$1om*NjkbiuRN!rhZO%`GgO9W@wcCc~_>YTeGb)i(S+hf&9zbyspbgpQp zq;ogLTP|+sd;d~C5fJn+xuKU%qL@Rke3N|306hvOG3! z&xdpK%jze8k*%8Xx8T>aNl(j9Xa6*~aP(1+U&D7^LFt5=2TV5?e*SgnxK}BoU+I6v z$i8I)F*Ee9KR)L1U)!zuYO(v9;A7PrH)hVw{KH(Ad??T2o`toS>B31;wfwRBO_(GT z-Rf00ZL0hKyGLy6wY{Ot(^@w+6u7PY*MIo?S$?hJUpn8?#ktrdbzIlEoKewoe!;qO zF6%+RC2PZuacBN8W|nPWsM_*JC2YpQ0=W~cc5_%RsZ2k=PFB!Y>1TM_>(yuSAE)%h z8|%uxR%+u4IH{-jjsIHtzPGLY6|oidZm$l_xx~KKTkFZ``@0lce=}*`%szI)F4L}Z zrS^%A1D(%hFV!nro6USt(RZ?Z5AM#6CWB*89&Z zrb`T44=esF+Q1~T{|RHss|{k-%lD?OtvRfHJ|N)Ha=V1e2~Tw`0}gbh`7lOw-Kk30 z$gpNIw^75bYQA<}R(-cW9cfcNEKg>1Y*rNewdv=n)BYk~T_qHAcks+Vv8%%|@v6L1Ft&H#`R!sw$KO}otJ#uyNN8g4#0lx#NWhH)E8@t4)hs6@*-tXBX~KnI#h;xUlfw zl(>z&e*&DATU#IbX(i{Fw7fTE^+NT^86hme2S2Re!kwr5|FY6gU-d;Z76w=P-To?a zaLr8PHGLiTjVpKj4f)T(8OKxEbgD=Bxa*B#Q_)rY=Sp{7IC89e;b(yZVPb3z=i4`I zi07>F7jHb|l*?pPw(XNyeTRJFG{JvUxDC4MJtsb~x_+^*wbJ0j!wH4kFGeu`zb@W* z?)rMZFW!@7#qY^+>1UkbpI|ca1#eqJ!L`MbTU+#x&X(0>D5>H5vGsfR*RL_{CZ^dI zpI_By|66{1eXD`;pCCS^yJeT|p4`E^SH9w%K*(i={ergZq^>f!36&NvJlXVW%_r>x zw;1)j-|Dm%`-#t%dr=|FS*UHFUAX)lU-F|J{K1L>%pXE@W2PGF&AO>*EOTmm>;BiK zl?+)Dt_SoE#^3sFy;)~>+J>|ZYi$^Ryp3ge;JP?7(VMR*x985!lJmyAbwAG*3p6Zs zGhw|}+Sz!`>Y2sGNfTXyE!M>O%v@>X&?MRVU;)$p`TO`jq#ykEdguN}(JHeA4@gvQ zoa*~qqG@Z!x5-&`u?+dItXHa4S3fMRGrqyF;fG3T$Zh3m#?P5To}0x5A1d!C-Kf%K zeI_(PQrqwT)jI(_1qw6dwkACKyIEbf@591r?oSU-`KxpOjNF?m`R_uT)n*Ge+|YWU zX7$p!`J2!B->e4p|4ZIYuG9B@Ch4+bU+Wsb$JbfTAGp6O>8i^@v+DUjChb`0bYiFJ8hrY^|zk8o7R($X|-=inzo&CR_-@c|Ib~C-|GWW`@IxO*XVM%yp z!1b-24Q{IzKj*&m|8#?1+@-}AW-xHiyw)6ed;OaH%meqU{)h<8;=87}Wme3L8}Z9p zuI@KKe4oAfhU2kJA!)%47J=HQb9Ce?qp`jjp8m*-7OWrHTbUgo?RDJu=;^y7<$XnUCkU`t+?a;d_(al%b{Q zk;0m6#Mx04((<6i$lUnPg!X+aEjJ#TaIQ;j^VD;U>bp0e(P>%#_=Xi5C(nNWg>Ppy zaq$XowmR~8zZL@rZ-m6oO>;|+&i^6DV6knI$QnHXLkq_a9@9dBc5V?4GY-y<=u|r~ ztJWL3uf90UQhIV+Y2FblTdTwUc1$TD&GM%gR=xK5u<|g2lgCx(7u8eO@BVh*_9N?ZzMnOV#U?4O zS`ilBu>T7m(@MuvsdHFXus*nH`FiP^$PYcsjFJ|o7r)inyI{!@&=g*mS)%#DtlGqpjFO~b1 zefrOEe->9&@QgIxPdu`{g7f)0|0_N%f90+|f05D&!v;NuFL7(V6Mx?~@K|y->0Dmo zQ|Cj;8-j{Mth|ie_GmI*k@AUrmSU9L5}zxnJN@(;)@c)`$o}bnu6|9`Hsip;S79~D zeJq+2PX+zk?%|lZ*J&%)j-wYW-^dl84qV(J!^^a!{;SB8f2tkI!f%D`x8J%`r_1=> z+LST*-fDiPO9inrZ!hLEDQ31Zb~|&gPd(V7=gouq9kUCBHpTHO#P4MNeoFGryZ7e% z0;gU0wNz$e(UDDZol?_eBo3@{SaEdo!qSi}j2|{T#C&1-IA8zSH67L0|I#&C`SWfSOX+4=R{g?GChxEX(~IF~KYz47mKpM<0{ z(~CH^d}9iDRX%M)mf`CD<(6x2CMUNa-YK0f-k{fcB1dhO;EyLy3bK#iId;GFnjdrD z#Hvl2>~Wn{?$=)Js8QSWKlo|T{S`ZEs}8yB9B_+;??W0GPOZ`+CO*WBHc3TwV> zuj}Jhd+L2V=+#`4Yj3l4H_Q*sP~Uf3^Q=hl%sJAmTnUFVe9sHGE)Ob^SsXfT<2Kzt z0yAEHOO@0Q#x>2QGc@m@zN^o&QwBx@`5y$?fb_N)lYzJKGj0{1OSfa5T91fxy7e>WKY`@tC=KVq-z`7EdGPPePjouUI)HvoJ9k{FKU`cTw3`$=EtYxqwMXe&yAP(JL6-A2OKAuL$2}YyPLG!#KEWXf+R1+{)2X8LDV3}KiP+D6I`OZ_rSSbvS&O$6 zt}fN#X}HvOc!l2D#>>VZH#E$YlRTOi$?%`k-zR#u+!9~GUf~1V{(BxTcHq+$uj-k^ zu3MC--=MZ}&9?4053a~}%{TinU453b&Q14z9f!AvpY4n6dwii%sA&D+D~>Fie(x}x zc6j#1$(s`9#BK0XyB6GKy{p6QSbyWBQh^JyR=I964BERdJ4t9Wrp%a}s<-Lq^L@)s zC(VD-wo}RUk4I&8qRA<{s}@y1y>HYwZoYD}A)Y_;Rkd~Iy*y#2c%vurf3=iqw9oB% zb9H67;`X#6?=8Daz2y@pygyRoeOf9j^{yND3UQsj_qwOJfBk3eF;DrrK|uWB(bk9y zk1S2uXIy<0^!m+V)+n2Wzv~w|UOf7!WF70qjI5x|VeAe!nGW2k_Se7bYR~4Tp8RCn ze_7|3GoFNQIHmIZh5gh{?P>pWBOD5ILK|)|rGMuYEK5|3*~Xk@za&R-nRDWkH+s)kHvTs{*j#ZPP zkpD%=gYSt=lUf&9S$icpn7K22Rc)1HcQCldeo3iHlYLIcvvZO=-*fUSJekb5kn7bi zQGc#R7YF_3EAP+GP&u`=_*jaP?4CSlW;Yqe4E$;q%B=Y{K=WQEfCKWY2k-@MO%E#K1J2V8vZ zzqBc)op*Y-GEA~?E}xF`w6%Yhv@+JMPMvUEBsNdDUF?SJZ~Ft!EjCQrtaL+kd9u>h z2_dH$q`p>u$-QIVJ%6qelh@^`D`Qt^9n0>BXHtr*%AVgbZ{5}Gvpi~xld24}G>q&O z^Qx9S))4(a@m#t~`nR?}pP3H`oU!_QbLCgFFuD5FMZZ%w{H}_*x6-uL)5u|~@^AI_ zRgJf{2mQL_aAd#Ql==@>bk%vHk8WS~Q*4Lb>9z|F&$I75;XdouQ@xex=gODYru?aI zVUv+K{a39{yV-?%&#Sk*eRxs$x5ov|RL-=V z;Pa>c#y{;j)wcq<7JcFT*r1?y-B@gi*z03QH%#AUufua?Q=pN#Si|ASW543r7ChDZ zf8qR>%{$-OFRwG~3Y}Y>{o;`LJ^_=h^`&Ah+uN7(gbV91n6MtdvF^(P&6O8CZb)5T zIZw?{qc%Y?g1_XX$?*i;1vhWcTctc{`Ku^TyLL0iGfW@1KNkFFA=6N9l-}dc(eRGT zS=@el&2uO1J-uskWhOncmv(!0^_Y5{>?}q3V=*^4gA*jxelCviPQTr)JNw23j_8JY z5BG)f{_s9qc*4-BU+&`8U};Oiuv0fx?rgUFlu&h|cynZ>*(;`$kla+wd6%qrK7ILM zm(j!3eiJsgS-wx#__S+5X?UpA?{!-lo=x`8Nprb8q3?^+c7?W7rPiz8|E-Ux(d<_E zJN28H%7U-Y-8jCzV3lfZk^bPi_~wdd76Ip*n)mXv)fbosH3-H%`Z)dBSLL4PXRo&2 z-)X$|-}YPVs^y`RI=*(T^tSB}N?a@8Xb{4cZ5bAEIze^sxqq?K8jLni%`BMzztpE= zwQ%*z_tH=PKU~be@oT}OyUH@pXJz*@_AX(z+&KN5?v+fTw(t!}27;DMtFFjAyZPwM zCeglgwUW0jA6{qpdb%xD@5KN31!9j>&os}nMU6SvLZ^uvZcBX9S3wgip zgY@d?Zx{0%*L*muU)NGpapjy!mg#Gb$`ed;g^eQ9zdZ{|dhs#7>c=gXQAaV-e|C7Lr7cH(^cHQiC&&}GuW2(NhH}!x7`=EIb!xVC8>x%3dQkXOpG{W zTr(VR9QAPdSM%`nah1=p8=9~0%&*!vi$&geexB6^CX>JYn^X2&x-4979m>`D_4vy3 zSNM+loLJM9GGFsw++@$jKizBAv^|VF#Gk!OVP~75MEB7Ip1vuw|6Tthbo#=dO@Y1Z z6Bo0(vz$NrD*SfMT077FpU-yPl-fD#MWV{5)TH!{LE%jJV>u4-)+7pdQW;bwyG1~wMEI04OugexDW zC{KFM^DEhH#l!SYu_8X<`6Y+yUMv*e#V|L@$)b4kDq>tb1THd>T&65|^QpcG8 zzMkOJH2ambh`!_FNA(`~`eM@Sn z(7a1iy5&Emga_mqJ>F2=&8R4ywQl1jOaICZA1`iTe!ycOQfIN_P{&4=Z}T(lpDS2R z=M3Zy`4G7I>Ma46>+`NZve~n0fl-vj)9KPb#BZs`W+fZ^ni{cYPZA@4S)lBc2Uc=L zyvG;*ND_`;ZTw`)v9Eg;=xvayOxaq&uzF6Ql6+ETv(SmtH=67-mR{{?d*95}n6dBo zm9G0C%R7*;b|k+rhD>rcJ7O-ocU4yNpn{){)>4&&-S|7 zF+baTIt}(`W-od>;ZuQzoD~Hs+QPrh8ro?GUUDSZzIKwiyQ^)+^-BAs&3^rTz51s6GM_ziI{V+g z{g!pGw!HJ#xzBB_HwimEDYN@-Dr;1@BTbNP5*Y(03os8Ks4s_pmx6E^-_b6H@@}+&>rYDz$t?Qrf__2~#`NFv= z%<!PPyS_#eg)0n8Bx{bd93w}A}d##Dqlq4Q-8^bj71anK5TcMXc(L^--%gHKKid^ zf5zMywhg;vQ@K7g&H8sMsIzb99j&(O)=>pR-4dzB3nqm&a*MNQ!Sw*0^LbDfofqm#T+T&y*_?fSH||2G3~q=i()P%2HU5lUSRQ1V>=}%)p(iJ zaCgbtWyZ~(XZkM3B=DNQuwVXM|LaoeFZxrj&TwBMa^MlybM6B%6PedE@d|ESK2vx1 z(hb)RAG$4?{;*SFsz8@W+pon}`}t)waH zwl^AQ^wt!;5q1{xoHSwin~gG@$E1E8)i?W)ZJD~#A~Mh8KBwl)p!}A`;w`7wR|FZi zJbLmVJHEJ0RBOLPa7sw#+-y0ABZr;^zStQ0f7N;)&xKc=rwJ!oTsd|7Pn?2xg6#v3 z$+v_I_V_xE{b(<}dS$L;vq0I8kBxmtZ4)D2boDd2@Tl;iqdhFh4$BA#1Vw zS2jDx@7Eb`w{%BxpGok%)oSP>%#fuUEj{Pzw8bJF?T2KPWlzj{dZ}xHJ8M9bJZqkq zs$PHXk!xlD!o_DlBNyW@7h zoqkh_xz1L5&-IK=%l03){Sd<-d*DX)L3?qLx|_>`&NOhb-#j$Qc~kC&R(mz3bLakq z*eaef6774JI!!@(#`Bb(`b6f?+%u;hgoer4cLyH{xR88n^FHZU$w%(D=C5THoTj_f z{e+cLuHij9W{=fpR&dt*-7L$sNLk>`7vmW&&Wv-S>^J;0xv}(lhs0lft+V{WW%CZL zmsFL=GGc`>uXm z8ZNV5Y808w{CcBJ*wkQ+nTzkZzkiTEujTbKZLWvuQg`NETpRxL_-AJmiI87~364#Y z>N#iqw^~0-{rr4?%}Q0Xs1#+r7cr&l=enG96zaO)$#{@ob-I@Snro{UKJqTFVE^}` zRqXnvdtO#NrV`;ZUTt3>VG)t>K1A`%#@1c`?U!HDe(+{-{0!&TCqEp5_!m32$v@uK zRCT~I_M}^v&!M;JpBK#EnUVF8hwbyh-}37N9r@!gd}56HcBR}o$Yp1P@W;ow|JWIq zMA=#d-#;g1hGrdsY z7|+y#eLo@_Bw5cldam8XdQ1BCv&sHFtII^Ikh=L{&KxV>Va2`jrUVD z_h{NDwr-t%X0b=TXw4h@^xY>vzOVTg|FSUK^OEGRxYevBRXsXxXVez--k5&VzB7&6 zGKfd!d}4vg^Hs(MMr)`1T-jS6eEW&h%r9r+o!FO(IZV1Sm48pGyW+aH36qrE968#u z&Bd(bQYE$cu1BBn`nQu+Qbq4$rET7dWS@$R1)Y)dg0Jso73kd4`QOHTA-i?pwd`pw#Mb5j<(0rR%Q7YUF)8HcR7I@(=GUo$1B%`bvF@ciC)n*?cy1Rpp!$ zKLxDpR;JVva01be__+(wkv!&*4%CDwoJ46Ch2I}w$%PZ5qJG{e#`U-oAVJ{ zqkrELoySmSIAihi=WbHX=j;1&W`tDD-K^zzXeX<~eV_iF8=}+gAK!`HC~dmSV&bdv z_If#<=G7lphL$Eu2enH#v6-{jw1@yaYhmV%MWH<08w~#{Tw5sRoKqM!#eaX_ zs@TOxy#9#idaEGl$kEpKHLYjcC9CX>{|G(Sy)x%osmAkr)nS(>t$O-q zwtP*&yT7ld>+cP4n0of8{?;~$-|N5VZ8cFy4NT7i{kCZ ztKwNsHP5Huy*b~FWtv4j4i-!Q4RKVx_ME5kfVhlOr26qQ&(CVGXGm-e6k>K)J*H`P zm_78s|9LzCb;-r$dL`3lyjPIs^S<~~|G?^J{>ya_N$=I~w;1C$m4Dl6u$g`fok2{{7!`CVYrE`|-!)@US1XH9`@o_v{SYlg~Yt&z&@Ndq6?| zrO)Rsd90iEZO3Ul(=`(;>^EQ8`NsBx|JEycdCyNNZD}|b)FZy}W2IMQsY29RmHvk& zlAHBSr(CkVdW%K4{zG#YqYvAQ9SjjY3xAzG_fKnk!s02h9NQAO{gY=Vyr1#;-4hXo zTZez~nY{XA#IkTeqZhxf2;fM&G z>lX~o9!!6jwdutg(;}^@wIau_SuN^$u3KQteBM|8dcpRs%{;AoE4TeuKWuQLK&Nd} zV@Jd3g#VY%oZDx$?TJuCK)aZ8rlar7XY0id?<@H7lT%1}-%ICMRz(I$Wo@OVn+a)` z8|u@JimggJvp1aWkBBWtl*Q4_E6%Su=CFN{oYjj05s!JBy*3=Zq0L~%%W&t7N{{(5 z`PN>3zo{pVF4+I8Zj&nO;`n2|%&D(FDCg)bej>uaz3Y_O*JHCk?27YIe(6%n!r{s2ikAG-^$x=6P_5sQ>yYgcy4dCQA({>*Ifs$GfV$H znsPZrgZ;di{p`&xGMw*4&cz+KoG8Utu}Ii~<$vEzc{%&8^?d5HW?Wjc=cCCd(Srw+ zzkLmPC4JS@NmxQ|--fep#(So)1oQpbbaB;;S(g^*%zQa3y6SM!v1yT)&&u7=nR5Dc zOruuEjQMA`Hg}zjmsNb0JKv=CA4~gwjel>?%72i5A<2LH*87w#3ctK3?U==4r4>^m z*1AQey;AYnYXg=EVlj)Q-Cg5ZN{@L-&MMrl_{I6h{zodga@#Y0IeqvY+;(jad*UVe z#r5;-EA!&~_f)<+xqv~yWI3x%&kxPLKH;6Q87cw~!*A9bd&j-H;;lXF^RmRy>xa+B z|6Fo$#=F*elg_-zsL1r4J9q2T^8G>5UD+~QQWD+%PgJcBxB0#9GUty;SId6SUt%To zn(L1RgM;y>RWQO9Pfkqk@hQItV`S=`00R{sZRgqRYn}?v7K_ea z^*^J)kZ1MQ+w*2$x9{jZx-wi$%5cvE9!=YV4=2PePXCL3z2Uh2!U@_RK7V)~`LH+s zk-hEjOYf_mg>ZtUAb%}GQ z9*d5<#XZ|?@qDxJg;xA+r(W@B_S;|GXwVsUK&}5O$0k9q+a?RPo)7l_r5;tb>Bq9- zgFSyQtSL(Qym71WvH7A418Ze}bK7peaL=)LVSL@uMG`VKAqLAE_7!={ubRBxZQI)L z#bw_ln>{AAB>5WEoUzn(IC?(lg^SjlPWxvp8?HaRK4HCYxlq&cQ-yjvEFLb~tTQ)V znDI!G;kyTyX7)BoC?3D}vu%0z^n2NRE`;3M*tP$_$?P1}Cf1CM!b5h4G7kQlec$H# zj~h&;Zb7EXuAeMdKMu=G5{!?sYqH-bW#4|H`JaF0MU8#=^Qzw+Ss}MOIXV35nX;&^ ze5pluB0elQ(N)IWe(35}qqhhC?fy_5KmY&cjaiLFT-*QM5Gy#6q{qha>g3ZIa%Frk zBm$b(e>=}@w?TOSyZbO6GGw^dc~r+M z^onU6G`ZkxD8jS$>dEy5r`LX5y-(tcu&$~|g~*zk%1q^r&(icy?=%WJXLU4->BLcq z^%MTpgvmShFH1n_3s(p4| zMNQ-O`n~$Sn)Q1<&z?VAJL_!U##v`u=e9i9$|kjc*{9C7_?p|?(hHNG9XdT-EcR>I zwvf1tn#6_8Aum0AZde?8uyq!b414yx1x1JX{`Az#{0ONv&S~+I=lyhM|Hm({Rr7xw za`~yScCXeY#f>SVb2#%gH(v5#_l$bw@wRoQ`7iSvtxY9ezh=&v<$c{_x=`rWq<_U( zrfza4d%`TaxR)oYISa&e{O9_kEvG4QF7x9=zentq^^Y?jsymq+{vu6M-YWKV!>5&8M~jv_vj{bwb3V2_a!M!rlN;w_X3q)F7AZJ9*;eL5{3|Ap z<4<1ym|t3xRXZa!JJ~N_UUXK3-`PLM-o*Y)I{1T`?@V}U)5gFV)6B0vIiy$?Z+2QN zL5_o6xsuJB>38(>Fzdx@CeJ?GXptUcRB@obBpdYj=b&? zXBh$h*|~Lw9*1tdw?8T%_Q1!M{p^|oQNA0Wk7!0OX64`$vDq5su=H!wb1<98IBu6{6*E9A$$2fN!ZSkzi3F=QUu zY%G_v-}G08^8J8WcDF?$x)mP#zMDQ<@Z+?fZDuBWet!1avi$b->%P2;_1~G_N!)!n zggsUH+~eh!Zbfanr5elII(s$4KEZk^yD~{5h8c$P=PG8*Z>zDGzd7~mfzR0)7b4^r z@D;}uM^s&lcK#^Xr~cV}%j?vuTMscU-p2RW`s)0(JoyXc4f7&zPJP+9_m)`u;gG|g ziq;RF|EuWP@Hh0h-@1uE>@*MmnBKaFtDeuJP{=FQTBGw<=BdhWk}N`#x{MVLEf@h@;Vw=`2=P=8guio z|M5RzA0(Vos(XFy!I%g#wY7z%HyR|?JuWEz0#2_==QSVyZL>OL)z6t z+*7lE1s+&4xA)Q^gDI72Rx71z>uvjw9V!g8FPMI9W8Zf>)ju-Drgt8(JobNL@x}X` z{U$*Mxx6SH8q|D^v-@@kZX2#v--iRsTaz1O~cHRWZ!CLpWoQ* z^7+x(_dEOQyw*%gw-Af+RT7U#PNBY^b>~|I3OgLi~m+ z8-5%;z$fM&eKn)tMrWSI#cpQNw6^+8;UuEv~U#};v-ynZb&;EHw{I3Pm&c8Q(6=A_<9MQwmrK1%binrY-X-OAwkzbmQdmsJIATR!D5=f`5Ui(2tt(|UcMCOq5s zS$OZ)?4-}PayED~v@@-FJt;A_O7`}}vRjYNKi{-Vf1;DWXRVah+HY64&AWG=f6~^e zd^5^~?bVO9w6W%J_|LF%4QkK6>BaL*%qsYLRR_Q2g6+$KWh(o3a<}|jlpBBKR`Kyh z5#5#xs_gP{zgElcnDdEw#*=5!Z^JG;Qk%!B!JV*Rhf7I!)$6>>wTdQZ8ejb@-)kGJDTR=w0;?%7joH(q_SnCZo(7OQDpIrn3eCTQ*8-(qUis6X}JRqIkG?FiMGxAdCWmCm)9lv&Nt z{`U3xsl|Vm%+0*nDEH=4Zma#~r$-V*E(F|eeSZ7|(}Rtt8~1Ko9-m)-<=tx2jV9B= z>ioi!ggoZU-@bFN?1c>{r_Ai#o}bq5jY^%mHhhc9gpbjV96f5btlmG*@4T1Ps~7+K zk8J+;^E(<>*A+f}`_FCu$J?*BU;m%K?(?_rc3qENY`>nrzE^v`OLwK@-rXzI&ehHL zx%aK~^oyz~`*;7CzGv(9eUDNl&o9#0X}0Xcm)tn(lj7Yk?rQ9c7fGG={Oa49O*ONx zFTHAVYE$g~Lb2k)=kIRsId1=amg_s`$BZlPI7#ZKyOyMz)jc!PoNT^7Ud;D-V2Eyt zdiU?|vaC<4^XozeZDf&OaMi!<0U%xZqD8>{m^vxblvP7_fHF6KYw?A@AKBAMDJ;P!gk%6bw~cM&0N33@~%Om z7vm+kb- zU!P5@D4Qj@NHBP>uy5w5=_rS(LLG{4M zmuK~6x4TUYE@wVn8JQ9p)yg3*bfRp&X{_Gr-tXm03W{H=F$w8%|IVvAF1Y=0ylU@( z8B;$S&A+?PRO4^? zb)v~tn^iK&Pkzd7zY@`)vQl>KlhnfNf`?v&slB(@SaLYl+U{Us(;h4C`sr#l`%|_! z26s#{TJ>mAL03-P4&Spf|7>=~`7FA*)j}?NsZCVJ4erRd-;V5fI=8YUxAW%8^}-C? z-^I3t?U}AL?{1;jg3MW3r^Waxg;KpE=VojRw_lNUT(tbIly!0D=Uq(ucfXvOy#Auy z$LNFmU8Sb(o}6tOUT!uw)qL5`%jca`{3b2GK6%jxmd!KHUv5+{tV}G_pT+(7cp%fi z{g;-^)@N(Vy(6FQ`o=O-igR{q;nb&^(;SMt0xy~P{n8P44Lft%*Rh%P#$U;gZ@yiT zlvwB#DfMq{_RBm=BfV3`nlH{7AD?(pr*FM`pHL3tz0ytDmi=mzFD|e8Q@mV$ll0^g z#Si&+yJjifD%I^_dVNc9zw&qM$+wS|n61AnZT%x~+OGTeV@~xxyMFhX`_)ZR_jH?L zE12up_ZH4K*cq31Q_=dPJNNM`|303%`}b_d&4!JWBZclt)NYwP^<2o_oqyH5-}DO-}HqZTX)pm&q%S`Ij|Nba_JkNBd$Wxt3??2sG=)T6FY*m?J~%ha?^-Ce!& zbJm8Ht|EJ$Yz?a9T&sHDH)!F5=%0u0crvRqOn#Oq@?if)=bJaG^{1VF;bwQYxGctM z^6^>ik3}=4U0<|w^3$h0`VnfMQ!KOZ7=NCOR^rC5TOZ(&v(&2Qr_o@G&!Z^Tp;(c~ax^$+qkV9B=%q zy?kZk3M2Io(-vKm+J3Wj@}|?9=7{7qyBb==6)kzuVL0!6{v$PcJDu6=-D!ri&)?h0 zbo$!Xnux2`Ek{2{xmP~CynNBCr0o|r~4nOtY-@iX8um-nD(o#R<}Fv0dMP;?w7L1XM5U-`_5G{ela68>iSZSF4wIy z;y!NdQsfg?>RbKFl>0%Qs8H}k{rs~>97K%DKP0DL@xA=Jyde9j%@rl{;&n&(@@}18 zpe=6~a4EVggFi38?!~RGmizXa-EO|*c<#=}xHnH`^Du}iua421{q&6Bi6Fc0b#LXw zJ&pR)%1^JJS#h(cE?hT0yLq4SqW{((O?U2n`XNePjil{^}TxfcXwaooGTsg`er=kGclN&8g~5ZmQ|DY+Ae=JC-(gpf6LjPDhDLR zkM91oU$|yvgkkApGuH(j7iw%dd)8T8sXcw&a+`w0F0yL~QiS#|VU zDgQZHSu>|eOMll+vn-qQG+$CJ%4)Vw&8zIcua@mh{P8Zvzj?XeDNTp8Xt94EE**HR zGoAlkc&HLzmF#u?#qFiDdU%#*=pX!Noo~N-uKv`Jm;WB$IJs!Wio2ihsxSZgb;Y?= z)kz6QKN_8%Wu51*^yBhW;bYPk>tb17Mom#&Kl#ey)%$+?E&Ls!vQYW=yDRT^|4$44 z%li90$BwdHw*ogvlwNrD@ zHF1<>8SYeeb9$7+^swQPpUmD^gPXb$->xkbc>b%SLGegI=lz-bZVY#~#^n5r`d4(# z?O{O7`OUBYZRBms6?#`6Yt81Lf91W~{jU1uP46Q`%w>ARlfGUTjk)^NsI+1A(K}|T zJ2U-bcZx+m_4uW==u6>EyUXm1GyBCIoF)8> zuJp~jzc>Eu{--8a5AD2p)Ar9J#s#mWrbm|57S?Ypcov{yIGLR{=dyW>lXdq=UH1RF z;t%qIbY7d=xGU~n+Z1)T`1-ZtIfBls__t@ewD#8ZwD7Y`emptoZsU_Gw(T3w9XYgd6jdP-m_w6q(aM!+TaoD}-=thpn7YS|BNqbJa9QkXTzUHK?={vE{C-+`l8>@Ql z@|(G~$4?Y5FTVfEYx?>|nV3!KqACZzeVhKd$f)?)nI#{!Hyn;w`I@m_Ilm-7?7ihz zwRf!*f6jd>E`R^x!L0aW)vW<@Hcy&%PFsHF+9&&;7X2=M=AE7uc22QUI%MhZ2eZR> zT)Z9L+;PF|-_ndzk#*X$_L%($X61Tv*J#z86C&Xc{VXSQP2AF%_lC3B<@>j3r(dpJ zIivR6hr&}vlYV(Uchq5K+Re2;r|}4HTK-c*y~}$lt8*VJoDh3=Vcp8$Tc=;}PFljX z=1Z#N-FUkdEnnQK*07wjPT_wQeH!+DmUhck7hKU)1^-e`4TyK>>~YGM$b)P-8zWDZM-wxJwRr-?o3+iv>NO?6rRk^#nv^>+RYT}tW^8>=R-rkgJ=5>ed z&Hk#dd*9c-|7&xzeD{}%|DVJ4TXhcT8s1rU;J@2N>*>oa-AbFze{`umy|RCYg70D@ zG5=k&t@i)FR-!d&;heMSj(3tQ*E}`qG7HYzJ+8MbXUha|7GQ`R;TO_ zyz=|^`}z-Gy!*e&+uytH{wj9Y-Q1gB`sO&M7=7d2wrb79B_)?!Vy?EAPjh|p=UMir zcS8MLYJLWy6FruneETwYyV&~<7jC<5~F8lbq_3wH6+HHF#F3W!??$vSDQX;VU{L5=gXS{m(cU4XL zH0$`pn!9%{weZib+PMG!)V~iW%GO;{*`@Sg@8_!e|9k%~|Eha@o3CDrTB|^4X>p`A zyZ54=b5qw$KX)VU%H`XaZ-#_CzgsQ+{^OVXe=h$2^Xk6c<@sO!mE12sIp1hkY4%UP z`d~B3_usDd`u@6a*5Jdg1YbM&)u?~nYR*1cz!@A-Z=y#B-9_x~pDe(wIe|6cw7;(jH8zgIY)mJ16i z{A4y%JKD6r@NlHZ=JpGdcHb+w|F2%k=EvImr7pX_Ub$HkXqnWM`ypY|+y%yuOWGZB z^7`xc81MXPws6Pl>yJ-PR{#Cpw(iS|i^shr4{U#Upy;${Y~rc!?$w|wK>i9x%^b( z;p}a7zrXus#qO53uX^+EjrX13ae7@p67O21&VO1u$6{B$mSDGE=)KiqA79%g*Z+Au z{rIy3DUasNnSJh^=DT~d?{%)*y>*T?-)?2aNf(yI#YKis@A-H>O*!gF@6`A$vlqO( zw=3FCK;8R%;#A{SdD~m{@AvMN?%aJ)y6@s0r{fowWPO{JX103utcgbsMQR2A$@~8? z?~gRMz+b-~8>_3Uw|k`v-xrx%S37H;^0&grYeYR)v3}oayz_YWoSNF@H~iM>&A0pg z=<53I(VcT!cTZ8d|0woDx$N8h|L-MlSMw|}E-k9xwC3@N%wJJWAN?dvt_DfmG(3E- z#;(@B?#q)^=Jmboo2SQg%lS;-Ufg-+uHRgL+qpi=Qg=oid3u=P|K10$zpdq;9=&zd zogc1|cDL{UKXm!U+3+T%RS`{&R}WjoJ-PI%(Dvk}&WakpEAHFpT(-`CcYWh!YojOL zIj1$^?sUe7N0zz1C~EdEv}Cm2Ybhud)3#MB)o|~m<7Q`G*Jw*dyZx^J<6i%Ty^hiB z-V4XKPYdTg-EPFV>BOs=NX~yfx=R8#g_|htc-?xYeAUs=H6d?fc9$u~yWH>kyE{Kh z^JPK@`-|DjBA=XA5E8jR?bpuR+tto}ntAM_&2?4{B~Qnn%m1Ex&9mz1o-^B4EV)zv zb$<9&nind&-2~vQTF)Vk+amTk|oJYKVD zy2ADCI`7?FRb!rgTaqJpZrY5B&F;ho8g_z9dfL_ES^er_S;&q3?F2Y@6b=ceblx z_obU_IS;kupNT(_daywA+0;i*BNq8=dh@XK{mp{!@qhMhVPd;p^N+7+g7;_HL)j1G zcK&~I^7pUDQ*WKHeSQDWTl;_4&)fZeZ~yC_`1k!R^Ja@)Zs#mgw?4YQrQ^u)>J2M| zI@c}yx2C}D#Mjh!500GB@~PaLDLPF^aMoG1(-xL-l|R|< zb9Pj=WqBIL&dQqpd&8PVUwR9l{5{^U_y2GGzpLy2e+>Ws_kI1p_W%Fxzdhf2zB}#P zf}NLY*Qiwns;rzWoT;Q}Jk4)c=x*zoPl9>V_NvxZK6`uf$+VDfslWS=2if`fzo}Qy zySmuD(QBsFqtlb6RC}!78;Ac1mtOTwH~#P4`+uMO|93q8|EtaQzrLQY|FYP=PVDaF zhLGUvcAV0#@jpM+2^@~v^ZP*Vu8^i>#`zoHsh(ESQ|qX?x}Wi1yI zulu+7|L5KQbI)kLbK1!x|NY?f`8J$AC$&6gKU^Hd`SaLD9i3+b z!Q<@x-u*KF_~t*__Tq2tp7YKpw;lQNE#Gj?<7rPE1LHUTKUcTgsB^*TKR^Gz|NG+q z&o`U@zn*{RU;Q_8`(J&*Vv{SkOp%&?LFo6V`8EIV*Z!ZmkE3zH!&#gUm3fPGcWN4* zVkzI;`hULLt>4GidUmGYooQ)({NV%{&&a%Y8-zK3zu&um{@ICng*^K+*-{SwCP5=L4b^PC7`~O~E|Nr0n`Y-MGf1VTO{Ce+3hQp5s zzwLkj)c^N(-+#-7r#rUmbl?2%eY4v1_|}rhq{=7qa&nxCHm>zsD-1hA5Yp0kzcl`GCiH(z55D;oz z{QO>a?sUOcy$nNcE9R^NsXuMM$LsCezWw3!*=CVjZ5#!2Za$rKC?j;^(t{^<_6S+j za8G0TG<%iS+PF6>x7F@^?r!IF{YN&Zd7TIE@&BRM&Mk{HJHM&!``One!OP#h-dK3A zQ+7_B@Za-E{%ms|AFKS8Yu%$~&Gg`i+UCR0Kd--8e}3;9k4S@eM^^VR*rylk_N>dB zeyCy9I%!k=V~;{~&o*ps?`-5gcQlZ%ed^Vn`ww2PjBf95JGwT$@~rXC)!v!QE$SpNK(Y_-A3InR=j<-va5FDoAiJbn6Y*0LJA$SHEu9r+}S);(xs ze$d$z;8i1ad|g(IqUw%GW(=;ZA&q<8-Igr8XYrK9{pZi&z z^?x&8on~Fb?k;iYkM6U#_mrabtnbfPH+-gw~#V%+xzN8QsALqe?;%c$CV$wmzixPQIhzl`mxUI zl705pAHtU1-}6j;eXZ_`jap_l#di~zoGhGT^Y6l;`7ciXQvKojbFHcEw(Ey1^g@%> z*&elgICJg9CcY*PSJuZd*SS7ass$w7Jj5MPH$DB>;Z0Q&_BRE0@qYLk&-VLHx{24B zrGIWRP1#s=?BdJsM>kx4ujBrC&Gr29I9uBUs~i32W>49#x8GofimC5()rWpZH-2`B z-T!LK|EK;>#MxrxE*JClEJ$wljBqe zP{K97MeN4T9qUAbLrWi@|1R%$SmT}jPa~OczxSq^&Hrxow(Rvs$2BWhlOOM2yg0ns zm#whecKXqU7A0*OF$FgJpX}ekbV0~*66cPWmVOx<-d288sw zBaTX~;r`*&oRxmms@QbnUu*u_#%D)%iM!TEIX?gGcXH3qC&|~|e&5xds(*Udr!>WD4={pB}LTK>KhzxLkD*_Uzm_Mz8RVF$MVo6P#-bZbnT z;;g`l@>bIpoWB_Mmierauxj8ZjwyHZYk&Ag>wi<|@JRbwYhIGt&Jg0z{5M!~>gO4v z)7q2Heu)(A7iLmvnL6RZqlll}dvatB8HD6WpPP58z_RYsb@{HcDRpPrCRFcxaW;K( z-8VM*kVf0Ch_G_o%ALh}uXc0oW~h4Mu=fmKM)sz~no%?VfB5G4`tI&C=Qqjg3yTTH z@ri%-T&1&e71yc_O;202l{ay|V49+#vQ*3Xy87-LJg+2ddvk70P+d2zM}7kD5!R3Q zKORumH_4aZpToQ2U&H^oWy`<+dZ)JCh-JOOe;$jNCmA(AB7Q0G$y_Q8?euNqd)3mf zzV_*Y`9Bx0`TOhXvK_bDPkVGds+1PdC~&yJxI9Gm%`u~y{Rw8bo~V9KT+;S&ecJbk zsPNerJ?#0Kw$5|ozsYd_*@IL0*N0bYv?0e13P`cpH-Ln0kwR}@D#H%BBMl^mo zJ?n1ZyO>H{XMSdhy6~{#2QyE8Jo|R>Vi%5rZXMyn-}=L}_trjif8u`BZFQs2hby<% zy}zz>Ghg-0ro^^IjxHISj!k|3?oa^xO|b@bvz+-{2lQutE42-)S9Nt)l5I8PD7f~H zhwbuDqu2X(&CZ#-w`*O*^-b#fVe8C(h?##-ouPkx>d6^Tel~wO`gzL7=YHGHxJ+BS zXu~G{sqd@ZbYDC(->Fk45V6VWPW#J{Y@O|#QhkYrYu&A-SbU%EY3>hA@cqGBTE*Y3CK}StvG;9ve790&J+*^xr*!Vi-}37Wcjg3qD80S?jaBtrrn0+TylTw}FJ=_5 zT{hs>`P8fPIy|xC-nly=Kd`?qgCGt8%Sf_X^$k^4IXXE!XKY^4vEi+wUI= zlGF|iTfe^SXLe)8JVn(b((mq8-;GWCd-Hn9P))%&{oI;#JtM zU0>h+y?)u(V(v1JOUpBVJvu7b?U<)>a=po~*5fn(qz7&~VOHOEI)U}Oywkn%wb#Bc zeR1ON|BtV>-l^NzbtmT3tfX$mZo!b2AQ8dFoD&f{QzVcV(5xBlUPQtU|Ok}^mV*0a{VaC2=O4+RIr|-$xd*@i#{Y_gZ z6o>vfQ1<3P|MqR$woiUtXOgluO@XzrzHi>s>+c_MZ~Ob%UBPZm{p-{J|GqJ~D{{;J zamfGn{~z}MJO2M|{ZIbqPuUqa#D>=$z3|#JxJB+Q_m%yUZB-`=pYXI#T7Tt6Y2&|YOde0~C z&K==5KZIYeIkchK;c~vr-^@>E;!o0HC|U+3%Z{CvFaNA$}#3mNUB&ddF2 z)@i-`Z=%dsf2K|Aq+S>3?20$`?parD^MuW=H0%N2T`rzran~w`U(# zcL`9A4%V%(ylY`)^Go=rvt)_g<0o9mrEDk=y)9Sd6o%Bf%3V1$1Gis?%i^=YRBgCEy+=3nc-D_7*jR?OgHNzpaae4bItG?9PbK*k; z%I>XyzO?_e<;T(}_D>?K77ArKoZa0oZ-4KucVCY84L8obJ5LK1h6?vGc>0Ce2kn03 zRd1L@M$FgzUi1l9DKyp{Ei}Iq z(f?7fYv+!R*i~VVw^pp3qkgO?=JdKB6T(;{rX+LZIB$LO`ibo3m~A%~MHZ}H*D8O; zu_GdKx7)uN2Ol>){a58^{7vC++#&Ho-_1F1tN(OHOm0)Iyizsq59gF0s{1vKjnnt( zir&2WeSWdaS^F$|`L>0tj^9!ZJM=8Y?^EHTF3~Hs=ZkIj?_4OJymW>3Qw<}pBE7zC zVLBQ|Z*azBx_nae+vnE5{&BnGHLVNHH8~q=BHCj+w3%K_yq}QtGV1g3F1aFhR(Wss zt|?F5H?FRlRXk_Ii@9A3yMv0}pItOn&UlA(jHSE%Q}(8eB3vA$y&c}uQk7Y zw9l;neEj~?e{RM;Px)6IpE}LaVl;Z|cX|Y$Q${a6#@n&lOY~R2gX^cMS?|0NX*&NpX zF;AyG$^QDmXKQb7&&$crfB!z`pz56+mH%^Jzn*=q`v}LWe^YB-=^x!>VXqq!DScws z?6T$6-+Em->U$QQ`22t7r~glX>{=`_Pn7>@M8>X4bzFx%Jm$TX{>x>o5cj4})=>nkr$;y<)f^i70$%=HUf zm5%cB_g_-izr6e9;Sy`lZSS1^RDZu*{r!?VfBBb5m8!dn5*IK%+@yQ@MqIhor|igY z-~RPV|8HsTsGYk@?C&AdVGD78qJ>_2 z9SJz|)9P8=w_pGMO8*aDlsWNzV*NXf`k3wicc~t(`_yU?$MD=r;HSbC?`)n|Q%*gw z+xS||`pxLO=tbgVq}j4n^fUABo^T3=@f*tdzdL^Ap=`|9@ z*DE#4v!pi`em;1({rmgP5{tf8+PvG6-t748+u7q`-&TEnQ1|Oy>Fc-C`Q_#I*Zg>L z^6RH+y_&+D^;7lR&TM)&d;5jC^*bERzr_Dfx3}1r_x)$&m-};5)^Y7-o4lm0w`irt zg8d7_vLjw!&60F@di5}iL02p92i8)v)Ye^3?y8)#Qa3%|oOeKJ>IZ$v!gG~<1~F{H z`b#*j7-y|<_&@o}+uP;&_xE_j*Uc}nmOZd7((Kd+@00ts-rM)?>$AIg-TnU8-`lU5 zAiO#-rt>j3Yjpm7JBB}=|K5t(ZDK0<@V-=3{v#Jtg30l;t@Af`$um2@Jkxj0Tg-uB zb-*iWwRyoQWj&ez}FIgE^(?=86evgG#73=0`PwysMjH|1TM|GmoL(@hKM`2GL0 zOxMi`Rr!CqOJb=3)1!4eI6vkm37<(mrT;IWKlgdos>e!8kTwDwSP2`g77Wm77MBpRRLH(_l}I z`N$OI@O&q0we3lT`$GH0V%3~Bd~g1jaN*hF$zL}x{P>r&@5H+M|J!G~oiz&kJon7~ ziH&F1>S}7)EwBjVJv>$U`9_B6dpf*+oV(Kbxp>oM*)S)mIeFn19&Js#+-LshhOgYd zSKH-es#JsQeZTS?E;+iYeoFDMi^rilNv;U8dfY_vu|9xt1 zPx$|SOY++pQVRQP?@iw^@ANOvp9yRsNgmUK@6R%Hs5M?!Id8fO|NX5|{CQUrpG}z& zshoIV)uH!OH~d#)VO>x@qxovs)fE%|^UF+N(6QvvU0u}5XZ<50^{>U>O>@pzZ>}_p zIMaUDalYg2j}q()oY`)_?B84`zxwj|Uw7l`zfR7s`7^2hn$_J>i><=XFa3)AQuw)8Y@y6|OpS{_pm4QEm=BC&gyHk?MQ>@9o*MU%q_# zd3Uyj{H$l|PA5sO-_~YozVXvO?ueBuR$X9xWIFwyLHU|LNAp}vLxn#qO#SWDYryBc zHR$50zQWIS*@hB_ukX^yZ`NU&y8~bru8lqz40sO=ILE~?`{2bexHqXin*}K z&0SYcFL_z-e7nxwG$nR#K>vS>ZU1%@JJ$KL2_4D*YyWJE@X^JV{WD&jING&o>(n>u z?dm2lhH<-^^&D6{=ytCHgU=_-+ZuOlMLVOTn)Rm_cCT&s}o9zoXy5wYBrhe-s|gEu30?mUXy?0Q;z#CW_gE`5dsQ- zTv(G87sjx29$782IOtr{yQxhTPpe~UcpR+lc~1WBReDjpH}kgmPwx4z4sAKstFZHS z)6?iZzl`RdTXy;ACjZ>y$reYReOJF6x83?xY1Qev?bh>s)TTd`f5b0wyuZJ^ys~3` znc>5a^>+^b+kO0&?8ov~b01sZ_-~}K?dY{lO<`BgUY%)JXZF!x2irt#oAnzPSNqEH zn5S7^V7u)SnZJ57lS-D`Cyk3QW~O@bMz}t=?qPB@IU;DYj*lnTdiBj4`{hD+h+8tQ zk6=0UeyjLt|M|-=XI`86wQBFhge!79ZHND*7|pmSR+h=}E1=)_<5Q*+YlSRrBwoy{ zt=aedVCUTF^Ixs}U;Q<{wY2QMho8)&mVdARyUxjp6l%I5<-P3i9HvdBX7g7my<+5; zq04jNX29hn1DPN0rs}tQLrpf&^yIEqeP>$!P=9wXM;oJ?;)#tM3Y!5R@+91q0Y58flyacQ1ivv@B$ER={Wzh!$o`}|4%sV~n)zwE9xqPIvA0evCjh#XoT1(G%%O)3Se&DG)XX~*|ew)IJMWx?8vwND)9Iv_fnvp|yT6fv{ z>nGikSF+FL`&`)_zdrDp^DBGDU~S+0)3Z)CD9>z)64_Z0l%~>c_0RureC+WsM$5fd zodYH^Pb!;Mo@KZ9fqujh)1-#e6E4_&x!WbH&A4OjYpZqp8=HfQoh_v%_w)9iestt# zl0x&PIDtPtZ8sI$D>>L7P1hE`6%?Y~cX-*O-@83Oy*OK8_ioR=|4XhOw@O$qeshjQ z!N!PhyIgD^Fx6@}@~^4eH{-ni34T_Ei<13O%lq?=2i^#I`h5M*rEZ6Nb&MZX7@nSb zWS+$H>3^bjJlx%vdSuu1@1IJhq+d}?h>cd6!7X;cKlbB*1xr0 z&OWbq+UKP%hh!ycIrtJIMX$f~dHHvtaO{I6k!6l`jvuRUzPP;DefN(mr*1OLh?*b@0 ze-yMkFMbrGlaOuU=AGHWaYKabfW*wl1tnMXe==Xw3%^mjypvZvuQ!wBU%-i!9mlmk zMZCGQDENZU&8NvNf&$azFZ@6FWBP)?yrps7tSR4fepRl1)#5mJo_&XCe<+X6=S``a zC)=X=>zXGQt!+EMORjDE_VW34ice~PKX_=J@n;kN%XZrxhjMPn`nzvvn7mFWxk2?s zN%e&P;=C5Z@+^$;e?C5Xw{T9uVVx;Dp6P0_MRO0N{#_qie(t3H^Ps7nPtPnm$R$zd zKE-mA5r@T`Al@k}ro73U+MV-YYO%+mDiQX^=KNVcV%9x5VSlQEO(JX*&N?c8%boZC zME{RT(iiL_HI*6E{}yjO@Kj;NGqa*Y_wL%(eCvC*_Uqrj)feVp%wT!MeA@iH*yDQw zTP$Y#Wc;@(-faZ2Rgq$=cs2 zs6V;>rOr=v#pvFGUS-aAPTPbwRi5Tg+32uo_vYCdzoI5qYE5>2Zn3N-+=5x~#JXn| zD^3``^$HBJaoe4!yUH;A#N*-ukL;sKds7}<*DFm5OO7vGwbORSem^tD^Ras38%iGk zTVpTboV4Mtt9blk?i~MHAL{v?o*_VV`Qs7u)-fU*3$vgLBg4$vn<=pd8XL)hhGrB+C{Xs8vP5#|2W@k=6mb&w`Cb0MDyT$ym z6JmaBI~sK8p5+8Rga0{Ns}KDU)p6qA7Jul`w-T$JDs^VZITJdMX9{&N)l50iH+!Sz z#SG;>DZ9rxe8wgZHt%1yabvAUOX(w~wRRJ9r4sUVZj`^#Do%SBHHm53(%Wep($+U# zzq*HQXUnFnNhZ0guZg^VEv@p2E2c&J6JPolwy6;<7RA#7PA}s*aqW!vRvp8h_<4Vy zpM2TwSbyFVdj4}jhW|jevI&oqnp@2U4MW6N%^LGKf`C8eKyIk#{V*N zWi^*LLv`r%vpR9gDIcV5jwg1xi>CkGyWx^SCF7YVzs?78E!n5tA!jDTZ1v>VnKSz7 zYu&A@J70#}Xw-IceInAlbb>&<$>S)2ToWHZ#+){vSv&I-m)+#f3aE?KU9Z*LtZk^C zugsUEak}>l^KAQLGfx~irBLtoQ~h*~(Hy;HQ^dUuWWE0w&$#sK>%(_PioSdn;rY1r zpMmtgdY3dW|1+79Q@5J#zu59L%jIlT%K9|{o}s6;Z*^~8zgm&oJS(C>^j`5bnb&LD zG#1_bV$M`(oV)keH_;18+w&e}I#lW?h1}uodwTq~L!ILKcOP7@>b{QRIidPw!My{* zW(+MwWz#P{eYC>Om?PUp`{e2V$LEp^nXaGy7nZ2abHT3RUXsat-=&|n-_ETmwtSQF zS#r*Qlh@9Y31Yia>JG5~c$Hvq!tVZUrn$X^b7J>y3TsQwaw*I)so*$rD=U4m@h$nb zgmqC1ghh7F`=Po&Sa&^Z3Fn@kBhlimv&%0}_n$Y%&i+p1Rp}R1JEsK4-oEusGDO(- zezz0zy1S(|KPF0PxKI6_w1(+lMDm_1Spq$hzs1`Ej()8YFp-wt9{=yfH>+;OkRA8K zH(d3W{F0geqbJcUqxk>rltYUz+RW~~&C+bUhO03!-)w$qf?%Rl`(uB9p}Q&U?c9E` z%CVV`l-n)i0vOHo#1$qPX4EJ&DDPd+aAZ?b-qP8Ak!4MhHY?}c4f&R2zH?(~L3Vw< zIp?{y3x`h3K6+s*|0Uh2vRjVV|9SW@*Qvf%_KHSW>HQUd^q4;}F7!R1Q*+w#tKE7HvpbvVJzN=6{{&ZLELf*FMPDCvj%;MIk-|Y2J`O)lR(9Me7z!;+KiOk)A&J z#SN35`I9H<9*}bHnNp?_^JQ-+IQ@-3Ikj-Y8$Y!lmnTtV3O7L2vK5U)_rGMgJduV!J8wf5FvwK2Mg7 zJdZyXwA}Y-D^OVW*DmL2%AdDK5B}?wuI`Ne6tXs|Au7w~!PC~Qi97erS$N$4aQ4(! z8|qfAzmj~kT}wQiv2gjJe~gP&t}Xa0pl9~QX~~*=jjT7QR%=taF36q;87Tf3YY+=c1A`>syUY zr!G`>o11rTQump=eXT{`(_2%!uCBP=J7+}^TdUOZpA2EqsmJ|4efsI!di-uD<2%v$ zvt+ZP7AKxq?bV_fx_8H>)s0z)Rd(O|)%rI)wNOFq;N{eYL6U)df$!lyxmK-pTn~%~-JX;7XPRuXjfU6|?*zxj!!X z+U&k|`}_M_mmQ8vcbH&&w(YRp+gmcra&3x8YsYOF0SZdhi1 zefhdzhdPswdG`7C!#6YBzU-g#{l%Bm`7e@;WOV9I-JkYB;7!AQY5(b`4=$R$Rqjp^ zvnu})b)Rp1j>)xG}J+K}E?gSj5zPmr3Q7poPM#GDG#!)sogf zThlz_q?5)T-=goOZc;3cYLYgNW|F#_8)f(y)Xx0V=&*|RJ9hZ!BuB?T*)~$lY=;uk z?p}NS{=NOydk;Ok-~01#D>o}I@87;%m|@1>y|(FBH?S_$F)DeuA;`CVinLYtyxBRy z)0po(@pTPVd~eH{cK<&zSbOTrq1>F+C4cP);Sq(%S}U@cgQDv z{xg@;>_*U;ZihwQt_xVpR_rLtQ$FXu@Aw?)=!3>m0ckHxCbgH&AGnfBEg~;nQKDNfh{Z^Tctz7}LImXZ;>q*m*=V z>}x10p0#_M&E>V<-?QyKDD#>@^u>hVhff$4DuT8(UJY2u;sfnLoU>I}U+UEYP2l>K%w>gM~3rC$_miBCx zQ}L79#BHHl@0PAlnc{jhQ>r>M`t6Hzy8QC+@=Y_XvT>jne_`=|Re9LqpF9DZnkx6fh)||SeIl1cAl)3+6 z)bAZ}_lXFbtWxVa3j8>=@=ezUA!&c<55UgB}U|9QU(%^vE{|Gs`_?TQ4k zDGY8_Hg*;_+E(7WZ|^ZlU7dfPP0gfze=h#|@$2gE^Yi0u>i_*{*~`-{Czj&U%^#`m zz!=<=;4tsuggpgja^DZkPtbXwQvF#lqG-GIOrGh^%R;8zXAIAn=Ir^;>0n~{hPKLU z-^?w~I7~})K7UZ*y#~*$)qQ(rp7|Q)s@lc$GrxGrMZJRNg{r&FzippXy?*~b>zxKq z-p_iXU47=t>PM>+)V=m9{8{`YenF_%XY>dc|^a{kVJeKMiaxEo=Yn zGo5?p0Ymj$!!wF&4wY=0!RLOtEWJnAKqm43a~`gq)E*WI%h!Ad*_X%Kj+lM?P>ZL?+Tn*x9+`a64XhF+Gu7Yl z{=R&##Img@;kWwaZ`*&He~OaH-jmfTE;eJDmX7K+m7vt{DJFhx8`+xb-G6d_@Rczw zh&g0&<3o)lo948avrn+kzw0&WZS!CE@B6kyt-ojIxlZucoyCV1%=)=`%J1uoBLljt z?(p#Of0wWSd+pb^hsJYm^4!V)@$vCxm76wp_jXo(ezy2~e02Qt0`>-{%}0ywu>O>v z%%v}O`ewqN^C`UoJP&+Q_Ue6`8TfuUm3ia!U>X3bh^@MP^ByW@AIj?Q?l#--$ZK;+Gm^Or8~E`Ps_ zUp{umyRzKx>yJwB)%Txzja&6X-`BrS9(*wl+0L$SCUx+vetYx79`ETiaCD+7@=S@1A8ZV!F z(`e?;&u(oyd}gPgT0Qfz+mjD@>J1UkOm9^2olV!$=G${Zd}6NTHo1iFPnjfNy-jXw zou99E`*yYGrgFcV>&wJ%9OCwQyXM)tU)@aZf@jv3zdm{S`1yTb-6HcXST`(gRKA|M zHEw_9{AK*ni*MF2)ZKr5T0~=w%)c3ZVvAKR&~%Y&3$mPp=gV782=fy z4IFd*{5QQg*k0|q#_*`*TDLzRKhOBt5Z-^y*?Ib1E53l;O2^NwxhWI-Y=_f*gC`pT zz56U5uMqyHYU5|GyMM{-w!k$V59XYWz8V&1(zNG(i1r-T$hxTxt~!Etb>F^T-hFL% zocyNmYRR*VI80}r*%Y_@tA_1Qx4UtA2i_n5P_dx#!7k&RpOdEX_f+1JHS(}h4?4u; zbn&(U%N3?W%=4x?ir=Zc(>`ra?S{7}cmFood!TmG){0H%Re3ybFO*Sj4qaR4`(qpP z^!4F$6GA2RC4Mk-3RDGld+n0D?^o|*XKx+i^5)4*=ijOyuQDIF(qC65-;`{<-$G#d zHdTH56la5bA1kiB7yjn_>!y#}?|XF~@pV5s?y~NCdHR$7r9X@lK6*@R^Hp2Grr>?~ z<`h-tn;9FQIGuU+$9nz&m&p3Q(4?3J?X7=58a4jkb&%6>)8;FWB7Enw*6~Cg;d5{} zupm)ljb1tX*4~?!UT}uSebOpT^L0_XvZ78qx7N;vcL<{a351%eOuF^Y`A2m%TaXtokCuJ07n1{_b!8dwIJP6WHormv6q8@nJic z`LuQxKi+xrKR9mNt2(AkS~B-wgC4tN^Gk;QSQ*w!D+Qk}SE}{TPh`9@)j95L#P{&x zqHDZvrxU(jQ?@+nG`(3arZOt>^pan$y3?39&15qE>~_-o-Co8|oo~I1*RPi>Ua@N5 z>*_sQHp~5!b4;92psN19J+l2bKj-eda{te}?6;Qsc5i?6mq*pvH=6V1i!9vwjfEG~|`A2i0+2qZeH@w`w`S#_Wz%K`zQk7$`o&9zzR_33dc-WNBTkY%@{;`}` zTz|f@$0RiFz^Wv}S8KdDYwRc7H~AP^(Z1?c-{2hhf80?Oj;&y^epdJWWC+X@8Wlt`g~6Ijr#s>?~f+m zX0LuWW`UYZHmRTTr%8Uk~IIar;cXTIY6Roxkan z&8f9}7rc64SM{_gxjRHlU##xOY3+F4i zrzfrCIkwRE)}6V2#}^wu@lUvYFei3rY2SuJ4X#-QG1K_V<=Y)&ua`bJDDkKK>^7zu zH3BKVEp0M?o>$rNb?nhRaYfd6SKf~3t7(6qpRZrbn6<0#*&&XYDf6d4x@Ti!@%LK& z|2hUA^LZCabTi+zJwBgV^*=M)DD_bJNvV#XB@8p#Sr5E(7Hw-jx#RNdHC-*$8yItE zN<2{M&2jCuzWc7|6qpYcU5W&J$0cF$j|_v+56h0R#6ST~!Qjc@whrw!HCZ@(_R-0*Zt zDf8W%lL9i>xUG(7m$pex;j}lNx!J;LW=}#&^vlFYnwGOy*8AG-7La;j|Ne$$s9#BB zc*@4^lE;?95hn~5AGjR4m*Z(b?NJ^ng-ffu1n=FdKKreh)of4k?|7rNHx6aRzTvyB zY-+wqZsT8ccnag6Gc&nzPd{MaaiGWaH6@8Bkjx=pLgdItXuSLNHP8y20Ja_)bxkxc2X&(}6Tu?R_Nm1pitVzvlxyt!Tb zhF7<#?!5G)mad7p#fQsnCx`1t@)aa|>Z@#*k#^gCra~e(?MD4mseScvE_?p%GVogM zdF)#2(Jog<{grvHcWOS`*w+3t@|CyUGkw{Q&nG8;IeRzyR9k(;`_nQie0B+rz6_gL zXD?kSlNzkBf885C#*$atZ@)dc3-!Dwy-(>eUN9e|}6``}oGOw3S&B^VFrz-bhb5)3Nr%)6(o)g`1vt8S#5)tUjo7 z`Q{z=C6gTYW%E15e6$QsG)?V1yi(uh)0|5jJ4$P6D(1YAzwb9`wt2q#?Cp~lOMic- zF70Z6&!+Zzx;f942L72J8|KdOC^DWJne6bua3AB9`6n+;xVI`irE;3y4E_hEDN2Qg zGyTNv{e;(Q_NXZzh-jG=ekAdN15f4Vp7h@v^{ZV!Tw5cSBG+)0K~bP-*(>wBd%Ly@ zM?8HyKl#AvlYf_gpSSFHec8t)snVhg?sN#dG8pL3ox1GMKYM$=uWE{uWt0Wihik9d zx&LEH{K}VU1z%q1mIW>P6S}2;pZt;pi+NjAeJA8(p0c{Ql4s84HYWGfgwv9*k0#iC z=(S^Zj#!xa`rL1ABN|ODK5cmTYu~c_ z6@Q+b{LH-K$XnUUz_aJhom>3d|MKokrK0Qem@jC~(YpIoH(17??xQEKQ@(Rt=Gjx$ zjL`zeCuZMz{n||ZLCE#Drq-4JR@%3<2roPIOz6zv--6mF?w%LZVVmXqe6^9{q~^f% zP={O7H+01bHkD7mYv!FD^>W+NpZf%liskp0boX>_6gqf#=61_>fo1J2jhU69*L(je ztUJiF=C|~|_4lhjt-QLc`bDJmZ}#6OvpBc$ZQGV-xlSi{htbrPAxXwP@78?Y6QbvT zu*2Ex+ABBBZMNbjyBDlzos}+8x8qvO;|mpQJM8)8>tB6uSJ-~pG2JX*zg_Zh!sNL9 zmt!mcyVjq}3*2^Y?JYI;zk1A^&5`vC(Uy{DI~x);b`^B4ZC8&zx=a6+V=sg5oe#yU zj;fjPE;-P5-AqL*!^KNr*E(UAJC^cwfnjX-Yc9>=-9JxGPEPL4eXqP+E@p%4My5qk z4YOB2I&FNQ?^cEB;s2+;7*kgn0#nM6^qn|cge3$ z|K9$d;peosj%M?HGCw{!@gT=ClEH$Py*A>fYrErzqkFEWpR~w{m;YrTyovaT>&(_{er=X)6R3UU?5t4x zJKd_OIToDjk9qma*?7bsmP}JV#=hdLcblb}g^U85x0%4%-9mhZ@|z_3j;#@s<$1RG z=Z4caSLNunWM=I56JApxIHga+qi@|NlV0=sS5b^drWapO4r{Z>+i+~-hE4b58nCa>%BW( zW##4D%gVwR`1ASh6M5aWuBU@tHtp@!(%$AXC#OHSuk-E1hld+keZRZxeGvRlBW+R9 z>wAC0Uf=!wef|ELe=d!lKiG}*efIDNTRaU<*;K&u?{;!R!o9anuX3#BZ;$k5Z8Auc z>sV^i{O0Rj-Lm=YYf8k5_|_bnc|1#`Wy4RY2?b|1?*Dp#T`I{nMCJ7U;+S^8)_I=c1Y$L{M! z>o3YOA5Nd_S8n$3;5n7MCy!k^l)l%}+4gj3+7|XRIx{~eoeI$C(7&0> z`m?`ce|$FXIed4zDD%yfixXWJFX-B=%3zS}_W5YV!MInN&PRXTw0l1zVQa=Wt-C_3 zR(6)fEoH|iiyJ)b=e?HA`ha6jD>GBT5x$4(3-9zSHZ^{dQP-XP-Xi(iDW((M=7+96 z^Wyxvh_Oq&{hBHB1gD?xLYwc!x8F8QoxU!t<$~#IozE{AlwW;3{eDgl?;UT^cfM5? zk8(NNrs=Sxuc<%qPyE6{&AkuiOxZb~cUSC;eTCPa?oZ=k>c74C;*$GseHg?Wne$#{ z3G1!eaqMCFp3f#(SDe$&sv2;vJi4_s%B`%5LDu8YWuB)t+I>Oht3$)@?J2s)bfE2* zI8Re!dB>C5uIoPRJ<<`gw3H9e3tS+bl-RZQXW-_GcN$6qa^||{cyEcgtM{A1YO`L! zgM?if#y57SOkE?;eRKnV|Ml0t%er%Ru`oU;-emXU5L1=$>#xriKb#U8WGmOj#}T^w z_p^V^%6lfty;zpoDzwW*v1Cr`??q~JXFgxsR<%2hZ&pzH_T#G-c$Z#3TY7t4++M%E zLNAYg{{Bo%X0ar5?lGl(R*b4VNoNa0j(;uXeUKh1zi@M;dWoyv@(ojuCrdn7JEwNT zgN5(>s*PppH5}OD?#HhDUZWGRw}#c!h7dRa%E<{Nt(Xv z>wAB5ildcL*wgKuJi@b*-Lw)GiTY=u|IvM+xW+7 zbL4v4`FaWOreAt&ELp`@iW)P&+t5l8+@?;O3{Z zcYm|jSSwtaYTYfd^!ovq9A$$AoNRqdPIYmfyYj4lLAB_t)pz_isk0xBt+^7ZFR**# z&NS_f>yDp2p&|G+`+A(0Jc9$9jJZy}{=^)I=Or(*GFDr5U!SDfZ)aQihx3Q)w*CAI znDY16<<|cHw)gAP+Y<~j6oYMJZ~ixHvX#(1cKBh#TP5z3tj7BSugP8%KKGEP?e0%4 zjUVrRzFgRobm3js{mt6S*Ui2vWE9Pr=~Gs?Zr|a3ni576)Yf!P<9|4F?v23D`@h}# znyS^hRh89`+raW3%Y>DILUVZ9l;!ecrrEQ-Xx$qUQrR9Na{7?Z<72&h|3+`$woQnk z_pSTdlgFIU<}}!sc~at>8S)tGqan-)VCB_5(kreo$?{9{ux8 zm6^p;=hQhHYT9m|J5qj7^}6y8U(@{XJ6&h{Joi2nH@U2Fyh`Tz#};jFg(nKEeg~BI zG@LtmXyV)_*Y4>itiAnmvAayiCW&>+Zu+JOE&pmz`}0#}Rn_~i6I|At&p#+s)MVAk z&-nk*nt%!QU)+jfPKg9aJlfoza^O;=(bH>(+1u@A$MGKA_)es4`>D@zGlX`BI-EJu z#`fvmr2@^OYx3M_3y+(9nE2*pfyuO;&bm{q%PlC**v6tqh|dgx&0(I{AAz4vI5#hWI};+zu|mMx!jjAnJ5+hRQT zQLdex-OaC0mPs42y1hAl`OXi|Aj{A=eV2>p4QI2l#Ik;Psb{GWcBA3F!`VJPbB!sV z1GaAZAT-hZ!G0xWeRdWx*M)j_tfE=h^EF&NB(=hPZhV5_>x?^lN+<2h+go?_*R9O; zNell*E<143x&QYjm9kFR`EwWUlM595QOLi@zp)_UX(G!_tGle(R#ND%rFXGUI z%tAfMC;mqdy0I)e*!e8zKliFRTG{_r1qWVDTGJM&vHZ@j8zp-s<%$)u&v<2CUQ=|A zHT(kKzasUUT9O7uE$6;2c3B&}Fv={V@UYsJSvMGpPQ)7XhMZsR*lf5xw327R)3xmK z(WgD9yX6|qJZJU5s$0_dj>Ywy&+pG^FxJ05AyFS5)R@Duo}Jl{$z_^jp+oJ3{|6<$ z}L7Ge@R~qYinLqCpyRb+C@L!U>j=o?;qPL*C3_i{J9VQt8qsx+Iw8R zKj?#d-S#Dl5@HYsKP^$^arCysdvh9BCIb$iyN`~G?I`Kpe*0hU@%G`GCJ zdgaEd7`Z*mHw8yA#V(bcsHExnt8mU&&NtPyX@8dGbf>J-pY1R9rD*QEIg%5<<%qt| zV*bKY`K?{@?Sq6}OKzvfExF6er|@^_;bi^4lTIsIpW5|<@uP*WN14TLS8b1{j}^C^ z@AaP`&64oO<@G{6DGQCIPp+*!{PytU6n74`180mjH-{xuty$k@djCGRM>ijTf4_Ni zjl<^!o7NRf<=JUfru8JZ-&DWHvV+52rNOC~w$IQ;DiJ$LkVXSJLQ z+ZyB9n|>B^e!n{Rq(j@6KZ`GNRNqnG)i~|E+u_9B%v?SDw_D$xxJK&G&qU3i6+LU; zZ#-IYQNFiL-mlD*Q6@P=_tCFASub|QTTlMKruD4a(}}|IPgpm%F-psZ-*|s2`r$Xr z0?&inrWNx%jf{Hw;zPk}0YAa}IxU61C!hY&63F$9=brU7!ptXb!aV*xqMH+5E`HAM zfA4Fx%s0cBRuhSfC)AkS8(V!hd=S`qeXh?9>GN4Xe4csD{37iiVcBNie!zUne92%( z*CdOEze36{j*2i;oM98X(ao=J9cFu_^5iN58~u8*18RTSyHbm$)G}P-dTPR*)V$re z+r!-T@Yg#Lp=RbUIYNRvbtlX1OL^^dyYAbYo0FqC=d>(q+Zg_tkzH%r`sj^ocI_|8 zGjd8zce04PPE2ReHZX>HJO(rmK6Ts#7oTER8?mRe#Mit@&aR&z9pG zU#ho_C*UyGw66<}Oi0(L>$?`G&2GaL@<46%eoNt2 zXJ6*fifQ{_E!nl<ayXB3v+P%ztk!$(GwJulm(H?VJee5Lh$(Gj*U2Q;!~aeoTXSY>`W-RHjD zy}OLQLZX7tT;Bco@$4+~3vu=2>VKjvJU4FKsQl+#_BHs=!6#?FFh1^Guw%~O>yrz0 zPu*ACD8KRCUUnVzAHkd4gOV6+I78+K3Vw*az|i!R)gw^<_2$q?wV@VF$(cgYFBk6l z>E)+Zs-()%6eUpfD!gDDL#g18Gp1mx$ z(uxWuyjlMJn|5lj`G-&M+-m-O`8ipgJuF6O+UvY4dY$r;g-c}jFS$S2>5H-E{~{wv zKlV8+hjjeQv>rkrvKN!oKQPCb466%&2vw?1TL+zD7-9i zl%P-Y8kPQG{%yZ^oP6N+L#lgzn$DkB zya|Ge)w{Xh*v#!;#yqX>W5NNMJ~rnWT}OMantZFWrPdx6)wgq&aKNgphF=@Ck00k)A7$$?|IPH?re_u# z6FKvLe>rWE?0s$8POkR(lkZ<}zPEJ3o%+L%ccpAR?U1H94ZOJw9)DixOPWmD_*mZm zdvc|!n!Z)U(fx|00peSC>HPov)bhfP!#_(!w^`3WZRxgVh3Z+m;&3!nd)UQOig6E~(vWST%XS_AMASAIz zamIs!EARDhdYxaIwfDw%CP8CXQ3j^x=k?ZcZINo9)XlJ5{y={6V!jl;M}JnCo|&L* zqneYr$HTmI?+&TFhYiws6>>5*)(Mu%w?uyEF{>RE)JdAP&ttoS{rV6Kb^Gq~%6kGQ z)urqIUUl1WvhoLw`sh!y1LITD3+f&I*)@Ee>|T3OQh%30_632s1uS943`q?u+o!VU zr!=_`6FF}%-HWb*Cp`3x^+O{~*o zU&EA{m!5FPJZ*V$cQ4BNCDyh zTuzCRn+1OK&AGPwUG=?RQ8(9|UXtMWckM2oX)lj${M62BpW&i(+*)MTHsOjoU$)Aa zWsDM0yXL<86g6Q7gYc=@PUp@ZFldR}$faX#V`F9e_mFRTZ&>xUxeN=ormy+J%=Bd9 z`x1tD)vn|7ikBbHmE-brmE}Et_+!kup3_QJe{w>Frk`a!^MIvc0q@g;2M?YUGMIb# z=Wq7TW%36eC7Lr`vuO2t^HYm=;!~+*lF??~2P0SWo{8f-wI;PEH2mcMygZI3gZ0uy zd+xky5|?1Odoek`x%t2v-nfa&H~GFh*lcUV{OS4Dt5Wl;6KX9s-@jK~^Xo@u_wQpf zuj{0~X*$MuL}2BE2%cSYLp_|eEIlq3807g&Tx>j5?yfxHvE`o_X)cD@{x2ODwkzLM z=5o#CHhiFyJJU#x*M9kJgInfzuU42ye*S!|Hh1dw;+B)%i)T*PC}`Nv|2=2M>$8(q zPQMy|QJe4ECuTqCYZcX6e`c{3$LpNB)317sfjQ~8=m(YCFaORC-F`u2&Xl+==Sv6f z_XizlTd;UCzr0;d&Cz4!4`dy_d~9)Dqm!1Pz#(P8%GD;C61gL$iE)DO_Pqz3bgBhb zvwvY`*MG7_;aj88xs$9Jm8Ar735V)>zmd{%d69v_?WRDK>D;q|7MSg4FdPD~sy-PB(VU znJl0_N0>>Rt2Hn=r~atjeB+etNCBDs8GGyR|1z5WNv_0h2fK|*T&wskAO3zJ zb>p97+~LXvM|Kyq7>8ATam(p{z{S&gMc}~Piz`lh?I>%1e9^*X=YLCE%gRl>;j%35 zX_9xA?|gOYTf(POnIz@LAKNE2?|ymui%IQIg}uJ(!?RELdF(K^bbO%`ToNWAXj-Vn zGoe;S+#xA?8S6~X2}#zKaO|B9DHU~ChbfQ_VnBg zJp8Hfl)i<+mxF8P-gS9?<=2B1F=_lu?wtH#VCggIY;^VZ$#2iD{rg1k!>R4x*XF-x zh)$eabFZD{{DyPgO)K^1Z0Dbz=u~CO#MklC$l34MMoZ_g^eZj%T)K}W{`yqLF_-^= zf!2n#|8`bY-n15AdH1jGlSZzuCcCc``@gc~msykL)|AaTE0*&)RbkHM1!=XCM;ZLp z)Ml0KJ}el#=fd=VMV2!^eRyEN6Y=@VYpahi%Hl8YD>|XqVk#A#O`)yBwwym?~Uzf2~Z~B~?r1(DfTT`^VyZX!NIYv|G#uk0~ zyv2O#%XzAg??`(5<>+BseKGs|@4Np>%wA8{GG?=Tn-;_HZ%V`_nVd7Te!AwLnAh$) zeM<)GysEYA`>n4w?((gC%UJpEUb4WH>udYxe~5p5ykB14O~~0_eDlQzk5A5vO=J!^ zvooMAZsEMc=dI;tXPEjne(x|3QSGYOJa19=o{yhfoDFyEvc7FFwJ~1fx_9BbN$deF zL8fQ#EyBV@CpKA%;yMSwN=bEg^vHp+!`tJ!$V=~!pE3=O0NQRyK zw_gc$PKQ`uG$icEIrMYqn>DpZr~N8l`{kGzuhj1Yq4y$lJzLhdY@b&n!+Tprw&>Io zp>>OlpV+))wRn8oefPFG%Owxqo!z#FW%l&i9iiq&em&i4utZRFn@q(iC9UUc4xdji zx@zEBB(g@MbmxrSx8z<~UA3^Vy5+yWNAkVYCgHAsxhE{xn!i5gT)w|-*ZS!B_S@ZZ zCeJp$e)WCd)0zUYEsPJ(Pv20Q^M5X%xQyu4<%eH<6~Fxc{`}?lXBgM9`K((Vr6lz9 z+_kh#Q|}zBXK!!cK3RRfhpAPvl+*)W$-1|`w;roT_uJW7mpm#xSE)NK=Yo0M^L=U6 zQr`7X0`uB(mbGLq{xNISvsv5Lyj=IwwL-+Sr?0>7(SlFYocxGQ`uF*F z`{(*iYYyapUTvw8B>yeNnOnHFq2=v${&#cl{J$j0fAgA2%!WUceHkOx-b|RJ`^)(i z_nUhKH(vL)Gl$unt-5@2(bqpm%i|b}=5Q=uvDRoRd;9F&o>kTVU;br}n7Lg3X~9p; zYR>1j3`^G7zd0YiHTdT9bk9BKKI&|I`QliX*9EB;|K3NtF~xFQSe$;g=SI^ai+ztB zd7BviT)5Ko;n}l~3*{}uo}Onmj^}DPQXr9?WWV=+v+rHzYcCUw-5m_>`Y5ZZ=4+61f6=z-j=jeM2KSBJ%RA)1 zf8jRI-^j6kl{KHA=dWBgHVcUZcl1*~KI?kEW%J85ci)#sm0y;&emR}<_bj$p39DU4 zPR?1oo_X4DA)CUe!!!K&Ww_E>l9gt>`hP8JugB%~1+Ds z94(~VuG zwzadaxb*1t>vgA@*FF2{7SMiaMxji;yquh@@hPDevETjr%Nw?E9bcioT;B5d#^c-C zB)`a8WK>Ms@%Yc`u-9MmChf^-6e+V~IJ}kN-?Pbv%USis3|e{qdjFI(O3U4#!?Hl; z@Amveru}uk+gUH}(mnpBreW;?Bmbv!-Y%3e{r~Uh=Jc1F)xXOxf0`pfPF~)-9Chp6(`LrUE>vIGaQI^U*ITFVvCevZY?cZ8BEg3Ej}vmK*#qZ}KGn%?l-yJM`@@uSW!*gOyZ-t2 z_vPwNKP;)9%zJC@%_X{mjZ@^$Ouz2&J-w&bDSB7r>;LKR?@oJcu_@=^iE5?~1>ZXa zJUbVym{KvdV)nMmmqxSguG*eAHrqcz$Tdhr^^^Fn*WQzqG&>);rhR7J@LAPCsnDNc zzd`ldy|$m2HiSH%Av=5eDXl<}nJ0Rl?yJ53{nK=JftTjr*_-3^zde~y-?y*%@nZLHet8=iyImJ^ z>Wst>i$^lby?=A(mg@JF(Wk>!uj#G-9SNwQ)cjB8r&)ylHV!kbGXmq(Ze*Qh#JGClm z&wjr6DX+gnus~y3vc;73@&EPu4xSF*zwb|~$)p0Yvzz3k?>^#5e!iIRlg*AF#cOr5 z_!H;8IKGuH{UH1G^YJGNjmwme%Sv*8{#f`mImSt0*^|qEzWL{0xVY1>>htgHOHp|b zw@vQ7YwwotW<8^?##Dysf4sTjP2NKcCOZ|qceIP$FqB zJn`DCQgCH!$&M2ge1 zClgvdeoAzD)$gn4cC|UfKkx9n+RC@LwrVHI|5kc4zm9ADiv5@Vuh{$S++5`=($9Al zE`4tq+Ba`i>)-gFYwq{&6*ZipxBv6y*%#&W-4DyR`QO|B+xgE%as9XskrUtcTiXbI zE&CAlz+dW3xk$io;cexKv%mER{+Yah@#vz%iyyyycv51^gpdW%)i+c8uk7mh;e7Ei ze>`W+!ToEecgrYVRZ08z;%$M&BnHnnN9Bwz&Yrw?^5n_2ZnsakzR$@&bokZ{>HK~5 zMgsZYjqBsS#IBaI`TOkP;rDE-7e(E462j00X?=JIqv*)R~V7=h>S^fP#pWXa0`~AARJF4Fw zdt1GI^XmD(*2MPjFrO{6<;0@mSf5KVQG3dQOq@Q~?EnAL^~3wRXJPyImHu8G%Fc#F;%7A@0&Qm(6Kd{BmK7uzL~1vZ$Jy6F_-eUgftpYO?^hX&2RriDJ_eW71* za<&Y2%ONJoTYW!RH?{r_?mBqvnH(F#Hcy_Vn|S7Pd^z;HMC|GD?XLd<9a66KlzndS znYDX&#`0w4pFgI@$M5~0{N-Cld2zIjQ`~dyReSDUJ+_1U@0$A0-P*nXmu(j=vp?^k ze(I0I&Ql*4>>j7yS-&yh|9%cf$4{((tThyyqt)geH$DB=KcDx0@DslNK80>}nZLJh z+?9XdSDrfAfW_mM@PYFo20K*P*^f)VKXSW$71fH`)>tH*7iIC^+lJ$#;DD zx2z5%yjA<*6rgeZKVRj~IX^B4|6qIE8-Jni$Gf}tjy-$w^s+Ut(ebUKb;+em|8FeT zO=(`w82{ep&yhTJvx`@H6OY*it0g^4IV<+bUR%g~Zuwc$_xk42vAaSZnfxwr{BtJz z{67mfPKGVdrEfjirCF`CN>0XsqvUCPb$d1Yi#E1;C%1|B?JX?j_Wow}%8}O+5I;Rb z-Se#DAN4a6JdZFuHC(t(z&@jkv(U`*-Q>xMO3R-;co1M$_38BH^uyneOaG3Rw%=dz z>+JN%471sGyWa?YU3X&L*6UH_(*JKKT!=gwcIf%uGvx;1nTaGxD8S-&{l(hMgo3B6F_P+Cc<7NL2c5pO`-Y=;CEb!rJBLBB< z{G~EQ+04BY+tu0kcfYckDJSoL!P5Q8Vb2{*jz4?$`J()c({+YY|Nm_M!SLN_@zlaA%xeOlN9T6F+0wM7YUBTn zI(^?CiE{k$k%^D-7E_uPt^eis-g`CYYxZ4wU)|1C(par^?t4|<)9lXBygNIpzTSHL zK9%v<>>uqR9lLMOd41=|u~(X|6Q3|#UhtcJfgfY&gg+*bmk ze7^c2&%5%<5rHjLXUmMTgw8%%G}CQj{WZIAfrQzdpKRWzYKt2fh>3rQfAKZ^ZB7YyIR}X2r#tIT-v*Rg7`C@y*dov{wMGYUrCBPu!>uHH|sfxT3MMl zdAV;37Co5I9O|*7&-}pZO^jtt)i2toym)@OY|nx}b~oxbcr221YqCG{+vEk~nrA<| zj@T`4JNiTDJ-ZF_r@*^AraixTc6Pk2G~fKX&ue$sd)(f0`1-pATNCsBYfMdk%rp42 zRk?QW$LY*Mi#l^9_Eu;{{kr+#<9GYL?)fh!$~4*@3%J}n_v4d-?*emOW~=W$QP6W! za{ES8Te~|_-fMa+Gc8rKv$G`>ZJhi+>isF(*_`o~S5e?EA1 zw|~5S{r}hc_W6ag_~$09NLa8mReY*Kh+U!cISDn!$Gp6O_kXuXN8h}5?Zs1W%f;vC zbuQW0&R?#wNO8H$)YQOq;fuT)?ek^kzj@=hjOAvD&(ax*5e#peFDo0mRXx4b@-=8% z+$xs?>9gMD_uZ^6=8^rdzE^+Um){x;*5RRs}2GS;knmLL|Bdz^1s$7cVq?5>7Z zrX44^i@bGRde6312$%1hsC>+8-k?p{ z>wG1;-XVjp;+7*z+jf6L$^E-GR#q4=wr*K-|Kv88Zy78%X89fGC^Fy3DfA3qRg}#ce$02lt*GsUK#1i;Inp zjE&uS<6Zg-z0*n_$NlzB@GAY8^;;%SyyNV8x&L1-`zud~%YSp}(cBHIvy0i)Wmy#~ z?5k(1UrF1pYIo2cW$nAVCVA5lr@-~FSGAw_T%`(|6xa89QS@9ahla_ zJM$v#9lNw81P`mEUbEFdzUp$`_URv$|I5m%ZTJ*+b+6r@R+HGvoMk=EJ+o{4b|?wk zaqrm_`=$PU>g{%+-okIX!rKKjlOztV{FHQB(n@H5K#%AO#e)iZ{}m1A>?m0wzF@^Z zb6dH56{*}DOECtPCp$tCo~Qh7*f(v@+~@L(RSPUTRdxyLrfyXA5^6(Gbb$<>yS7Z?6+R{4Qg*&`Vp(N?WPiA`P+Z z3I)9<_s)IPtI9C1ylFD`1h1t;FpJ$H8~*a`6Y6g{HEU|UyDj`h;r+{h%{58J(smLJ z9Fa9;7ots1RAmK-WM zc1&;n?++f<}exP10SmTfbCF}QXgPG}DNlJY<0`}XJO zZ_4V-?%&OJA#$hj&ATpwp*Ha)VZo^hi-fN8cip;wXwu~PkZnnuZ12tU;K}>(Q1g$C z%)O}38@bQ&St&Z+d1of(bZ4rb+VgWyJPvic9?mIveCokz?eKLx`y~3z`X)Yb;J)(h zom@VHaH7ov)_}(wC&fGe{NT4Iw@6j#$lY7FWZ!olZA(&8J;LdEKZVgu^;o;A_07B0 zcDJT5RHlFb%F$5vy*$&;%>2r^k6lZXODP?}~P5FUxQGsCckn zbI)4gj*}Tbf}b6dYHK_1Y0+@$-lGZj$ChkrJKHhOy4CL28{_%$^&ei}zP^9&v<;7@ zUwrY^W8YlW+qt`bb9f)Tz1dy0Wtqh?hbNvDqH@tcpHytHkMWV&bs+Jqf}{`U`;DbF z&Av-!%ScuKJG}Y2O2py6mog?EcwhFt;-yg4itpQ{d+P8;^TzbV29-1y zQ=!W6gY#3jJGRdMexyFrybbMps-YY0ndh24(-S<)$e?9sCyJ$>`| zQ1yfRX_-tbWh!33`YQA4>-$ggJJ^c7d+v)#{dy|D#Q4dP6Z}5M-Fe!+e>XI+nCrJd zOwGFFw>ke&<(iL&|6bI4x!7aj3Rf|g8P)~c+=DkRn{4=3-wk4rA8Wj5rR zo7;Kx+xLo_;!=;keYsX$_D*4G>%6pYC651oEYq}VKCW)PiQ(4ux-E|D^YgnVeEaYt zAW7y1W5;>5TXFmM{(l`|_u+@Yote8o%oX4~U9{h!iT#{k@@tmZCDq3RcK+V&p0WJ4 z^X0eCTw)gg{a7OHdARq@TYrBxzC6F{x1L64Z!|Uj==s1fu~1F>(^H%1y`R5`?m5}4 zJLUIwf4+jvrynv38=j~+^w;Sd|H{=b56Y=Eelz@4w8?c*zzWyW=99cW@3hsJdpKj> zFuh7zz%$jjTcN7{OG?H6pB3@Jj_q%BZ@10K&)*}lx6XRjyHmwIN1Yz^bnF!s4?c5t zUJKWPsk8Iu%Dn0K+_>G;vg&(EMR$#4#>>ApZD-c*GqEKz zlhc|E3X}UI1D1I4eP5n@(NbgEK3TiHTd(C!zGR-{SC)I$vRvxLq3kfrQ=9)Rwy5}3 zQ=M=0_wCu+LyR-lDzQ}aV%G<=h*X*H*yv|mZTz3zy z2W2ifKVA0Je(5@K{;kIhW=mTurxW!q+cS!4K7IP_&R_p4`Bd~Z2c0$dg#PSaT)XS; zjE#4ij2ypCUY^zOsPOKE)s%#iE-{%CS7xi*-FR(my$WZa-T6`&30w&GlswT09?RJI&NsFRlAjlUS~DOq5+> zj{GB)y!i@iQs+zjaPoU0E;Cd#NsV^k|Bx@Y&s8`-Pd_kaTd|3)U1DEFcW-b8 zr=aMr>Kdi~q6Nm1mrtt6rACXq`f+!1^mIM**-MpImd>kRCVphD>fiLa^*d_M7GIzL zZ`Ve1DLyvmMgQx5NHzbHNOIy|{N}abU0IGpoqdOM4qLi;bw~A9=6iM*5=M7Ck37IHu7HXblEvO zc!%hj75PfWTNaydIDGmD=iNIMzaP)t>h|pVwI}~Om_DC>mTwWcq3UDL4e>1}?jD=F zn%`})`}K8vZ7*!9zW<(W-f@0nk=wo8{OW8Y(f1|aJN6mOD`YQY`0EfYBRnJLu%y_Z zMH9DuH;^!Nt>owY&-wgWpKdv;ePiF}iZ9Q$+n(w1fAH>5{IMxA(>Tj{7XD&%dm20C zWZ&@}Q4bj0%7srB@PwQ?mb`Uy@5kHe@sHvj#JtQq!kkwtl=jB|^N;A$vG%`~S9Uyq zAG7~giNzkP3IieGEygpOE>tITrFb0dJdoR6HCf=?BjLbS310T2^Q)SLK6amSt}WiA zfAQS6Zz0Xbf#Mx(>XOWfg^P|p%09Ef^4DKpzrQZ;eQpW26n*Pg4Ehrq!(RD(p3d$W zr`HO1%JK7?uy1MCTW#3hJCkKkz5k=_dGGYoa@J;^HU9JebpT^zkhqR!L)plH?pMC%KinGGeD&yo^7qNwL1+5G#}i@W^&_0Iod*6g~mWwLEal=_3H zwkL@@J{0p8@eYV|P)a$1rb3<0*1?n=Sm*jnKiR;*g`0wZ`4$ANkl*{Ey84XRb@)JTt)`li&edkZeNnunes{G;5l(2u&)-Z{`53csE z_-gU+`KMyKb-2GWGwL1k@dMV%t3Gb?VM-PJh4P z({Y|H<|ca&hur@6@8ZXA&kR-Pt_)-Q|7mM9yO(#(md(W#EnFL2QfJy6JMDh>q5gim zU7g*Fov#_Z+WtAG#^c9y>A1A@#T&)1i``FH+Rj61RBdiTYpL9EPZXM2$XPlF57qMh#g z8(ePteD$deiI{h1S3 zp0By<$+z-zJB+OF+;)uo8)5CZK-2Z@`>f9spUJ1PmYW+o@7%xjU;JLX-q^piY}-5ae{~#n27l^W?1JYsD3{!OqagFgyh7T& zBiZ1oVb$lXYIbvHpG}LCFFIOpvj5$_<04b&o4IT6GIySysD0+xuHzYZlYdE^wcTM_ z*&HmOVo#Re3=e^~YE zSSO!kQmLQYclPl7nEiF?=YMNAuRl@n)APix?w|AgH{ZLtbN|#N)!%>KefWK!ufMEv z-?#D$mptb4ZISKxAJOx-)}*Q5D6v&~^O@@C-wVD7H*aixdgG?$4I2xesn!vDnCG%z zvsd`cz3KSv+qc)h)1f_Ek~E`J4UjUr&y2 zU)6BoVC%bF9~0;8id#1q7Io}M|01(QHfO@MNzdi1Mas+7KAni(ZGHLh^~D!g&!6A# zcJqa0xKQi@^-U^5Ou0SZJ?1o@um4(5;A(T0_e=HSP0ZQ+_x?85`Yt&Yz3HV$`Nh*4 zXL-D_ziG1L!Gs&R7g&?yXU$pnoIgKif8o+<*im$E9Ak3as2<=z%tp{sV>qjvs;(}Lj-O{D%8+05)wzxnMTiw%E7^Ww*v ziyjGE@m`)Af6u1E;!N9pzINqPj6R1CK2)okTVOw_rG3%g?QymeDXX{dt3Mk(Mdgs~ z6R*TOZh!oWx^muUu0N_~RR2a#-dVMiM@HfI?(;1&*Aj|Nsv0EAdzj+0IzI0I_~B#u zclMq9-kJ@^X723galH6c$K%dtznZOv!3GPmZr!$W@ZrDI_VVFGqniIqKZbLjHs5Bk z?`(H{|3ae!zgYdBa)>|PQ&aKSZCdTmr{>BZ?l1auvQ2V|aG!;*;`;gR&F^j<{dcx~ z{ek{{8`UQi3iX)>$T*s8*tvZtdox2UQ_#%0izhQz?OGrAm+!mK(+_)d9qp_B|9QFj z;MO(AciwPIPE9R%+_OjaR82ZZ=}_;dCmy#R^YCdi{O~K#etfAVUyk4X zli>b;U6PM-e>Ok7eDFbB`<4BniyJL}M)%jVuRM@YpnbRYZ~FQ&?Xvgx{=S?W@$Rm2 zi1M}z^=(s*8gAMCqoGN*_MCg~{x@$Iwtp`0p3`tvIfkvu=9n!1Y>!u6J^8u&e|@`k zb?ert2b;s+Yy5jrIkRVbUEQb0{q}qx_dgW)zGZH9#l_I@`Flj|e|q%&;LP*1oF|vJ z=>li|=YZ_hA;#|Rzjy!sy}rF!d;5Mi!~d6;FOILTwyUy}x%2zcyr2W-Qu3y^XRhCL zkblv#r|a9|ch~dm&;DkYcW3waFSePx1kNu?e9X||ZjyB2{|1H?kKcY)YMy&?qJ%}( zs#vop7h_H{c`W(<`NOHJ+u~#QetU4zTcrB?GKG^rYJaeN-*QrkXTEK9MJ&(7)cesV zcbUumGfKTK9CC(bzwL!PmNPDG_e+pcFDW}}|Lf;%{r!82Uf!Jd5Y_| zPBN{Y`5^wUM04x{{ZnlH^7eI~9-H5>Z;JNazmxp(rb;%-?urK|BD5PW32jp^-!GVV_cH)SVhe~S6={NCENvAcggQ2iCH z5_bDW)#oSI-ddOE^XGZa`1&+lLI2dJ{zA!zTaUj#)}C@i=&M<3g|+P=7J*wH7sa{6 z9DN#OPo>p=d^){(_V<0iUai~1)-0X$;#cpQH+LCI4b!R%x?kL#9e-E4ruO%%wQFv_ zopbMhfmFSh0FT_hX7$bOF7GE^(={`!E3sg0J^t|Fv-9`sejjh+vy^`nCj4`CEwAXr z`G=O=IeBdT{d?Kn-`}3&HnU`26cF%V`fovY!)u?5Nf9TC=6|2QxBP=Yd-MDG{V(16 z4tDq^H~%y0lXKl)}Bfr-?Xa4r@3e%cN3_5ozf4nx!j@iBAfA(X6KU*a3vBn-h`S9cU z`!$9V|BmJSKUiXAdDEr;`aCxSAw#+Tqfvcwyasn3roJ`a{_E;w@t6kj@9SeSO`PJF zC`GT{bmQ~`&nY(Nj!Yw{5!ha$V(p$45m=_ZK~MIuo|*?lOr_duEnbSC(b|>$|*P z{>P)MI^hQPcRp`o@YwzK@cU+Iu46(x8@iH>?*90BTRXHe`^Rgse=c(#>lSjFeLtAq zs&>@*ipTc4N{a(qb9rN4T{veKz4z;bySt|^wr|_9YOltxz1-P%XT+a)VfFhpzaO0JpYi`k*^j%A-|ydVbl}K^xd&sv6vw~%UX^`r zp{*|Wzr|Pi+V<&}RBe>M__p?uEA|PA=zvt}4FXzIgsT z+v+aw{>qmw>+2uZimE|T$j`0k>=dNK-k`datZP5<9K%|Cv6@2|V@ zulQ6rg!We_|4(`UBPCz_`>eNe3p^ix{qXK?&C>FZ-@djlZr-~#w$Guz^6uSh@4hv% zY?$4ifAsYSSpk6uZM(Lf*?Dkr{854XyNgY;KAOgyIHbO4b#2+oyRW{d+RoDZw(0Z6 zsr5}(M;^S^&$}xZv$wpq;O(miuekD#MMbjO8Xw#}&0|l+j=ld*EuZu1sOzE!tMj+& zcQRjz3Z2J)#wgC_?xVjCryJ^i-SzQv&WFqL@9!rDeD05T-^28x|Kj`o|IL1V{k`6$ z`2N1i=dW)!x3B*mSa$2ym9is-ArJTc*s$oa?6Jw#(~U1^C(ii$?Zfor+w<@5YnJ?f z{HrqBU!+ zxxYj5Z^`C0-r_D-PYUzD+h6hb$Li?vcMr1M8uk69^^Vo;kNl?h>-?v>`p|#>3zwHK zy!gKHl{A}md~D=j5#dDz&s18n%Us!**kog_MP6L3Z54Z_=7fL!C9UYUVSG|NKOg@) zF5XywHul`-qdD%}*PbVdO%d6B`|Y{S3(gxemhP+hQ)2Na@yFT4@88*O^q+`ghSe@Vx!MirZ@+uq|H`Yob@P>)Xqy zZL{vyefq3_`1SU@yD!b8=BcprR-WMQUFPzvaql&G?-N@6!gl9=Wv@Par}kBNc$i+( z*Y&*9`u%dY8*ZN*eLXCFsb<@f?!NE+2S47urZtLE-@lsrL z_Bu1|jMd)za$Ac_n7^+rQ&Znkz3}_XtZi(czCKI8zCLzm<>O<$*+L&`7}rhZw!OKE zyYk=6jHa#MUZtPa&x@6gk$#Y@w=?Z~%#hDhrJ>-#aejsbI3&sRM<{^Orl^qVTxGT$8C6VI%7 z9NaEh%U^!++wP(((tDiv*S5XwPuvhw@K)>h71O!Q*0-}n7GHhYkp5r!?zM`AzgEb0 z^(f2K@W=m+GfUrXck1WG(EpG99VV!I>lIWu`*QG}DR21idGD#=SFSgoW8Vt#ZLxo~ zO+{zY-b1{V+M(PjUi&WFo;J)`5V-4h?9V4gD+6WpC%*W$=lthqt!v&!FYMhpqip^C zmtSt>X7K)>IbFdyW|F^QOV6q3?vvYPs_*Q$@<_o--?Vr2biH+PduF7I-!}aiA}wAy z`AvvSH-AdHbgJ<-uAd7`YYK$lo{Wvl{Zl!wcypn1heVBhSorUm@4pHaZs6c~wr}@~ zns%MU9o4GYjegqe=G&Ocp2Oyw6sLQphdwxUtoZ8Dsf!rTr}{2=|GBKXbgSQ)HMMeI3hnRA zY%cySC>uNP?WWGh`#Q|F`DOf?AE6ep$!$ z5;%L*-p2{QjMToRkjCWbU!R*h_4kfz(@Ky2HRZh%a>eC+#jcY}Grm1h-gMreUh(w~ zwFAj48?WkUiZjLPfB!x|Bhhx#x0k=AKODN;QV_Lz>$BH#f-3z=7vyzX|J>Xz{>S8F zg3IpHc3)y{8>*c=I)~NO?tO)Opz-sfi)(%y-nw;1Onuzp)@T2d{V!x5H*RHh`>-bb zdCBI__VNE~{(k;?UOfK)_y7Ou|JpBK$NcB{>-qXI2bA<#LO!kEypGrEx9Y#3$Z1DE z@pAvS-y?JUVN77C_rnb~_w7GCR@7}c)UF&MR{yWLa$cBn?)_ujUivE-JZMOe8Xuo0hLWY^k^7eB(e*fzKQM`41O=wv9j*^N^kLo4=8Cgud z`pc2)rx7FLpKkuRDIet{8Wilgf23;ucslvhhyDlOKb`XPl#v&(m+t=H8bjx4*`#<=?@H47|M{y#YXOXvOLt=?6RoXg+$*D>xtz^}L5^xEbb-ATfKKKlF-VBKTDvsC-R zhkw-w7KF}xaN_3UZ!^A}ex6d+>My*vXX4jIdve$N?fz$R zXgh1d#-}-{HpWVynm>JvVF-8}usT^Y=0M)zy$8O%mefA_Ir2b%i9%jR=8b>1xz2oW z&U*Io_pcx4pOi}0Pn+4nZ1-{bUDbbk(rQ|a@j z;JB2y1;Tb6)!zTK<}Y5g@JX=lyZUOrdaHl3&HDa|*^zoO4L;xNx5auFQ`qYX<~ybKADI5OJYAoGe^!~-2WgwF3r^J^@r^QB zJN1zNFGFp=htCxj-MwvW{ZE#uE2hzPvyagHr_&!jFLrw&WpSfIWd8Jh2g02>HdXzv zj+MXtcIJ!n8B_AMGSwNTN0|8;1pb?TCPU2Sv(Uad{|`M7H~tgRu;2r?&NG>Ri&_e2 zY_6aAcK^fm{q^N-`vazyUi03!?SaMghwcv;14S-uuq%>SQFPSC`A^y}{|~=i|6FnY zb?G@vT~_~6W`P}_H?no4u3PZcQC(2PzF+3zWtT&*y*_MYnEG~qUBc;a`!D_V*IvM+ z>)7OfzE)xv$pv>UyZuf*6EZ6P)h0AMwK4|=)qZ$!o9oAd zAELtH3$||f|I+){-%H=>`RX_Ce8an3{;({EZK?hbJDZBlGnef4`XKnVyp(m(>Q?#J zQ>PpMk>hsIWSg{Nw%Px+Nn#)GKhk%!ET>pN50S1vS0@Xgw%( zzxuEI?bLmTwj>+uKl|^?`^W2_SnhrJeC5iItHrrmUogsPKX~>bz2NclkM7pTJA58o z(QQ|hO5>>eX}zZ5^Xu1J1;40XEN1i)W#e*qa=&fO6GOp2YfWnJf4aMl{a1}-y`XB? z{M}otPkv%7-9P<<@;{?gLE*YCi!H?~+t$A-{Jr}w>z|uUbwBR3oPR6qsr7i~kIDsC zHZuGxjczbn{qeNFrJ(1;{d=~Ucd>*?>1~ZV+m@SnQTP14ddq{4lFxjr=d)kjUQW_LrgxGXoqVTv%dE_@{haAHh9cxc>3sAIZlb z|6$i!e9K0s`@hXUgZB8ixyB#FP3z{o-B}#EKjCI-`eB`2C(j?~-_Jesm-M=jdggA% zt6?h{I+ht9&wplcBBKS>cj}U>-w>!!-Q|=g-}!4--q86aA)&vC5b=L;u10XCL+VrTMvRK2gGW z?#TRTuKhN1XV0sa{O9xCUd;H9&Hb(1k}>Nhi3GbTM%B6X9BBWz-9*4Rf0stu`ROY- ztCq)EE@FLPZu?E~PnzGBV++z0Y}wBxE!nK+_uNGYQu*{pOxyWg|ywHQ0Rcp0E%qDy&sqd;6t3Ag0 zN96yLwYz^xxtt2reRzHO_35`9qZt;tr*iK9yl5t?{pZPnm(PD%@~pF5amU@8+AX&P zPC8Eh-uYHn!ne}CoZ&^~it_g_7KAsRV>)xuzR%v0k^9s9m3r|j9A7?O5`Oiht#Xr1t8V-re zDhp;P?mzPC@Q>5eYW~_c*&mw2e$23K&t0z6YQFu;)Y9w~&*g@$uFtBgoU$VFh?ln2 zL9vEkF}^B?4gLi^7MH*Fq1md?G*X#L6k6U6&IJWR?+l!=?7wlq?4 z&7w69z5B0o@6~y@zN$4>UM^3t{?;-E(T-DItj|5x^xlkcS#ag?iz%_k_@~ZTvVPXV z_adD3f0xUx3-`Hs|A9z-H1ihAKb3rcHc!~ARd7!GS=Wbzg1W2wx13|p-u!Yolil{S zE%z@L`ktR~^77WSQw-nF?sEOpqH+I_e_EUS=Nlic8;71){y{uTcn5>!_x+PU{Fbb{ zTR;E9>g{|FcCI^c=%4tf^b=AYQ7LWF#$RVyX?5A06La{`r6O{2Iggm)k-W7GuB9Tg z<~g{3Q2JLTmMd3(CB->)o68f25Qg*YVGFWuFm~)}UZgqc(doT?9bYE-UHQBHY5H=V z>FQsu?tRfNx9#3mKiU6w!D>zW*Rq)F0`I#==i;gDL%@Nanq!x_bl>No3}{p z=zLcx;q-I)-IdJ!KmYP?7Hi}BIMJ>ml+iBiLGuq)fp6SD=C1j<=gVo&rFIXWCG&Pf zl!VlC*6nxwves%V@1GT0EI-Rn9H?AeLogG`&j;<=hz%9>_EAtm17LU`4B}hh4@4BKVH9+C9HVniG6gu|Hk7=b<4iWet#V@nd^GH829u2 z9zQJaHMP$w-X_6$_ND!v>w5JwCU>TtKWmXFT=&XO@c*t&iC=>vZQZS%`A->g9H=ig z%wX8a(Ea0W>+_k%&)dh$zg@pCAhu}US*;#TKYa$F0Gm0RN}{rJuW2T|sW(6K(EN6^ z>YsvYmzg>b=D*+fZ5zw7zo`=^|6lFa|44X`8sipcCoz|lh7ZiEK8D8CGVGV}==9rF zYPZBK-^%x>uL;+tqExoyybsxD8H)VjL)#IDM)y9WcFX|CvQ zJ(i((g?oXQW3@us59K7MpG{x+AGRyau$6BupEfi5V*jFK&3t`rF)6J>?#rtF{VcHP zp2=+zA2{={|K^<>`ybDo_vz%n+KLw{r?0L~P4fS+JIFi1Q$5Vbc!NOZhtoW+p_Vc) z9sW!H%i*hE_#@p@M#6qpZI11cth(x3b|<*zwA$-D=;uD`QL$3{^`1(Gv#L*xri)&i z!6vI!l$J1Y4a*9)4Tnb^ zdS4}UhRj^Nrai!U+8)*Tmed#Df1f=5UiZOt)`&y%Gc_-#ZmD1Xt$v+^-;YPvGhF5; z3)VDz4qukHBZPf{@*5xDhr+i!7oNX9ZIZ!{NV`?X)^je~G)MJtZQ=*PgvA2seVeZ7 zU9ntxeb>D*y@&4w_j}A(D&v~t|JJ@-*gGQQesEEVqs`mq#x(qYw6uFQ>~Hf zY;)!xagO<&Re^Dhwv$U|na*D-vpMz8*VV`L8KvybXKz~CvibP@CA`-Sq|^#(Wf!^s z(L8m^+v?@4>+_EDKi_$(f}tpE`|R|G>lc4GP!Z*<+Nl$AtaNgtJbze3`{u5$8ns!* zJo_%6K1709BE5Ey+x5Ru1e=uDWjwg zw@?&Uot$Gu_a~0iKVD0iXs@_Ycqj6F(2qFZi8>6j4LSP`?p~$C+|}H)K=A$I&W82} z868|{mgU^|V`dfER{;)Z_nA5(bp~7z3js)%pF^5c+$}27_ep=i+Z_DJlKTPlZ z5~%yKN#SM30{w^nA5`-i-=zj$%wgT)?KMyJdEmtR4;Zhc2-SuDRsQi+)OnL#)ZCc( z1N{3pEO?t?9lC$toQLk4+~y^6)*o&Y60JM*bK&3RNzVNd?*i{`XZ?^fYumC_=Y+O; zEonI{|1A2b>;^CEyN{CM{`|CEcrl}1pnmf4`yae#JlOp7^ZYsUo$j(c>Tin|Td?9n zy4>^c^4bmW9d<5DJh?2Db%N7{jJ1L>9+51MQv(>czs)b-Vager_v7uF1Bu$rOWPtf zR(Ab-e=vOO%cD&X9*ESnuFrj~Vei~8`A72Ks!L8y&t^~ZkIxjHCSaSLZ^3xszwz{K0;esjfuPjHmvOLfvZ7MYSfYT(9k9 zJkI97zH#O=y{G>_G@m-M`K-xPp8c0sGzN*>m^=6E)H!Lvo1QY&-I}GdHEN~T#Lr!; z=REtc`Qnkt&vIpL>y&i*{+TDctV(8{FT7uCj@hG``?vphW!^m}yJ5ZA`QqiawZ}JI z-T0^Uc9QY$$Qe5=|M*>QHJo*}>t`Q7KczdpIJ#H<>Cp+Lt62X;&JsFd}H=T zrqv-YPB!OH5;y)M6hGtG#-?-aZ55|}i3V*9`B==DU>CjYZ)d#p0@43Ew;ze_FI~AZ zxo6%N9`932zbE7*zwdtNzK_vHG{bbUXR@p0?DHwvuk5eLc}PX8%uku!)Fyl~q3Uyx zciGaXrF%VcmOfKW+882d*LuIkudK6T_MD_Mhkc%}X}Z2CDcj?AZyL* z!R^Mq3aPJ){Z0`{;a!{pEkZC$uaJl09L>HsyZ(wfKzQO}T3iM$6Al z51+c3wIeFu@Q>=p)m1EY)1J(Irgmv%hZ(o&{{OY!zulL;w7c@}aJ$awEVX|P@>k>! zC#280{a;9XLx;WhkF9&nrWRhcV0AI}p4R@OJCczv_vcipYYTX(4ZB8)TGSw}2EvJ~)#6ONdalq++^sn1jxf^Z?n>w823szauxaOQg=c?rUi_Y%N za&ohun*PgEe<-fLHU7GRYuBe0 zd<}XHp&ZPo(pci6UNV~%aPHSXrBvyl=b!4^`&nm)@7?>Ze}l{e6%BlutsRaww|mak z-(R=kqwZgW#}UT2SleXIN)$XuJhx!c6wdWqk}fhFon!gOq?>KNrr@LRS%u;Xx6&R4Zr`UiQRv5?>8|H{=R7{I_qA7Kmd#Sx;|Jv9&*btxBgs$MH;e$+7f6)>(YUxd%=?w0gx<@PBQoQ?Bu%HD$I!Wm*4s zzIu~)d5K>3J)6A+K0Nke2a+BNoJx+bovv#FUOXK3Xf9_cPh3l98Y+d$S)b4!Pq4nAZ z$Ct=dev+Dd?$GjQnRb?s!$hvIOi|UakT3c;*E?%=We`s^LsivEq4c`>>t_cPNq^Q$ z<96WZhzy&?+i-u4N7`Cp<3DftA3slAZ4sjr=+NgEb~OI%==tZf&?fn@gom^dwKU@KyCC z-T&K=nNp?Gh`OJ;xD+cp-~>pyH{YO2}x?rVG6O`iH`A0EFv zz?x{i{Brsnb$0*R%|Dyowf#6V^+!VG!kt1v(w9@p)Hl@#?qHaj78ARSSIZ-I$&!^j zycX^841Ey#JN@gw*A*d!&zKB6#buUt2241t|3>f3qPnSNc1|BQ1^>9K`D3T&)-J7f zuLgUk_RW#*N)}ajV(zxGAAA@5ZR16`Iu-7V6TJmjD6;N*>@e@^gB#w#ewIq>=KPra zH~Q9pV_gSEx!p=<|5bW|Yi zPt1#BnENL5Jgc+1pY@+af6dga?pIqL<^)!IzSi4+ZL>+}Qtks`TL0gRivIs~Q?)|) z`y54u-}y~aLHrBT89M%KNxnUiHDcDbjfFp6eBP4#gJ12v#m2~$;+?mSv_IJGf^uTA^~wIxjTpKWQrdZ^hdE~3Kn_J1k+Ip5~|(nyv2 z@sj)Z{I1uhf7q7SR$gK%oHK_(Lw7shpXIg-e6l^_&eyH{>#lG-Abh?WqwI{GS*dAf zB;*YA<5Z+q_O(3b5&qP~H_yFqN#2nwA0!PISg9*1FUxmax%ej=cWljBQ-kZf+N_^n zRzI_oVQDT?laO4~*A`t4xfOrDcKz^QzSv}E^vz{cXW2A8?~q}6uzA%Zliv%katbo6 zJ!YI5y+Zh8#=1?jGA_-rj5PkV*)2iiqsOhEGkHR%{o^|I`Qb^2h7W54{&73)nn z8QELUrq`Vz^k}}>&)LQwtaGnzd{dSXuW%>BfA9Jq-A3111(qKTV2)Ohb}Cm`Hp!sa z{oEck!#(K_%zYO%_8rncsj=*$#oC@U8QsoTelIWHJEQEoao4}_HSBAjU3>lCRK2M7 zXW}I$2C>(Q8TN^{6{{A1%np%m67JJ8-6g?u@#W4%!hxnqOSuo2C*-j@1s2Tv$@8c6 z=_{_gnK|}63v{exrbdLQ9$v8PeY@(q%kz^zEL`+4>}JMU_N(>kzw^B|cHWh2xkNAtE3=SQhCjH_`M@q#x7vnM?OHQsf-E)Wfrd-hXaeMG^6~mPDN7q>$8eYBD z6wzVGI(5ZvY3aWYFIUX8^Z4SP>V0j&p-YLGi~)5Ey=Q!wZ#MhfBLDD};{JY^#b>4;i z5xXvaw7rwB(axQ<;r`SIuh(r5y?9*z>ZCRG686>)o4RK?JlHZN?J}2akei)D_gX0l zwbjoJ;-aT=t+>J%CS_q{ez4LimgVw4jWiMO#qTb$I>;GZubHqg?9;?Qhd*rfXuf;g zb8hsT7Wv9+X~ue5$0h#-{a$UX{mvp?a*7bM(zSUUmT4D`H|_0v^<*=v#^Qy?Jzf5U z2F^Tk^JYX8b5=~%uNi_N(OiF~JdlZBWY1REVANRmM`6CAuD|H?^X;|8$I^ei|9_XU zzVMd#LF0<)QkR@gH5g6iIFnYOPJRY$<)8(wiuH8K*7P?KnL-w*e|)8z)cPd8>eCEM*EyU6>qO70XaDzg);|}UgU5bZtyrUB z*>iA4pl%cCdEpov@8Cls?-oJ#|raZs-(^Ws>ag2g? zWZbDt-kA)E-fi2ZdQ8pSo^%T2&Sj1NcHc1iY~l~&U%6Z*KmWhYe|@}r+T8CW!NaQj-XO4cq zI^iAvR}Guo{(TxOVwHhQY$7YYS~H@T6uW9gnu?uV{x$yp^IyMw{_Xs4chNYq#?iu) z>C>H?Ob=ddSNLafbGnjo0uP(4+R>j!ZtYHOpT2zEr#VZPSiiT4O1Y{W-@)Xm=JqFS zi{FQzqLvcudrc2K|2Dxxy|%%Jg<((F2ILqCByo=#g_q}2cvs(EexVfoD8(t9tR zlIlG8qJ4tqh55m$Vce4+^`Ej^Ey?L%l2+!S^`dj~;R9-pskupPQ~Hv5?T_krU%l?2 zCSGROc=Pn)ZjQ{1vyQv9EK6p&e)__vbGqys(*oydQxeZCoUmxdkEtOa^Uv-#E$z;p zsd?rZTj}{{w~no5iRZqz&xl*%bI6ZHdzP}USmS=lXxdcMt5$3k5^)TLb8epg)yX}t z^!Sk`9j03^XEc^*PLv9EQtIDXCEa?+KAW*3r|8mjgEsdQ&0Qe|OT&JgnZ0PWyu!id z&jQP@9=X5rva7NKqgve+*Bmu&cZPYpf1O9nzPSPBpn{J((f3 zOsm=K&eMBU0;TVa!&fER2)^jJnR3cNs;J0K?8GIZD~TtLuKaO%;jzgtHe6ja{kW^< z)t4sETYj%xH%o2F2Bro7uJjqP9pSWBSM$6Q7r8acMAn^4w|ilyZyV>InF~%fSpMl# zeiy;K{I9sc{|752Z-zQlc}%tGZsGPlIOiNwNBB5+6H6{hzDru#F-9N$c-L zavg3O>)v8Ym@dfm=>c2MtEoF`8n`A(2DKSD3f~T?4n39oYVnze>6eXv z%gRWv3wmmJLA*<+(^$jj!_3Fm5)v{QnQqRVQIuZh)gPYuVXNq&={cP1>f7!wGYc0# zkfzlW-kTFC)T?l!)#`Gm^|_f-6)$dRQ0IMe@<-r^lHPgTQj+ew|shZ zuItdV2SJR1OjDx+mX$BqvY<&eWmd4R?)kcDOe+HBrWiH;)RO0rU&v8=dBvkW4o4TC zo*RA4vrof#n%_?ct$6kMT0&Dgmn*T)b&M8stu?Ne9;~`F-Oim`p3>EJ1=g0;dFe$iSsLFKUtsn{@KUu zG@VWPw>KNE-lQ>6FZqmjDwBBd3XZ0nKeTEZAys! zt!wjdsZ@SabG>C9k@+`vuB~YWN0F9TM(n%~ubDLJ7}C!fWEju7=5u<_vorjs`@Gl9 zlUr+Vx&6ZCz5DVmE|t)qf9mzDe-8B}r_SpyJLn*p=5lj|an?K8)hC(UuGp|m7CU9= zv&GAb=XxEd{b$!2u9}ID^w(~4-Flo=<9Yn262I9KLSwZXn$nWm?5$hv-7iY_-m9`O z;+=OTx9M?Xr+~>8XPt-bUEH2~*Ufx&OH@U7cVB==SNvpN9zV__?#8tXmzAb>TYldk zb;w^z#HD)P({~Gc^|l>2$l_po@4%Z$FXBGFy=fNv+qdohACLB!14ebbN)K-231a#C zrS$N5pJh@ax#yY`tiCqQSvoyo(8R;cg&Ul_*>`ivFj<-ocp(# zW&C6~nW<9iYW}?Q)YRSwmL+0K;+s0VzMXciuKIK*N?K?0nYf49he|9f()Y_2xAsi_ z@_6%tUgisxH7b`5X8K;L*z}nt{g7_rAOO!mfl?PYsTk`Ry-krOP5{_I`hFj&fG!KK_haNRO_?!om$GZ z%PtzbteR?aJ$WT}_9EvH*Y55YJbeZ0E_X$3aV;&1{klH+x8Rx{?@v-Zi(j!U-@UcR zKK)pS$^C0T`=X?+w+q!-B`kXmjrDQ?QYeY20}uR3P(%;_DI z;ijdLE4nWFtf<}a!8W(;?5&%hTv*aW47T`J+4>~fG`cQ2rSrhZDDA-Zu$*h1GP0LN z%<6>VR%_MI`f{j*dD8S1O035$Evqk?ZuqX#`}*vMslN{G48E1O?XBZ;?-uRs_m@0W z`}5P-wKKZ!+tfWf@!^O!9r50GqOMnB)_LJuFA zv$3e2a#$4*wA)bnwO01Aj*CXc0g;ZAyGqI?@jVof{kqIA?L~p!Uj336N}VgM)*gD0 zwa`|3%ZC{;+dMAGFrPIu5YRhp^slE*arRnSUqzwrXC~8@lwN)4^wd@7%F4FXDWT@y zT7y`8+}P(yY(dq}smKsvJ_~V3eLLaq&U6a^AzD zz~8G)bP}rP1*^_j?0xk36(;dBv0;CvS+pu{o3=(t95!8FIf=y+SjkS*C}+%yZX4Ob-f;z=Xm00@NM{}lO^7yzxQU| zY5j~;xgM`F&KYMbS8bd5Ii~B<%iW)^EI4K@yJP!W$$uG(!ouYR_f2h`*K_pl@eNk* zLoPbD8eM-jOKRWuWA*1Q_FNK|QjV55_h!zobz3)WoxjQ>s_8P*YR2cRrqP?9ZelP? z&FkdaC||XkFO=ChJuq1!w(@P!!CvJxjn_UrEfKr1R`pNjhm39iKWqv$*Lh$r*7%}l zC!=-J^p#Uhg&tkMv*vo1*V11`{bj<3{xBKLcePXToyvaROlrApjoFEmGeT{fLN31( zT0X^WpS$+qS4;*UMIMM>luw**)omCzb4&V<$Tv$g=QE#bu9d1^_W4xb^~xn1=icdH zm~!jB_TPHZGmMkA7QGQTJJaIK)%EkakL-P1GVkh|DT?f!oN<}cFGpN@s_(t}y5Ys< zrzKX$yG2V)>n`7CWnXMEN5j;<%em=X(uFHJ0=d}%(ax%-T+=jnRjev%XQ`THa?ngc z@y(iS_fvovbymau8Z)>-p? zO}MOf z)jaHvvdlj;-90)zaDUW7bY$6G-TV|tQLJ;so_}a#J%$_N*d1h?)mfLnv-rtoBeBX&iaTW^3VBOIoWoz zzxeTVR(Hzb3Qon%j1^f{yZp06IO5&cmz=q5G~vv_^plHKXGerCImpz1$>F5Kgg!q1 zg1BW1IJ$Gsp1zhQd{H$ba`yZ>r$n1OZ-n(s3XG+yW-OAdtLzE>ou6yH{7wAQvxj!L zi&t@!S>IBBRoj1(V*%4bH3#=IxnU-1SI@6@GT}Td(6?vf3RWwzpAQ$Dj(5*@WL^;X z`8r>U5%;Z?jX4cjc6#c^1(Ob~zqWD9w~}c-E}7Rq#h;Tnk)7vqC-m@_@)JVMY~Ssp zwgrkYsNWIdQ>eQ>)5)0e*w!W74*%O9OLW=KVqjsL%k!e?+w6_9H;l~|2VLM`^E|R= z)e=#_QbuS0^iyY|24>7!s!KvX-&%atM*I03%_G;0gtmAy2=!jkp4-?Y{BKjnEBQrh zyEY%#Xu_zmmRBiuk6XPv_oR70nortK3Z2>7ytUoooB6?b2}8%Q&p}teEPkW#yx=QS z-ILzP|Gi(fFwdSY!{yQXEVpKb@T7b17M|YP=GxI_-}<>|Nv+cHbhg&hLe6 zkMA{c?PlHZ(q4Yg%`#m{i_)D}dBjhBYK#sx{X5x4#bet$`x%*=B=sZBFDg%;b-m<6 z;%Cc0XV$alZtFjI$-Kn;fpO?dHkF@tJxP~LpFPbmvHK7lo9N4Q#6NtELO%Nz%j}6? z^w#W~7PqnN-DVYrrDbx96Bnw~On=s&!xmJWGxeUsfjc(FYvxRIi!ffi@ARkO=l3rq zy8bFV?0@i)&(iJM3Sa%)%aUfC(wTbEtyu8DlIe>@-*9bgOkb}0{nYyDucu_q5`0#e zm1M}xXnNl_R&jmq`VpDuX(gYS?)ZoG?zM=Sg>idsdw$H8%A6=2=D+OX zt*bw#9+&-SCElRYFwOoEgP@F@Z*ukL_t&oGd!0SXz_#m=gWMUOa4nfzE)CzA zduEd8yg1|ckGp5yGn@Z`eKU*el`^{^p_e&wr|x%L-(t&iDNFjv^bg;E@6>e=75-VW zL2FU;oW0z~K5~0|&GO{RPwffObh*m<@#OK7r%J!xoTL=OoVxCl)ngIuybP=6!!mu- zPXEc76!eJY;l+oXuiRLK)=kd|ezeBGKD2j2>2$VZk0n=Y$5qcgRO8kB!T65cX}dWV zx9iu+>}uV#)XHd2?A{VL1CdwH6z8S6|49k|`0DwTsj9oTx^G#uSKH+O$!m<)4!CZ9 zCUcMT7Q=%yp#{Dof4Wwz;S@`0xYHx7^20)ATS~(P1z{aM6La5}t{z5PdgQ}bM47}D z=NtP*?<^3jn|5vPu31_|#(%z?*y}HnX;QGXH|~N@rsoN-8;;3QSEYB}yS`@k{3t=m zbzv{d5?fNs?rT)fUSw7_wM^*qt$#`%eS23%NljXK<+g_KkJO*$<0i7_rOdfym$olRa+5dk{;_x2AqA#6`!9(4sMhdg8oMq&S^g`=N4Kjcwep}~ zBUk)0)1q(J^k44{J0HC7aMj(d6Vka4Sk|kAI!#>0RKl!0!+w=y-M=i|wcI~u?v8j- z|D-MHiL-Pb*W!hILWPc>X9aE7n4wZQi(_rjm1S-|YbUFnJo!?hKQ$h% z{SEUyd$slk9TszY8=@L;>gtbaCo3;q>UPUD<)|&Jki2q2;-{$jf_c^q|GxUHUKXk} z%`Dxa+b3;N(^<_Ge->$a#&!pU_!wIGPR-sCpyXAs{7pRDzthv!HtdW491=NE_uSnU zfuOMED~xMjv1iVb{We25RCBXr?V8soU#@x}Wj{|N+)e3PZG>qMzpVFiX5CpYd))Y& zSFv`_xprOV%`VonJxe0%AAMI0ygK9j+R*z8-l>(P&-=eQRY#%k%9*8Sbw#|3-NnL1 zHcx-#zNtMYMe*jPDn_2Vr7z>X<)&7xl-~8UP+9EN;~sVHScdhs#aUuc|E$*MeIB&sFZ|b>cO`P*Ee=>uJ_5%~A@5`=FS9^b|<^I)h zyQuE`ytn5vUra836gM~0`{)F7$fpRoIvQrDbTzwIsib9EGEO}(J07WZLq$NqH@tEOF^ z(`vWbiYHa+gT|!)(`r&;Rq`#1qGvT-PhVuSTKwpfTL(|g%b6u*dvPN7gY4yACm+A~ zp*qccuj0fhlcGeowFh%eI3n2Y;w-7tBlO@Z&wecjpLv_&mfm}G=|<$lAc2tlsiDRP zXRcJ4a4&nE>b1{mFO=dA$nOB!~=^DF4OUT>~eCN z*aDLX)%RBZPq=(+1K3{l%!*98&0H0==wsnU$MTiwk+)AgssHl+#kGwt?=8F!{M}Tw z&~!%TKevyo=WW|1z_NPFDd!cF{yeH;xc1w-I8w897PEIl)F~b7e!;*^Rw6e)b*K9u zwc-?Y*?Hyk-I?bW>`R`K`Fv8|`gzhRyP?blD7ZMd;f@8((G@Tz|rOW*MPDbu;Ud}Bd# zRni4(JtMaTc2|C{*Gw*9e8IS8Pao^zybQUJS*I_*P83vSjb(6KFzaX7pHSPWrV3WI|PIlst2Si-hH{!rg{E~DO;XzVOY=e zN+j|^^~Usgv=R72p@aA~8ZPuJ{s)StR|?}{z1L8(*h zW?jrl`D}e=op-=u!@eL!jodSATm_u=n+%J8%q?6V;=OVGKAlK$!HF*Gi?<$lay9qT zHiOh90i8=Zx!dAR+oc4~&7CoGTjZ9evi`S^bb?=tPP!=SCYFCt_VJ7vT{2OMp0aHY z@r9D5yRKSmpM15pWKMn5k^Dy1>mlL?9{sy~X7bFB_Zz?U#P$jLPX3ZNC3nxdG}Y&G zO7-U+;Pkt#Sg6_Kz1=nAgv&ZTe0qv$E~~85 z=QWQNd{fV4^-onc;cM$z zjVU=BS+AyU(3vAw>FYne^3kQHQ(rkkOuS#bkbG6KSEyvg;T2zPQ!Xqjs(t45!#&e~ zt&Pv!<yxsDih; z^=%pZJ#yni?>5gCJMj3xBTn1S1c_-HKUt4x72NcHT;5Y)`?0-*Tln|VV9U6<`@fdn ztv?Yjcxi(@f8S%K6=`k(5~VA;YbGT{WZXCKer)KyAjgdh8kY^ zq3Q9$Y^zkG80(2hljeLzxyNc>Occ(gWvi|Yys+emCZ|Dg^z2F@qu% zvfNqBY`;{<{EXXrVh&rymoaRR4>(bv$E5z$LgKw?v!G3s#GRL`9j^R*#w4O?dOR<4 z4y)L^iQl8$#e37zy=L#fp7}Omd+X9m8S^^ocM5-al$mxRD(9{2i%5=Dt6tc(Hu);G z&Hp`{PrYfvk{zF7WZQendoua!B413ERh+nXNupAOoLiuuq+wTApN9=|ecY;Q*^; z#pBhkvqN9ZZS#8)`ovdEjcMgUQ(4DKjt#31PBq;uA^2L!E_FUn_VR^MMZ7})g5H-e z|EB+O%EcHRWtqg&Tz8B89!^+r?grPJ<2qBqdEZrjx|-Ou*`0~eFk+z>yHxn;SKoFU zv0h`y<;u=;={I!yG^_aSWgkALuGmT!*INzq`DQ(8&uZQ-cqV7jNyT5mCJjA1o-5b5 zEsJqEa%9Ogr~3?=Znf+D3{TDr<%_XRi#XP@Zy#s(M1}4Q5ymZy6&r4Kwm6?CJ#tq4 z+>WNy>p%ahpVVuJ4(dzfw+Xdim0Xt0?d^YIrqk{M*DQ`Vb)MY0+zaxS*>C-?`At#h zUTpeKJJYmTPcEiCaM^f@wc+N46HIG&mdZ`OZ*%y3LzHlB$hleDyWP}}SXtFB=!$)o zvSh(~gKE2{wq}2(N%cGSv(!XI^q#1$=3Xlp`b6>3jy*O4k$;&c?R2SQtJ}+XYFGRx zle3F@So=5=&Q7dWe&s*2D(33Zn-SCJ$f}*=+SWF0XRK%F&KY@KZ6Dp*6SMAVOfvl} zWjayUbM-p4>6>m#o>p`XecawX^D3{-MCBOAos}D|w_cN3koRC!h4;G8KPr1Ar}x*- zTi)Wdm%&Z>*bUZTodx+<_c-TGeR9C2Q0T|b`F@r&RT!@IzqQy97O}lIcKR{a5BoeC z`A;VE?*As8Fk`ouro)VgzJ2KiyUR-UUgO&-_=D+->Y}*Wnw1;xEfY++XgG!8@>Uz> z*&oE8o@rS*GyUcK>vPgyz5cMM(@Mf*lS=&W-6nNc|9tSAn0fa=X83--cEdwknCg{u zKSTvjs}ND;ES$MTR(#6-DaSjm=u}_c+|ZM^lGUYZzK++X*Dc?=|BF~Qv+O-5@-b@5 z?V9dNuAh>1xiM$9{xqCoRn}M`Fn6})!_EKZuC71ZSo+JMf@RaX7aOK5U6Nob8MI-7 z`m1wSRQ0nqP2ql?QK;FLdP0J8<9m`U%6$2|{tJ>QnUj<^}Bvo_IW4Bowh6Z)%6vGR2`jvyOrHw)rvVuI=0gV9QaG@E?-qS z*U-mnIax1IGP|l3W`s*Dxt#HS^&IZXc^>ly1JtS)W&a{^pO)Nso(fzM22zo|5aq z!UYW)Yc90ezGdDvPwdOQ=_}h7I!|9Ju_MK|BR-t@*rCM?f-k>EENsuc5xVkahFG3f zczSHnUX2wc#}d0M4vRIU<;c~&a=P}cuBK<1)6dMRnM=Jw--RAr?qGT2E(6E5(6Wj< zkwQVISUmg_Ojm~(H;IxC9p;xuv#VC_R6B6;L)w$+n)3oapErx##IfnB`86kj zNzqG04P#_;KPNq65LN8GreHoZ>((v?H~z#H;Z~tfmx`joVvB=Y(~2|h25!2#P9$H_ zc!y&Y*Tbn-+2)*H5XT{HS~_{dA?{!CS0@K~CU`!4J4Nv<^U5#RRc6FRehK+$l-*gs z#n9)r_*`9v-RYg8`9VMS%<8S<{HlCfWolg3r0BCVHrKr}sZdpN-s-tkg+0{s-x8KU zDX+(zhCZ9(Jx=rU!)t?6>-|1 zcjVdSxAWVftjhCS98Nmia(%o|bIbChMOmx%P2C$&?{zagR8nRAr1Puwl6-3GUmbYG zlv1U*d6IqGo=x6UdK6E;*67}TEqAT=XO%M#pC^`9Mf+y?s2x{{W&FeP`Q?t;>cL7P zhKE*$+rH%V+m&o%t-t0%-;t^7uU#+wyY~Bi zOlDbG*1qVT&xUoJj>!d%CwTw2#vXmu&ffjTQ)#An_m`R|Iv2i(SG1Wq_ z>k13|NrSwFUu$=-y?RU1v?Xz8q<=$XxDA74V?aBL{r*M9t3H+7-KD9h*YIttQnp9B zQ>E?&--vTH<))fTf=Y5`nDRb1ZRS7w!gNjJ`gyC9PjsD{^QU_9=g7A!6JC2QG`aoe z++{BH=P`>nz0<1Ocxh_dqMID4SB+SB?XDkka4~r-q$za#&uX2pmqp7Z|9R;)Toyb1 zizVxO*b`Njj^rB?tPY&bu;u zeySBOh*-GD+M!YXu=cAA9_t$mQn(DCMCq|?UVPb3D>vO|PJr8oGamzv#%I}_Q%vL) z4@x_@%PVo^>uO$$z423DH9eWx%bu7p>!;ju^;HHxN;j#qKKI~`SeazV@Wo4UL49gY zPL74qk24xUNA@hsxXHb=Pe|Kv-=RkdLdIEpR$rONHlO{xUU^6tX^7aza_YKqu4c zBcBe>p006Iib181zpA|Izd-$S?bU_P_S_PDC%JA%%Cipb36pia|7fKfuX*#*s69UT z))E^_0(+E*t&e2_a+{4-C% zs$)F+kIfNX&+Ap6x5wBuQFjB!qs?B-GNvh6E426i*S=EDz#iK5U%onj`opLXVY zB>aEPaU=d}>|NW(^IpArS5&cV`O^|#!LAR&44k{J zYTu}1+{-kZM4?C2MX0 z&l-m3eREbgsLs~7rY+mTDP6ct?rDl}X@jv{qMkvWQLoT3`QoK|a?eiaPX63yxT-n+ z)Blt?ON(3PZ&1?nbm0oyCB5O$!mn&*NjHqpuux>VGDDSQNq$ zlX~=O)V-34)`tym9(!a_G^IC9NRCT1?O3_OGWYJHQ#XHhs(x2^^!Y=CZ}35ljk%AE z>K+N4NzZz|_F3$jIX#zzPHOB^sJh;HBJbIrj%^MuTeM_8AH3pOwp!(3)K`)Esrkkd7`2?VI{E47WSdtf>imze&P@$V{ZZL2{Wh5EQP7{m zvVWBC$#1(gnbkQiHh<^h4Y%@gm8aEi;LJWYL*|LXlhBg$2bVu8U|d_UBT{qa#S#X+ zG6pFoiJQ5*Ew4S1YT2VXxyV7LZc_Y(A3MAMaM#J{Z~GRTp0adF?A;{2{Suc-ZXbI; zu}LE(`efva5Z2Y25C8M*dm+rVv{6y&!>3#g_AQ%cp7vgB(=2>$N#epeym}AjtFxYZ z;9m64qWjtk-R!-B^UofB>1=Xq%YV+PT3?hx3)L3R(PUngAiXi`Y3b?-Z)MUNia2$; zPICS}F{5pZrr(Ej@BcR3vnNh@y!@>1iz&N~?$Fr$`C@$PmnrVfg-+)lsQmB<+1ipW z;lJ@YfnptmkctmET$lEm0kn-;|i2A-Mp)o`NrmZwe4Qx;06os3);=FDh6 zJ^fgw=Sr)hX-!W~2Y&DT^0+D2$ohiu{oe}tTWL# zts=GgQR~s4?=2V0@68DRr8ULI=TvdF`=)fwXKU9M_rKcd8p5oql=;HUVPm0J>)V2N z)sZP&Tc@`;EYa`0ZIK}}d7{?DLMufXWPD_ zj}P^@{@K#vz_~Z2Z~G0C<$Jbt9NiG2={l{vRXSN`vg@|* z`l&mZdNyjG)=4jNU3)`z&dID92X<6n>{>d<_3T7ryV;EvtBxMOnqFF-9LLCi_hWU8 zu*8GQV)req<2H26&(ZFBX1274kyF(uO2GbBan7y{8fp1jeLo#89|`5i+}+%{x!J1X zqt$|&&rM@pv)^oYV*gO0Tq(7Ar$-p8w!G9ov0ODT3oW(n&o1-bd{MNyY4ynm-~8;P z`#)a3zUF@NP3s#v@{NK)H%nU1U(!^PZsL<&c;{@yxA^Tl7u2|{T&g(TXL)1ZF5QOQ zo4cMEeW}>l#P9c6gXR6UQnxLyx$JUJTd}GOe7w@X@m}?0|L+dpjxW*YF}n0kP%E@| z_+Hk~Z*136IKV!ajyZ)Jxdi%*$i#J~8!kbT> z(d}xw;O7}8x?_PO_uM^&DvOrrPT`t&d|Tfa&h>ShEDC-s)e*?j(vr|{oU|>6Ve#R8 zKYaGPyy`s>^6aDg;$^zk6JkG3Gn@V_qwwhFouA`2w@4n;-=gs~C zsUi_;Hi(LO&kRog>=K!3v$KoYMx@H+bc&zjj2VmA6(2wE*|bd9e#yk{ACGlPji2n% zGXHaqAtSIi`P-o<8cjU*-+i8l*;W2@6bdPvclnUl8!?NWf7ClOruhmfrKb9}U)vG9 zqjDz4<@z0WvUHY9e!P~LlV~iyPx1I_1DzX_Dvt$z3E+y{(c>3*`{+k?>6zENRap(D z?cFw$-$l>SWoL@cXQqv#VN1gEc1`g>Q2QdG3u%Ax^qp@ z&Zy-G`&lu;Z-&#KWVp_}wy=v~immu0maHI`wzrXia~|!!%s5BR)rRZG&Z^MUOH)4^ zCe1u4X}UBdbTa=@k>tn^>058zxzQdpWxf-akn6&$%{zR#`!l#d8d<0oc2tU=I_KWG zZbIm>neuDOmA5ZXXM^y!%kX8dY4n{a#)%h}vj%FVoAGd>HH^R5eXnQ1cRfmXiS zk^r_=DJH8$?d8u>WgXOyZxFt;>~g;A>s?m6f|yl~&-VyTFM4l~AnoPIYPVp4=IqTy zf8r$TZ(9~jX%sJ78*1}Z&1zm-K}ViTWNSH*7Ow@Y%j zM*o~tI{WnVi#7)ZR=g;T`~5shF6GH(COP?gXWuHR_)ZL}@DAC{V=op{QkHJLTIQ5m z!<^|7)_-ol{$Ii*uevckFexZfr$Zx2@$`)^QzHs=<^}w(%$uAtqcvjXS(9Jq+D=$4 zIJrFH$jyy&V{9jvbyshhrz-2JsQvBO&w!_5(T*z1j(BBP-TY9!W%m4F5mx*3?nw<@ zU9tg243w zezoPimVa`16w-Qns&ij13-CJham`{Ub6vYnb7tv&crN1kbPoIT8G(YPUZJADjUK36 z>zLND?W1|+UD?|9ZLb?zdP-%=?p*c$E)uRfZL!eKNo?01KQDZ4rNX#$;$^cx7KKYq zb}$RQW4P0GuAL#^i~6!=)kw|VJM|CNY+;kA;}(yMGMT%n*oejcluV!5kvYo`6qyJ- zd2(_=_OX4EoV{~D>WBVM2t61iEFK*lq;yf%>X`0P+ljuGHFg3MMK-@!ve-joXKU`m z14mURqvgh(NbeozloY^ z{WF;c%bW|j65Dci1%153n!8S8s>i}_V#^gS{fZ7N?YrGpn9wCE_91wNNsgzbs+E!g zQ)A@ml_%SinSwvwzx^R_^Um6R6FX%6w=A1uq4xSk-u!mq$G&>6)Mo|?zGdi{dwXg@ z*pluCi<%jJIBQ1suRbuN)7Nf4i`SARZVJmQk59={Q(x=4$#)8`N}gG1!|{{4Yt--f zt<_j_)u}!HT70x`zI|Pe)=uuAIyP4RtMiUtoWfDN`wF83PyS^=gOs)tYOaxu{i*XV zI6lfadO@&#ofpqk$Me@1V@-2@g}zZ*y2Cf`-0z3Nw+_2W^E^H=lRd-dQfpFErOfn< z!iPy-rQDw%KCcjQwRzB=`)ATz?Zu~r4?q@>FIN9^5snBdv6`%(>}^> zuj-NUOT<+sX|+)Ixx$;u=-v+GPd{Fu{zOWD0?SIll6k$BFQWUaSm?S?;( zI#~GqB}DG6@F6X4!3-%m9l-ZvNhvPk8_EOjvQF#{aT}h zA>V4@-N&5s8wF3jtF`hGKD;!f@P_NerI!~)Ogm5@FJirK%AM0+O*}V#He7yFF)`=u zrpgH?4fk98x3rg=x4Hjs;g^?dcAKR>VLK!6w&$u+XZnt-ktGp^O0J#X-n2}}7T8v~ z^YX*=&n)YgbV%iUKEENI8GX*A;|Ygxr&@c-9)jO?`9G-t=RtUSvr@uRPmj5|)o&2D#gvru+{spe8A7Zw0OIkPII&18T{WfCa0cI zpPe9Oczs@{Ma-jV2AeZPmIZQfyKJeR8mu;R2ajuat*>2AtIe?)J+CJ83k&2=&wJHX zv#^CD;%abG_L13NR6J+wzMtuQL_YsvzS6&2aev;-J-S1EdbrNXZxa-Rr?V<;7G$@5 z_;}47L6bM_okxB2V$Y<%H2i0lYVhP$^TWya9<0bZR2diOllo@1%!dvON!K~roCkJn zW%#8&?W`8-{jfEmmN_Oj%>ViQo0`VJe)Yx#hr8{Tk~U>M^J~R+Hf`3-@Gm`cyCUk* zOfU8gQkkDEJq(XOIGL;bVWv;wpFRBRTp9B$8CuHt7JGa>BviL<>a8iF>0QrVV(c|1 zepG+0_i&Gfe&+kb@-Ed!kLQ>Fbpql1^DNdLSq+YjrX^+3fq$HE@$&&-`(s7Pp17m{xHUC>c<7rAB}Cc zEg1(+V*XTRTl(`4aI^;Od5f44v3IWTQXQoiRwRiDa9Z|(%#`M6En(<5ur zx#Jm^7CsJgHs=z$>FLV;pQHG~n%*BQ+3PM|c*dkS$Lu`w{YOESAvT>k@5OQ_rxkBk z&ABP!JhhZFbcct=a{Iiqdw0HWxN)CbUgxFQd6y`cMaEYO%X!~UU*`NkXuH{iE8K5C zKDu+bXRh+S9=F*!9UD(ZCOlVPct<&3PEA**@ZyujX(!XNJ~qzQJ;}rOG+;qlnqSxC zj?%D=9jy7KDasqKPV&0BNKy0u>?BrQ&#dQJ`W$lo&Nq913rv)nmSEUtux{d_CyP_l z3{#_p_6YqrJAwJA+|A?|f$o?%pMEmz*X`fgds9Tn|=H&r(FWZ!x8{Bq?&p^(LTOH8G1Hb@)`Vio!C{H$Kc z-nCw$Ub^|{rdX{xpEs&(ye&WBL!wGV^Ga3k_X}@tcV^!=>7dH*ubI!Kw%?i>eq?F= z^caWTMn7Nlq$#xbnOPQ`wshJue_EH~cH#c+tbl2gLfRIr$mE{oZ#Dv zKRHL<7bXOJ^7qvJ_%T=amdl$foW3i>mOVRt@Zm=9%}2PVzX=Q!F-Sb?w(?O$2WQyw ze0IG#2Z~m@N=aKc%uxxFKlIPh*Yvjk1OFY{_|>0ZxW_GZ*X;NU%ZSs`Dh5if+5CyY zn^vk`Hhb90Z>PNG=BZVjTQ*#p&C2`y8I=si}y|JP(=MWLHj2TvP4+U^!~yDdoAQT9o@ zX=BTSkQKNPrM|WEyUV8Ow@PM5Ifc7gKbmwyMEH@Z>nj~g53X7U zzZaRThVOMAy<5~!6s%(^9{b2gw8{VWqFL_(t^_=@+h=g&*u0O&S6&rcta9d;VP;TF zPk8IaS8hA)mbWj8yd&a!HLtLUv$fUJiKS0BWjEh@g~H#7Pb3~{D3t8^tvliH>X#lr zCj`sf*89a7$tSiy z=u+ME#9woQ<89xtbCVQ*Y}B51T>H$W%(XS_vbigIQ!grUZ2IevbFA>pmZM)c-PH7X zQsX~yP0<#O`E07CSEGX5WOI*;g+9)D{77c5*@JDJPkv0i*_D1ERN}uMKZly;vkpBe zv!$M{e^;D{5_{cs_hYf3cwpjgg9V=#vDS4L|4Y4ZAt|zsIpya>UzSaNKmI&v=$poA zFz3M6_7tNO>o>QJZr-kWSFKTPdgI8$r-ffmCcdyN@i^4x-=_C?eMN5t|G#M~RO6(N zJ-z8+Cb(ctuF>>M+cyZ~THx?>XVer?)j(B#|Jsia_q)xu zT5!nr0Qii@ec!@W17C^c+_AA9uy{IhVTZ z**{ZVBKQ5WM=vKHarDdy%5>73>al#<^T1Ck*5{)a6@0loEew3)Uy5? zo((P9b1t#Xm@)a4W_;+Rvk?yp8#z)~_0-O>w|tV=euwb@r@rLzb!lGR-G{dQbg9_p zbytl~>JQuF^k?gBI^~NcS3KCPt>JeycgORkhcZ-zrn=Afmw8qiIp>^i-?7PM;y-+k zGjQ&Hwd3Sg)!&w$>k1rZFh5(U{j~F!acAm%(a1?fDTdSEWt>h)pSDyuOyer^_VX@9 zJr?V43D?;l*0-H7pLKid{gXUV)g>o;WTH#Hsvh?Eq<&Ya<~D0i=FXW9*{3+4-KL;k zIYCFjdb;nyGKJ%+mn#>|(GyI&`Y2<;&VMUayj3fk3TE>L-ufh~9<$MRn?S>1g;d|0 zQ^cR;3;gSP%{XgS$exu63@TsvTOBLPt7o5;klGUwru=e7;Sv9jFSm7zPq=e3OPf7L zRdYeq1mAUSce!?Mk(@7n;n@ejLkr#58_VXH#Im#O*e)*jyj8`oiO24(6W7vx{j2|V z*2;KqTrlBd^8TGK`+wBl+}~yYu=uyvkDvD)yiU14DM=QuxXGy=v()F@le|v#TY0+| zSO1vvZG~*dzq8qnNwy4H6?0FB%~L!1a*5_|L00DFMdsWeGVgkP6WpBJxk`Ns%kCN5 zgDmGQ{4@1}<3g!3j?R2_Uml-GWhxRay!S3dqyFHJm-}+9T7{ddRAx3Dx49Q_>XY>( zsr-c^8qaGZih9J=@)qCp>UrolL9O1$&*eeXG@p#0$Mc^03f-Aq@@CnC<)yiiJ*qzz zRveyGcCV;<#jP)^Cw#6Ge*Toj^Vq+*15QkP~Z*!KN@(6zOs*SNu^bMM2lb!zjsc`3_O z2i;dc$;GhaXqwL_v6Hhl+~B{f@6{SO$s+pT#8p|kI=|aif4#rG~f;-D|w9;j0)R&l=L$X9`SwVtkE z<8%F2`=WKjy_>UA3)VFqpEck8WGGwV59XV`T6}!(Bkte)Gw*SKMq-mV@11LjGZ&V) z$hE$7vSW%ci8#$D(BEwvnCCZ{e>1=8?x}auO8!3WoGA0=%*)2zx=vZ!ixZXpIk>E@ z$a&onfAEZh@aC3ynROmr&&^e>m2Yn6JFsYSz4*2}A6L#hEMLGU@b>xCwQW4}KMTb0 z8i|QDa=6%>=sC18Q02qYqQ(-2`R`9HoihK>`){`rUzY1Pzt5ejKV|FVJsNp=Z5JQP z)OgHs-?q(r%Dr9A3-5pG6Pq4PMO^Mvq>n5&m<+{kK zv_EHm94^?d^nbESYtXibm-Awby1nE#iOwot7rew@r=@oK48}<=UEUSCeg*k$K^J@P z%scdTOUau@EiC(M?5&OK;~dWxO6e|9yU-)_#xgb=4<=z0aSQ3##~K9sKcU%kQf1pV#i+UN<+dw)zCa zvYV=zb(yoQZv2-2rZ**Tzwh_@xF6N8ufN=v|2;lVjcMMqJ(K@Gn-DMGdFk!;%w69< z|CO0pm4BfBiqHDZ-ke#HC*Hk}!4_ka`(tMSumwym?{<}>~8`*ZHzB#~XygkD7Z-o9+GZ^seinH zb0b4*@-E-i{_661dGxaD^N!2Rzw~MGB_*a`zkgZ%Ha`32@bX#H^6naa?fSgv%j!oz zPT$`0a&F2W*EgochBFv_PKWQz+j;M~p4t4v@eN_G4o|C0CTWEzG?y zJ@SsqxH#|F(&!(vS^u!M9=jfs-ZSmle*eA8KkQ$eJ>}VfOJ_Lz_g>15%1HPbd$7g- z^bgnm3d=)pIrXNSd&f?kw*PKb^p7_YQ=S!kV)Wx)?`tkww6-EvZqA|JJ$p9)cxrWh z{Zai{t=SX8Q+|mY%~-g2-QE1Iep{iXtz{m!yDkf>AC}Xu^>@Bh`{U<2-~89y59;%u z?`-{-KTS@-e$T!B|GmYF6OMlReA&s_#aEQ)+FSFbVatAo|75+nMyoDxQ$hKM<=3k} zwul>2YfD1-N8@c!AEY`G1o__lBUAcPAska*c>%ZQA zsQ0q$%PH?_rbiavKDcCVTH5{{diEzq%v!`!UwS&9{|r zpY=Okzua1U!h`!&L7GnjIA%=Ef3U39bM~GIT<3Lu*M4E$yY#qtOHS2|$CuW!f0+H+ z>3-_{ocLYOzuj4-`+QDl=&vINvM!k)W&cl1>)CMokk6&M|Am<^k7`%U_FI!8>vjFj zuK?FY?B?Yq31Vioxi>6!%YIGyS7u+A^{ce(tnigHY^zK7^UqJa_xjDdFZG*_eE;@# z9Z%ZY>E>@Q2)q4+@ z{!%$EDbRqjW|6uch;2K*Y7aydb@B>&!tD+vu4{L)pxyM zR;-+4^2*5&wCh|8j|c@VfYG^X5J?-Mk}p;@X>M zgtL#FmNBV2bGfPhKC?|?#*&&Jmx8uW`?-H+o~4USljr*N@v9%t&x^aLUe3GVn29RK zkwz|&|C#@0J6+!Yo#D^%m!FFiRu)VSGI?S(UHs{bN9#Oe=B!=6Xv>dDd9^dlH<;KR z(m&fguaD=O%O4%xxX_9>r9aR6Ot*O&zwgo~&AXZXrI*g=dKdQG{hfA_yYk;ljVIk{ zTc%qU?QVSVx895W&8%~`v%Z;5=`DPf`&Iq_M%@@MrZ*FoZ$8mv=(=;_?tG!sIbyNj zw|rQ9iFpa@ZhkNR%!8lL?mj10*Jb-oVEOHNRon75>Z?3E5&6;N!O<1>w{FBGdz)n!k9Zr%Re@m&4A+=H((=0{Dhj(@))YS(AA{|mmv&f2^9T}GU>dim?=XLEK< zone@L^IP+$K3gA6lVYnEzuuhuGC?P4V(r5n=68Rd+;(-E?FNH0)(8JM{R=Oy-f~m! zPUQrfN0vV-@2r{-zx}_Pf8Z<5C0kUs1PficUcI^g(xZIa?J=_~Evj!%%-ehVU)koz zRrcq;SpLZT_OV;w%u2rwp~w&?UtB?YktP+z?FBlM;6SSb#!;0`TNXM zY_?0w_65bqoIaJ}nYq+D{}aF0eaop6eQlnH*mduhY4l$2UAzB#`fm@mxhd|urrxdG zV6sE3`TH&Hc9(fsj!|(Rr`%ui?vgswvsUZHYi@TQSa$E);%`6HtX2BU#6pYbZ>#;s zr?m6(-3d41ME*3dS-Wz&?}d{4ORas+TJHT(fBts!{HZ5CZ>sN(c5PeoQ~kDi?V`lU zD2KX_m-*6XWxsxZxB9i=yq-|4KlAUl^BybuZ|dE+>F@V5^WMLkcbofmyshUuL6x3$ z+-H7Y;XfHvoAva?%WYzEGmQQ(Uw3l-*I#8HKJVW0<7D~f>)lSuXW#wox!HOusrv4h z-&4*n&u;%&t^50*?RTF`Ca=TKy*W|4*>?Z^Jm*&*?5B2rP&<`3V_&9Y_IY0JB&E`O zH%vR5(~~9hA~*ebyq)dN{Dp7YtdBjLnAh=Ld*!lAuGMw>f5)EFcke&CW7>{4v(qC# ztD2v=w=_EGeRa&VcfTjuTiN|uGx6-(H@nU6O}O8wJ5y}m?t8m3&cFX&Gc!%?=f+I; zsJE5BPUp?oU(A+1tA2Xjcg5c|tJ8kjJ>cfQ`~BP3?WcVA$=LsDW_oOCQhlb|R_Wmh zP>bVLv}lOuwlzUpp3JX4Ht+quydyotnU}fG$S!I>GyBBTx~P4R+!vm?<)`^dFL3>rt=k{V2YqYk zDS0*Nu5Ewq3g^;eD`mc?z??_6G__CrwfZq-zuJK@<(oWF7-cdg%h`*-lJzo!Z>OkZR1 zeqqp^%h`EPCH{I$$=mzxbWiPLU(Ldgy4$P$PfdGZbolMliA(Oz7K^(ny`wI5*O~L4 zng32Po{WPwcAlRJwfLYvu8O zd6Su5M|b~@Pmr=WF)1rBuDDwB&#Q~GN|#*@sCvcr=S<1E-9MME{3YDA|Ki5{ACu2E z`X?Qo`*Lqa$t$)wGu)Qv9q7!2FxUUO>c5P2-m=Yg7IW&HK0k-G361Bz^hy79Tm72X}wAXMWq{TYj%5?bhA*)8)eMKPV2^^_lJa{+jag zXUi9sJU@H=(f^X?zTe)p`-a%7EnRAUwB);dZuPz20kig=T;(NV_v??8L1{jh=!)4l z%U^zbI=?UId)MsPAN@A&f3+W+H`}}H=a2gBXU?cE%DL|UD&@iTOARZvd*)Z&ocH(3 z)~l!LoV+sC-HZ?W&tH1|=q29yvx0s--_>*fb6*JS3XjFf_ug1s(V1f7!M*7~?R>e< zi69Y;DbL<>sS7-rs@=ES_2tgo+~turUZ>x$+q;K*&*SMgrDQ*+xi8%Eg|GbCF8_7g z^?yv6GVOlh(kG9^SAJiqsXJA5=^>Y&^N(H^zWieDyVgL{Qh?MaX7Rlg* z0O=SYO`Q2Hb0aNz7Yxaiw%YlGNN?jOkVrKqh3qT>X0sD4~GU45-%uN=#Ol zXZrcVMIkBa$d{|Khm7aGY+tnJQ)Kb)!_IYfRm;v>gwKjWPY3VuI8Jl#?)S_B6fbvhq;FqI?UewQY&HaBY`a!4W)~(%$9X|xlYdGd;Cw9 z-oES8gdd*2zwEZWtb_f}dsDAyi?I6db;{f_e>R`&G!uQMnUh@S)bSmzFL_Y9^Huo| zd)7aPRXxl8NItHAESX?GSI46}|DbZ+YF3M?+vn})Tsn07S?T9rYd6<_**3r4V(F(@ z^E;;4mA-T|sk*%0ex8wfNALYBzoYCP^qrh6x98VKOAXyW-tYVB_%8H&zk4w`E%VRb z^-cDr>yHZhf36RHUmP4&G5KB1kEb8&e?>$@RZQN0Ug^>NBZ3vPE*+Y!AHr_6*rfXN z(uDLW@AmwRno?&w%^o=!Fn-~`TfgU%);#grTrU5+4Z@e@{yY?uty(@k_FvzZl-J+4 zykq#oeyHl#p$ih9`(!tNeUN@@@A69b!~f5;zVEL8eek?VjsNey{`%=h?+N~&r)GEg zQ}c)S?fbWXZS9}`_OsBx>0b|*|H}Qo@%+|5)j#Gp{7Yfq;lKa;38jB`#cZx0wx0gJ zEbr&W^QJZTllhMCuXg_aPu2c5^Ov1`H@aWFRDbt3>9uA4@&8v`tRIB`p0y!9Uevzo z<>YTRKaT#GU;Bdb1F!Ml%l5bG*2Mh3w6Vgnmfe1TWihuM+y8UUd`s0o?k>-lYnVGt zwx$06k_WH9+db)(6%gC4@c&Wi_d8j)-U)v2+FV}tP>F>NEoj>e0uO9r~w}vr#O6}KaYI`1hd>Hub*EQStvY#tI%D)fv?_Bpj zW`Fnp3gu6G+vT^fj%TZ1zy3$!mfrtgC#Aezw?6B*=11|lTbNka?|IEV?_ZDkmwzD# z`up!5dSCgzbAQA4kPrL&?^oaT<*)x?EZD-o;Q7b)^@sl#ovdAS@&3X6zHuK`aemm9 zCbO0~E&_hxPaWmM?|AH~Rl4&-<%9A+jd-PwKBnKNhd=wclLtcXz^^O$UE)tbFrf z|L5d5C%$imu}$gn-!A^xo4%N9>Bsu}b{&2V_6}AWYlK|i-(kI|`Jr8(XZ4sw~zcg*QRsB%^&i9Dz-}sLGXR1>FbMfQH$4Bf=^?H4Icevi=U;W*xgP*sE|G6#y zMeoP`{6E|0f8KTA&$(QG<^S<+zd!7cJ@@CzkN(o@#{c>c>0A57eN&$IG+u1Kj{ScA zf8RIM&s)gzpIh$fwE6d0>n?8i;qb?D8gs?Nsi)7gU+VmjF2Cou@qTCZx&QU2wH{xb zG22dJzkB_@Bdj)BZx8%W_}f3%;eY+_wQ*B_?h^kWX!T&h>-1wEO6<%6Ol%{)^ckdG#j$Zu>j^|2cFmOuiJ={Lz1s+`d17 zQTAS?|3$@($77!yKkz@v`CM%Lq4#@B|LlLSZNvIM_s3pw_uB7UK6Cuo@BhBpzGh?p zHu3-2Q4ePQKXqR=`_KKB{TJG%+gaxS&#teS^RfOV|EV7@CvQJk@s+>7sebmp>?v;_ zd~e$R@nd%V_r(wR<2(Oft-JmE;rF<%`5F~V6{^3A?fibIJ|N`z%8&mKXdK!7ke`18 zoA)<=&i|b?4atwrcV}Om|9cAaV}7oO9~6E);Hz-|r@y|4!`jR(y?b|Qt{d;_;T-<(kyS33n|GPihqqjEnUG95-(fzT0Y;!p4S%r9k zUuS-lOW1Ry1SRMP$Q=*+d+_m=CzZc6{`}@)@^48}_!Wy#KlNME_JzTYPVR z9mAi6kN*ch;P>ypFC6VT@BhIc6a8A}>nr_PA>(KC&qe>(|GNRl_5RuN39kS5B<)l1 zkNC-kUz|>Tl)u7ypSQ%0vFy9Do0{7L{-*yNJ=<5mnRoDgr{o6ZzRmZ=jM@4ec6)Aq z-&g-!c>RI@jDOYh8orzS+pfO*6mR*vVx2$B&N|M&{$RRA!*<^N2LFD`tO&or_b=w( z-a@}G5y!&$NQf@OJZ95Q~b@0GxF}o z59eFF*cpEF?aYWK$x3?**+0sU%2WAlDuOdb_kZv@q}ty%QT&A3g_A}P`#S6wzkRX& z`JUT3bN23$j@w-IO=fRE$A12Q`M0cPEZ2#>oQOW=F`+SAm|IC|4|6kvg`)Kp8{N~wOfvF$%^J~jA{EsawmUme%^Z)sc z(s+Hb5AW;U1piB~TC;yfobBKFS5&H1Po*DzZ!4=_E&EUDFUyblh0BfST>RF~{y4ry z=3jZh3CVve{@gtH!=Aae^v}b~fBw5#EpSo&6TgA^+>iYx|Ld>+`+Mh0?eG7^mnHvS zzx>}->+%0Y>j!t|e3+m7r$6B38_r*z&;IYedf=z$hy6A6FBg89{GdMG>aqP}`^WX7 z|0cH{@Au4?{Qq3#^UGJ!dwcGg{5!u!U~b;W7X?+T|8dWgeJo%9XaBB$_K)pF|H(U> z&G|T=<3E3r<(zZ>{~MMZ_80tL=?*c>{_+2=AB&mhew_bt{>OSbJg`huU|*YW=5{IFm9@0%a@@4T2VUBB|?dLv#t zuK(3nCTVuQ4bKxf^-+Fn=EE?R?p? zW&0-dB}o0f^65QCZ{6{a_4QUxi|-fy`_Cf+3a0;4KL5A)cID*T|K+#uRx8XE`M+^- z<@yD}{r}?@e^uW7A&T}uM592#rx)8 z{=YmdE`PcCBm1gqyIFN{zu#MYiTwEZq*Z&&_s);Ouj`0uD=*>VLtt$)eav#L9}AEsvBZ~yzk_JjOgg_=h8kIE11tJdzDz9T@t zW}AcEryuh#C|6|OcbAmq|Ia>uMvzV6YtcRBHGkxNmI@z_oBsPl<%j(<_#XV1zjLr& z_}|-~``^!!m-#=tjC@eO$kg`NRIlm-&~Judb_k@MHh=!~DzmCH~3p z`giwt?}77;|7&0N{MUZ`|I{D(zbc>JTWnEvU2G()-2dVDGNXSlRzK8Ve>wl~f36?g zVNdw}@E@(0>R)8>PyOiszHfgv_v`-q81(0O&ZkbT`+4?XRe$tLU$Ncm-ulJpkGg-* z9shieZTmX@`^z#{Hr+GQneX_2Z(`KDQ~Q;-y&_Wz0xza*dB=g#y#4vxJ$-_Cn$-unDJ{LudXb3e}i zu$TWQp5iLd(x?;u}-#1^(?3Wc~c+WcU2NXTLw3 z@@9YkvHjaSFUD1UV$@6C!@dAr(+5B=?S^v~N{XFp4P+k*%C`|j`6um1IXvGKq4zU*gTocH;E z;qUSNAGPjy?)AUkSmQ~c*HBz!{s~6R54Uk=1 zu2=KC@1_&i`V0S-uK&UkH&ydd_=o$~)_;FsF7_@UG%GbHIj`rFnQ;93KLyXzSM4(K zdb@MOqDK~CtNz9P$nGeUDeN6>de(%~Z<>!|5?!#@vPw!=Z2p+38I?t$_yy9s2 z$Mqq(t2p*vI_4z*<*LJN+qL>erLNa~z9;Q$lb;$PdvE;}d6kogR`l4%b9|WjT0696 z-qsT@4!o*JJ$mh#fq?Cg{cYb~U)|MEZ#?Ja@{gZ&f>xQo@Krl??eEP~CRY}{W|sc? z{bBi?zWuA#ubRtUp>cK>Q(gVStMdPT@td#iu|Hj26?Y-b#&}&$eB6)K%!}99uD$l* z*6gqeyAw~?Ty1naQ)u?9BN|^4mQI5-Q?vPvkw;Khw``eO=+#o00{2;-|DG)a{e{@W;GD zyL7eN)t-s@tv73TOj#Jr?+~2lD0-tU>g$!{4;mr@byx2mi)U12zMsS{YIU7)%j&3B zHNB!L<|`K^=355NZTyxwrCnihK;qZz58INo4}8t)xg553%_@wQ0?*tdor zeV!SO5A`-zr`}rZ{XqWd&S#+sZ`7{5Ru(vZf#2<_n61FZRS%uzc_z58-L-4a&OLi} zHHp8NGpk82GlKPd6^ERhyquhTuK!61#;a3j9n7D1czt+5{)EKli@B^O9ka^U8qR+C zcGE)lRl8X>a#`gWUai=DEaz^hsWFQuch7?v@*ax9vH!a3f9n5JHR)}i_pkrQ`+Vsm z?z>(+@4w1+@c+;Ff2kAv`5gA#W2j4ZFEH)dy?sI9whPU1wH$|&+1wPrXuo275`1-~ zbi;=UUmebWnJ9Rrl_?;K`8C7o8A0#!d;d?V_CBb?xQ$KjQd-{GTTbV18+QB%Wwxqp zE8-71?6i1a_5qPEId*@U-Ts8v{|&FNZLMeRZ~eGGnAbG^@!Zdq5id2LOxpir^ZuGI z#d&*`Hm%wn@b%+SR)>f+SCTB4TMT*(rgUrB{J*~c-&x+T4gwC*qP}%IiRo>V1uzi{3hrB9JT+m6+#gUI8`}4?nSH~~4XgF_7#i&jOud=eY8Sq8lUu^Y z#rbun(!MncCywn&vfbSD?a+EF;p7CB5OJ#;@r!h%vZo0ByR-cQuhsm2(|djhwf%qg zNp1c=jeGA_RW-|68nG60SV`;u{CxkvokmSXDf5T?16=Kvjf>9*1vCbHh_t#|ZLp*M zM|&Ypf8$H`+U1TaIyJlpR~V zjCPvJhQ2=N6TF%$LzrJ>ZY$?S)x#W97SGGtBr&@j~XWb#|_K3eu_V^EpidP5j z+_``E{++vb?iBN1_*|RAcEU$qRfD%q{zoR~u8kJ|65Q9U`MBGSzksXB>3V|B<2M_R zm02}Nw7f20Tg1__du8_P^Cnrgn|4=OEd2B`e&R>>bu52we&K(&ppw6g$yo3MTS4Nx zjZd=peDdvg zo$FPrSvRxRwu!D@y&%YE?#%h^eFBG@b#1KX|LZU3zhEQpYE{7fyDea9y~3n)I~gCdUl2O6SyM@syoqDCxCdcW(NRy}4^1 zN^Sci!K}D!-Ts4uGrnbUwg3CaSjAAsXw`Os{r88(=hz<@{at_USo|!_1#H48$+`S( zp8oD${(^QdRNu6ncAryp@CZ{$aryiE_aA&&F1RC+FJN1>_hhkJlWcbbj?IaE@@&<- zQG8Fid-k#OG#q&4{bbV8j|b;QoPB0IgXux2^6Oqt7ENmxM>gAA%yln+X%tN8)wa1? z`D=0Qqr-C!Ej<3Ro_*Ssx39e|uVx>Av%W#l{J}zXqtYq$r{4QEzW+P#`q5>Y1)5*p zGR^CM^;hr*U-f}@ziS3R6j&n|c0Ioz6FI{;!Sc|Nm5o`)e`aMJ{phapWXa(eW(Spr zS$ChFIR5UI!{p^*p{2fG)unvA6ZjVIniqBUSk%O~oXyulb&4kbmEXXg5_fMxCliZv zzb(TmVV+RAx+S^U61zD6m6!9|@7puW&#`3n?`jEO0|(x{jCQ-~WhN;FESB;K50JaU zoK^Ce<$-dQZj{>tF5M#ABMaw8Whd-fb#{|=+|wTiCz)%{ZxRt-ESFVv*W4uV!n?TU z%I!G^I5Z@3ol;B_eP z&-f=b8&dnjB>vu&{llc=$$f0yqT2_8#lE!Vd2f_me1dU@%V9~Y5Xb-b7^>bJtd^MY zllLBz&*RnFZ>0r7R+PRG`O08%T=}E>&Hv8p8RvYNx+`LR&&+Q<%Wc=knJWoC@cbrr z>{b)!%IOD$?QSm0IDJOy6;pIzphnTflLs?J4n%0aVJy~vk=U_;eVtks+n?!Y|D3v- zdh%gnASXw`kAuH1Unp_9^Y*1Aul?O?kCp_O?6Kpq-Ps@Z@k6snMa6+*cRzeM+m z`iz$~T$>+1O3GQw#>yH~p*$~=;q`M?F+i`wHeq!8@Fzda*YgnL zGr#$2haWKgGmy&&vVPHXJUDcxf$)YNvx@RV=NC!0Tx0%zVCw9D3pkkUXIy#kPT`5@ z&fJ}sM9!XMQEGUm=OI?Vc8T)SI)46}_gU_$iwoRUVa~f~yKC-;wOTR#cle^1)!(r! zV6I@TRrnauKA)Lq6(95ZYK@r2?}C>DLKo^Ec)fRR=Ig7gZY3{FcpLQdGGD}UyRu2I z8p4|nS01)qu%fl#p>nakltzXETUEqT%WJA%ejGKcd%%#PRBP_O_m%Pl_m_=7m6@wk zt~vdmKPQ1F)WP~sb&0jS!2T~1B`p`XnkKAxlzfospq_&Bk|Y1w-X#6wO5_6Jgx_?gF z|1SQja9RGCylX;2{=wsn-><4aTmEeKj*Mqo_FUO9>;9~idcl-*ss84Do4t-lR(ltH zwD!8cdjGHNKXIb#zF!Qvka6bQ#E&OMoOvUU@EiXTo4L42>_oFv!ya}|U%SZ{4St-C zzVQEo#N%GK+7dwnpPp5P%@@lO3~Xh7=KWd7?hs*X^Y7{Vy7hDZ?cU|SvHNbT4eJ@T z%kulCNNlP);}P-r6npd4sP-Qd?>$+gpeOeA0ISfAl^kPh>cK^&urc4#Fgrkoiy7L`4!2RJwK=oJA8#!4A z!sHbviT}AhbNh!$wft+B_J4lOyY@+m>6zV}Hy)P1X}`01@S`3VTIlA;tcB_3|T(wOrn@Hln$mWvXH*H@Wn4SvwTAj#>4(C(#`J*CZ-4} z&3eZ2c>9y=MiI%ZvMXEHD(3el+>v?I?&NNB$NIBa+@|+aBlaGB&di%TH;nn;yZV2} z|F>2@XzU4X|LmX#Ij>f2`Y2*IajwaaxceLDzPsO7bs_2n<1zkAWmj4=x36nn6ZlW&M-tmU zwSq$hPXz2msvD+#T*|)b{nRfW539Nu!%SzMuK&;f|DC;821kra`+ldqMgJWHxg@lj zH|BB&%PskLD9=nHcs}nkh0i>lECH^5OT6@;x{f!1nHIYALMcpn&WXA?7 zp6IBu;ER0vAo=4zE@sAZbMZ4d&8EkEY`@z7yQe3zs@?>+wf-Kq?|JNG!fyZ+Fnd@En5`jq$i z`hRC@@3TK^B=z^I?v~3u2eKQNEuL=nj3LwP-xDX6ex(Cb-mS=!{ku=@q}JnVu4j#o zoIywRzp^y~O2@rB{R{*Ui9y;^nmsW4WQ zzFd7!qNOeFao5~+YfOJ#&oX-a+wpS5fs;=p7Qa9KSw`iyuEsKh65AH}=F-Eq3*OE6 z>zL>1Ve#SRQ3ZaBzu}It)x{_KOcEHLzVm-`;FjX2U9R!l7rwd{+!n^aYHwBi;+1!< z#x|d1Q`nUs>hO-2?VkLEi9Qx)Qj5!9R5FykX_S7!_#(FG@_PfX?*;t!J9oWdcVu6> z(on(wuhprQav!G#U6JF`39w1LyZea&)9$RpzZ*-~np;sEgE1qVuqESbRdAW1&uQY>?g-=-@7u;aoXS%ra zt&V9?$NR4rmoAla_|GCKa=@juf01N);tsxrf#r5S3=?|oOhxW7Ez;)Wjybd?{}ct^h&!j&wZ#aEwsirYW40=!D9{1 z$!UreQ)Nwhc~yl&D!-k5kUifnq9^?8uQ`vHqB`yWJCsD8+iGlnC>%qA6Grob&~tK_s}DSHrA$uSh#lH)q@r95+6v^-&$Y3 zcGkCpjAjc~y(vmjU$R?eNn=05AEy()9prW%y}*3GVb(koozKtzZv568*>r@lG4Z;a z@3Na#6TUPq;$)kAT%hhnKk_F|93r;=Gl|NSY48)?!r7X4&OPz8Mt}&&Q+TC zTfcZ7vDtA{K_X?_r75o&zb=0z&Bwn{{f83o2KBF(7A-fHIH!LgF#grgIXqsb8anL1 zN_mRdB&?1a9J-qNOvEqoPvos+ew!xWfIqj}#Tf*&;zaiG9yqo8bG{z;kCP4xw%3n_ zOkX8D>%o^+iLdfA;?A#Hx=q1D@64IYzqT>&ap<&D&PZqd9~E=WmcOdu#{Y|JS?}LB zWM}wb{et-gW9i~Ov#Sda{rUZS)?3GXzXK=C49;6!y(rSluz#c6;`q6b=Le{9`it){ z&2kZcxMKG1-8>%;dxWogmw(h|;h)}h?0J!Y1oci&mz|=s`jz5|}pQT2Pc z96ucXu_oYk^UBB4F$~88->)iM&-d23v7xYkm+Y|)`Q!gDeyn$R+^?13InJ3If!udl?^UM95oO}J>>%J_0u_<{a=SCbRuReK65Xa4+tV4=;GE6mvei%Wk- z7u)=CyPkKr;Di{%3;Txo?Q-ls{HtNQ7>=u-{)b6-*>z_shcL8^Ln_WB zc=>2fi ztXn%L8tm8=e^^h#ub@%P=j5|J8=bECUNA8Dx#h0L{$%6#JGvjTtmd_l-_;lB;kRq`1m;zRf8?3I zGVnWXE$n|`*vB3_VfOCtb~7@zx9b7_ie<&7H6%)=ace5_D=J!LhABmQKUtAr+ zSn#-ems z986_a{JYR|W)IumME0yp2OjXJNiQmzr5(Ngyn3|!fX!Q9Lzv~{<(#Cq#@j0TbK&d9R9xwymd^TmQrLA5gqd-f#$k$4naA!gwH!09|=;EPA1 z<@~EIuAL>=H|gUVmNNgEZ{Az6 zrM~<7K3bH>+}wZuPx%y`DqiC<-pQ#w`@UYf5LCt5@|J7a#-kpVCHLz8>3jU2*%Z4a ztFrx}Ss(kI*w~%VlT$*zzv0=sYW)GfE8#u!_k8Y}dwrvhEXRh63j(8?>qU1}9ChYR zzOSHc>T|tKCGNnQhZQWR$6*X$_<^98GmtGWICN@cKH8Fe98SLhAE~yty5&g1$Ulw+LV#8 z=+wqEo;;?ROO5_5Fn46JwWv?x`@jBrKylNr#SOY;GbNj=n6&Sz##ywBz2E=lCS&gm zf9C1xu?+vJuk9;1-|=kkO4VKF-H$n+MKNiW)bBR=lhGJj;?XAh^Y)Ag=IM=z9CFrM z4o+gbel0$aXDPSPKl{H=AI*>X^XcuYO--+)dldqjh4>lLCOp4yduP?g`zuP1t=f0s zX*qxKc8BkmqZsb2IWFk`B}Go`m|oZyXNGnuz7`pYAaU`8U9pzg&$w={*8jLkvt!e5 z9s38*mUYa3S5R)waaQMI=gbv$XBq<6Nb7u^;*@(JPa{HsH`)F5o&DRQj0L{DUn!X& za(iQ3VvNVfdp-As{{3&>G|NDn-B~I83GeQQ%a^pbYr0O?UdFYHefs=^Ifv#4FJRt& z%_iVTw~(&Y*NJb#ZvHUQDA70`sB6C9ufFQM#=-y*hKl+POV_mQBKNh>7fq(#g(02) zUrz7-&+&t~CpRG@;BTz+&I*Ptr8gVq?F;ZWv7C5!6?dF6quNfD%Z%+op*6w$2PYo< zBKxP#;KihESMBuQ#$EW-vrAk^@snx$r0^!vr3HPhcJYxLP~ydbi?-pF6dlSztU@@eH7KlbYt z7e1-Im-xrL`o!zmE4V(f?D3A_FL20fa}H?>z0=KNFMID=%G&4tbElO|;daa7*%%*$r*SOuDlHR!cjCX{j$6wP&GR&{uiA3qF_%Q%f$S}N?#6$+ zDq20Cv7^C{N8-`D0#@Ve*C%%g-aohh&_jg-KZ4$8ow>4ESZdAc1BP~o-2c2d_TaC< z_sX!tjWLl%D@=O!Fiz~QtT@3jd)~4b;nus6uBRp3Vtfl!x!dLLhHda|{JKS|s@B>d z^mb~zaI1*^E9u(og_Dm}e+)Nxz1f)eYlymoTRBgfSkouDg=XuUf_I#{<7XfknzDGM z)R%_V%uLQ*k#|ELbT(TVBpvQ^_)$D>;UD(;@zC(w$3{x6L=* zq=hU?;Okb zEXdfuI&sC0wAD79hE;|i0=c9@cfL8e|HzN}@ZdY_jP52EHZc4@_JVQ4r=+!3ZJTt` zM5@D^^H_f@xOn);)l&8pc`or1O`UZq2U{PkSu~O9n8gjA#YbaqH-;|Ox%a_ATCt{J zlBr+c@(#8t?s@vO|Sha{L}ABss`Rvfi;@&t!L;iMeNrR>E)FL+oMKDqOXn++(=@ z`R$zruP#ei9Cndif2^3#de7=jPq#g2EIzm}v^V`&{MV|#w+b$*SJ!b}a+>Lvb9Tw1 zXU=Ds!W^INXWw#Wy~g`VVe6Zqi@_`h~t^wxW8tZJi~wHecObyKxw{hP}4PpjAd zKdaD+e#u@1{Vi*wtz*6i{-01FxiX6Pt^QK$)BkqGugu`tdtgqE!}l_kbm^_SdF3H> z_tSo|Dj)sG6!+CAyC=x5vEJZa!a3=Jzf1C-AKvJ9toBakHiwhmLU#;*i{|I=n3MX? z=EO$rODoF5=dt#-89dbgRS)sS_N*GiTc^Q+pURSEo3ce?i^M zoOyEpJJ+weC{V@lq~3^`FTgX$Cs$e1ud7%xW7p+1p^wfpn_V}w_!B$FP9ZDf{=-EJ zcV+M;1#dX`A|d49sw3O?pZ)l`ZuY{BCQro_9#vh{`f=xPmbh!jtDj{XHfSe1Xy*j1 z<2iUp;`-`aI-T8mSGMOLH2<_y%bO=AvZt|8D4?~X@s?5bwvWl%I6MBZT+KIHk+4OpXjHLCT5iE{{sTMmZmc`F;fc(3vjgE0 zUmeT7Tuk10?C_t^AM%dNU;f{~y{BXUqH5W@ox42urtR95EPm@-nibPkUZG`42@&kC z0#!Jz4%!qPoO=DowSQ_w7nUDT=PTz=Ui{#gM)S^J*NSWS%7U5r*xqR$k!{{%%KuSX zj&Z|pgKvBiua$djtM;%9+pRtvaozE)pY{jms8-{W?pLdvcn<8oV~}PNZrU7lyL|P} z=?bh`%6ofuQd6fX7M{Z~SjG?@vsa5^DbH zOX($McOG|{GaCc+dDn4F%to{{?+m&39+h?i`&0wubm+PBNLo zZX3-mY!|hadv$V-^U^B~_FVOU-wXZ^IGDq%Ykpu!*T%Q{(`J2opK z?ux#%DP8Y`$+p9-udZ8~rnBvzu%#mM+y4FaA5!ZN$^Btizv!(+NTCq}BirM}Uw24L zZCdl--GaW&UyDN(_P;xyVfxGHe+~zKc+Q6Ao2w3a+HP9ysP4DQs_|PmV*_I}oAEi@ z3p(4*Kfb^F?cH0VxnFj@{cUo-U6_j_YHQ3oGpV)FGU=Bi`brr8OKmqjATzuCl~nnQ zK$c})ntU?<7Uq=q=>OPcpE&;ybK2amrOdauolRc+Jh@=8Rn;ns2ff^XZmpd!{vdgm z&2cb2(+=xVpUwSu*WY2Be8hbGMm(2INc>F@gr zmhX?he-&uSS-bz$tRp>Z*1b&K!j!h>!{LHJPSY8W57^9bZg||E?e(RoxcyoOH_zb* zU)g85-7nElj0<(2Yh}URy-)l&=dUlJvuEs#)L%2#r+wbM(o);m|5x*Q$TSPe#*{8y zpt?@KnbGE5*43}Qa+0yqk|qEDNIqaUTz@UhXwQkyYYzNq7Lh%B;Za)T(@%fjo38)= ze&v5h?wjJZPrqk@i<>afo0HKPWdP2^QZHEN0!3IknPhC81R{0Wjn)cl4f}1>-*ns`LFU08?xSb%~i_x zY|{E3d)NMm#fu!8Z+!_jaGN2~GQY|AxpY;xs@#d%j|Z8*)fCJ;@xA0DmtW@o{hw=N zet+G5TF2sVePQFiyz8q@te(}C`Qm3lsQ#f7E~i^%TUJS#8T?TD`T6FrU1yk=9Ao|1 zxb^GHIo2%VK_NC~i*J1M4O*$YcHJYr+&2t!&Sj|H*ya6SZC0QAj1a4Wg$i@3ckD8A zN{e`;*QR%8i}}*o(VxO<-Y^UNI=t@Ig(4m)U$>nVuG_Ay$@p4*Tja!t#UB}hJii}U z(z7Uo*GshL^@eSn+EsE@%my*es=t}vRc@73uFv>t_|Izdfg?K=Z|L*hUcK1ssE6vZ zNorR)&lHJ#vnY}?yY?`h@4^M=(kYdf+3uCzcpr6Hx;Nc8U?!Wm^zI#(PvoDuR^ZG0 z?&1NvXPO<}Y7ZK(_DJf#eio!;wr3lUt-<84|7(Bfz6ks9=^@*~&bKv^Nk1~LD66Lg zMX#H(f0g8mChL>)&tJQJu*)?q?N4*Q`2CK8*c;9=(if^b>^Gh)F!oH^@l?WGy7FpP z?xsKW(@#JB|95rF6ye$an%e~)SA>= z{G3_){%zVYcinxnWf}JC+g`LK74$j>x9(y-`tkVh)06u3H!Tsb}qi+G>0|i+vkew|8K7U_a=P*uiUx8P9K@89PWJBz^tY5&#KJEe8HdB zXS1g2ur6`xYxZHP$Sb$m`8KP2s+il3pL<_5SIGP8PW!pjfp7EXXot1a6d2k?1f2HE zvRc-dFuJ{*eUqi7Y3JL;!ilRD)U@}mG+o*hz-Rxg_}7jzjR)5zri;w#{djDyOHeT-^>oy5+1b&Oj3N$ ztR5`qT~WE0Iq>kVwCo-CnZkX=6CNxst#1@#R#RAgtg5+svYvy-xdSdMuM|9<8P)ga zqr*?xw=3h4-QwD%atoBTW7wy~h+p1OdVT$xn)`3A*?-h(yOw2px&8PojlT39Z!%w- zKItswm02M5Lg)S`FX^>mmoGH4P3i38Zd&zkxp@7(Uti@9)aI;Tl*zdG-AaQ+5B-Hq zdlra0HZ?n~X8ynat;C&{q~r;A_h!l3>^-^V-hu^o$I1==`ehsVUWoZrpnTjlzhU3` zDdt%Vf6VOX;qb6N@WD_kpjWuuPWsA;vWP&g{g19T-Tmk;&waZ2%e6G-U+IPyw}#%h ztkA43yXWGCAdN}e&hajuz`Ee{Od+O^QUAlwmQDE+ToPsQY3{>*)_NA<1JMtFt? zk6v4KPoJyzzEa(cov;7#EUR0~ZoJD{?R4<{U#9Zk6(&}+^?m4F$$w$Zt6N?BSa+IU z*&!Qz-jRD2BikwUDN#Q$=Yx(i)D?;hRW?Z#%`SsL;C+uQ%m znvE-+5;^i`iGREQFPX7^DO2738w=(q>#kkZ%(`Ra-zfGpwHbkOZpvHB6AN8$Y1G@A z*xup1e=u?XQO_Hur6Qfj&b+?%{?VS8$k#t>buun6cwf5T*?95CYrP+9?rL`UuTf2H z-)>O2YTw?s4Yi_=E<8RZaz`iTwja;q4EC9Qhc~o!?6&`T`2L@Z^8Y!H{ZF%C;%eK) z^`rMezthtHUl-N=^nbYWYu462?K!uPe$vVgxhKKA?ZnQxS9xMR*KeD(^5CNUUCW+V z?_jJoYVCW$U#-C)D65fwXLH)yW0&5gHA_D~(B6=lGOc;lz8MYAR~Sm<{)zn~wx!qq zcTC1)X~$;Ihv5e|MbG%hWaZj^_qOB)w>8-Y6HZZwDiL-*T*Z!|byuu^dsdV4q zk8$=UzJPANhYIA=1@gB^eU?;^4u6-Y-$n^2`kk(u*~saxd)OpZh|z?9ZgN z`ab58NdnRn%73?AGSQZBj4MA|Q%AG4{TklrMXb*_#H;cI&~?Nk{k)s3(J#OFKlGXvt|qX zvpXtu>;A1#x350X%Cb4mrE(%pw5M@>mWk2@zgrcl4=+yR-mU4{|5pEM+Ku;zJ#x9%0HBK6xVT$LsCR7yMQ%un9f=G~SeP{&^iI>*!VS zQW|ov-yF{E-OqlnaQ<)p1^xL8_g`uHq!hq%jV&TH`{i2g!}m-+^|T-S%J|A^O4Wn) z=ku;VP;FE=;CfNKgU zwufq6NVdPxQ{=|Pe^aMgA=hl$<>0p>-GLD=PD)0+N?5i^@JDs+7x8KZ6RVVJ-Bk_y z+`h>z6JGs~^$cf}dfU92y#?%(&wY;Hd+NleJ+i;HaO8O!CpE4v$WN*vZl`}kEpRq~R@!XH8@vC~|D^%LrlFr_}w}$M> zy1ASPoRy@s_*kk_ap2LZ$9U`oB5u!k$7w6L`l42((`?2r15IJ@d^^VVIxu-UI^ zw&OzY1=hzrcQU`y;akmnzhcgp>xV6PJULnaXZ|SaxZVDL2j3ydv&|p2pMIOvvFe)R z#?a(wp~Wi{^g<5Lzc%Il!qwfJ>c%`_{Lc&zvG271qTMFbG;`%@%MTU%H^%k-`uZ@5 zm+cRS_xuZ+b{(zqWs}kHb2b)rvX!~g69?@jly-kKRbqpB9&NIHjv7nUCM2M^4T5g)D21!L?b9 z!q?R;ly98QY`DMc)i>Q|=lnu1nk@M0e<7sde?G_m_a#4~n_F#S=9$NJ*(9Hw_D7rR z&0=QOS*NdvytQvVxc+vuw5C>2;PDOfmwr`?3eR|8waPX7+LgWBZ`iFHJDG!)^ZoNZ zI%)5opyF8VEA^if|M3^JDK4+>we=xZf^6 zr{|@v#Cki0wUeaha(+(T>$F?uzvT)02mj)~zWV>QUOucocCk?Zo{!xUY;1uWbvtvq z4zt&Fu1lKp{g6r4>&BhAEfU?UTkQ-@DpyW^%2vKG`|vqF*Cx}uLRHCM-bTOP|0lnD zVwB%P|J{4*HvXIMK5_C!*&gfegNI&61Ze6#s^F@LRlMLrzBjQ9>4zJ zHLq_E<)bpvGu+#*S!mzXa=*uWH*0nK;fId$HNU^T&c9!`@}qd$8Ox&=<7ZhYEU)2O z9(CpY1CFpSRgDh=Q{Jt+l=#2wa`hkUc(g6R}B#dFQ})jY%?`JEE`zcbH8+z z>!1DEjV%s#jp>Ou6S}pIioVqjcyC@G@jvYF%NJMm|KF~U{rhzO;RU7DymxZbH+C4r zh9(~@Eo^-1dT_n$%9m1WEO>)umf2_Q+v+q~>|botOKW%YiDsFBg{%b|rP+S*S)DNu z<|{Nj*QENqdb8mV##h@K=4<6FyxnLnxx(-6w=Y>{K4u98%u}|$>aSvxIhm>J`AfMq zCc*G*?z2=L2W5ZTi4s#6{B85`Ftsy2_it&?%YWu~v$o#a$FaZm_tfQePyatE{jI^j zR`P+;@3oG*uQ~HONXA{B9W&#mz*oLoI>wv7OcYF8p?KjeW9l2h`)fp3oHUh~BQ+;^ z&Z)VqT06PF$Oe4&ox=85;<;!25l>0hKMCh9-Lp3R>YTk=dN-pYTh1JY{>RN~7Th|X zyYsH!JLjPF!0yEDhugRm{s?mgoUb-0JpAs(f5l(+j;BMjM7J1(d_AvSALDEA<+J^@ zdRK|WiY(i=CwVr`%UiLvR7kkFzUtyZTlG3w?c&g^xvVo>6{a{!H|>y_ZMS0I*2xMF z?9cud<`KWJ&9x_UqCrGx^^}tv7@H5T@>zb;XW^;Ui$ou% z$}vZL+p+55;)#n2tWOuNGE|8k%jVz<8ifqWj-Wf!tFe^ecG{ zx=9^8Qp>$(<)7=D9<{~lmAhRwZ9};OcI@IP2`#txnm;AKtwZQ}AKque=p2-lora{&dmYI9s2) zUqenv2n9dVzIK^KyJl&|&V*ADyNff^tqPo+wlgr9nVxk?@zo2ryY8+#<6iyZneuO@ zF8=n(sAOHqhsg;q=FYzH=jP$tvzD~2wXjx{nt6GHpnd)RI?>*vhZ1&n9o%(0^SZbX zW5fTQ6)SHz*Y7*?QcB@UdF-A*yCt6$r`~*4aCiMw*1I96e_RSZzqZ^U^K;Ph*=d#` z)@_o^zhBP2zcul}=Eu(te)rn2VusKBxL@Z?x)=G27vJ6(vgg+Sjdk;lYUg=QE&jXd zh+V`311nZ*m+F;1a<`kznV7FdJyBg~|FHYU)8k*4Pqg*?uz1SuHSPCplZEuYF5F*` z%NP{bD|cwOo}7Qk!>tw?<&SdjPAkcKHq+qQd)4Sa>^-X(eS*&F%g9bnXkks+I?>nU zk&C^-X(h2!GYlmcT{XAZ*zKG4bw-xU!o))s-)al$qyOuz)Og##Ju_z0+SIVPX8|%- z;%4mFo4IkS(1Wz%w1EVagYx&X{s8Ik4a6 z@+0}uk7@fi{ zzhcW%x8&zf-afYu`o4ni8eiEK&KuX?^#8W6S{b>C)%*RTfLh7tZqlD_$)7uBQ1z`$ zn}?aFzTWz%h2y(xX}$FZOgkPP6IyeBZ?(LkN;<p{wa)+;I(r9>U~|Fiw(EY@{?vIVP;M8xpS-6{Bi_qRcqV}^DzyV9<6 z+b$(Bw|MOE%^ReH3SN^s6-Hn}TjAHIrtPkwmsFt<%c4L#xwEYKPyhz$B{an>iHCZ$CAsrzS+Js-g?IKTDq44D}(WDiZ_t*Tqed*$_>QAyx+TUc~)t;4Lxc>HBg+%W<`;9NnMHJQ)2y=^D zsb^X~nK++k&$HlZ&CGpU3^?y?oUrw>m-xJxNk<>u?m79o@WL0F0-hs^t9tmh9N4^` zIXn7wMcGpIx^$bYGa-*Ywx9j_!|GaR5L+Cx*c_u6yZK8#`OaiWxqj)3pO60h*9@8e zCqI0(Xg^hAc$Y=#o+>g=Kbc3ggO_FEAnZIWrY&zZN z|BwGTlP|OWzk6X5P6&jtaC;U^Ro2?PVB;IpjSYowSiawwwj#0NMNiePJ$bit9a$eb z%?vZHlDMMU{_DHl?oGFhT`vo**y$z~wkG^h+)AFD<#JoK6n9I^Ez|jNUFdB9qkUNm zU-x(YoriKxFPyRM%Z%dsOsW1!!rQFpd|MP|BKYTiBY#+!zr&lv0;T8Gri=PrCa#`{<81R>)QHy6=fmWy|Em5yHcC%_UKgm&S`H@m%GF--cguR@oU1- zW&O$?Hea5wHA=giEp^;-_kkF@{3X+~W)kzy={j?Ncy+jv(dtB;dZ}Rl_V$3#EujYD zDU#PFFiyQ4d|YUc+8iIPze>}E-s#TX;&@)maj|PiZQ-MJkL91f-n%f&{G+h&qrHVo z*4CSJrS0u`_mJ<*pS!;}WuwHFi8M1b9M`i*w=cv zi{DdS5g_4w%;7|+-y>ePg$xsy&Ak{aevmD(Fw*;je~?=I8y!Zrif=1bN^;+?EZ%MD zYRTHF`0aya(ZP=vlG5EOKll7w>Max#vPOAxMg3LBL)9z7^40kT1ZFlLd8zZzW3}+} z{OcFr-O_sF_ebRRhTIP~uAL3znXIzBTy;zJ%ZNA6HqK~pWtqV0Hd(<~`tAZu{GgwQ9{`R`wCUNY~IMwx$#P_W;qoV zSvPoYep|Bck6p&KthO6pUak11r&ws7TYl9vj{8;Yv*!x4sxDnlI$xBaTb|pi!dPOk z!BvN;V2e>`i++wo$mxzBo!XU*GKm|0@2T@}mo7Rc+Y{V5J6yQq>y51MO zo1xCZd_`n!lkb_v!{1r%$ciOK^BcaioXzYYBzlCK$N@z1w@SMlvvZNBJY z$8I+1rT2Y2`IYZp3X_-WVR=#E$ii;-=}|-Bwc9Z>i-a6Hy(fk3)C=hCR!Z7bw1H#B z-38uzlQv6pHtMY7nU&bZ8s)s<;1rYZKmTR3PDo;wf9^LaX^Ns&X^WDs>TD-l z@%ihr4z*6W;Wj~U_v5HLh3yZIpgazoA*ce>-U=y7R>(k z<3m!Fn6bxWQ?}ItWzThlu;euc~)FezuQ8~Ix9ajZe-j$wTgLB`dqnfN0?_Bhn{0|eiJ?K;OQ5M z(N}*ty6ew*@I3jL=$UGs#%+!}rXHQ}RcfdI_xZ6RlYNwyJgGJGO8sQOvMKt?rRX~W z)sI6Gg(dGOTYO^gt1fNdbjTvYeutTb;hO()p7R>l>icdkU7gYO?S|s9O1_tiXMEJr z>(~<5^1vd;SJwVVCIj<@Ej=?O*?QyFw=Qf5W&XTFEQjmE8iVsj=D&rGpJwGc8+7C6 z4CmH;A348iztK&6l>gq5XMb1U<|Q+@UtYC)_&@4**zLyDG^e?i&wTz0{fkVy{D$%5 zfw}v?r+pCqQgHO5_aAS?AeGFf&(hq_c2%>SIIe!@YOG_2^zcqt#eB6BW`eK-Hd#dmpl)*lk~%QH)LTvMQ1aQ@e34Xf(nYe7|S_jKwdTx4DiG->KfwyygFe_upRy?MZDq+C>ND@|GnPpVop88q?OQgz=PM2eXvIk=F`M7GW~O)4&!sRjF16Bn?(Szo zZL_?lf46-&_uEFJ`qO2~vb#2&@O{}PRUCEnc)RS@JKl>WEgCFT(@q?>S;w_@w{TgY z>Fg(LvumDsX&sPVkjMD!(8hh4Ovbq}MZYEcj@4|hJEWxcYg1au@d7`+GuhX^ZG3+$ z-1W+|$JgfHc00dWE3)jtik}rP;sU#T-A;QfUV1W8wamK5&1H>pSwEZ1FWwo`xfCAn zb?zu$drP@weZ=bE{JOjc@2e#r+&%Pbt;O5YWj<_@yh_aCd;QO8T;RSur|&7hmrvLJ zX?yOAeG~a0Jpb_jRevLH&VRG8&E`9$Lm2KC$++Xw^^Gd(m&3Ywv_f3lftCurL z)LdC^A;BJO!p1*+<8p>o`TM4x;hsO^@7vSy|C_l!osDJSd9nP8OM}>@z{Ck!v#%>H zfB$y6u};ua)-VxLBLNb$8ka|69L8R$I=_Il%rc?Jy(n znOq%dnU^u8^3jI%*S=~i{*eF7lx4hevgvP|Gt+*_XQg~T{w%ubW6?Cb296t7x4dKu zgvW>L4ROZK4}0e5hjW>{t#Qj*q{k6TemNn*DWu4fGl0E4P2>zjNHH5=)+dQka@Dg?8m~^F)xYe zym?>8F6POMqib@wZ?0fmdR2PY2Ihx14wpF=?2yeqwoLucgCuUBWk1)PyD&%m`N=bD zJoqDjWE@WoKgIu>Q{fz6se#b%nV`ISZ4Jqkfn55Kp3ws-=Ax~tyV__v6{f?ZaBUF{_A#OLE||!UOUSJba`Y>Eh$W3XP1w-CR)O>1t|+T?Y)1ZP zrZcl`=g;Q(dVPs$-SgM{KaaDQp7|EpsTDPMSyIp9{SjvR{i%3-|QNB-_nR1@3W82k_|0B5&gD6>AU3HJ-@|X@o2q|`2Jsc zW5Ex(bpOeAFE{KKVQ6g(xNq#{m#+C`;oNWy_vML;l)vc+9}W~Z<@vE>`Oh+jirq8Y z_id?c>78d%WAQV~uAuhEESKAVPbMEaqV?~eU&o%Jh6i_2ghQErvP=yVnEmbW0TDi4 z8*#rwnbUR~%fC*~Rkcglr&G8i?#inL0T;Jzz5A%(_%ERy^_NctWD2b@Yz%CH+pY?)?JF75Okdr99bM2SyH`=~FTc~Y^|xl6UhVk*IX~+S`OTiwTO1AA z!tJiDe>h{KM&#W`5B9r>&i4N?^~@Ky5AJ_5PqCc3_VqVc$z!SC`ZuTR$4ks-kKbN75G`gTjM&)bw=ka2JPQ{j-3C5|bo4^_RN zaUH+AMCNX)-A#M34wl%!4^!sY>P+^kTdel^a*M5|b42#+RnPsilr7dz_4T{We=uda zfcsiSarx+Jp1z`G57hSyu?PLk^h|dCJ~L3LZdtM@Yt7DQX=|62nHhwCeh++DgE5RE|H)ijO&9fJL zHA!b})W^$OQ7VynZfr8v>yvops-icP=*+uzWX-j!+{e9lS+9@Sp$|NrIp;|t2CHvWF=D-v_@ z?W9DrwJ!J9-e)YHlhzw9r<`ZRa)>D;;=s+dGr2WZZz|qc=8(|sbX>|=eAyoTWk-Mg zx>?Djc$)KIPRa6VDQYt8_ncK`Ip4{8srcz#{JnD*T38-=<+ZJrU^eqg+0-%V%uyl1 zi?5@P^=cgomCyS0(E3ZrpDS$5vzQ!oDxT!$mHc^syf|98PkW_i`L zAA9QVmi%}zsVDWPjeS_%w!V|~31@WmR}|VLKUnj3amyz==Yp*)i;jJL8Oihf@6oPG z`Iz<_ZSS5hJ$5;3LtdrV^T~^uS806Qsq?Z=kNE^+d)E#rH=RiWenEQ-;~7@&cp4|V zCe+YDM0?K9tC7<-B`iwq+$82zS@!?Wm&?^$dyW1TUX#{6`tthz{hY@S3%KbYR{!y| z_z!>i>zDjjHBKD-AgeO#c&2`~*MkeOyM7lbPOm$lzD{f74!NSR3lh)yY|S5?R5Wx` zGml>+CwOwN@a{9_-(=L3i!{%!n!ezj zWTxqk_kEd9mrNGC_h9K70~0yfytf~C*aF^%yH_L%&#PohSsK2s@>1V}n{o4JT)6k= zyWQzKv$ikY!DN1&@zc)>2W}pp=d%3%=en7SMPhzgxu$U(>%~rS^z9FG{P81Yrg-*I z9qu1KhDPok%-b%Ub6nGA==1Bsy#L&5FU^@UX>(s>@ExglE6rWiMGpuZX>7muK=W*6 z24mX$<9uDg71AGEExT1J)9r7xMir;O=j=YeMP%Op`}M#7K0NT_m#Fow!iFvP(<5e2 zuMz*Rnwes|rs^=)ODpE?vulhz9lCwb-Oiu-e)6w(3-_L_jdfvg@XS3c)R47NZo#s( zO5$e^WaQ1aZCBYKv1qBb!R&i{44)_NU9jSDy%?{U!+Zb0OQA{A1b59}`ISX{%jdLN zmg}D|J&CS8^YQlaIjxeflQ$`H>V-<|*XKj8En%Wt!E3b|H(5^+0pX6N*k=bcrz9Cm#x`sUQ*4@)kH$Uc$0 zB+aP%`yS(0uL;%_&2N@AM3f{2-?yC`RL#*NAiv45?wu-^O8?4(XM+#w+Vy}4}X-5q=Gfg_I@$Itb+#k8~4&2`##8AS1Y*y%$ zycC_kpFUasTmRH;N2gHgIzNg2FD0v!)+ci$RQ?KQoOS$->7j~A^z=Fz;@#bVCN2`((^JZnte z+dO}%5U@vo$&c)?X-2LEC)aE4i%j0NDVy24;j77k4EKe)3vX_(WZJ*)<*vG4f0rNF zv+JbF;_s5G!JFP+>t8R_+s$TP;Ldwe`e7^2vhF!2KiOPsKOuWs?!o*E&6m{{6sk0| za=mz|HuF~94wsyTjWZv=->p5H*+J>Y#Qs$gRTZzd9o@F&a?Edovm&2%n0S?X*iJmV zf$6FIZs{wIB^6rpPfoHtm*&Un)+X9eGv%Cafy%a7TTWOpOi6W;N%;2Wz-%UVYle=g z0jFLXd}`Srzdy(KfL3mtyx7^ce;@KXV)S_~7#1ggILTl+;l$c^$Ii+s=g5V`6wUAE z>^shHlq?|2{`!#qJfjIJ54g3DKiGF8U|R6|zb|8Kt)uUGFa9aLeoNhsdz&Bke9TBW zU;T_<{d&*wxs2By@Nal`|I>esHs#*4ZmmLEYfn8mr18;h?>l@9X}*wJkF+)_1dW zzOy*-%Srd|&$oZ&e-+KR_ebHSdsBI4z1(NKP+RHMyf?M$mz;4`ayP8-t-2cH%T;mt z@W#|rmu^|PNvzVnezB<3MLAH4b^NY>bxVP{3s+syL zm$R&jbNPnJc4iMdSO1$*@yYP_o759}`p()`v0e7QTd#fp`2Qix{+06ewZ}vr*ss6N zF`sMxh7&()|IS`lpTZb6En~7_PJ#J`gpIMwzr3xC{bRo6c!-F5&_SlDhJM0&>pf2F zuK%LR_?}Ju!Gsk_b8eVj+x=pfgu$#AA(7I{rsl5D(OYrs*zHRvB`)>vG`Tb}msxn? zd$t#vSKB6N&c69%=SzX;on?LVZz#XmllG;nH}Y-g-b((%Ki+=)Z+bm--@c#!JpB)O zF8kNHvL^ojj}!an?N2;%aLL8U$-DgD2ArL6VD+c3oR=T8P2KWCPKojV+L}#^86Ve_ z{5?NK$Gq(NnT(3N*{h%Trl)*A^Cq~@IYMXgtZVHCkJkF?eXq$sT;-WNGlR!_u}5Ln zvAD~(e;7XLI5XoyZ}7DW28sW#wx&&)TU~L`aMt!y|KD={PnB5`Iomu`T=Iag346%8 zw9|DF|0l;7M-{(%xgxw|_pP+a?@k;O-#y{X$*8@)9uJR;C-PoYNaNL0P+ZEheP7mw zKOwhMUVLEI3gXGr)hy<9Vb0oMCzR%U!#&{UJB8V87b`beSt%%ewU54$_V!IzrS_v^ z=2iPS*PNZqe<(7HslP|{QLtF-hCTVScE`(`)iFqlb=E!p{rtC#GON%3e-;1YW{cDu znZXxxJ#u!|4VUKq^JmsDU->NOWNx6$e)ALaHLi`V)gt$|y??-B`b(bo?T0K2c~fx# zSzEhX+HU+hrn6OhZyz!%db7mTbSda}bFrz^uIK7C7w*_Li|*O9BFE-mM7hJ3f-k2eQvb6*KmTHOiFCG~E%&*yD(9b2rXR|--!wD- zdrIoSN0GH>Q&itah&}7eW->3Id!hMDRt#(Ylvw?4MML-a(7T`b+JC9rmz131Uz;G< zw(3-pmKEQT3O4N->V7|Z-~WHV&+wq}lH2n3YwV3x{yx=Id2`P5W|511V8M;Q-pxfl z9qq0+8JBo7h=y%U*L?SJR!9V6Og0yT9nWUFc@o798*cndd(l48UgAu$vEY;LpcSo; z?>J2NGk?Ef`Fftqp558gR$t_qF|RFA;M3X$>1jvLtw~7n-(#pPXE4LR>Qw$L>!nW{ z_uQ8&Fsy#|f8zQHxs@gh4K|+Ue_gJ4R8Qr~-nf8Gs~UDHzH#o&DBskh`1;VsQ%AB? z4rDfM-|E1)rr|~CldVE?R*GcLc32=c-R|Li_rtsmw~fyn`R-$x z5qBGYyD*7OD%@&N`NSlsN&fRc*T;Uwu3PqR*taurviX(A)n$Lzhs@aj;9vG6=gwOt z>^@KRy8Ise`SAGH$uPdRdzQL;nJ!`OPi&~#d~Z)_ZAkf?jLzQ~=d+DVHx)Qsm~lzj z$a@##^KF6`bsM-pWS$Mu&?||~pCO=OqsH1RWA^Q<(@XO#YfGSseuzXU>U#h=`wtA>u^!rPzq|NqhdpX8t4e%9m2mP-euop%|$msXAU*s|vD;}w!htYXUw z#lB9okk)##vFLsKgqf+Yj_8~f%6h;3_UR4V+r0LAi?vnzgiM|&zTrba?8X{*#&7%n zTQ?`snqiS)346qnD3Nf)VZYf4A5FHZR|O*=W|B+XdI_st&N(6z*QhSKlPbIk`zc$J9hg z;qQbD7M|yZPWoC323wOq-Pw>7#m>f{wC_2m)HfH#8NVb~Fn%juDdEkv{+K8CWyQ$% z?GJ?CpE>+rrfu`fdG9s_I)9y$B*G9=-ppC7xo5(WrJv$GGT9C1OC03l+APQF8@T%D zMGLt}tujlx4#u`U++O;aYImdh`5&z@GR%~<`pK11B(_P#S(!nPrYcYX`)yM2epHG+R#$_M42<(|*2taJDJ zFSUu_di+4OY|k%62SwgJ8G-`Z$DDF@W~=hvF@66o{=cchN~V&>2_NlFpXg&dpQy9! zdkD|jF1fTfaVnS2%!})=yJU8};LeZdee=$Vy*_$eH@7OwROm+P62Hocak)0U(fkXp z7MZWydt}}kN$CT>W_Fq`^Qw=qXLve?fyJk8kMvnX-hC^)UL*?!}fz-f;_eE zWs^!T9kS07VsqKz5nd~LXLCb6|m{oRva!Flhs>|2wk&Q+>B zEb35t%g?vhCb8;nl9;f!7Zhhq&GUxNL9Akt^aGQqn$msxi;J znIgy%6Ls_d0=Baj$+G9lLQ~J2f9w^L93=8{MgGa`!&;vwzO9WA$a~`AR4f1VhxLJH zK0>jRlJ_(In{hVnU*6vx;rHI(m}NG@r);ASXVetcj3d8mW%YI5cGQ#`nyq`m8vjH$ zI%%W4Pn5+9b{UP9|3-<6|MOrQBD^tegzYa*D-`& z&O9}#FM+%M&ingM_ZwB4P&d+9=n z8#}iy+QQIw<)%f<4_}j*XSWKH!>ZRDl*+!|Qm62BP5Qx__qkiH{|=LyynV}#w`Z=2 zbl7v>w{&^sn>lf%0RvZ$?@Um>-*Y?YfWA5%I-Mdf5Wd`S7 zel^Kwlk({@_OmBgf;Rup{M%#vLx(l$sVl33_KA0bhqhLF_|0+-j%IY8ZM#}f z8JEOT^Af+a-AsP>T zdEv9PJ`J0tE8BZ7+SGgfF#I2Vy?^#b`-kD1MYi~?lh^#nG-K7lvqx^~dEA(_u&&#G zNz@JZK-)ikoa^?^-5a|w^BG4UPe^N`!;3v@$^;*MZ%@74U~0%WFQ>U}CBr_CrVO*F zt12gXI~L8^ZhqYM;>%APSLi*9f3LDTarvp!GJ?`Qh1YkdwJLtd>-Ce-<<;10kRvKK z{rL_Jhdmd57ELT_o-t$R&bN0ne{ZbYadU#5jMQpP?}l@W)4m*^_4e+=lr(99X9f#P zx72;wbNSJ7sXUvy9h;LBJans#qq2qmFR7A0wx%IMph@|lOZ`Fj$6f48*D%;e+dI5T zJvVQWxl&8dIq&)3q_`Trq}u%sKPdT^c;m*Z^N;$kpFW?{^48}r}@8&)Rf{@?Or!N%*pll8m5 z{d3w}&G+ri%5_V4BSkjf;NxfLHoMr~th+6*-R40KbJd)C?P8}yR<)-@Z3y1ppS*l) zu&zPqLWZ`tt7RJ7q|cSrN?O`C$^8tLa}zVTq0llyI@?U*LLX*+l?E``S=Qa~rqT>nzzyDw}fH!7Omm$NHW$?H@8 zzER)XZ=F@~X07K-PDX9JkZBw@qn5k5?#BOu1s5CEU#`?oX9zvUvCW3_UR9cJ*LfdqBQ9$o0a#}a$D9Ju}frgWHuL>B&RJ->S+0K z-0-fE{+iUn#V2a#xt&uBoTTPZmX>5XYvP4tk3aS2dHK%0AW(A5mRI`K#>0oLR6rC#<<~7E8cCF)i~K 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 RwY!6F{P^^ragp^+Jpc%4;iCWm diff --git a/changelog.txt b/changelog.txt index 89b3babf84..a2f91ccf58 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,42 @@ +1.7.0-RC1 (2017-03-11) +------------------------------------------------------------------------ +- Feature: [NewGRF] Extend the DCxx range to D800-DFFF (r27769) +- Feature: [NewGRF, script] Increase the maximum number of GameScript texts to 64k, and NewGRF texts to 512k (r27758) +- Feature: [NewGRF] CB 37 results 0x0401 and 0x0800-0BFF for improved control of display of input cargos in the industry GUI (r27751) +- Feature: Sprites missing in outdated basesets are now provided by openttd.grf (r27732, r27731, r27730) +- Feature: [NewGRF] String command 9A 1E to print the name of a cargo type (r27707, r27706) +- Feature: [Debug] Assign descriptive names to threads [FS#6471] (r27674, r27673, r27670) +- Feature: [NewGRF] Allow composing vehicles from multiple sprites (r27668) +- Change: Enable realistic train and road vehicle acceleration by default (r27760) +- Change: Hide the drive-in stops from the tram station picker (r27734) +- Change: Do not count static NewGRF when checking for the maximum number of NewGRFs in a game (r27729) +- Change: Limit waypoint area by maximum station spread during dragging (r27710) +- Change: [Build] Re-enable Wnarrowing for gcc 4.9+ [FS#6532] (r27709, r27703) +- Change: List railtype of rail tiles explicitly in the tile info window (r27686) +- Change: Re-arrange the autoreplace GUI for trains, and do not filter it by railtype by default (r27683) +- Change: Various performance improvements to CargoDist and LinkGraphs (r27682, r27681, r27614, r27613, r27612, r27611) +- Change: Improve randomisation of rough land appearance (r27657) +- Change: [Build] Enable C++11 for clang 3.3 (r27654) +- Fix: Insufficient thread synchronisation when switching blitters lead to crashes [FS#6510] (r27775) +- Fix: Enabling palette animation for 32bpp blitters while paused skipped initialisation of the palette and resulted in black windows [FS#5889] (r27774) +- Fix: Intro games other than the traditional nightly one would cause townname NewGRFs to not get activated in the game options [FS#5819] (r27772) +- Fix: Some variables were not reset between loading old savegames, which made loading them fail [FS#6540] (r27770) +- Fix: Removing secondary roadtypes from bridges was factor 2 too cheap [FS#6538] (r27746) +- Fix: Extra viewports did not center on the selected tile [FS#6537] (r27743) +- Fix: [Build] Building on newer OSX versions with newer SDKs [FS#6295, FS#6502] (r27727, r27675) +- Fix: Improve error message when trying to build rail track over a depot (r27726) +- Fix: Rescanning NewGRF in-game could break the loaded NewGRF, if very many NewGRF were in use (r27721) +- Fix: Text could overflow various GUI elements [FS#6527] (r27713) +- Fix: Memory leak when reloading NewGRF (r27690, r27688, r27687) +- Fix: When removing objects of bankrupt companies the tiles may revert to canal. In that case also check the ownership of the canal [FS#6511] (r27656) +- Fix: Make the console file commands operate independent of the save/load GUI (r27645) +- Fix: When dragging vehicles in group or depot GUI, draw the complete articulated vehicle (r27632) +- Fix: When dragging multiple vehicles in the depot, make the destination gap as long as the chain instead of just considering the first vehicle (r27629) +- Fix: [Build] Change the GCC version detection so that it works with two-digit and truncated versions [FS#6487] (r27623, r27616) +- Fix: Do not hide filtered and highlighted industries by overlapping tiles in the zoomed-out smallmap (r27622, r27621, r27620) +- Fix: [Script] Kill scripts, when a non-suspendable valuator call takes way too long [FS#6473] (r27594) + + 1.6.1 (2016-07-01) ------------------------------------------------------------------------ - Fix: Compilation and optimisation issues with GCC6 (r27606, r27605, r27595) diff --git a/config.lib b/config.lib index 842d4acc8e..977a834b37 100644 --- a/config.lib +++ b/config.lib @@ -1,4 +1,4 @@ -# $Id: config.lib 27609 2016-06-30 21:15:30Z frosch $ +# $Id: config.lib 27727 2017-01-08 17:00:18Z michi_cc $ # 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. @@ -58,8 +58,8 @@ set_default() { enable_translator="0" enable_unicode="1" enable_console="1"; - enable_assert="0" - enable_strip="1" + enable_assert="1" + enable_strip="0" enable_universal="0" enable_osx_g5="0" enable_cocoa_quartz="1" @@ -1285,7 +1285,7 @@ make_compiler_cflags() { # -W alone doesn't enable all warnings enabled by -Wall; on the other hand, # -Weverything enables too many useless warnings that can't be disabled (as of 3.0) - flags="$flags -Wall -W" + flags="$flags -Wall -W -Wextra" # warning: unused parameter '...' flags="$flags -Wno-unused-parameter" @@ -1326,13 +1326,20 @@ make_compiler_cflags() { flags="$flags -Wno-unused-variable" fi + if [ "$cc_version" -ge "33" ]; then + # clang completed C++11 support in version 3.3 + flags="$flags -std=c++11" + fi + # rdynamic is used to get useful stack traces from crash reports. ldflags="$ldflags -rdynamic" else # Enable some things only for certain GCC versions - cc_version=`$1 -dumpversion | cut -c 1,3` + # cc_version = major_version * 100 + minor_version + # For example: "3.3" -> 303, "4.9.2" -> 409, "6" -> 600, "23.5" -> 2305 + cc_version=`$1 -dumpversion | $awk -F . '{printf "%d%02d", $1, $2}'` - if [ $cc_version -lt 33 ]; then + if [ $cc_version -lt 303 ]; then log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support" exit 1 fi @@ -1345,20 +1352,20 @@ make_compiler_cflags() { if [ $enable_assert -eq 0 ]; then # Do not warn about unused variables when building without asserts flags="$flags -Wno-unused-variable" - if [ $cc_version -ge 46 ]; then + if [ $cc_version -ge 406 ]; then # GCC 4.6 gives more warnings, disable them too flags="$flags -Wno-unused-but-set-variable" flags="$flags -Wno-unused-but-set-parameter" fi fi - if [ $cc_version -ge 34 ]; then + if [ $cc_version -ge 304 ]; then # Warn when a variable is used to initialise itself: # int a = a; flags="$flags -Winit-self" fi - if [ $cc_version -ge 40 ]; then + if [ $cc_version -ge 400 ]; then # GCC 4.0+ complains about that we break strict-aliasing. # On most places we don't see how to fix it, and it doesn't # break anything. So disable strict-aliasing to make the @@ -1369,7 +1376,7 @@ make_compiler_cflags() { flags="$flags -Wcast-qual" fi - if [ $cc_version -ge 42 ]; then + if [ $cc_version -ge 402 ]; then # GCC 4.2+ automatically assumes that signed overflows do # not occur in signed arithmetics, whereas we are not # sure that they will not happen. It furthermore complains @@ -1380,28 +1387,31 @@ make_compiler_cflags() { flags="$flags -Wnon-virtual-dtor" fi - if [ $cc_version -ge 43 ] && [ $cc_version -lt 60 ]; then + if [ $cc_version -ge 403 ] && [ $cc_version -lt 600 ]; then # Use gnu++0x mode so static_assert() is available. # Don't use c++0x, it breaks mingw (with gcc 4.4.0). cxxflags="$cxxflags -std=gnu++0x" fi - if [ $cc_version -eq 45 ]; then + if [ $cc_version -eq 405 ]; then # Prevent optimisation supposing enums are in a range specified by the standard # For details, see http://gcc.gnu.org/PR43680 flags="$flags -fno-tree-vrp" fi - if [ $cc_version -ge 47 ]; then + if [ $cc_version -eq 407 ]; then # Disable -Wnarrowing which gives many warnings, such as: # warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing] # They are valid according to the C++ standard, but useless. cxxflags="$cxxflags -Wno-narrowing" + fi + + if [ $cc_version -ge 407 ]; then # Disable bogus 'attempt to free a non-heap object' warning flags="$flags -Wno-free-nonheap-object" fi - if [ $cc_version -ge 60 ]; then + if [ $cc_version -ge 600 ]; then # -flifetime-dse=2 (default since GCC 6) doesn't play # well with our custom pool item allocator cxxflags="$cxxflags -flifetime-dse=1 -std=gnu++14" @@ -1412,7 +1422,7 @@ make_compiler_cflags() { has_lto=`$1 -dumpspecs | grep '\%{flto'` if [ -n "$has_lto" ]; then # Use LTO only if we see LTO exists and is requested - if [ $cc_version -lt 46 ]; then + if [ $cc_version -lt 406 ]; then flags="$flags -flto" else flags="$flags -flto=jobserver" @@ -1511,7 +1521,7 @@ make_cflags_and_ldflags() { fi fi - if [ "$os" = "OSX" ] && [ $cc_version -eq 40 ]; then + if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization, # wrongly optimizing ^= in loops. This disables the failing optimisation. CFLAGS="$CFLAGS -fno-expensive-optimizations" @@ -1535,7 +1545,7 @@ make_cflags_and_ldflags() { LDFLAGS="$LDFLAGS -mwin32" fi if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - if [ $cc_version -lt 46 ]; then + if [ $cc_version -lt 406 ]; then flags="$flags -mno-cygwin" LDFLAGS="$LDFLAGS -mno-cygwin" fi @@ -1548,10 +1558,10 @@ make_cflags_and_ldflags() { LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32 -limm32" - if [ $cc_version -ge 44 ]; then + if [ $cc_version -ge 404 ]; then LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++" fi - if [ $cc_version -ge 47 ]; then + if [ $cc_version -ge 407 ]; then CFLAGS="$CFLAGS -mno-ms-bitfields" fi fi @@ -1601,23 +1611,6 @@ make_cflags_and_ldflags() { CFLAGS="$OSX_SYSROOT $CFLAGS" LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS" fi - - if [ "$enable_universal" = "0" ] && [ $cc_version -gt 40 ]; then - # Only set the min version when not doing an universal build. - # Universal builds set the version elsewhere. - if [ "$cpu_type" = "64" ]; then - CFLAGS="$CFLAGS -mmacosx-version-min=10.5" - else - gcc_cpu=`$cc_host -dumpmachine` - if [ "`echo $gcc_cpu | cut -c 1-3`" = "ppc" -o "`echo $gcc_cpu | cut -c 1-7`" = "powerpc" ]; then - # PowerPC build can run on 10.3 - CFLAGS="$CFLAGS -mmacosx-version-min=10.3" - else - # Intel is only available starting from 10.4 - CFLAGS="$CFLAGS -mmacosx-version-min=10.4" - fi - fi - fi fi if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then @@ -1780,7 +1773,7 @@ make_cflags_and_ldflags() { # GCC 4.0+ doesn't like the DirectX includes (gives tons of # warnings on it we won't be able to fix). For now just # suppress those warnings. - if [ $cc_version -ge 40 ]; then + if [ $cc_version -ge 400 ]; then CFLAGS="$CFLAGS -Wno-non-virtual-dtor" fi fi diff --git a/configure b/configure index d5c343559c..9abb76d981 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #!/bin/sh -# $Id: configure 27588 2016-05-29 18:56:42Z frosch $ +# $Id: configure 27562 2016-05-12 17:24:06Z rubidium $ # This file is part of OpenTTD. # OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. diff --git a/known-bugs.txt b/known-bugs.txt index f5ae731018..50b02df41d 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2016-07-01 -Release version: 1.6.1 +Last updated: 2017-03-11 +Release version: 1.7.0-RC1 ------------------------------------------------------------------------ diff --git a/media/baseset/orig_dos.obg b/media/baseset/orig_dos.obg index 059b014c34..6b1b7058ca 100644 --- a/media/baseset/orig_dos.obg +++ b/media/baseset/orig_dos.obg @@ -1,4 +1,4 @@ -; $Id: orig_dos.obg 25205 2013-04-24 20:30:02Z frosch $ +; $Id: orig_dos.obg 27730 2017-01-14 15:48:19Z frosch $ ; ; This represents the original graphics as on the non-German Transport ; Tycoon Deluxe DOS CD. @@ -11,21 +11,21 @@ palette = DOS !! description STR_BASEGRAPHICS_DOS_DESCRIPTION [files] -base = TRG1.GRF -logos = TRGI.GRF -arctic = TRGC.GRF -tropical = TRGH.GRF -toyland = TRGT.GRF -extra = OPENTTD.GRF +base = TRG1.GRF +logos = TRGI.GRF +arctic = TRGC.GRF +tropical = TRGH.GRF +toyland = TRGT.GRF +extra = ORIG_EXTRA.GRF [md5s] -TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 -TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 -TRGC.GRF = ed446637e034104c5559b32c18afe78d -TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 -TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 -OPENTTD.GRF = +TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 +TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 +TRGC.GRF = ed446637e034104c5559b32c18afe78d +TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 +TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 +ORIG_EXTRA.GRF = [origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. -OPENTTD.GRF = This file was part of your OpenTTD installation. +default = You can find it on your Transport Tycoon Deluxe CD-ROM. +ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. diff --git a/media/baseset/orig_dos_de.obg b/media/baseset/orig_dos_de.obg index 53f8b4b289..8f26ea5a21 100644 --- a/media/baseset/orig_dos_de.obg +++ b/media/baseset/orig_dos_de.obg @@ -1,4 +1,4 @@ -; $Id: orig_dos_de.obg 25205 2013-04-24 20:30:02Z frosch $ +; $Id: orig_dos_de.obg 27730 2017-01-14 15:48:19Z frosch $ ; ; This represents the original graphics as on the German Transport ; Tycoon Deluxe DOS CD. It contains one broken sprite. @@ -11,21 +11,21 @@ palette = DOS !! description STR_BASEGRAPHICS_DOS_DE_DESCRIPTION [files] -base = TRG1.GRF -logos = TRGI.GRF -arctic = TRGC.GRF -tropical = TRGH.GRF -toyland = TRGT.GRF -extra = OPENTTD.GRF +base = TRG1.GRF +logos = TRGI.GRF +arctic = TRGC.GRF +tropical = TRGH.GRF +toyland = TRGT.GRF +extra = ORIG_EXTRA.GRF [md5s] -TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 -TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 -TRGC.GRF = ed446637e034104c5559b32c18afe78d -TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 -TRGT.GRF = fcde1d7e8a74197d72a62695884b909e -OPENTTD.GRF = +TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 +TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 +TRGC.GRF = ed446637e034104c5559b32c18afe78d +TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 +TRGT.GRF = fcde1d7e8a74197d72a62695884b909e +ORIG_EXTRA.GRF = [origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. -OPENTTD.GRF = This file was part of your OpenTTD installation. +default = You can find it on your Transport Tycoon Deluxe CD-ROM. +ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. diff --git a/media/baseset/orig_win.obg b/media/baseset/orig_win.obg index 1afe0a4789..73753b9553 100644 --- a/media/baseset/orig_win.obg +++ b/media/baseset/orig_win.obg @@ -1,4 +1,4 @@ -; $Id: orig_win.obg 25205 2013-04-24 20:30:02Z frosch $ +; $Id: orig_win.obg 27730 2017-01-14 15:48:19Z frosch $ ; ; This represents the original graphics as on the Transport ; Tycoon Deluxe for Windows CD. @@ -11,21 +11,21 @@ palette = Windows !! description STR_BASEGRAPHICS_WIN_DESCRIPTION [files] -base = TRG1R.GRF -logos = TRGIR.GRF -arctic = TRGCR.GRF -tropical = TRGHR.GRF -toyland = TRGTR.GRF -extra = OPENTTD.GRF +base = TRG1R.GRF +logos = TRGIR.GRF +arctic = TRGCR.GRF +tropical = TRGHR.GRF +toyland = TRGTR.GRF +extra = ORIG_EXTRA.GRF [md5s] -TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358 -TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 -TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b -TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 -TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 -OPENTTD.GRF = +TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358 +TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 +TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b +TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 +TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 +ORIG_EXTRA.GRF = [origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. -OPENTTD.GRF = This file was part of your OpenTTD installation. +default = You can find it on your Transport Tycoon Deluxe CD-ROM. +ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. diff --git a/media/extra_grf/canals.nfo b/media/extra_grf/canals.nfo index 8da974e51a..4310b58a3f 100644 --- a/media/extra_grf/canals.nfo +++ b/media/extra_grf/canals.nfo @@ -1,12 +1,12 @@ // -// $Id: canals.nfo 23982 2012-02-24 22:29:44Z rubidium $ +// $Id: canals.nfo 27731 2017-01-14 18:00:02Z frosch $ // // This file is part of OpenTTD. // OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. // OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . // - -1 * 0 0C "Canal graphics by George / PaulC" + -1 * 0 0C "Canal graphics by George" -1 * 3 05 08 41 // Canal slopes -1 sprites/canal_locks.png 8bpp 66 8 64 23 -31 0 normal @@ -77,95 +77,3 @@ -1 sprites/canals.png 8bpp 446 10 24 16 -11 -6 normal // Canal icon -1 sprites/canal_locks.png 8bpp 50 232 20 20 0 0 normal - -// Differentiation for the climates starts here - -// Canal edges (arctic snowy) - -1 * 4 01 05 01 \b12 - -1 sprites/canals.png 8bpp 30 40 45 22 -11 -1 normal - -1 sprites/canals.png 8bpp 94 40 41 21 -8 10 normal - -1 sprites/canals.png 8bpp 142 40 42 21 -31 10 normal - -1 sprites/canals.png 8bpp 190 40 43 22 -31 -1 normal - -1 sprites/canals.png 8bpp 238 40 22 22 11 4 normal - -1 sprites/canals.png 8bpp 270 40 24 16 -11 15 normal - -1 sprites/canals.png 8bpp 302 40 23 23 -31 4 normal - -1 sprites/canals.png 8bpp 334 40 24 18 -11 -1 normal - -1 sprites/canals.png 8bpp 366 40 12 11 21 10 normal - -1 sprites/canals.png 8bpp 398 40 19 10 -8 21 normal - -1 sprites/canals.png 8bpp 430 40 11 10 -31 10 normal - -1 sprites/canals.png 8bpp 446 40 24 16 -11 -6 normal - -1 * 7 02 05 10 01 00 00 00 - -// Canal edges (arctic normal) - -1 * 4 01 05 01 \b12 - -1 sprites/canals.png 8bpp 30 70 45 22 -11 -1 normal - -1 sprites/canals.png 8bpp 94 70 41 21 -8 10 normal - -1 sprites/canals.png 8bpp 142 70 42 21 -31 10 normal - -1 sprites/canals.png 8bpp 190 70 43 22 -31 -1 normal - -1 sprites/canals.png 8bpp 238 70 22 22 11 4 normal - -1 sprites/canals.png 8bpp 270 70 24 16 -11 15 normal - -1 sprites/canals.png 8bpp 302 70 23 23 -31 4 normal - -1 sprites/canals.png 8bpp 334 70 24 18 -11 -1 normal - -1 sprites/canals.png 8bpp 366 70 12 11 21 10 normal - -1 sprites/canals.png 8bpp 398 70 19 10 -8 21 normal - -1 sprites/canals.png 8bpp 430 70 11 10 -31 10 normal - -1 sprites/canals.png 8bpp 446 70 24 16 -11 -6 normal - -1 * 7 02 05 11 01 00 00 00 -// Choose the right arctic canal edges - -1 * 14 02 05 12 81 81 00 FF 01 10 00 04 04 11 00 - -1 * 6 07 83 01 \7! 01 01 - -1 * 7 03 05 01 02 00 12 00 - -// Canal edges (tropic desert) - -1 * 4 01 05 01 \b12 - -1 sprites/canals.png 8bpp 30 100 45 22 -11 -1 normal - -1 sprites/canals.png 8bpp 94 100 41 21 -8 10 normal - -1 sprites/canals.png 8bpp 142 100 42 21 -31 10 normal - -1 sprites/canals.png 8bpp 190 100 43 22 -31 -1 normal - -1 sprites/canals.png 8bpp 238 100 22 22 11 4 normal - -1 sprites/canals.png 8bpp 270 100 24 16 -11 15 normal - -1 sprites/canals.png 8bpp 302 100 23 23 -31 4 normal - -1 sprites/canals.png 8bpp 334 100 24 18 -11 -1 normal - -1 sprites/canals.png 8bpp 366 100 12 11 21 10 normal - -1 sprites/canals.png 8bpp 398 100 19 10 -8 21 normal - -1 sprites/canals.png 8bpp 430 100 11 10 -31 10 normal - -1 sprites/canals.png 8bpp 446 100 24 16 -11 -6 normal - -1 * 7 02 05 13 01 00 00 00 - -// Canal edges (tropic rainforest) - -1 * 4 01 05 01 \b12 - -1 sprites/canals.png 8bpp 30 130 45 22 -11 -1 normal - -1 sprites/canals.png 8bpp 94 130 41 21 -8 10 normal - -1 sprites/canals.png 8bpp 142 130 42 21 -31 10 normal - -1 sprites/canals.png 8bpp 190 130 43 22 -31 -1 normal - -1 sprites/canals.png 8bpp 238 130 22 22 11 4 normal - -1 sprites/canals.png 8bpp 270 130 24 16 -11 15 normal - -1 sprites/canals.png 8bpp 302 130 23 23 -31 4 normal - -1 sprites/canals.png 8bpp 334 130 24 18 -11 -1 normal - -1 sprites/canals.png 8bpp 366 130 12 11 21 10 normal - -1 sprites/canals.png 8bpp 398 130 19 10 -8 21 normal - -1 sprites/canals.png 8bpp 430 130 11 10 -31 10 normal - -1 sprites/canals.png 8bpp 446 130 24 16 -11 -6 normal - -1 * 7 02 05 14 01 00 00 00 -// Choose the right tropic canal edges - -1 * 14 02 05 15 81 81 00 FF 01 13 00 01 01 14 00 - -1 * 6 07 83 01 \7! 02 01 - -1 * 7 03 05 01 02 00 15 00 - -// Canal edges (toyland) - -1 * 4 01 05 01 \b12 - -1 sprites/canals.png 8bpp 30 160 45 22 -11 -1 normal - -1 sprites/canals.png 8bpp 94 160 41 21 -8 10 normal - -1 sprites/canals.png 8bpp 142 160 42 21 -31 10 normal - -1 sprites/canals.png 8bpp 190 160 43 22 -31 -1 normal - -1 sprites/canals.png 8bpp 238 160 22 22 11 4 normal - -1 sprites/canals.png 8bpp 270 160 24 16 -11 15 normal - -1 sprites/canals.png 8bpp 302 160 23 23 -31 4 normal - -1 sprites/canals.png 8bpp 334 160 24 18 -11 -1 normal - -1 sprites/canals.png 8bpp 366 160 12 11 21 10 normal - -1 sprites/canals.png 8bpp 398 160 19 10 -8 21 normal - -1 sprites/canals.png 8bpp 430 160 11 10 -31 10 normal - -1 sprites/canals.png 8bpp 446 160 24 16 -11 -6 normal - -1 * 7 02 05 16 01 00 00 00 - -1 * 6 07 83 01 \7! 03 01 - -1 * 7 03 05 01 02 00 16 00 diff --git a/media/extra_grf/openttd.nfo b/media/extra_grf/openttd.nfo index 74eadb41ef..e0b526795c 100644 --- a/media/extra_grf/openttd.nfo +++ b/media/extra_grf/openttd.nfo @@ -2,7 +2,7 @@ // (Info version 32) // Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags // -// $Id: openttd.nfo 26869 2014-09-21 07:57:45Z rubidium $ +// $Id: openttd.nfo 27730 2017-01-14 15:48:19Z frosch $ // // 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. @@ -60,10 +60,11 @@ 00 // GRF ID, must start with FF so it gets ignored - -1 * 0 08 08 FF "OTT" +//@@WARNING DISABLE 101 + -1 * 0 08 08 FF FF FF FE // Name of the GRF - "OpenTTD's base graphics " 00 + "OpenTTD's default and fallback extra graphics" 00 // Description of the GRF. "License: GNU General Public License version 2" 0D @@ -86,7 +87,6 @@ #include "canals.nfo" #include "oneway.nfo" #include "tramtracks.nfo" -#include "shore.nfo" #include "sloped_tracks.nfo" #include "airports.nfo" #include "roadstops.nfo" @@ -97,11 +97,5 @@ #include "airport_preview.nfo" #include "chars.nfo" #include "mono.nfo" -#include "fix_graphics.nfo" -#include "rivers/rapids.nfo" -#include "rivers/temperate.nfo" -#include "rivers/arctic.nfo" -#include "rivers/tropic.nfo" -#include "rivers/toyland.nfo" #include "tunnel_portals.nfo" #include "palette.nfo" diff --git a/os/debian/changelog b/os/debian/changelog index c8cf30794b..3e78e42f6f 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,9 @@ +openttd (1.7.0~RC1-0) unstable; urgency=low + + * New upstream release 1.7.0-RC1 + + -- OpenTTD Sat, 11 Mar 2017 22:30:00 +0100 + openttd (1.6.1-0) unstable; urgency=low * New upstream release 1.6.1 diff --git a/os/debian/copyright b/os/debian/copyright index be573b4825..ab62f66a42 100644 --- a/os/debian/copyright +++ b/os/debian/copyright @@ -5,7 +5,7 @@ Source: http://www.openttd.org Files: * -Copyright: © 2004-2012 Ludvig Strigeous and others. +Copyright: © 2004-2017 Ludvig Strigeous and others. License: GPL-2.0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2.0 as diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd index 6fe6dace66..de01554a07 100644 --- a/os/os2/installer/make_installer.cmd +++ b/os/os2/installer/make_installer.cmd @@ -1,6 +1,6 @@ @echo off -set OPENTTD_VERSION=1.6.0 +set OPENTTD_VERSION=1.7.0 set OPENSFX_VERSION=0.8.0 set NOSOUND_VERSION=0.8.0 set OPENGFX_VERSION=1.2.0 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 5ad5a53cab..2dfa1a3ba3 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -2,7 +2,7 @@ # spec file for package openttd # # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. -# Copyright (c) 2007-2012 The OpenTTD developers +# Copyright (c) 2007-2017 The OpenTTD developers # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.6.beta1 +Version: 1.7.beta1 Release: 0 -%define srcver 1.6.0-beta1 +%define srcver 1.7.0-beta1 Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe License: GPL-2.0 Group: Amusements/Games/Strategy/Other diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index 74d307878e..5696675e4a 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -1,9 +1,9 @@ # Version numbers to update !define APPV_MAJOR 1 -!define APPV_MINOR 6 -!define APPV_MAINT 1 -!define APPV_BUILD 1 -!define APPV_EXTRA "" +!define APPV_MINOR 7 +!define APPV_MAINT 0 +!define APPV_BUILD 0 +!define APPV_EXTRA "-RC1" !define APPNAME "OpenTTD" ; Define application name !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version @@ -408,6 +408,7 @@ Section "Uninstall" ; Baseset files Delete "$INSTDIR\baseset\opntitle.dat" Delete "$INSTDIR\baseset\openttd.grf" + Delete "$INSTDIR\baseset\orig_extra.grf" Delete "$INSTDIR\baseset\orig_win.obg" Delete "$INSTDIR\baseset\orig_dos.obg" Delete "$INSTDIR\baseset\orig_dos_de.obg" diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj index d936b5fbe4..59e087ee70 100644 --- a/projects/openttd_vs100.vcxproj +++ b/projects/openttd_vs100.vcxproj @@ -102,7 +102,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -204,7 +204,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded diff --git a/projects/openttd_vs100.vcxproj.in b/projects/openttd_vs100.vcxproj.in index bf5ce7925c..c6b16455a9 100644 --- a/projects/openttd_vs100.vcxproj.in +++ b/projects/openttd_vs100.vcxproj.in @@ -102,7 +102,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -204,7 +204,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 950a8b09f4..8d8b980649 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -105,7 +105,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -214,7 +214,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index a70135108b..76b16b5109 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -105,7 +105,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -214,7 +214,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj index f4317c2ac5..70dcab226a 100644 --- a/projects/openttd_vs80.vcproj +++ b/projects/openttd_vs80.vcproj @@ -52,7 +52,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" @@ -257,7 +257,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" diff --git a/projects/openttd_vs80.vcproj.in b/projects/openttd_vs80.vcproj.in index 855cc3eadb..587871dca0 100644 --- a/projects/openttd_vs80.vcproj.in +++ b/projects/openttd_vs80.vcproj.in @@ -52,7 +52,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" @@ -257,7 +257,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj index 8a03348926..dd722d085d 100644 --- a/projects/openttd_vs90.vcproj +++ b/projects/openttd_vs90.vcproj @@ -53,7 +53,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" @@ -255,7 +255,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" diff --git a/projects/openttd_vs90.vcproj.in b/projects/openttd_vs90.vcproj.in index c58fa74417..ce90ab5f29 100644 --- a/projects/openttd_vs90.vcproj.in +++ b/projects/openttd_vs90.vcproj.in @@ -53,7 +53,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" @@ -255,7 +255,7 @@ FavorSizeOrSpeed="2" OmitFramePointers="true" AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT" StringPooling="true" ExceptionHandling="1" RuntimeLibrary="0" diff --git a/readme.txt b/readme.txt index e378bd5d22..c9b659bfd8 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,5 @@ -Last updated: 2016-07-01 -Release version: 1.6.1 +Last updated: 2017-03-11 +Release version: 1.7.0-RC1 ------------------------------------------------------------------------ diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 72e68a1517..44602223b4 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: ai_gui.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: ai_gui.cpp 27581 2016-05-22 12:00:36Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 24f16fe817..7df34cdf39 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -1,4 +1,4 @@ -/* $Id: ai_info.cpp 27193 2015-03-17 20:45:57Z frosch $ */ +/* $Id: ai_info.cpp 27518 2016-03-01 20:00:22Z frosch $ */ /* * This file is part of OpenTTD. @@ -28,7 +28,7 @@ static bool CheckAPIVersion(const char *api_version) { return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || - strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0; + strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0; } #if defined(WIN32) diff --git a/src/aircraft.h b/src/aircraft.h index 43466c4601..8743daaf8c 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -1,4 +1,4 @@ -/* $Id: aircraft.h 26866 2014-09-21 06:35:34Z rubidium $ */ +/* $Id: aircraft.h 27666 2016-10-16 14:57:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -93,7 +93,7 @@ struct Aircraft FINAL : public SpecializedVehicle { void UpdateDeltaXY(Direction direction); ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_INC : EXPENSES_AIRCRAFT_RUN; } bool IsPrimaryVehicle() const { return this->IsNormalAircraft(); } - SpriteID GetImage(Direction direction, EngineImageType image_type) const; + void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const; int GetDisplaySpeed() const { return this->cur_speed; } int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed; } int GetSpeedOldUnits() const { return this->vcache.cached_max_speed * 10 / 128; } @@ -141,7 +141,7 @@ struct Aircraft FINAL : public SpecializedVehicle { */ #define FOR_ALL_AIRCRAFT(var) FOR_ALL_VEHICLES_OF_TYPE(Aircraft, var) -SpriteID GetRotorImage(const Aircraft *v, EngineImageType image_type); +void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result); Station *GetTargetAirportIfValid(const Aircraft *v); diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index faf11a818d..a67035c433 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: aircraft_cmd.cpp 27422 2015-10-30 16:20:00Z frosch $ */ +/* $Id: aircraft_cmd.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -152,64 +152,69 @@ static StationID FindNearestHangar(const Aircraft *v) return index; } -SpriteID Aircraft::GetImage(Direction direction, EngineImageType image_type) const +void Aircraft::GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const { uint8 spritenum = this->spritenum; if (is_custom_sprite(spritenum)) { - SpriteID sprite = GetCustomVehicleSprite(this, direction, image_type); - if (sprite != 0) return sprite; + GetCustomVehicleSprite(this, direction, image_type, result); + if (result->IsValid()) return; spritenum = this->GetEngine()->original_image_index; } assert(IsValidImageIndex(spritenum)); - return direction + _aircraft_sprite[spritenum]; + result->Set(direction + _aircraft_sprite[spritenum]); } -SpriteID GetRotorImage(const Aircraft *v, EngineImageType image_type) +void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result) { assert(v->subtype == AIR_HELICOPTER); const Aircraft *w = v->Next()->Next(); if (is_custom_sprite(v->spritenum)) { - SpriteID sprite = GetCustomRotorSprite(v, false, image_type); - if (sprite != 0) return sprite; + GetCustomRotorSprite(v, false, image_type, result); + if (result->IsValid()) return; } /* Return standard rotor sprites if there are no custom sprites for this helicopter */ - return SPR_ROTOR_STOPPED + w->state; + result->Set(SPR_ROTOR_STOPPED + w->state); } -static SpriteID GetAircraftIcon(EngineID engine, EngineImageType image_type) +static void GetAircraftIcon(EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result) { const Engine *e = Engine::Get(engine); uint8 spritenum = e->u.air.image_index; if (is_custom_sprite(spritenum)) { - SpriteID sprite = GetCustomVehicleIcon(engine, DIR_W, image_type); - if (sprite != 0) return sprite; + GetCustomVehicleIcon(engine, DIR_W, image_type, result); + if (result->IsValid()) return; spritenum = e->original_image_index; } assert(IsValidImageIndex(spritenum)); - return DIR_W + _aircraft_sprite[spritenum]; + result->Set(DIR_W + _aircraft_sprite[spritenum]); } void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) { - SpriteID sprite = GetAircraftIcon(engine, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + GetAircraftIcon(engine, image_type, &seq); + + Rect rect; + seq.GetBounds(&rect); preferred_x = Clamp(preferred_x, - left - UnScaleGUI(real_sprite->x_offs), - right - UnScaleGUI(real_sprite->width) - UnScaleGUI(real_sprite->x_offs)); - DrawSprite(sprite, pal, preferred_x, y); + left - UnScaleGUI(rect.left), + right - UnScaleGUI(rect.right)); + + seq.Draw(preferred_x, y, pal, pal == PALETTE_CRASH); if (!(AircraftVehInfo(engine)->subtype & AIR_CTOL)) { - SpriteID rotor_sprite = GetCustomRotorIcon(engine, image_type); - if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED; - DrawSprite(rotor_sprite, PAL_NONE, preferred_x, y - ScaleGUITrad(5)); + VehicleSpriteSeq rotor_seq; + GetCustomRotorIcon(engine, image_type, &rotor_seq); + if (!rotor_seq.IsValid()) rotor_seq.Set(SPR_ROTOR_STOPPED); + rotor_seq.Draw(preferred_x, y - ScaleGUITrad(5), PAL_NONE, false); } } @@ -224,12 +229,16 @@ void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID en */ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type) { - const Sprite *spr = GetSprite(GetAircraftIcon(engine, image_type), ST_NORMAL); + VehicleSpriteSeq seq; + GetAircraftIcon(engine, image_type, &seq); - width = UnScaleGUI(spr->width); - height = UnScaleGUI(spr->height); - xoffs = UnScaleGUI(spr->x_offs); - yoffs = UnScaleGUI(spr->y_offs); + Rect rect; + seq.GetBounds(&rect); + + width = UnScaleGUI(rect.right - rect.left + 1); + height = UnScaleGUI(rect.bottom - rect.top + 1); + xoffs = UnScaleGUI(rect.left); + yoffs = UnScaleGUI(rect.top); } /** @@ -317,7 +326,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * v->date_of_last_service = _date; v->build_year = u->build_year = _cur_year; - v->cur_image = u->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); + u->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); u->random_bits = VehicleRandomBits(); @@ -349,7 +359,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE; w->spritenum = 0xFF; w->subtype = AIR_ROTOR; - w->cur_image = SPR_ROTOR_STOPPED; + w->sprite_seq.Set(SPR_ROTOR_STOPPED); w->random_bits = VehicleRandomBits(); /* Use rotor's air.state to store the rotor animation frame */ w->state = HRS_ROTOR_STOPPED; @@ -468,21 +478,21 @@ static void HelicopterTickHandler(Aircraft *v) int tick = ++u->tick_counter; int spd = u->cur_speed >> 4; - SpriteID img; + VehicleSpriteSeq seq; if (spd == 0) { u->state = HRS_ROTOR_STOPPED; - img = GetRotorImage(v, EIT_ON_MAP); - if (u->cur_image == img) return; + GetRotorImage(v, EIT_ON_MAP, &seq); + if (u->sprite_seq == seq) return; } else if (tick >= spd) { u->tick_counter = 0; u->state++; if (u->state > HRS_ROTOR_MOVING_3) u->state = HRS_ROTOR_MOVING_1; - img = GetRotorImage(v, EIT_ON_MAP); + GetRotorImage(v, EIT_ON_MAP, &seq); } else { return; } - u->cur_image = img; + u->sprite_seq = seq; u->UpdatePositionAndViewport(); } @@ -502,7 +512,9 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z) v->UpdatePosition(); v->UpdateViewport(true, false); - if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v, EIT_ON_MAP); + if (v->subtype == AIR_HELICOPTER) { + GetRotorImage(v, EIT_ON_MAP, &v->Next()->Next()->sprite_seq); + } Aircraft *u = v->Next(); @@ -513,7 +525,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z) safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE); u->z_pos = GetSlopePixelZ(safe_x, safe_y); - u->cur_image = v->cur_image; + u->sprite_seq.CopyWithoutPalette(v->sprite_seq); // the shadow is never coloured u->UpdatePositionAndViewport(); @@ -1237,7 +1249,9 @@ void Aircraft::MarkDirty() { this->colourmap = PAL_NONE; this->UpdateViewport(true, false); - if (this->subtype == AIR_HELICOPTER) this->Next()->Next()->cur_image = GetRotorImage(this, EIT_ON_MAP); + if (this->subtype == AIR_HELICOPTER) { + GetRotorImage(this, EIT_ON_MAP, &this->Next()->Next()->sprite_seq); + } } diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp index 358710b99e..e92bfa6ab4 100644 --- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: aircraft_gui.cpp 27134 2015-02-01 20:54:24Z frosch $ */ +/* $Id: aircraft_gui.cpp 27689 2016-12-10 14:33:58Z frosch $ */ /* * This file is part of OpenTTD. @@ -83,11 +83,14 @@ void DrawAircraftImage(const Vehicle *v, int left, int right, int y, VehicleID s { bool rtl = _current_text_dir == TD_RTL; - SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + v->GetImage(rtl ? DIR_E : DIR_W, image_type, &seq); - int width = UnScaleGUI(real_sprite->width); - int x_offs = UnScaleGUI(real_sprite->x_offs); + Rect rect; + seq.GetBounds(&rect); + + int width = UnScaleGUI(rect.right - rect.left + 1); + int x_offs = UnScaleGUI(rect.left); int x = rtl ? right - width - x_offs : left - x_offs; bool helicopter = v->subtype == AIR_HELICOPTER; @@ -95,17 +98,18 @@ void DrawAircraftImage(const Vehicle *v, int left, int right, int y, VehicleID s int heli_offs = 0; PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); - DrawSprite(sprite, pal, x, y + y_offs); + seq.Draw(x, y + y_offs, pal, (v->vehstatus & VS_CRASHED) != 0); if (helicopter) { const Aircraft *a = Aircraft::From(v); - SpriteID rotor_sprite = GetCustomRotorSprite(a, true, image_type); - if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED; + VehicleSpriteSeq rotor_seq; + GetCustomRotorSprite(a, true, image_type, &rotor_seq); + if (!rotor_seq.IsValid()) rotor_seq.Set(SPR_ROTOR_STOPPED); heli_offs = ScaleGUITrad(5); - DrawSprite(rotor_sprite, PAL_NONE, x, y + y_offs - heli_offs); + rotor_seq.Draw(x, y + y_offs - heli_offs, PAL_NONE, false); } if (v->index == selection) { x += x_offs; - y += UnScaleGUI(real_sprite->y_offs) + y_offs - heli_offs; - DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(real_sprite->height) + heli_offs + 1, COLOUR_WHITE, FR_BORDERONLY); + y += UnScaleGUI(rect.top) + y_offs - heli_offs; + DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(rect.bottom - rect.top + 1) + heli_offs + 1, COLOUR_WHITE, FR_BORDERONLY); } } diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp index 3d5b157f59..c8323370eb 100644 --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -1,4 +1,4 @@ -/* $Id: articulated_vehicles.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: articulated_vehicles.cpp 27666 2016-10-16 14:57:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -441,7 +441,7 @@ void AddArticulatedParts(Vehicle *first) v->max_age = 0; v->engine_type = engine_type; v->value = 0; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); if (flip_image) v->spritenum++; diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index f6e3b17559..06cb8267e8 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: autoreplace_gui.cpp 26960 2014-10-05 11:20:02Z peter1138 $ */ +/* $Id: autoreplace_gui.cpp 27683 2016-12-08 20:21:39Z frosch $ */ /* * This file is part of OpenTTD. @@ -87,7 +87,7 @@ class ReplaceVehicleWindow : public Window { byte sort_criteria; ///< Criteria of sorting vehicles. bool descending_sort_order; ///< Order of sorting vehicles. bool show_hidden_engines; ///< Whether to show the hidden engines. - RailType sel_railtype; ///< Type of rail tracks selected. + RailType sel_railtype; ///< Type of rail tracks selected. #INVALID_RAILTYPE to show all. Scrollbar *vscroll[2]; /** @@ -104,7 +104,7 @@ class ReplaceVehicleWindow : public Window { /* Ensure that the wagon/engine selection fits the engine. */ if ((rvi->railveh_type == RAILVEH_WAGON) == show_engines) return false; - if (draw_left && show_engines) { + if (draw_left && this->sel_railtype != INVALID_RAILTYPE) { /* Ensure that the railtype is specific to the selected one */ if (rvi->railtype != this->sel_railtype) return false; } @@ -211,24 +211,7 @@ class ReplaceVehicleWindow : public Window { public: ReplaceVehicleWindow(WindowDesc *desc, VehicleType vehicletype, GroupID id_g) : Window(desc) { - if (vehicletype == VEH_TRAIN) { - /* For rail vehicles find the most used vehicle type, which is usually - * better than 'just' the first/previous vehicle type. */ - uint type_count[RAILTYPE_END]; - memset(type_count, 0, sizeof(type_count)); - - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { - if (e->u.rail.railveh_type == RAILVEH_WAGON) continue; - type_count[e->u.rail.railtype] += GetGroupNumEngines(_local_company, id_g, e->index); - } - - this->sel_railtype = RAILTYPE_BEGIN; - for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) { - if (type_count[this->sel_railtype] < type_count[rt]) this->sel_railtype = rt; - } - } - + this->sel_railtype = INVALID_RAILTYPE; this->replace_engines = true; // start with locomotives (all other vehicles will not read this bool) this->engines[0].ForceRebuild(); this->engines[1].ForceRebuild(); @@ -288,12 +271,9 @@ public: break; } - case WID_RV_TRAIN_ENGINEWAGON_TOGGLE: { - StringID str = this->GetWidget(widget)->widget_data; - SetDParam(0, STR_REPLACE_ENGINES); - Dimension d = GetStringBoundingBox(str); - SetDParam(0, STR_REPLACE_WAGONS); - d = maxdim(d, GetStringBoundingBox(str)); + case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: { + Dimension d = GetStringBoundingBox(STR_REPLACE_ENGINES); + d = maxdim(d, GetStringBoundingBox(STR_REPLACE_WAGONS)); d.width += padding.width; d.height += padding.height; *size = maxdim(*size, d); @@ -367,7 +347,7 @@ public: break; } - case WID_RV_TRAIN_ENGINEWAGON_TOGGLE: + case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: SetDParam(0, this->replace_engines ? STR_REPLACE_ENGINES : STR_REPLACE_WAGONS); break; } @@ -432,12 +412,8 @@ public: this->SetWidgetDisabledState(WID_RV_STOP_REPLACE, this->sel_engine[0] == INVALID_ENGINE || !EngineHasReplacementForCompany(c, this->sel_engine[0], this->sel_group)); if (this->window_number == VEH_TRAIN) { - /* sets the colour of that art thing */ - this->GetWidget(WID_RV_TRAIN_FLUFF_LEFT)->colour = _company_colours[_local_company]; - this->GetWidget(WID_RV_TRAIN_FLUFF_RIGHT)->colour = _company_colours[_local_company]; - /* Show the selected railtype in the pulldown menu */ - this->GetWidget(WID_RV_TRAIN_RAILTYPE_DROPDOWN)->widget_data = GetRailTypeInfo(sel_railtype)->strings.replace_text; + this->GetWidget(WID_RV_TRAIN_RAILTYPE_DROPDOWN)->widget_data = sel_railtype == INVALID_RAILTYPE ? STR_REPLACE_ALL_RAILTYPE : GetRailTypeInfo(sel_railtype)->strings.replace_text; } this->DrawWidgets(); @@ -483,15 +459,16 @@ public: DisplayVehicleSortDropDown(this, static_cast(this->window_number), this->sort_criteria, WID_RV_SORT_DROPDOWN); break; - case WID_RV_TRAIN_ENGINEWAGON_TOGGLE: - this->replace_engines = !(this->replace_engines); - this->engines[0].ForceRebuild(); - this->reset_sel_engine = true; - this->SetDirty(); + case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: { + DropDownList *list = new DropDownList(); + *list->Append() = new DropDownListStringItem(STR_REPLACE_ENGINES, 1, false); + *list->Append() = new DropDownListStringItem(STR_REPLACE_WAGONS, 0, false); + ShowDropDownList(this, list, this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN); break; + } case WID_RV_TRAIN_RAILTYPE_DROPDOWN: // Railtype selection dropdown menu - ShowDropDownList(this, GetRailTypeDropDownList(true), sel_railtype, WID_RV_TRAIN_RAILTYPE_DROPDOWN); + ShowDropDownList(this, GetRailTypeDropDownList(true, true), sel_railtype, WID_RV_TRAIN_RAILTYPE_DROPDOWN); break; case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: // toggle renew_keep_length @@ -566,6 +543,14 @@ public: break; } + case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: { + this->replace_engines = index != 0; + this->engines[0].ForceRebuild(); + this->reset_sel_engine = true; + this->SetDirty(); + break; + } + case WID_RV_START_REPLACE: this->ReplaceClick_StartReplace(index != 0); break; @@ -611,7 +596,13 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = { EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), + EndContainer(), NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 1), @@ -631,20 +622,16 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(), + NWidget(NWID_VERTICAL), + NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_WAGONREMOVE_TOGGLE), SetMinimalSize(138, 12), SetDataTip(STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP), SetFill(1, 0), SetResize(1, 0), + EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_PUSHBUTTON_DROPDOWN, COLOUR_GREY, WID_RV_START_REPLACE), SetMinimalSize(139, 12), SetDataTip(STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON), NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_INFO_TAB), SetMinimalSize(167, 12), SetDataTip(0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB), SetResize(1, 0), EndContainer(), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_STOP_REPLACE), SetMinimalSize(150, 12), SetDataTip(STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_TOGGLE), SetMinimalSize(139, 12), SetDataTip(STR_REPLACE_ENGINE_WAGON_SELECT, STR_REPLACE_ENGINE_WAGON_SELECT_HELP), - NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_TRAIN_FLUFF_LEFT), SetMinimalSize(15, 12), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetResize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_TRAIN_FLUFF_RIGHT), SetMinimalSize(16, 12), EndContainer(), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_WAGONREMOVE_TOGGLE), SetMinimalSize(138, 12), SetDataTip(STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp index 9bdda5a0b3..02c99c9d4d 100644 --- a/src/blitter/32bpp_anim.cpp +++ b/src/blitter/32bpp_anim.cpp @@ -1,4 +1,4 @@ -/* $Id: 32bpp_anim.cpp 27590 2016-05-29 19:01:50Z frosch $ */ +/* $Id: 32bpp_anim.cpp 27575 2016-05-22 10:28:57Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp index 18470a4b54..0d10637549 100644 --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -1,4 +1,4 @@ -/* $Id: 32bpp_anim.hpp 27590 2016-05-29 19:01:50Z frosch $ */ +/* $Id: 32bpp_anim.hpp 27774 2017-03-11 12:52:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -27,7 +27,9 @@ public: anim_buf(NULL), anim_buf_width(0), anim_buf_height(0) - {} + { + this->palette = _cur_palette; + } ~Blitter_32bppAnim(); diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 6800dae4fb..30b9862313 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: clear_cmd.cpp 27200 2015-03-20 19:27:15Z frosch $ */ +/* $Id: clear_cmd.cpp 27657 2016-10-02 13:41:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -56,7 +56,7 @@ void DrawHillyLandTile(const TileInfo *ti) if (ti->tileh != SLOPE_FLAT) { DrawGroundSprite(SPR_FLAT_ROUGH_LAND + SlopeToSpriteOffset(ti->tileh), PAL_NONE); } else { - DrawGroundSprite(_landscape_clear_sprites_rough[GB(ti->x ^ ti->y, 4, 3)], PAL_NONE); + DrawGroundSprite(_landscape_clear_sprites_rough[GB(TileHash(ti->x, ti->y), 0, 3)], PAL_NONE); } } diff --git a/src/command_func.h b/src/command_func.h index 70b38af43e..c7066cbc4f 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -1,4 +1,4 @@ -/* $Id: command_func.h 24139 2012-04-17 19:44:16Z michi_cc $ */ +/* $Id: command_func.h 27571 2016-05-22 10:07:48Z frosch $ */ /* * This file is part of OpenTTD. @@ -81,7 +81,7 @@ CommandCallback CcBuildBridge; /* dock_gui.cpp */ CommandCallback CcBuildDocks; -CommandCallback CcBuildCanal; +CommandCallback CcPlaySound_SPLAT_WATER; /* depot_gui.cpp */ CommandCallback CcCloneVehicle; @@ -97,19 +97,19 @@ CommandCallback CcAddVehicleNewGroup; CommandCallback CcBuildIndustry; /* main_gui.cpp */ -CommandCallback CcPlaySound10; +CommandCallback CcPlaySound_EXPLOSION; CommandCallback CcPlaceSign; CommandCallback CcTerraform; CommandCallback CcGiveMoney; /* rail_gui.cpp */ -CommandCallback CcPlaySound1E; +CommandCallback CcPlaySound_SPLAT_RAIL; CommandCallback CcRailDepot; CommandCallback CcStation; CommandCallback CcBuildRailTunnel; /* road_gui.cpp */ -CommandCallback CcPlaySound1D; +CommandCallback CcPlaySound_SPLAT_OTHER; CommandCallback CcBuildRoadTunnel; CommandCallback CcRoadDepot; CommandCallback CcRoadStop; diff --git a/src/company_base.h b/src/company_base.h index cb8a6fe259..d26201ff50 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -1,4 +1,4 @@ -/* $Id: company_base.h 27381 2015-08-10 20:24:13Z michi_cc $ */ +/* $Id: company_base.h 27757 2017-02-26 19:41:14Z frosch $ */ /* * This file is part of OpenTTD. @@ -52,10 +52,10 @@ extern CompanyPool _company_pool; /** Statically loadable part of Company pool item */ struct CompanyProperties { uint32 name_2; ///< Parameter of #name_1. - uint16 name_1; ///< Name of the company if the user did not change it. + StringID name_1; ///< Name of the company if the user did not change it. char *name; ///< Name of the company if the user changed it. - uint16 president_name_1; ///< Name of the president if the user did not change it. + StringID president_name_1; ///< Name of the president if the user did not change it. uint32 president_name_2; ///< Parameter of #president_name_1 char *president_name; ///< Name of the president if the user changed it. diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 9ec4bebb56..b7def3609f 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1,4 +1,4 @@ -/* $Id: console_cmds.cpp 26509 2014-04-25 15:40:32Z rubidium $ */ +/* $Id: console_cmds.cpp 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -45,6 +45,38 @@ /* scriptfile handling */ static bool _script_running; ///< Script is running (used to abort execution when #ConReturn is encountered). +/** File list storage for the console, for caching the last 'ls' command. */ +class ConsoleFileList : public FileList { +public: + ConsoleFileList() : FileList() + { + this->file_list_valid = false; + } + + /** Declare the file storage cache as being invalid, also clears all stored files. */ + void InvalidateFileList() + { + this->Clear(); + this->file_list_valid = false; + } + + /** + * (Re-)validate the file storage cache. Only makes a change if the storage was invalid, or if \a force_reload. + * @param Always reload the file storage cache. + */ + void ValidateFileList(bool force_reload = false) + { + if (force_reload || !this->file_list_valid) { + this->BuildFileList(FT_SAVEGAME, SLO_LOAD); + this->file_list_valid = true; + } + } + + bool file_list_valid; ///< If set, the file list is valid. +}; + +static ConsoleFileList _console_file_list; ///< File storage cache for the console. + /* console command defines */ #define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[]) #define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo) @@ -286,7 +318,7 @@ DEF_CONSOLE_CMD(ConSave) char *filename = str_fmt("%s.sav", argv[1]); IConsolePrint(CC_DEFAULT, "Saving map..."); - if (SaveOrLoad(filename, SL_SAVE, SAVE_DIR) != SL_OK) { + if (SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, SAVE_DIR) != SL_OK) { IConsolePrint(CC_ERROR, "Saving map failed"); } else { IConsolePrintF(CC_DEFAULT, "Map successfully saved to %s", filename); @@ -315,42 +347,6 @@ DEF_CONSOLE_CMD(ConSaveConfig) return true; } -/** - * Get savegame file informations. - * @param file The savegame filename to return information about. Can be the actual name - * or a numbered entry into the filename list. - * @return FiosItem The information on the file. - */ -static const FiosItem *GetFiosItem(const char *file) -{ - _saveload_mode = SLD_LOAD_GAME; - BuildFileList(); - - for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) { - if (strcmp(file, item->name) == 0) return item; - if (strcmp(file, item->title) == 0) return item; - } - - /* If no name matches, try to parse it as number */ - char *endptr; - int i = strtol(file, &endptr, 10); - if (file == endptr || *endptr != '\0') i = -1; - - if (IsInsideMM(i, 0, _fios_items.Length())) return _fios_items.Get(i); - - /* As a last effort assume it is an OpenTTD savegame and - * that the ".sav" part was not given. */ - char long_file[MAX_PATH]; - seprintf(long_file, lastof(long_file), "%s.sav", file); - for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) { - if (strcmp(long_file, item->name) == 0) return item; - if (strcmp(long_file, item->title) == 0) return item; - } - - return NULL; -} - - DEF_CONSOLE_CMD(ConLoad) { if (argc == 0) { @@ -361,24 +357,21 @@ DEF_CONSOLE_CMD(ConLoad) if (argc != 2) return false; const char *file = argv[1]; - const FiosItem *item = GetFiosItem(file); + _console_file_list.ValidateFileList(); + const FiosItem *item = _console_file_list.FindItem(file); if (item != NULL) { - switch (item->type) { - case FIOS_TYPE_FILE: case FIOS_TYPE_OLDFILE: { - _switch_mode = SM_LOAD_GAME; - SetFiosType(item->type); - - strecpy(_file_to_saveload.name, FiosBrowseTo(item), lastof(_file_to_saveload.name)); - strecpy(_file_to_saveload.title, item->title, lastof(_file_to_saveload.title)); - break; - } - default: IConsolePrintF(CC_ERROR, "%s: Not a savegame.", file); + if (GetAbstractFileType(item->type) == FT_SAVEGAME) { + _switch_mode = SM_LOAD_GAME; + _file_to_saveload.SetMode(item->type); + _file_to_saveload.SetName(FiosBrowseTo(item)); + _file_to_saveload.SetTitle(item->title); + } else { + IConsolePrintF(CC_ERROR, "%s: Not a savegame.", file); } } else { IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file); } - FiosFreeSavegameList(); return true; } @@ -393,7 +386,8 @@ DEF_CONSOLE_CMD(ConRemove) if (argc != 2) return false; const char *file = argv[1]; - const FiosItem *item = GetFiosItem(file); + _console_file_list.ValidateFileList(); + const FiosItem *item = _console_file_list.FindItem(file); if (item != NULL) { if (!FiosDelete(item->name)) { IConsolePrintF(CC_ERROR, "%s: Failed to delete file", file); @@ -402,7 +396,7 @@ DEF_CONSOLE_CMD(ConRemove) IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file); } - FiosFreeSavegameList(); + _console_file_list.InvalidateFileList(); return true; } @@ -415,13 +409,11 @@ DEF_CONSOLE_CMD(ConListFiles) return true; } - BuildFileList(); - - for (uint i = 0; i < _fios_items.Length(); i++) { - IConsolePrintF(CC_DEFAULT, "%d) %s", i, _fios_items[i].title); + _console_file_list.ValidateFileList(true); + for (uint i = 0; i < _console_file_list.Length(); i++) { + IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list[i].title); } - FiosFreeSavegameList(); return true; } @@ -436,7 +428,8 @@ DEF_CONSOLE_CMD(ConChangeDirectory) if (argc != 2) return false; const char *file = argv[1]; - const FiosItem *item = GetFiosItem(file); + _console_file_list.ValidateFileList(true); + const FiosItem *item = _console_file_list.FindItem(file); if (item != NULL) { switch (item->type) { case FIOS_TYPE_DIR: case FIOS_TYPE_DRIVE: case FIOS_TYPE_PARENT: @@ -448,7 +441,7 @@ DEF_CONSOLE_CMD(ConChangeDirectory) IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file); } - FiosFreeSavegameList(); + _console_file_list.InvalidateFileList(); return true; } @@ -462,8 +455,8 @@ DEF_CONSOLE_CMD(ConPrintWorkingDirectory) } /* XXX - Workaround for broken file handling */ - FiosGetSavegameList(SLD_LOAD_GAME); - FiosFreeSavegameList(); + _console_file_list.ValidateFileList(true); + _console_file_list.InvalidateFileList(); FiosGetDescText(&path, NULL); IConsolePrint(CC_DEFAULT, path); diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 4be1fa83f3..1d891fe915 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -1,4 +1,4 @@ -/* $Id: smallvec_type.hpp 25043 2013-02-24 16:43:24Z frosch $ */ +/* $Id: smallvec_type.hpp 27641 2016-09-04 12:50:22Z alberth $ */ /* * This file is part of OpenTTD. @@ -256,6 +256,8 @@ public: /** * Get the number of items in the list. + * + * @return The number of items in the list. */ inline uint Length() const { diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 4867606fad..81107ff9a3 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -1,4 +1,4 @@ -/* $Id: crashlog.cpp 27590 2016-05-29 19:01:50Z frosch $ */ +/* $Id: crashlog.cpp 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -388,7 +388,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const seprintf(filename, filename_last, "%scrash.sav", _personal_dir); /* Don't do a threaded saveload. */ - return SaveOrLoad(filename, SL_SAVE, NO_DIRECTORY, false) == SL_OK; + return SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY, false) == SL_OK; } catch (...) { return false; } diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 16b2460c88..2229ec013c 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: depot_gui.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: depot_gui.cpp 27630 2016-08-15 18:33:52Z frosch $ */ /* * This file is part of OpenTTD. @@ -505,15 +505,12 @@ struct DepotWindow : Window { this->sel = INVALID_VEHICLE; TrainDepotMoveVehicle(v, sel, gdvp.head); } else if (v != NULL) { - bool rtl = _current_text_dir == TD_RTL; - int image = v->GetImage(rtl ? DIR_E : DIR_W, EIT_IN_DEPOT); - SetObjectToPlaceWnd(image, GetVehiclePalette(v), HT_DRAG, this); + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + SetMouseCursorVehicle(v, EIT_IN_DEPOT); + _cursor.vehchain = _ctrl_pressed; this->sel = v->index; this->SetDirty(); - - _cursor.short_vehicle_offset = v->IsGroundVehicle() ? (16 - v->GetGroundVehicleCache()->cached_veh_length * 2) * (rtl ? -1 : 1) : 0; - _cursor.vehchain = _ctrl_pressed; } break; } diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index a691bd469f..369347e8e3 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -1,4 +1,4 @@ -/* $Id: disaster_vehicle.cpp 27087 2014-12-21 20:49:15Z rubidium $ */ +/* $Id: disaster_vehicle.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -112,7 +112,7 @@ void DisasterVehicle::UpdateImage() { SpriteID img = this->image_override; if (img == 0) img = _disaster_images[this->subtype][this->direction]; - this->cur_image = img; + this->sprite_seq.Set(img); } /** @@ -499,7 +499,8 @@ static bool DisasterTick_Helicopter_Rotors(DisasterVehicle *v) v->tick_counter++; if (HasBit(v->tick_counter, 0)) return true; - if (++v->cur_image > SPR_ROTOR_MOVING_3) v->cur_image = SPR_ROTOR_MOVING_1; + SpriteID &cur_image = v->sprite_seq.seq[0].sprite; + if (++cur_image > SPR_ROTOR_MOVING_3) cur_image = SPR_ROTOR_MOVING_1; v->UpdatePositionAndViewport(); diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 644b772e83..c292309349 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: dock_gui.cpp 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: dock_gui.cpp 27577 2016-05-22 10:52:02Z frosch $ */ /* * This file is part of OpenTTD. @@ -48,7 +48,7 @@ void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } -void CcBuildCanal(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) +void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) { if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_02_SPLAT_WATER, tile); } @@ -235,10 +235,10 @@ struct BuildDocksToolbarWindow : Window { GUIPlaceProcDragXY(select_proc, start_tile, end_tile); break; case DDSP_CREATE_WATER: - DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && _ctrl_pressed) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcBuildCanal); + DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && _ctrl_pressed) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcPlaySound_SPLAT_WATER); break; case DDSP_CREATE_RIVER: - DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcBuildCanal); + DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcPlaySound_SPLAT_WATER); break; default: break; diff --git a/src/economy.cpp b/src/economy.cpp index e45082b617..fb1d8eaf8d 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1,4 +1,4 @@ -/* $Id: economy.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: economy.cpp 27585 2016-05-29 13:35:17Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp index 20b2cc64ba..831c43c050 100644 --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -1,4 +1,4 @@ -/* $Id: effectvehicle.cpp 26863 2014-09-20 15:31:26Z rubidium $ */ +/* $Id: effectvehicle.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -22,10 +22,26 @@ #include "safeguards.h" +/** + * Increment the sprite unless it has reached the end of the animation. + * @param v Vehicle to increment sprite of. + * @param last Last sprite of animation. + * @return true if the sprite was incremented, false if the end was reached. + */ +static bool IncrementSprite(EffectVehicle *v, SpriteID last) +{ + if (v->sprite_seq.seq[0].sprite != last) { + v->sprite_seq.seq[0].sprite++; + return true; + } else { + return false; + } +} + static void ChimneySmokeInit(EffectVehicle *v) { uint32 r = Random(); - v->cur_image = SPR_CHIMNEY_SMOKE_0 + GB(r, 0, 3); + v->sprite_seq.Set(SPR_CHIMNEY_SMOKE_0 + GB(r, 0, 3)); v->progress = GB(r, 16, 3); } @@ -40,10 +56,8 @@ static bool ChimneySmokeTick(EffectVehicle *v) return false; } - if (v->cur_image != SPR_CHIMNEY_SMOKE_7) { - v->cur_image++; - } else { - v->cur_image = SPR_CHIMNEY_SMOKE_0; + if (!IncrementSprite(v, SPR_CHIMNEY_SMOKE_7)) { + v->sprite_seq.Set(SPR_CHIMNEY_SMOKE_0); } v->progress = 7; v->UpdatePositionAndViewport(); @@ -54,7 +68,7 @@ static bool ChimneySmokeTick(EffectVehicle *v) static void SteamSmokeInit(EffectVehicle *v) { - v->cur_image = SPR_STEAM_SMOKE_0; + v->sprite_seq.Set(SPR_STEAM_SMOKE_0); v->progress = 12; } @@ -70,9 +84,7 @@ static bool SteamSmokeTick(EffectVehicle *v) } if ((v->progress & 0xF) == 4) { - if (v->cur_image != SPR_STEAM_SMOKE_4) { - v->cur_image++; - } else { + if (!IncrementSprite(v, SPR_STEAM_SMOKE_4)) { delete v; return false; } @@ -86,7 +98,7 @@ static bool SteamSmokeTick(EffectVehicle *v) static void DieselSmokeInit(EffectVehicle *v) { - v->cur_image = SPR_DIESEL_SMOKE_0; + v->sprite_seq.Set(SPR_DIESEL_SMOKE_0); v->progress = 0; } @@ -98,13 +110,11 @@ static bool DieselSmokeTick(EffectVehicle *v) v->z_pos++; v->UpdatePositionAndViewport(); } else if ((v->progress & 7) == 1) { - if (v->cur_image != SPR_DIESEL_SMOKE_5) { - v->cur_image++; - v->UpdatePositionAndViewport(); - } else { + if (!IncrementSprite(v, SPR_DIESEL_SMOKE_5)) { delete v; return false; } + v->UpdatePositionAndViewport(); } return true; @@ -112,7 +122,7 @@ static bool DieselSmokeTick(EffectVehicle *v) static void ElectricSparkInit(EffectVehicle *v) { - v->cur_image = SPR_ELECTRIC_SPARK_0; + v->sprite_seq.Set(SPR_ELECTRIC_SPARK_0); v->progress = 1; } @@ -122,13 +132,12 @@ static bool ElectricSparkTick(EffectVehicle *v) v->progress++; } else { v->progress = 0; - if (v->cur_image != SPR_ELECTRIC_SPARK_5) { - v->cur_image++; - v->UpdatePositionAndViewport(); - } else { + + if (!IncrementSprite(v, SPR_ELECTRIC_SPARK_5)) { delete v; return false; } + v->UpdatePositionAndViewport(); } return true; @@ -136,7 +145,7 @@ static bool ElectricSparkTick(EffectVehicle *v) static void SmokeInit(EffectVehicle *v) { - v->cur_image = SPR_SMOKE_0; + v->sprite_seq.Set(SPR_SMOKE_0); v->progress = 12; } @@ -152,9 +161,7 @@ static bool SmokeTick(EffectVehicle *v) } if ((v->progress & 0xF) == 4) { - if (v->cur_image != SPR_SMOKE_4) { - v->cur_image++; - } else { + if (!IncrementSprite(v, SPR_SMOKE_4)) { delete v; return false; } @@ -168,7 +175,7 @@ static bool SmokeTick(EffectVehicle *v) static void ExplosionLargeInit(EffectVehicle *v) { - v->cur_image = SPR_EXPLOSION_LARGE_0; + v->sprite_seq.Set(SPR_EXPLOSION_LARGE_0); v->progress = 0; } @@ -176,13 +183,11 @@ static bool ExplosionLargeTick(EffectVehicle *v) { v->progress++; if ((v->progress & 3) == 0) { - if (v->cur_image != SPR_EXPLOSION_LARGE_F) { - v->cur_image++; - v->UpdatePositionAndViewport(); - } else { + if (!IncrementSprite(v, SPR_EXPLOSION_LARGE_F)) { delete v; return false; } + v->UpdatePositionAndViewport(); } return true; @@ -190,7 +195,7 @@ static bool ExplosionLargeTick(EffectVehicle *v) static void BreakdownSmokeInit(EffectVehicle *v) { - v->cur_image = SPR_BREAKDOWN_SMOKE_0; + v->sprite_seq.Set(SPR_BREAKDOWN_SMOKE_0); v->progress = 0; } @@ -198,10 +203,8 @@ static bool BreakdownSmokeTick(EffectVehicle *v) { v->progress++; if ((v->progress & 7) == 0) { - if (v->cur_image != SPR_BREAKDOWN_SMOKE_3) { - v->cur_image++; - } else { - v->cur_image = SPR_BREAKDOWN_SMOKE_0; + if (!IncrementSprite(v, SPR_BREAKDOWN_SMOKE_3)) { + v->sprite_seq.Set(SPR_BREAKDOWN_SMOKE_0); } v->UpdatePositionAndViewport(); } @@ -217,7 +220,7 @@ static bool BreakdownSmokeTick(EffectVehicle *v) static void ExplosionSmallInit(EffectVehicle *v) { - v->cur_image = SPR_EXPLOSION_SMALL_0; + v->sprite_seq.Set(SPR_EXPLOSION_SMALL_0); v->progress = 0; } @@ -225,13 +228,11 @@ static bool ExplosionSmallTick(EffectVehicle *v) { v->progress++; if ((v->progress & 3) == 0) { - if (v->cur_image != SPR_EXPLOSION_SMALL_B) { - v->cur_image++; - v->UpdatePositionAndViewport(); - } else { + if (!IncrementSprite(v, SPR_EXPLOSION_SMALL_B)) { delete v; return false; } + v->UpdatePositionAndViewport(); } return true; @@ -239,7 +240,7 @@ static bool ExplosionSmallTick(EffectVehicle *v) static void BulldozerInit(EffectVehicle *v) { - v->cur_image = SPR_BULLDOZER_NE; + v->sprite_seq.Set(SPR_BULLDOZER_NE); v->progress = 0; v->animation_state = 0; v->animation_substate = 0; @@ -290,7 +291,7 @@ static bool BulldozerTick(EffectVehicle *v) if ((v->progress & 7) == 0) { const BulldozerMovement *b = &_bulldozer_movement[v->animation_state]; - v->cur_image = SPR_BULLDOZER_NE + b->image; + v->sprite_seq.Set(SPR_BULLDOZER_NE + b->image); v->x_pos += _inc_by_dir[b->direction].x; v->y_pos += _inc_by_dir[b->direction].y; @@ -312,7 +313,7 @@ static bool BulldozerTick(EffectVehicle *v) static void BubbleInit(EffectVehicle *v) { - v->cur_image = SPR_BUBBLE_GENERATE_0; + v->sprite_seq.Set(SPR_BUBBLE_GENERATE_0); v->spritenum = 0; v->progress = 0; } @@ -475,8 +476,8 @@ static bool BubbleTick(EffectVehicle *v) if ((v->progress & 3) != 0) return true; if (v->spritenum == 0) { - v->cur_image++; - if (v->cur_image < SPR_BUBBLE_GENERATE_3) { + v->sprite_seq.seq[0].sprite++; + if (v->sprite_seq.seq[0].sprite < SPR_BUBBLE_GENERATE_3) { v->UpdatePositionAndViewport(); return true; } @@ -521,7 +522,7 @@ static bool BubbleTick(EffectVehicle *v) v->x_pos += b->x; v->y_pos += b->y; v->z_pos += b->z; - v->cur_image = SPR_BUBBLE_0 + b->image; + v->sprite_seq.Set(SPR_BUBBLE_0 + b->image); v->UpdatePositionAndViewport(); diff --git a/src/elrail.cpp b/src/elrail.cpp index f1c95a396a..170f205a76 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -1,4 +1,4 @@ -/* $Id: elrail.cpp 26879 2014-09-21 11:24:51Z rubidium $ */ +/* $Id: elrail.cpp 27676 2016-11-05 11:53:03Z frosch $ */ /* * This file is part of OpenTTD. @@ -89,7 +89,7 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) { switch (GetTileType(t)) { case MP_RAILWAY: - if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE; + if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; switch (GetRailTileType(t)) { case RAIL_TILE_NORMAL: case RAIL_TILE_SIGNALS: return GetTrackBits(t); @@ -99,7 +99,7 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) break; case MP_TUNNELBRIDGE: - if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE; + if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; if (override != NULL && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) { *override = 1 << GetTunnelBridgeDirection(t); } @@ -107,12 +107,12 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) case MP_ROAD: if (!IsLevelCrossing(t)) return TRACK_BIT_NONE; - if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE; + if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; return GetCrossingRailBits(t); case MP_STATION: if (!HasStationRail(t)) return TRACK_BIT_NONE; - if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE; + if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; return TrackToTrackBits(GetRailStationTrack(t)); default: @@ -135,7 +135,7 @@ static TrackBits MaskWireBits(TileIndex t, TrackBits tracks) * axis that still display wires to preserve visual continuity. */ TileIndex next_tile = TileAddByDiagDir(t, d); RailType rt = GetTileRailType(next_tile); - if (rt == INVALID_RAILTYPE || !HasCatenary(rt) || + if (rt == INVALID_RAILTYPE || !HasRailCatenary(rt) || ((TrackStatusToTrackBits(GetTileTrackStatus(next_tile, TRANSPORT_RAIL, 0)) & DiagdirReachesTracks(d)) == TRACK_BIT_NONE && (!HasStationTileRail(next_tile) || GetRailStationAxis(next_tile) != DiagDirToAxis(d) || !CanStationTileHaveWires(next_tile)))) { neighbour_tdb |= DiagdirReachesTrackdirs(ReverseDiagDir(d)); @@ -241,7 +241,7 @@ static int GetPCPElevation(TileIndex tile, DiagDirection PCPpos) * * @param ti The Tileinfo to draw the tile for */ -void DrawCatenaryOnTunnel(const TileInfo *ti) +void DrawRailCatenaryOnTunnel(const TileInfo *ti) { /* xmin, ymin, xmax + 1, ymax + 1 of BB */ static const int _tunnel_wire_BB[4][4] = { @@ -255,7 +255,7 @@ void DrawCatenaryOnTunnel(const TileInfo *ti) SpriteID wire_base = GetWireBase(ti->tile); - const SortableSpriteStruct *sss = &CatenarySpriteData_Tunnel[dir]; + const SortableSpriteStruct *sss = &RailCatenarySpriteData_Tunnel[dir]; const int *BB_data = _tunnel_wire_BB[dir]; AddSortableSpriteToDraw( wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset, @@ -270,7 +270,7 @@ void DrawCatenaryOnTunnel(const TileInfo *ti) * Draws wires and, if required, pylons on a given tile * @param ti The Tileinfo to draw the tile for */ -static void DrawCatenaryRailway(const TileInfo *ti) +static void DrawRailCatenaryRailway(const TileInfo *ti) { /* Pylons are placed on a tile edge, so we need to take into account * the track configuration of 2 adjacent tiles. trackconfig[0] stores the @@ -379,7 +379,7 @@ static void DrawCatenaryRailway(const TileInfo *ti) if (IsTileType(neighbour, MP_STATION) || IsTileType(neighbour, MP_ROAD)) tileh[TS_NEIGHBOUR] = SLOPE_FLAT; /* Read the foundations if they are present, and adjust the tileh */ - if (trackconfig[TS_NEIGHBOUR] != TRACK_BIT_NONE && IsTileType(neighbour, MP_RAILWAY) && HasCatenary(GetRailType(neighbour))) foundation = GetRailFoundation(tileh[TS_NEIGHBOUR], trackconfig[TS_NEIGHBOUR]); + if (trackconfig[TS_NEIGHBOUR] != TRACK_BIT_NONE && IsTileType(neighbour, MP_RAILWAY) && HasRailCatenary(GetRailType(neighbour))) foundation = GetRailFoundation(tileh[TS_NEIGHBOUR], trackconfig[TS_NEIGHBOUR]); if (IsBridgeTile(neighbour)) { foundation = GetBridgeFoundation(tileh[TS_NEIGHBOUR], DiagDirToAxis(GetTunnelBridgeDirection(neighbour))); } @@ -442,7 +442,7 @@ static void DrawCatenaryRailway(const TileInfo *ti) } } - /* The wire above the tunnel is drawn together with the tunnel-roof (see DrawCatenaryOnTunnel()) */ + /* The wire above the tunnel is drawn together with the tunnel-roof (see DrawRailCatenaryOnTunnel()) */ if (IsTunnelTile(ti->tile)) return; /* Don't draw a wire under a low bridge */ @@ -478,7 +478,7 @@ static void DrawCatenaryRailway(const TileInfo *ti) assert(PCPconfig != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that) assert(!IsSteepSlope(tileh[TS_HOME])); - sss = &CatenarySpriteData[Wires[tileh_selector][t][PCPconfig]]; + sss = &RailCatenarySpriteData[Wires[tileh_selector][t][PCPconfig]]; /* * The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE. @@ -498,7 +498,7 @@ static void DrawCatenaryRailway(const TileInfo *ti) * * @param ti The Tileinfo to draw the tile for */ -void DrawCatenaryOnBridge(const TileInfo *ti) +void DrawRailCatenaryOnBridge(const TileInfo *ti) { TileIndex end = GetSouthernBridgeEnd(ti->tile); TileIndex start = GetOtherBridgeEnd(end); @@ -511,15 +511,15 @@ void DrawCatenaryOnBridge(const TileInfo *ti) Axis axis = GetBridgeAxis(ti->tile); TLG tlg = GetTLG(ti->tile); - CatenarySprite offset = (CatenarySprite)(axis == AXIS_X ? 0 : WIRE_Y_FLAT_BOTH - WIRE_X_FLAT_BOTH); + RailCatenarySprite offset = (RailCatenarySprite)(axis == AXIS_X ? 0 : WIRE_Y_FLAT_BOTH - WIRE_X_FLAT_BOTH); if ((length % 2) && num == length) { /* Draw the "short" wire on the southern end of the bridge * only needed if the length of the bridge is odd */ - sss = &CatenarySpriteData[WIRE_X_FLAT_BOTH + offset]; + sss = &RailCatenarySpriteData[WIRE_X_FLAT_BOTH + offset]; } else { /* Draw "long" wires on all other tiles of the bridge (one pylon every two tiles) */ - sss = &CatenarySpriteData[WIRE_X_FLAT_SW + (num % 2) + offset]; + sss = &RailCatenarySpriteData[WIRE_X_FLAT_SW + (num % 2) + offset]; } height = GetBridgePixelHeight(end); @@ -558,14 +558,14 @@ void DrawCatenaryOnBridge(const TileInfo *ti) /** * Draws overhead wires and pylons for electric railways. * @param ti The TileInfo struct of the tile being drawn - * @see DrawCatenaryRailway + * @see DrawRailCatenaryRailway */ -void DrawCatenary(const TileInfo *ti) +void DrawRailCatenary(const TileInfo *ti) { switch (GetTileType(ti->tile)) { case MP_RAILWAY: if (IsRailDepot(ti->tile)) { - const SortableSpriteStruct *sss = &CatenarySpriteData_Depot[GetRailDepotDirection(ti->tile)]; + const SortableSpriteStruct *sss = &RailCatenarySpriteData_Depot[GetRailDepotDirection(ti->tile)]; SpriteID wire_base = GetWireBase(ti->tile); @@ -587,7 +587,7 @@ void DrawCatenary(const TileInfo *ti) default: return; } - DrawCatenaryRailway(ti); + DrawRailCatenaryRailway(ti); } bool SettingsDisableElrail(int32 p1) diff --git a/src/elrail_func.h b/src/elrail_func.h index 4655a4eafd..6702e50c93 100644 --- a/src/elrail_func.h +++ b/src/elrail_func.h @@ -1,4 +1,4 @@ -/* $Id: elrail_func.h 21845 2011-01-18 22:31:06Z rubidium $ */ +/* $Id: elrail_func.h 27676 2016-11-05 11:53:03Z frosch $ */ /* * This file is part of OpenTTD. @@ -20,7 +20,7 @@ * Test if a rail type has catenary * @param rt Rail type to test */ -static inline bool HasCatenary(RailType rt) +static inline bool HasRailCatenary(RailType rt) { return HasBit(GetRailTypeInfo(rt)->flags, RTF_CATENARY); } @@ -29,14 +29,14 @@ static inline bool HasCatenary(RailType rt) * Test if we should draw rail catenary * @param rt Rail type to test */ -static inline bool HasCatenaryDrawn(RailType rt) +static inline bool HasRailCatenaryDrawn(RailType rt) { - return HasCatenary(rt) && !IsInvisibilitySet(TO_CATENARY) && !_settings_game.vehicle.disable_elrails; + return HasRailCatenary(rt) && !IsInvisibilitySet(TO_CATENARY) && !_settings_game.vehicle.disable_elrails; } -void DrawCatenary(const TileInfo *ti); -void DrawCatenaryOnTunnel(const TileInfo *ti); -void DrawCatenaryOnBridge(const TileInfo *ti); +void DrawRailCatenary(const TileInfo *ti); +void DrawRailCatenaryOnTunnel(const TileInfo *ti); +void DrawRailCatenaryOnBridge(const TileInfo *ti); bool SettingsDisableElrail(int32 p1); ///< _settings_game.disable_elrail callback diff --git a/src/engine.cpp b/src/engine.cpp index 724a19350d..82b29ddd3e 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -1,4 +1,4 @@ -/* $Id: engine.cpp 27607 2016-06-30 18:36:01Z frosch $ */ +/* $Id: engine.cpp 27700 2016-12-20 12:35:36Z frosch $ */ /* * This file is part of OpenTTD. @@ -48,11 +48,6 @@ EngineOverrideManager _engine_mngr; */ static Year _year_engine_aging_stops; -/** - * The railtypes that have been or never will be introduced, or - * an inverse bitmap of rail types that have to be introduced. */ -static uint16 _introduced_railtypes; - /** Number of engines of each vehicle type in original engine data */ const uint8 _engine_counts[4] = { lengthof(_orig_rail_vehicle_info), @@ -543,29 +538,6 @@ void SetupEngines() const Engine *e = new Engine(eid->type, eid->internal_id); assert(e->index == index); } - - _introduced_railtypes = 0; -} - -/** - * Check whether the railtypes should be introduced. - */ -static void CheckRailIntroduction() -{ - /* All railtypes have been introduced. */ - if (_introduced_railtypes == UINT16_MAX || Company::GetPoolSize() == 0) return; - - /* We need to find the railtypes that are known to all companies. */ - RailTypes rts = (RailTypes)UINT16_MAX; - - /* We are at, or past the introduction date of the rail. */ - Company *c; - FOR_ALL_COMPANIES(c) { - c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date); - rts &= c->avail_railtypes; - } - - _introduced_railtypes |= rts; } void ShowEnginePreviewWindow(EngineID engine); @@ -711,19 +683,6 @@ void StartupEngines() c->avail_roadtypes = GetCompanyRoadtypes(c->index); } - /* Rail types that are invalid or never introduced are marked as - * being introduced upon start. That way we can easily check whether - * there is any date related introduction that is still going to - * happen somewhere in the future. */ - for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { - const RailtypeInfo *rti = GetRailTypeInfo(rt); - if (rti->label != 0 && IsInsideMM(rti->introduction_date, 0, MAX_DAY)) continue; - - SetBit(_introduced_railtypes, rt); - } - - CheckRailIntroduction(); - /* Invalidate any open purchase lists */ InvalidateWindowClassesData(WC_BUILD_VEHICLE); } @@ -820,7 +779,10 @@ static bool IsVehicleTypeDisabled(VehicleType type, bool ai) /** Daily check to offer an exclusive engine preview to the companies. */ void EnginesDailyLoop() { - CheckRailIntroduction(); + Company *c; + FOR_ALL_COMPANIES(c) { + c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date); + } if (_cur_year >= _year_engine_aging_stops) return; diff --git a/src/engine_type.h b/src/engine_type.h index 5b348ba294..0ad830f904 100644 --- a/src/engine_type.h +++ b/src/engine_type.h @@ -1,4 +1,4 @@ -/* $Id: engine_type.h 24810 2012-12-09 16:55:03Z frosch $ */ +/* $Id: engine_type.h 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -158,6 +158,7 @@ enum EngineMiscFlags { EF_AUTO_REFIT = 4, ///< Automatic refitting is allowed EF_NO_DEFAULT_CARGO_MULTIPLIER = 5, ///< Use the new capacity algorithm. The default cargotype of the vehicle does not affect capacity multipliers. CB 15 is also called in purchase list. EF_NO_BREAKDOWN_SMOKE = 6, ///< Do not show black smoke during a breakdown. + EF_SPRITE_STACK = 7, ///< Draw vehicle by stacking multiple sprites. }; /** diff --git a/src/fileio_type.h b/src/fileio_type.h index 32f819f95f..c9bdae5b43 100644 --- a/src/fileio_type.h +++ b/src/fileio_type.h @@ -1,4 +1,4 @@ -/* $Id: fileio_type.h 25975 2013-11-13 19:32:37Z rubidium $ */ +/* $Id: fileio_type.h 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -14,6 +14,96 @@ #include "core/enum_type.hpp" +/** The different abstract types of files that the system knows about. */ +enum AbstractFileType { + FT_NONE, ///< nothing to do + FT_SAVEGAME, ///< old or new savegame + FT_SCENARIO, ///< old or new scenario + FT_HEIGHTMAP, ///< heightmap file + + FT_INVALID = 7, ///< Invalid or unknown file type. + FT_NUMBITS = 3, ///< Number of bits required for storing a #AbstractFileType value. + FT_MASK = (1 << FT_NUMBITS) - 1, ///< Bitmask for extracting an abstract file type. +}; + +/** Kinds of files in each #AbstractFileType. */ +enum DetailedFileType { + /* Save game and scenario files. */ + DFT_OLD_GAME_FILE, ///< Old save game or scenario file. + DFT_GAME_FILE, ///< Save game or scenario file. + + /* Heightmap files. */ + DFT_HEIGHTMAP_BMP, ///< BMP file. + DFT_HEIGHTMAP_PNG, ///< PNG file. + + /* fios 'files' */ + DFT_FIOS_DRIVE, ///< A drive (letter) entry. + DFT_FIOS_PARENT, ///< A parent directory entry. + DFT_FIOS_DIR, ///< A directory entry. + DFT_FIOS_DIRECT, ///< Direct filename. + + DFT_INVALID = 255, ///< Unknown or invalid file. +}; + +/** Operation performed on the file. */ +enum SaveLoadOperation { + SLO_CHECK, ///< Load file for checking and/or preview. + SLO_LOAD, ///< File is being loaded. + SLO_SAVE, ///< File is being saved. + + SLO_INVALID, ///< Unknown file operation. +}; + +/** + * Construct an enum value for #FiosType as a combination of an abstract and a detailed file type. + * @param abstract Abstract file type (one of #AbstractFileType). + * @param detailed Detailed file type (one of #DetailedFileType). + */ +#define MAKE_FIOS_TYPE(abstract, detailed) ((abstract) | ((detailed) << FT_NUMBITS)) + +/** + * Elements of a file system that are recognized. + * Values are a combination of #AbstractFileType and #DetailedFileType. + * @see GetAbstractFileType GetDetailedFileType + */ +enum FiosType { + FIOS_TYPE_DRIVE = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_DRIVE), + FIOS_TYPE_PARENT = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_PARENT), + FIOS_TYPE_DIR = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_DIR), + FIOS_TYPE_DIRECT = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_DIRECT), + + FIOS_TYPE_FILE = MAKE_FIOS_TYPE(FT_SAVEGAME, DFT_GAME_FILE), + FIOS_TYPE_OLDFILE = MAKE_FIOS_TYPE(FT_SAVEGAME, DFT_OLD_GAME_FILE), + FIOS_TYPE_SCENARIO = MAKE_FIOS_TYPE(FT_SCENARIO, DFT_GAME_FILE), + FIOS_TYPE_OLD_SCENARIO = MAKE_FIOS_TYPE(FT_SCENARIO, DFT_OLD_GAME_FILE), + FIOS_TYPE_PNG = MAKE_FIOS_TYPE(FT_HEIGHTMAP, DFT_HEIGHTMAP_PNG), + FIOS_TYPE_BMP = MAKE_FIOS_TYPE(FT_HEIGHTMAP, DFT_HEIGHTMAP_BMP), + + FIOS_TYPE_INVALID = MAKE_FIOS_TYPE(FT_INVALID, DFT_INVALID), +}; + +#undef MAKE_FIOS_TYPE + +/** + * Extract the abstract file type from a #FiosType. + * @param fios_type Type to query. + * @return The Abstract file type of the \a fios_type. + */ +inline AbstractFileType GetAbstractFileType(FiosType fios_type) +{ + return static_cast(fios_type & FT_MASK); +} + +/** + * Extract the detailed file type from a #FiosType. + * @param fios_type Type to query. + * @return The Detailed file type of the \a fios_type. + */ +inline DetailedFileType GetDetailedFileType(FiosType fios_type) +{ + return static_cast(fios_type >> FT_NUMBITS); +} + /** * The different kinds of subdirectories OpenTTD uses */ diff --git a/src/fios.cpp b/src/fios.cpp index cd9683275b..a5bc0f7988 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -1,4 +1,4 @@ -/* $Id: fios.cpp 26554 2014-05-03 15:45:54Z alberth $ */ +/* $Id: fios.cpp 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -29,17 +29,15 @@ #include "safeguards.h" /* Variables to display file lists */ -SmallVector _fios_items; static char *_fios_path; static const char *_fios_path_last; -SmallFiosItem _file_to_saveload; SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; /* OS-specific functions are taken from their respective files (win32/unix/os2 .c) */ extern bool FiosIsRoot(const char *path); extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb); extern bool FiosIsHiddenFile(const struct dirent *ent); -extern void FiosGetDrives(); +extern void FiosGetDrives(FileList &file_list); extern bool FiosGetDiskFreeSpace(const char *path, uint64 *tot); /* get the name of an oldstyle savegame */ @@ -65,11 +63,72 @@ int CDECL CompareFiosItems(const FiosItem *da, const FiosItem *db) return r; } -/** Free the list of savegames. */ -void FiosFreeSavegameList() +FileList::~FileList() { - _fios_items.Clear(); - _fios_items.Compact(); + this->Clear(); +} + +/** + * Construct a file list with the given kind of files, for the stated purpose. + * @param abstract_filetype Kind of files to collect. + * @param fop Purpose of the collection, either #SLO_LOAD or #SLO_SAVE. + */ +void FileList::BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop) +{ + this->Clear(); + + assert(fop == SLO_LOAD || SLO_SAVE); + switch (abstract_filetype) { + case FT_NONE: + break; + + case FT_SAVEGAME: + FiosGetSavegameList(fop, *this); + break; + + case FT_SCENARIO: + FiosGetScenarioList(fop, *this); + break; + + case FT_HEIGHTMAP: + FiosGetHeightmapList(fop, *this); + break; + + default: + NOT_REACHED(); + } +} + +/** + * Find file information of a file by its name from the file list. + * @param file The filename to return information about. Can be the actual name + * or a numbered entry into the filename list. + * @return The information on the file, or \c NULL if the file is not available. + */ +const FiosItem *FileList::FindItem(const char *file) +{ + for (const FiosItem *item = this->Begin(); item != this->End(); item++) { + if (strcmp(file, item->name) == 0) return item; + if (strcmp(file, item->title) == 0) return item; + } + + /* If no name matches, try to parse it as number */ + char *endptr; + int i = strtol(file, &endptr, 10); + if (file == endptr || *endptr != '\0') i = -1; + + if (IsInsideMM(i, 0, this->Length())) return this->Get(i); + + /* As a last effort assume it is an OpenTTD savegame and + * that the ".sav" part was not given. */ + char long_file[MAX_PATH]; + seprintf(long_file, lastof(long_file), "%s.sav", file); + for (const FiosItem *item = this->Begin(); item != this->End(); item++) { + if (strcmp(long_file, item->name) == 0) return item; + if (strcmp(long_file, item->title) == 0) return item; + } + + return NULL; } /** @@ -215,23 +274,24 @@ bool FiosDelete(const char *name) return unlink(filename) == 0; } -typedef FiosType fios_getlist_callback_proc(SaveLoadDialogMode mode, const char *filename, const char *ext, char *title, const char *last); +typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const char *filename, const char *ext, char *title, const char *last); /** * Scanner to scan for a particular type of FIOS file. */ class FiosFileScanner : public FileScanner { - SaveLoadDialogMode mode; ///< The mode we want to search for + SaveLoadOperation fop; ///< The kind of file we are looking for. fios_getlist_callback_proc *callback_proc; ///< Callback to check whether the file may be added + FileList &file_list; ///< Destination of the found files. public: /** * Create the scanner - * @param mode The mode we are in. Some modes don't allow 'parent'. - * @param callback_proc The function that is called where you need to do the filtering. + * @param fop Purpose of collecting the list. + * @param callback_proc The function that is called where you need to do the filtering. + * @param file_list Destination of the found files. */ - FiosFileScanner(SaveLoadDialogMode mode, fios_getlist_callback_proc *callback_proc) : - mode(mode), - callback_proc(callback_proc) + FiosFileScanner(SaveLoadOperation fop, fios_getlist_callback_proc *callback_proc, FileList &file_list) : + fop(fop), callback_proc(callback_proc), file_list(file_list) {} /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename); @@ -251,14 +311,14 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons char fios_title[64]; fios_title[0] = '\0'; // reset the title; - FiosType type = this->callback_proc(this->mode, filename, ext, fios_title, lastof(fios_title)); + FiosType type = this->callback_proc(this->fop, filename, ext, fios_title, lastof(fios_title)); if (type == FIOS_TYPE_INVALID) return false; - for (const FiosItem *fios = _fios_items.Begin(); fios != _fios_items.End(); fios++) { + for (const FiosItem *fios = file_list.Begin(); fios != file_list.End(); fios++) { if (strcmp(fios->name, filename) == 0) return false; } - FiosItem *fios = _fios_items.Append(); + FiosItem *fios = file_list.Append(); #ifdef WIN32 struct _stat sb; if (_tstat(OTTD2FS(filename), &sb) == 0) { @@ -289,11 +349,12 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons /** * Fill the list of the files in a directory, according to some arbitrary rule. - * @param mode The mode we are in. Some modes don't allow 'parent'. - * @param callback_proc The function that is called where you need to do the filtering. - * @param subdir The directory from where to start (global) searching. + * @param fop Purpose of collecting the list. + * @param callback_proc The function that is called where you need to do the filtering. + * @param subdir The directory from where to start (global) searching. + * @param file_list Destination of the found files. */ -static void FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_proc *callback_proc, Subdirectory subdir) +static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *callback_proc, Subdirectory subdir, FileList &file_list) { struct stat sb; struct dirent *dirent; @@ -302,11 +363,11 @@ static void FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_proc int sort_start; char d_name[sizeof(fios->name)]; - _fios_items.Clear(); + file_list.Clear(); /* A parent directory link exists if we are not in the root directory */ if (!FiosIsRoot(_fios_path)) { - fios = _fios_items.Append(); + fios = file_list.Append(); fios->type = FIOS_TYPE_PARENT; fios->mtime = 0; strecpy(fios->name, "..", lastof(fios->name)); @@ -322,7 +383,7 @@ static void FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_proc if (FiosIsValidFile(_fios_path, dirent, &sb) && S_ISDIR(sb.st_mode) && (!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) && strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) { - fios = _fios_items.Append(); + fios = file_list.Append(); fios->type = FIOS_TYPE_DIR; fios->mtime = 0; strecpy(fios->name, d_name, lastof(fios->name)); @@ -337,27 +398,27 @@ static void FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_proc { SortingBits order = _savegame_sort_order; _savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING; - QSortT(_fios_items.Begin(), _fios_items.Length(), CompareFiosItems); + QSortT(file_list.files.Begin(), file_list.files.Length(), CompareFiosItems); _savegame_sort_order = order; } /* This is where to start sorting for the filenames */ - sort_start = _fios_items.Length(); + sort_start = file_list.Length(); /* Show files */ - FiosFileScanner scanner(mode, callback_proc); + FiosFileScanner scanner(fop, callback_proc, file_list); if (subdir == NO_DIRECTORY) { scanner.Scan(NULL, _fios_path, false); } else { scanner.Scan(NULL, subdir, true, true); } - QSortT(_fios_items.Get(sort_start), _fios_items.Length() - sort_start, CompareFiosItems); + QSortT(file_list.Get(sort_start), file_list.Length() - sort_start, CompareFiosItems); /* Show drives */ - FiosGetDrives(); + FiosGetDrives(file_list); - _fios_items.Compact(); + file_list.Compact(); } /** @@ -386,7 +447,7 @@ static void GetFileTitle(const char *file, char *title, const char *last, Subdir /** * Callback for FiosGetFileList. It tells if a file is a savegame or not. - * @param mode Save/load mode. + * @param fop Purpose of collecting the list. * @param file Name of the file to check. * @param ext A pointer to the extension identifier inside file * @param title Buffer if a callback wants to lookup the title of the file; NULL to skip the lookup @@ -395,7 +456,7 @@ static void GetFileTitle(const char *file, char *title, const char *last, Subdir * @see FiosGetFileList * @see FiosGetSavegameList */ -FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title, const char *last) +FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) { /* Show savegame files * .SAV OpenTTD saved game @@ -411,7 +472,7 @@ FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, return FIOS_TYPE_FILE; } - if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) { + if (fop == SLO_LOAD) { if (strcasecmp(ext, ".ss1") == 0 || strcasecmp(ext, ".sv1") == 0 || strcasecmp(ext, ".sv2") == 0) { if (title != NULL) GetOldSaveGameName(file, title, last); @@ -424,10 +485,11 @@ FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, /** * Get a list of savegames. - * @param mode Save/load mode. + * @param fop Purpose of collecting the list. + * @param file_list Destination of the found files. * @see FiosGetFileList */ -void FiosGetSavegameList(SaveLoadDialogMode mode) +void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list) { static char *fios_save_path = NULL; static char *fios_save_path_last = NULL; @@ -441,12 +503,12 @@ void FiosGetSavegameList(SaveLoadDialogMode mode) _fios_path = fios_save_path; _fios_path_last = fios_save_path_last; - FiosGetFileList(mode, &FiosGetSavegameListCallback, NO_DIRECTORY); + FiosGetFileList(fop, &FiosGetSavegameListCallback, NO_DIRECTORY, file_list); } /** * Callback for FiosGetFileList. It tells if a file is a scenario or not. - * @param mode Save/load mode. + * @param fop Purpose of collecting the list. * @param file Name of the file to check. * @param ext A pointer to the extension identifier inside file * @param title Buffer if a callback wants to lookup the title of the file @@ -455,7 +517,7 @@ void FiosGetSavegameList(SaveLoadDialogMode mode) * @see FiosGetFileList * @see FiosGetScenarioList */ -static FiosType FiosGetScenarioListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title, const char *last) +static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) { /* Show scenario files * .SCN OpenTTD style scenario file @@ -466,7 +528,7 @@ static FiosType FiosGetScenarioListCallback(SaveLoadDialogMode mode, const char return FIOS_TYPE_SCENARIO; } - if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) { + if (fop == SLO_LOAD) { if (strcasecmp(ext, ".sv0") == 0 || strcasecmp(ext, ".ss0") == 0 ) { GetOldSaveGameName(file, title, last); return FIOS_TYPE_OLD_SCENARIO; @@ -478,10 +540,11 @@ static FiosType FiosGetScenarioListCallback(SaveLoadDialogMode mode, const char /** * Get a list of scenarios. - * @param mode Save/load mode. + * @param fop Purpose of collecting the list. + * @param file_list Destination of the found files. * @see FiosGetFileList */ -void FiosGetScenarioList(SaveLoadDialogMode mode) +void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list) { static char *fios_scn_path = NULL; static char *fios_scn_path_last = NULL; @@ -499,10 +562,11 @@ void FiosGetScenarioList(SaveLoadDialogMode mode) char base_path[MAX_PATH]; FioGetDirectory(base_path, lastof(base_path), SCENARIO_DIR); - FiosGetFileList(mode, &FiosGetScenarioListCallback, (mode == SLD_LOAD_SCENARIO && strcmp(base_path, _fios_path) == 0) ? SCENARIO_DIR : NO_DIRECTORY); + Subdirectory subdir = (fop == SLO_LOAD && strcmp(base_path, _fios_path) == 0) ? SCENARIO_DIR : NO_DIRECTORY; + FiosGetFileList(fop, &FiosGetScenarioListCallback, subdir, file_list); } -static FiosType FiosGetHeightmapListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title, const char *last) +static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) { /* Show heightmap files * .PNG PNG Based heightmap files @@ -548,9 +612,10 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadDialogMode mode, const char /** * Get a list of heightmaps. - * @param mode Save/load mode. + * @param fop Purpose of collecting the list. + * @param file_list Destination of the found files. */ -void FiosGetHeightmapList(SaveLoadDialogMode mode) +void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list) { static char *fios_hmap_path = NULL; static char *fios_hmap_path_last = NULL; @@ -567,7 +632,8 @@ void FiosGetHeightmapList(SaveLoadDialogMode mode) char base_path[MAX_PATH]; FioGetDirectory(base_path, lastof(base_path), HEIGHTMAP_DIR); - FiosGetFileList(mode, &FiosGetHeightmapListCallback, strcmp(base_path, _fios_path) == 0 ? HEIGHTMAP_DIR : NO_DIRECTORY); + Subdirectory subdir = strcmp(base_path, _fios_path) == 0 ? HEIGHTMAP_DIR : NO_DIRECTORY; + FiosGetFileList(fop, &FiosGetHeightmapListCallback, subdir, file_list); } /** diff --git a/src/fios.h b/src/fios.h index 114569e568..acab7d98cf 100644 --- a/src/fios.h +++ b/src/fios.h @@ -1,4 +1,4 @@ -/* $Id: fios.h 26489 2014-04-23 21:23:21Z rubidium $ */ +/* $Id: fios.h 27729 2017-01-14 13:12:49Z frosch $ */ /* * This file is part of OpenTTD. @@ -81,52 +81,17 @@ extern LoadCheckData _load_check_data; enum FileSlots { /** - * Slot used for the GRF scanning and such. This slot cannot be reused - * as it will otherwise cause issues when pressing "rescan directories". - * It can furthermore not be larger than LAST_GRF_SLOT as that complicates - * the testing for "too much NewGRFs". + * Slot used for the GRF scanning and such. + * This slot is used for all temporary accesses to files when scanning/testing files, + * and thus cannot be used for files, which are continuously accessed during a game. */ CONFIG_SLOT = 0, /** Slot for the sound. */ SOUND_SLOT = 1, /** First slot usable for (New)GRFs used during the game. */ FIRST_GRF_SLOT = 2, - /** Last slot usable for (New)GRFs used during the game. */ - LAST_GRF_SLOT = 63, /** Maximum number of slots. */ - MAX_FILE_SLOTS = 64 -}; - -/** Mode of the file dialogue window. */ -enum SaveLoadDialogMode { - SLD_LOAD_GAME, ///< Load a game. - SLD_LOAD_SCENARIO, ///< Load a scenario. - SLD_SAVE_GAME, ///< Save a game. - SLD_SAVE_SCENARIO, ///< Save a scenario. - SLD_LOAD_HEIGHTMAP, ///< Load a heightmap. - SLD_SAVE_HEIGHTMAP, ///< Save a heightmap. -}; - -/** The different types of files that the system knows about. */ -enum FileType { - FT_NONE, ///< nothing to do - FT_SAVEGAME, ///< old or new savegame - FT_SCENARIO, ///< old or new scenario - FT_HEIGHTMAP, ///< heightmap file -}; - -enum FiosType { - FIOS_TYPE_DRIVE, - FIOS_TYPE_PARENT, - FIOS_TYPE_DIR, - FIOS_TYPE_FILE, - FIOS_TYPE_OLDFILE, - FIOS_TYPE_SCENARIO, - FIOS_TYPE_OLD_SCENARIO, - FIOS_TYPE_DIRECT, - FIOS_TYPE_PNG, - FIOS_TYPE_BMP, - FIOS_TYPE_INVALID = 255, + MAX_FILE_SLOTS = 128, }; /** Deals with finding savegames */ @@ -137,12 +102,95 @@ struct FiosItem { char name[MAX_PATH]; }; -/** Deals with the type of the savegame, independent of extension */ -struct SmallFiosItem { - int mode; ///< savegame/scenario type (old, new) - FileType filetype; ///< what type of file are we dealing with - char name[MAX_PATH]; ///< name - char title[255]; ///< internal name of the game +/** List of file information. */ +class FileList { +public: + ~FileList(); + + /** + * Construct a new entry in the file list. + * @return Pointer to the new items to be initialized. + */ + inline FiosItem *Append() + { + return this->files.Append(); + } + + /** + * Get the number of files in the list. + * @return The number of files stored in the list. + */ + inline uint Length() const + { + return this->files.Length(); + } + + /** + * Get a pointer to the first file information. + * @return Address of the first file information. + */ + inline const FiosItem *Begin() const + { + return this->files.Begin(); + } + + /** + * Get a pointer behind the last file information. + * @return Address behind the last file information. + */ + inline const FiosItem *End() const + { + return this->files.End(); + } + + /** + * Get a pointer to the indicated file information. File information must exist. + * @return Address of the indicated existing file information. + */ + inline const FiosItem *Get(uint index) const + { + return this->files.Get(index); + } + + /** + * Get a pointer to the indicated file information. File information must exist. + * @return Address of the indicated existing file information. + */ + inline FiosItem *Get(uint index) + { + return this->files.Get(index); + } + + inline const FiosItem &operator[](uint index) const + { + return this->files[index]; + } + + /** + * Get a reference to the indicated file information. File information must exist. + * @return The requested file information. + */ + inline FiosItem &operator[](uint index) + { + return this->files[index]; + } + + /** Remove all items from the list. */ + inline void Clear() + { + this->files.Clear(); + } + + /** Compact the list down to the smallest block size boundary. */ + inline void Compact() + { + this->files.Compact(); + } + + void BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop); + const FiosItem *FindItem(const char *file); + + SmallVector files; ///< The list of files. }; enum SortingBits { @@ -154,18 +202,14 @@ enum SortingBits { DECLARE_ENUM_AS_BIT_SET(SortingBits) /* Variables to display file lists */ -extern SmallVector _fios_items; -extern SmallFiosItem _file_to_saveload; -extern SaveLoadDialogMode _saveload_mode; extern SortingBits _savegame_sort_order; -void ShowSaveLoadDialog(SaveLoadDialogMode mode); +void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop); -void FiosGetSavegameList(SaveLoadDialogMode mode); -void FiosGetScenarioList(SaveLoadDialogMode mode); -void FiosGetHeightmapList(SaveLoadDialogMode mode); +void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list); +void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list); +void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list); -void FiosFreeSavegameList(); const char *FiosBrowseTo(const FiosItem *item); StringID FiosGetDescText(const char **path, uint64 *total_free); @@ -173,13 +217,8 @@ bool FiosDelete(const char *name); void FiosMakeHeightmapName(char *buf, const char *name, const char *last); void FiosMakeSavegameName(char *buf, const char *name, const char *last); -FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title, const char *last); +FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last); int CDECL CompareFiosItems(const FiosItem *a, const FiosItem *b); -extern const TextColour _fios_colours[]; - -void BuildFileList(); -void SetFiosType(const byte fiostype); - #endif /* FIOS_H */ diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index df875c450d..4b146a6abd 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: fios_gui.cpp 26960 2014-10-05 11:20:02Z peter1138 $ */ +/* $Id: fios_gui.cpp 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -36,7 +36,6 @@ #include "safeguards.h" -SaveLoadDialogMode _saveload_mode; LoadCheckData _load_check_data; ///< Data loaded from save during SL_LOAD_CHECK. static bool _fios_path_changed; @@ -187,33 +186,24 @@ static const NWidgetPart _nested_save_dialog_widgets[] = { EndContainer(), }; -/** Colours for fios types, indexed by #FiosType. */ -const TextColour _fios_colours[] = { - TC_LIGHT_BLUE, TC_DARK_GREEN, TC_DARK_GREEN, TC_ORANGE, TC_LIGHT_BROWN, - TC_ORANGE, TC_LIGHT_BROWN, TC_ORANGE, TC_ORANGE, TC_YELLOW +/** Text colours of #DetailedFileType fios entries in the window. */ +static const TextColour _fios_colours[] = { + TC_LIGHT_BROWN, // DFT_OLD_GAME_FILE + TC_ORANGE, // DFT_GAME_FILE + TC_YELLOW, // DFT_HEIGHTMAP_BMP + TC_ORANGE, // DFT_HEIGHTMAP_PNG + TC_LIGHT_BLUE, // DFT_FIOS_DRIVE + TC_DARK_GREEN, // DFT_FIOS_PARENT + TC_DARK_GREEN, // DFT_FIOS_DIR + TC_ORANGE, // DFT_FIOS_DIRECT }; -void BuildFileList() -{ - _fios_path_changed = true; - FiosFreeSavegameList(); - switch (_saveload_mode) { - case SLD_LOAD_SCENARIO: - case SLD_SAVE_SCENARIO: - FiosGetScenarioList(_saveload_mode); break; - case SLD_SAVE_HEIGHTMAP: - case SLD_LOAD_HEIGHTMAP: - FiosGetHeightmapList(_saveload_mode); break; - - default: FiosGetSavegameList(_saveload_mode); break; - } - - /* Invalidate saveload window */ - InvalidateWindowData(WC_SAVELOAD, 0, 2, true); -} - -static void MakeSortedSaveGameList() +/** + * Sort the collected list save games prior to displaying it in the save/load gui. + * @param [inout] file_list List of save game files found in the directory. + */ +static void SortSaveGameList(FileList &file_list) { uint sort_start = 0; uint sort_end = 0; @@ -222,7 +212,7 @@ static void MakeSortedSaveGameList() * Drives (A:\ (windows only) are always under the files (FIOS_TYPE_DRIVE) * Only sort savegames/scenarios, not directories */ - for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) { + for (const FiosItem *item = file_list.Begin(); item != file_list.End(); item++) { switch (item->type) { case FIOS_TYPE_DIR: sort_start++; break; case FIOS_TYPE_PARENT: sort_start++; break; @@ -231,15 +221,18 @@ static void MakeSortedSaveGameList() } } - uint s_amount = _fios_items.Length() - sort_start - sort_end; - QSortT(_fios_items.Get(sort_start), s_amount, CompareFiosItems); + uint s_amount = file_list.Length() - sort_start - sort_end; + QSortT(file_list.Get(sort_start), s_amount, CompareFiosItems); } struct SaveLoadWindow : public Window { private: QueryString filename_editbox; ///< Filename editbox. + AbstractFileType abstract_filetype; /// Type of file to select. + SaveLoadOperation fop; ///< File operation to perform. + FileList fios_items; ///< Save game list. FiosItem o_dir; - const FiosItem *selected; + const FiosItem *selected; ///< Selected game in #fios_items, or \c NULL. Scrollbar *vscroll; public: @@ -250,35 +243,56 @@ public: this->filename_editbox.text.UpdateSize(); } - SaveLoadWindow(WindowDesc *desc, SaveLoadDialogMode mode) : Window(desc), filename_editbox(64) + SaveLoadWindow(WindowDesc *desc, AbstractFileType abstract_filetype, SaveLoadOperation fop) + : Window(desc), filename_editbox(64), abstract_filetype(abstract_filetype), fop(fop) { - static const StringID saveload_captions[] = { - STR_SAVELOAD_LOAD_CAPTION, - STR_SAVELOAD_LOAD_SCENARIO, - STR_SAVELOAD_SAVE_CAPTION, - STR_SAVELOAD_SAVE_SCENARIO, - STR_SAVELOAD_LOAD_HEIGHTMAP, - STR_SAVELOAD_SAVE_HEIGHTMAP, - }; - assert((uint)mode < lengthof(saveload_captions)); + assert(this->fop == SLO_SAVE || this->fop == SLO_LOAD); - /* Use an array to define what will be the current file type being handled - * by current file mode */ - switch (mode) { - case SLD_SAVE_GAME: this->GenerateFileName(); break; - case SLD_SAVE_HEIGHTMAP: - case SLD_SAVE_SCENARIO: this->filename_editbox.text.Assign("UNNAMED"); break; - default: break; + /* For saving, construct an initial file name. */ + if (this->fop == SLO_SAVE) { + switch (this->abstract_filetype) { + case FT_SAVEGAME: + this->GenerateFileName(); + break; + + case FT_SCENARIO: + case FT_HEIGHTMAP: + this->filename_editbox.text.Assign("UNNAMED"); + break; + + default: + NOT_REACHED(); + } } - this->querystrings[WID_SL_SAVE_OSK_TITLE] = &this->filename_editbox; this->filename_editbox.ok_button = WID_SL_SAVE_GAME; this->CreateNestedTree(true); - if (mode == SLD_LOAD_GAME) this->GetWidget(WID_SL_CONTENT_DOWNLOAD_SEL)->SetDisplayedPlane(SZSP_HORIZONTAL); - this->GetWidget(WID_SL_CAPTION)->widget_data = saveload_captions[mode]; - this->vscroll = this->GetScrollbar(WID_SL_SCROLLBAR); + if (this->fop == SLO_LOAD && this->abstract_filetype == FT_SAVEGAME) { + this->GetWidget(WID_SL_CONTENT_DOWNLOAD_SEL)->SetDisplayedPlane(SZSP_HORIZONTAL); + } + /* Select caption string of the window. */ + StringID caption_string; + switch (this->abstract_filetype) { + case FT_SAVEGAME: + caption_string = (this->fop == SLO_SAVE) ? STR_SAVELOAD_SAVE_CAPTION : STR_SAVELOAD_LOAD_CAPTION; + break; + + case FT_SCENARIO: + caption_string = (this->fop == SLO_SAVE) ? STR_SAVELOAD_SAVE_SCENARIO : STR_SAVELOAD_LOAD_SCENARIO; + break; + + case FT_HEIGHTMAP: + caption_string = (this->fop == SLO_SAVE) ? STR_SAVELOAD_SAVE_HEIGHTMAP : STR_SAVELOAD_LOAD_HEIGHTMAP; + break; + + default: + NOT_REACHED(); + } + this->GetWidget(WID_SL_CAPTION)->widget_data = caption_string; + + this->vscroll = this->GetScrollbar(WID_SL_SCROLLBAR); this->FinishInitNested(0); this->LowerWidget(WID_SL_DRIVES_DIRECTORIES_LIST); @@ -294,20 +308,18 @@ public: ResetObjectToPlace(); + /* Select the initial directory. */ o_dir.type = FIOS_TYPE_DIRECT; - switch (_saveload_mode) { - case SLD_SAVE_GAME: - case SLD_LOAD_GAME: + switch (this->abstract_filetype) { + case FT_SAVEGAME: FioGetDirectory(o_dir.name, lastof(o_dir.name), SAVE_DIR); break; - case SLD_SAVE_SCENARIO: - case SLD_LOAD_SCENARIO: + case FT_SCENARIO: FioGetDirectory(o_dir.name, lastof(o_dir.name), SCENARIO_DIR); break; - case SLD_SAVE_HEIGHTMAP: - case SLD_LOAD_HEIGHTMAP: + case FT_HEIGHTMAP: FioGetDirectory(o_dir.name, lastof(o_dir.name), HEIGHTMAP_DIR); break; @@ -316,9 +328,7 @@ public: } /* Focus the edit box by default in the save windows */ - if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) { - this->SetFocusedWidget(WID_SL_SAVE_OSK_TITLE); - } + if (this->fop == SLO_SAVE) this->SetFocusedWidget(WID_SL_SAVE_OSK_TITLE); } virtual ~SaveLoadWindow() @@ -327,7 +337,6 @@ public: if (!_networking && _game_mode != GM_EDITOR && _game_mode != GM_MENU) { DoCommandP(0, PM_PAUSED_SAVELOAD, 0, CMD_PAUSE); } - FiosFreeSavegameList(); } virtual void DrawWidget(const Rect &r, int widget) const @@ -360,13 +369,13 @@ public: GfxFillRect(r.left + 1, r.top + 1, r.right, r.bottom, PC_BLACK); uint y = r.top + WD_FRAMERECT_TOP; - for (uint pos = this->vscroll->GetPosition(); pos < _fios_items.Length(); pos++) { - const FiosItem *item = _fios_items.Get(pos); + for (uint pos = this->vscroll->GetPosition(); pos < this->fios_items.Length(); pos++) { + const FiosItem *item = this->fios_items.Get(pos); if (item == this->selected) { GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE); } - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[item->type]); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[GetDetailedFileType(item->type)]); y += this->resize.step_height; if (y >= this->vscroll->GetCapacity() * this->resize.step_height + r.top + WD_FRAMERECT_TOP) break; } @@ -421,7 +430,7 @@ public: if (y > y_max) break; /* Hide current date for scenarios */ - if (_saveload_mode != SLD_LOAD_SCENARIO && _saveload_mode != SLD_SAVE_SCENARIO) { + if (this->abstract_filetype != FT_SCENARIO) { /* Current date */ SetDParam(0, _load_check_data.current_date); DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_SERVER_LIST_CURRENT_DATE); @@ -429,7 +438,7 @@ public: } /* Hide the NewGRF stuff when saving. We also hide the button. */ - if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) { + if (this->fop == SLO_LOAD && (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO)) { y += WD_PAR_VSEP_NORMAL; if (y > y_max) break; @@ -442,7 +451,7 @@ public: if (y > y_max) break; /* Hide the company stuff for scenarios */ - if (_saveload_mode != SLD_LOAD_SCENARIO && _saveload_mode != SLD_SAVE_SCENARIO) { + if (this->abstract_filetype != FT_SCENARIO) { y += FONT_HEIGHT_NORMAL; if (y > y_max) break; @@ -495,10 +504,10 @@ public: { if (_savegame_sort_dirty) { _savegame_sort_dirty = false; - MakeSortedSaveGameList(); + SortSaveGameList(this->fios_items); } - this->vscroll->SetCount(_fios_items.Length()); + this->vscroll->SetCount(this->fios_items.Length()); this->DrawWidgets(); } @@ -527,14 +536,14 @@ public: case WID_SL_LOAD_BUTTON: if (this->selected != NULL && !_load_check_data.HasErrors()) { const char *name = FiosBrowseTo(this->selected); - SetFiosType(this->selected->type); + _file_to_saveload.SetMode(this->selected->type); + _file_to_saveload.SetName(name); + _file_to_saveload.SetTitle(this->selected->title); - strecpy(_file_to_saveload.name, name, lastof(_file_to_saveload.name)); - strecpy(_file_to_saveload.title, this->selected->title, lastof(_file_to_saveload.title)); - - if (_saveload_mode == SLD_LOAD_HEIGHTMAP) { + if (this->abstract_filetype == FT_HEIGHTMAP) { delete this; ShowHeightmapLoad(); + } else if (!_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs()) { _switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD_GAME; ClearErrorMessages(); @@ -563,7 +572,7 @@ public: int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WD_FRAMERECT_TOP); if (y == INT_MAX) return; - const FiosItem *file = _fios_items.Get(y); + const FiosItem *file = this->fios_items.Get(y); const char *name = FiosBrowseTo(file); if (name != NULL) { @@ -572,28 +581,32 @@ public: this->selected = file; _load_check_data.Clear(); - if (file->type == FIOS_TYPE_FILE || file->type == FIOS_TYPE_SCENARIO) { - SaveOrLoad(name, SL_LOAD_CHECK, NO_DIRECTORY, false); + if (GetDetailedFileType(file->type) == DFT_GAME_FILE) { + /* Other detailed file types cannot be checked before. */ + SaveOrLoad(name, SLO_CHECK, DFT_GAME_FILE, NO_DIRECTORY, false); } this->InvalidateData(1); } - if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP) { + if (this->fop == SLO_SAVE) { /* Copy clicked name to editbox */ this->filename_editbox.text.Assign(file->title); this->SetWidgetDirty(WID_SL_SAVE_OSK_TITLE); } } else if (!_load_check_data.HasErrors()) { this->selected = file; - if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) { - this->OnClick(pt, WID_SL_LOAD_BUTTON, 1); - } else if (_saveload_mode == SLD_LOAD_HEIGHTMAP) { - SetFiosType(file->type); - strecpy(_file_to_saveload.name, name, lastof(_file_to_saveload.name)); - strecpy(_file_to_saveload.title, file->title, lastof(_file_to_saveload.title)); + if (this->fop == SLO_LOAD) { + if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) { + this->OnClick(pt, WID_SL_LOAD_BUTTON, 1); + } else { + assert(this->abstract_filetype == FT_HEIGHTMAP); + _file_to_saveload.SetMode(file->type); + _file_to_saveload.SetName(name); + _file_to_saveload.SetTitle(file->title); - delete this; - ShowHeightmapLoad(); + delete this; + ShowHeightmapLoad(); + } } } } else { @@ -608,10 +621,11 @@ public: ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); } else { #if defined(ENABLE_NETWORK) - switch (_saveload_mode) { + assert(this->fop == SLO_LOAD); + switch (this->abstract_filetype) { default: NOT_REACHED(); - case SLD_LOAD_SCENARIO: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_SCENARIO); break; - case SLD_LOAD_HEIGHTMAP: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_HEIGHTMAP); break; + case FT_SCENARIO: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_SCENARIO); break; + case FT_HEIGHTMAP: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_HEIGHTMAP); break; } #endif } @@ -639,9 +653,8 @@ public: virtual void OnTimeout() { - /* This test protects against using widgets 11 and 12 which are only available - * in those saveload modes. */ - if (!(_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO || _saveload_mode == SLD_SAVE_HEIGHTMAP)) return; + /* Widgets WID_SL_DELETE_SELECTION and WID_SL_SAVE_GAME only exist when saving to a file. */ + if (this->fop != SLO_SAVE) return; if (this->IsWidgetLowered(WID_SL_DELETE_SELECTION)) { // Delete button clicked if (!FiosDelete(this->filename_editbox.text.buf)) { @@ -649,10 +662,10 @@ public: } else { this->InvalidateData(); /* Reset file name to current date on successful delete */ - if (_saveload_mode == SLD_SAVE_GAME) GenerateFileName(); + if (this->abstract_filetype == FT_SAVEGAME) GenerateFileName(); } } else if (this->IsWidgetLowered(WID_SL_SAVE_GAME)) { // Save button clicked - if (_saveload_mode == SLD_SAVE_GAME || _saveload_mode == SLD_SAVE_SCENARIO) { + if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) { _switch_mode = SM_SAVE_GAME; FiosMakeSavegameName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); } else { @@ -683,28 +696,40 @@ public: this->selected = NULL; _load_check_data.Clear(); if (!gui_scope) break; - BuildFileList(); + + _fios_path_changed = true; + this->fios_items.BuildFileList(this->abstract_filetype, this->fop); + this->vscroll->SetCount(this->fios_items.Length()); + this->selected = NULL; + _load_check_data.Clear(); /* FALL THROUGH */ case 1: /* Selection changes */ if (!gui_scope) break; - if (_saveload_mode == SLD_LOAD_HEIGHTMAP) { - this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, this->selected == NULL || _load_check_data.HasErrors()); + + if (this->fop != SLO_LOAD) break; + + switch (this->abstract_filetype) { + case FT_HEIGHTMAP: + this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, this->selected == NULL || _load_check_data.HasErrors()); + break; + + case FT_SAVEGAME: + case FT_SCENARIO: { + bool disabled = this->selected == NULL || _load_check_data.HasErrors(); + if (!_settings_client.gui.UserIsAllowedToChangeNewGRFs()) { + disabled |= _load_check_data.HasNewGrfs() && _load_check_data.grf_compatibility == GLC_NOT_FOUND; + } + this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, disabled); + this->SetWidgetDisabledState(WID_SL_NEWGRF_INFO, !_load_check_data.HasNewGrfs()); + this->SetWidgetDisabledState(WID_SL_MISSING_NEWGRFS, + !_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility == GLC_ALL_GOOD); + break; + } + + default: + NOT_REACHED(); } - if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) { - this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, - this->selected == NULL || _load_check_data.HasErrors() || !(!_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs())); - this->SetWidgetDisabledState(WID_SL_NEWGRF_INFO, - !_load_check_data.HasNewGrfs()); - this->SetWidgetDisabledState(WID_SL_MISSING_NEWGRFS, - !_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility == GLC_ALL_GOOD); - } - break; - case 2: - /* _fios_items changed */ - this->vscroll->SetCount(_fios_items.Length()); - this->selected = NULL; - _load_check_data.Clear(); break; } } @@ -734,70 +759,24 @@ static WindowDesc _save_dialog_desc( _nested_save_dialog_widgets, lengthof(_nested_save_dialog_widgets) ); -/** - * These values are used to convert the file/operations mode into a corresponding file type. - * So each entry, as expressed by the related comment, is based on the enum - */ -static const FileType _file_modetotype[] = { - FT_SAVEGAME, // used for SLD_LOAD_GAME - FT_SCENARIO, // used for SLD_LOAD_SCENARIO - FT_SAVEGAME, // used for SLD_SAVE_GAME - FT_SCENARIO, // used for SLD_SAVE_SCENARIO - FT_HEIGHTMAP, // used for SLD_LOAD_HEIGHTMAP - FT_HEIGHTMAP, // used for SLD_SAVE_HEIGHTMAP -}; - /** * Launch save/load dialog in the given mode. - * @param mode Save/load mode. + * @param abstract_filetype Kind of file to handle. + * @param fop File operation to perform (load or save). */ -void ShowSaveLoadDialog(SaveLoadDialogMode mode) +void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop) { DeleteWindowById(WC_SAVELOAD, 0); WindowDesc *sld; - switch (mode) { - case SLD_SAVE_GAME: - case SLD_SAVE_SCENARIO: - case SLD_SAVE_HEIGHTMAP: - sld = &_save_dialog_desc; break; - case SLD_LOAD_HEIGHTMAP: - sld = &_load_heightmap_dialog_desc; break; - default: - sld = &_load_dialog_desc; break; + if (fop == SLO_SAVE) { + sld = &_save_dialog_desc; + } else { + /* Dialogue for loading a file. */ + sld = (abstract_filetype == FT_HEIGHTMAP) ? &_load_heightmap_dialog_desc : &_load_dialog_desc; } - _saveload_mode = mode; - _file_to_saveload.filetype = _file_modetotype[mode]; + _file_to_saveload.abstract_ftype = abstract_filetype; - new SaveLoadWindow(sld, mode); -} - -void SetFiosType(const byte fiostype) -{ - switch (fiostype) { - case FIOS_TYPE_FILE: - case FIOS_TYPE_SCENARIO: - _file_to_saveload.mode = SL_LOAD; - break; - - case FIOS_TYPE_OLDFILE: - case FIOS_TYPE_OLD_SCENARIO: - _file_to_saveload.mode = SL_OLD_LOAD; - break; - -#ifdef WITH_PNG - case FIOS_TYPE_PNG: - _file_to_saveload.mode = SL_PNG; - break; -#endif /* WITH_PNG */ - - case FIOS_TYPE_BMP: - _file_to_saveload.mode = SL_BMP; - break; - - default: - _file_to_saveload.mode = SL_INVALID; - break; - } + new SaveLoadWindow(sld, abstract_filetype, fop); } diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index 9733dfdde7..7ee65aef2f 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -1,4 +1,4 @@ -/* $Id: game_info.cpp 27192 2015-03-17 20:33:44Z frosch $ */ +/* $Id: game_info.cpp 27518 2016-03-01 20:00:22Z frosch $ */ /* * This file is part of OpenTTD. @@ -25,7 +25,7 @@ static bool CheckAPIVersion(const char *api_version) { return strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || - strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0; + strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0; } #if defined(WIN32) diff --git a/src/game/game_text.hpp b/src/game/game_text.hpp index e7f554bc79..44c96fe1cf 100644 --- a/src/game/game_text.hpp +++ b/src/game/game_text.hpp @@ -1,4 +1,4 @@ -/* $Id: game_text.hpp 25818 2013-10-06 12:13:20Z frosch $ */ +/* $Id: game_text.hpp 27756 2017-02-26 19:40:53Z frosch $ */ /* * This file is part of OpenTTD. @@ -14,9 +14,6 @@ #include "../core/smallvec_type.hpp" -/** The tab we place our strings in. */ -static const uint GAME_TEXT_TAB = 18; - const char *GetGameStringPtr(uint id); void RegisterGameTranslation(class Squirrel *engine); void ReconsiderGameScriptLanguage(); diff --git a/src/genworld.cpp b/src/genworld.cpp index 9180ed6d16..ff801a3804 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -1,4 +1,4 @@ -/* $Id: genworld.cpp 26538 2014-04-28 21:06:51Z rubidium $ */ +/* $Id: genworld.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -77,7 +77,7 @@ static void CleanupGeneration() { _generating_world = false; - if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); + SetMouseCursorBusy(false); /* Show all vital windows again, because we have hidden them */ if (_gw.threaded && _game_mode != GM_MENU) ShowVitalWindows(); SetModalProgress(false); @@ -204,7 +204,7 @@ static void _GenerateWorld(void *) if (_debug_desync_level > 0) { char name[MAX_PATH]; seprintf(name, lastof(name), "dmp_cmds_%08x_%08x.sav", _settings_game.game_creation.generation_seed, _date); - SaveOrLoad(name, SL_SAVE, AUTOSAVE_DIR, false); + SaveOrLoad(name, SLO_SAVE, DFT_GAME_FILE, AUTOSAVE_DIR, false); } } catch (...) { BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP, true); @@ -331,7 +331,7 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti _gw.thread = NULL; } - if (!VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&_GenerateWorld, NULL, &_gw.thread)) { + if (!VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&_GenerateWorld, NULL, &_gw.thread, "ottd:genworld")) { DEBUG(misc, 1, "Cannot create genworld thread, reverting to single-threaded mode"); _gw.threaded = false; _modal_progress_work_mutex->EndCritical(); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 714d2d2d01..6307b4e189 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: genworld_gui.cpp 27285 2015-05-16 12:01:19Z alberth $ */ +/* $Id: genworld_gui.cpp 27650 2016-09-04 12:57:43Z alberth $ */ /* * This file is part of OpenTTD. @@ -26,6 +26,7 @@ #include "town.h" #include "core/geometry_func.hpp" #include "core/random_func.hpp" +#include "saveload/saveload.h" #include "progress.h" #include "error.h" @@ -832,7 +833,7 @@ static void _ShowGenerateLandscape(GenerateLandscapeWindowMode mode) if (mode == GLWM_HEIGHTMAP) { /* If the function returns negative, it means there was a problem loading the heightmap */ - if (!GetHeightmapDimensions(_file_to_saveload.name, &x, &y)) return; + if (!GetHeightmapDimensions(_file_to_saveload.detail_ftype, _file_to_saveload.name, &x, &y)) return; } WindowDesc *desc = (mode == GLWM_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc; @@ -1190,7 +1191,7 @@ struct GenerateProgressWindow : public Window { { switch (widget) { case WID_GP_ABORT: - if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); + SetMouseCursorBusy(false); ShowQuery( STR_GENERATION_ABORT_CAPTION, STR_GENERATION_ABORT_MESSAGE, diff --git a/src/gfx.cpp b/src/gfx.cpp index 34e5f43660..adf7fc961e 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1,4 +1,4 @@ -/* $Id: gfx.cpp 27381 2015-08-10 20:24:13Z michi_cc $ */ +/* $Id: gfx.cpp 27628 2016-08-15 18:33:08Z frosch $ */ /* * This file is part of OpenTTD. @@ -1223,10 +1223,6 @@ void DrawMouseCursor() if (_screen.dst_ptr == NULL) return; Blitter *blitter = BlitterFactory::GetCurrentBlitter(); - int x; - int y; - int w; - int h; /* Redraw mouse cursor but only when it's inside the window */ if (!_cursor.in_window) return; @@ -1237,36 +1233,44 @@ void DrawMouseCursor() UndrawMouseCursor(); } - w = _cursor.size.x; - x = _cursor.pos.x + _cursor.offs.x + _cursor.short_vehicle_offset; - if (x < 0) { - w += x; - x = 0; + /* Determine visible area */ + int left = _cursor.pos.x + _cursor.total_offs.x; + int width = _cursor.total_size.x; + if (left < 0) { + width += left; + left = 0; } - if (w > _screen.width - x) w = _screen.width - x; - if (w <= 0) return; - _cursor.draw_pos.x = x; - _cursor.draw_size.x = w; - - h = _cursor.size.y; - y = _cursor.pos.y + _cursor.offs.y; - if (y < 0) { - h += y; - y = 0; + if (left + width > _screen.width) { + width = _screen.width - left; } - if (h > _screen.height - y) h = _screen.height - y; - if (h <= 0) return; - _cursor.draw_pos.y = y; - _cursor.draw_size.y = h; + if (width <= 0) return; - uint8 *buffer = _cursor_backup.Allocate(blitter->BufferSize(w, h)); + int top = _cursor.pos.y + _cursor.total_offs.y; + int height = _cursor.total_size.y; + if (top < 0) { + height += top; + top = 0; + } + if (top + height > _screen.height) { + height = _screen.height - top; + } + if (height <= 0) return; + + _cursor.draw_pos.x = left; + _cursor.draw_pos.y = top; + _cursor.draw_size.x = width; + _cursor.draw_size.y = height; + + uint8 *buffer = _cursor_backup.Allocate(blitter->BufferSize(_cursor.draw_size.x, _cursor.draw_size.y)); /* Make backup of stuff below cursor */ blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), buffer, _cursor.draw_size.x, _cursor.draw_size.y); /* Draw cursor on screen */ _cur_dpi = &_screen; - DrawSprite(_cursor.sprite, _cursor.pal, _cursor.pos.x + _cursor.short_vehicle_offset, _cursor.pos.y); + for (uint i = 0; i < _cursor.sprite_count; ++i) { + DrawSprite(_cursor.sprite_seq[i].sprite, _cursor.sprite_seq[i].pal, _cursor.pos.x + _cursor.sprite_pos[i].x, _cursor.pos.y + _cursor.sprite_pos[i].y); + } VideoDriver::GetInstance()->MakeDirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y); @@ -1525,15 +1529,33 @@ bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int heigh */ void UpdateCursorSize() { - CursorVars *cv = &_cursor; - const Sprite *p = GetSprite(GB(cv->sprite, 0, SPRITE_WIDTH), ST_NORMAL); + /* Ignore setting any cursor before the sprites are loaded. */ + if (GetMaxSpriteID() == 0) return; - cv->size.y = UnScaleGUI(p->height); - cv->size.x = UnScaleGUI(p->width); - cv->offs.x = UnScaleGUI(p->x_offs); - cv->offs.y = UnScaleGUI(p->y_offs); + assert_compile(lengthof(_cursor.sprite_seq) == lengthof(_cursor.sprite_pos)); + assert(_cursor.sprite_count <= lengthof(_cursor.sprite_seq)); + for (uint i = 0; i < _cursor.sprite_count; ++i) { + const Sprite *p = GetSprite(GB(_cursor.sprite_seq[i].sprite, 0, SPRITE_WIDTH), ST_NORMAL); + Point offs, size; + offs.x = UnScaleGUI(p->x_offs) + _cursor.sprite_pos[i].x; + offs.y = UnScaleGUI(p->y_offs) + _cursor.sprite_pos[i].y; + size.x = UnScaleGUI(p->width); + size.y = UnScaleGUI(p->height); - cv->dirty = true; + if (i == 0) { + _cursor.total_offs = offs; + _cursor.total_size = size; + } else { + int right = max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x); + int bottom = max(_cursor.total_offs.y + _cursor.total_size.y, offs.y + size.y); + if (offs.x < _cursor.total_offs.x) _cursor.total_offs.x = offs.x; + if (offs.y < _cursor.total_offs.y) _cursor.total_offs.y = offs.y; + _cursor.total_size.x = right - _cursor.total_offs.x; + _cursor.total_size.y = bottom - _cursor.total_offs.y; + } + } + + _cursor.dirty = true; } /** @@ -1543,14 +1565,15 @@ void UpdateCursorSize() */ static void SetCursorSprite(CursorID cursor, PaletteID pal) { - CursorVars *cv = &_cursor; - if (cv->sprite == cursor) return; + if (_cursor.sprite_count == 1 && _cursor.sprite_seq[0].sprite == cursor && _cursor.sprite_seq[0].pal == pal) return; + + _cursor.sprite_count = 1; + _cursor.sprite_seq[0].sprite = cursor; + _cursor.sprite_seq[0].pal = pal; + _cursor.sprite_pos[0].x = 0; + _cursor.sprite_pos[0].y = 0; - cv->sprite = cursor; - cv->pal = pal; UpdateCursorSize(); - - cv->short_vehicle_offset = 0; } static void SwitchAnimatedCursor() @@ -1559,7 +1582,7 @@ static void SwitchAnimatedCursor() if (cur == NULL || cur->sprite == AnimCursor::LAST) cur = _cursor.animate_list; - SetCursorSprite(cur->sprite, _cursor.pal); + SetCursorSprite(cur->sprite, _cursor.sprite_seq[0].pal); _cursor.animate_timeout = cur->display_time; _cursor.animate_cur = cur + 1; @@ -1572,6 +1595,19 @@ void CursorTick() } } +/** + * Set or unset the ZZZ cursor. + * @param busy Whether to show the ZZZ cursor. + */ +void SetMouseCursorBusy(bool busy) +{ + if (busy) { + if (_cursor.sprite_seq[0].sprite == SPR_CURSOR_MOUSE) SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE); + } else { + if (_cursor.sprite_seq[0].sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); + } +} + /** * Assign a single non-animated sprite to the cursor. * @param sprite Sprite to draw for the cursor. @@ -1595,7 +1631,7 @@ void SetAnimatedMouseCursor(const AnimCursor *table) { _cursor.animate_list = table; _cursor.animate_cur = NULL; - _cursor.pal = PAL_NONE; + _cursor.sprite_seq[0].pal = PAL_NONE; SwitchAnimatedCursor(); } diff --git a/src/gfx_func.h b/src/gfx_func.h index 155da59924..0514264b46 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -1,4 +1,4 @@ -/* $Id: gfx_func.h 27134 2015-02-01 20:54:24Z frosch $ */ +/* $Id: gfx_func.h 27711 2016-12-25 17:55:10Z frosch $ */ /* * This file is part of OpenTTD. @@ -145,6 +145,7 @@ bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int heigh /* window.cpp */ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom); +void SetMouseCursorBusy(bool busy); void SetMouseCursor(CursorID cursor, PaletteID pal); void SetAnimatedMouseCursor(const AnimCursor *table); void CursorTick(); @@ -160,16 +161,16 @@ void GetBroadestDigit(uint *front, uint *next, FontSize size = FS_NORMAL); int GetCharacterHeight(FontSize size); -/** Height of characters in the small (#FS_SMALL) font. */ +/** Height of characters in the small (#FS_SMALL) font. @note Some characters may be oversized. */ #define FONT_HEIGHT_SMALL (GetCharacterHeight(FS_SMALL)) -/** Height of characters in the normal (#FS_NORMAL) font. */ +/** Height of characters in the normal (#FS_NORMAL) font. @note Some characters may be oversized. */ #define FONT_HEIGHT_NORMAL (GetCharacterHeight(FS_NORMAL)) -/** Height of characters in the large (#FS_LARGE) font. */ +/** Height of characters in the large (#FS_LARGE) font. @note Some characters may be oversized. */ #define FONT_HEIGHT_LARGE (GetCharacterHeight(FS_LARGE)) -/** Height of characters in the large (#FS_MONO) font. */ +/** Height of characters in the large (#FS_MONO) font. @note Some characters may be oversized. */ #define FONT_HEIGHT_MONO (GetCharacterHeight(FS_MONO)) extern DrawPixelInfo *_cur_dpi; diff --git a/src/gfx_type.h b/src/gfx_type.h index 3d0da98454..331870d432 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -1,4 +1,4 @@ -/* $Id: gfx_type.h 27340 2015-07-26 09:47:17Z frosch $ */ +/* $Id: gfx_type.h 27628 2016-08-15 18:33:08Z frosch $ */ /* * This file is part of OpenTTD. @@ -115,29 +115,35 @@ struct AnimCursor { /** Collection of variables for cursor-display and -animation */ struct CursorVars { - Point pos, size, offs, delta; ///< position, size, offset from top-left, and movement - Point draw_pos, draw_size; ///< position and size bounding-box for drawing - int short_vehicle_offset; ///< offset of the X for short vehicles - CursorID sprite; ///< current image of cursor - PaletteID pal; - - int wheel; ///< mouse wheel movement + /* Logical mouse position */ + Point pos; ///< logical mouse position + Point delta; ///< relative mouse movement in this tick + int wheel; ///< mouse wheel movement + bool fix_at; ///< mouse is moving, but cursor is not (used for scrolling) /* We need two different vars to keep track of how far the scrollwheel moved. * OSX uses this for scrolling around the map. */ int v_wheel; int h_wheel; + /* Mouse appearance */ + PalSpriteID sprite_seq[16]; ///< current image of cursor + Point sprite_pos[16]; ///< relative position of individual sprites + uint sprite_count; ///< number of sprites to draw + Point total_offs, total_size; ///< union of sprite properties + + Point draw_pos, draw_size; ///< position and size bounding-box for drawing + const AnimCursor *animate_list; ///< in case of animated cursor, list of frames const AnimCursor *animate_cur; ///< in case of animated cursor, current frame uint animate_timeout; ///< in case of animated cursor, number of ticks to show the current cursor - bool visible; ///< cursor is visible - bool dirty; ///< the rect occupied by the mouse is dirty (redraw) - bool fix_at; ///< mouse is moving, but cursor is not (used for scrolling) - bool in_window; ///< mouse inside this window, determines drawing logic + bool visible; ///< cursor is visible + bool dirty; ///< the rect occupied by the mouse is dirty (redraw) + bool in_window; ///< mouse inside this window, determines drawing logic - bool vehchain; ///< vehicle chain is dragged + /* Drag data */ + bool vehchain; ///< vehicle chain is dragged bool UpdateCursorPosition(int x, int y, bool queued_warp); diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index e50327c5e4..6396c99709 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -1,4 +1,4 @@ -/* $Id: gfxinit.cpp 26919 2014-09-25 16:04:02Z peter1138 $ */ +/* $Id: gfxinit.cpp 27775 2017-03-11 13:05:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -197,31 +197,49 @@ static void LoadSpriteTables() InitializeUnicodeGlyphMap(); /* - * Load the base NewGRF with OTTD required graphics as first NewGRF. + * Load the base and extra NewGRF with OTTD required graphics as first NewGRF. * However, we do not want it to show up in the list of used NewGRFs, * so we have to manually add it, and then remove it later. */ GRFConfig *top = _grfconfig; - GRFConfig *master = new GRFConfig(used_set->files[GFT_EXTRA].filename); + + /* Default extra graphics */ + GRFConfig *master = new GRFConfig("OPENTTD.GRF"); + master->palette |= GRFP_GRF_DOS; + FillGRFDetails(master, false, BASESET_DIR); + ClrBit(master->flags, GCF_INIT_ONLY); + + /* Baseset extra graphics */ + GRFConfig *extra = new GRFConfig(used_set->files[GFT_EXTRA].filename); /* We know the palette of the base set, so if the base NewGRF is not * setting one, use the palette of the base set and not the global * one which might be the wrong palette for this base NewGRF. * The value set here might be overridden via action14 later. */ switch (used_set->palette) { - case PAL_DOS: master->palette |= GRFP_GRF_DOS; break; - case PAL_WINDOWS: master->palette |= GRFP_GRF_WINDOWS; break; + case PAL_DOS: extra->palette |= GRFP_GRF_DOS; break; + case PAL_WINDOWS: extra->palette |= GRFP_GRF_WINDOWS; break; default: break; } - FillGRFDetails(master, false, BASESET_DIR); + FillGRFDetails(extra, false, BASESET_DIR); + ClrBit(extra->flags, GCF_INIT_ONLY); - ClrBit(master->flags, GCF_INIT_ONLY); - master->next = top; + extra->next = top; + master->next = extra; _grfconfig = master; - LoadNewGRF(SPR_NEWGRFS_BASE, i); + LoadNewGRF(SPR_NEWGRFS_BASE, i, 2); + + uint total_extra_graphics = SPR_NEWGRFS_BASE - SPR_OPENTTD_BASE; + _missing_extra_graphics = GetSpriteCountForSlot(i, SPR_OPENTTD_BASE, SPR_NEWGRFS_BASE); + DEBUG(sprite, 1, "%u extra sprites, %u from baseset, %u from fallback", total_extra_graphics, total_extra_graphics - _missing_extra_graphics, _missing_extra_graphics); + + /* The original baseset extra graphics intentionally make use of the fallback graphics. + * Let's say everything which provides less than 500 sprites misses the rest intentionally. */ + if (500 + _missing_extra_graphics > total_extra_graphics) _missing_extra_graphics = 0; /* Free and remove the top element. */ + delete extra; delete master; _grfconfig = top; } @@ -272,6 +290,8 @@ static bool SwitchNewGRFBlitter() const bool animation_wanted = HasBit(_display_opt, DO_FULL_ANIMATION); const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); + VideoDriver::GetInstance()->AcquireBlitterLock(); + for (uint i = 0; i < lengthof(replacement_blitters); i++) { if (animation_wanted && (replacement_blitters[i].animation == 0)) continue; if (!animation_wanted && (replacement_blitters[i].animation == 1)) continue; @@ -280,7 +300,10 @@ static bool SwitchNewGRFBlitter() if (!IsInsideMM(depth_wanted_by_grf, replacement_blitters[i].min_grf_depth, replacement_blitters[i].max_grf_depth + 1)) continue; const char *repl_blitter = replacement_blitters[i].name; - if (strcmp(repl_blitter, cur_blitter) == 0) return false; + if (strcmp(repl_blitter, cur_blitter) == 0) { + VideoDriver::GetInstance()->ReleaseBlitterLock(); + return false; + } if (BlitterFactory::GetBlitterFactory(repl_blitter) == NULL) continue; DEBUG(misc, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter); @@ -295,6 +318,8 @@ static bool SwitchNewGRFBlitter() if (BlitterFactory::SelectBlitter(cur_blitter) == NULL || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config"); } + VideoDriver::GetInstance()->ReleaseBlitterLock(); + return true; } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 8d9be9a504..99b8da1bb9 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: group_gui.cpp 27300 2015-06-20 11:05:11Z frosch $ */ +/* $Id: group_gui.cpp 27630 2016-08-15 18:33:52Z frosch $ */ /* * This file is part of OpenTTD. @@ -627,8 +627,8 @@ public: this->vehicle_sel = v->index; - int image = v->GetImage(_current_text_dir == TD_RTL ? DIR_E : DIR_W, EIT_IN_LIST); - SetObjectToPlaceWnd(image, GetVehiclePalette(v), HT_DRAG, this); + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + SetMouseCursorVehicle(v, EIT_IN_LIST); _cursor.vehchain = true; this->SetDirty(); diff --git a/src/heightmap.cpp b/src/heightmap.cpp index cca3ab4de1..78e9ac3db5 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -1,4 +1,4 @@ -/* $Id: heightmap.cpp 27044 2014-10-25 22:24:05Z frosch $ */ +/* $Id: heightmap.cpp 27650 2016-09-04 12:57:43Z alberth $ */ /* * This file is part of OpenTTD. @@ -102,7 +102,7 @@ static void ReadHeightmapPNGImageData(byte *map, png_structp png_ptr, png_infop * If map == NULL only the size of the PNG is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ -static bool ReadHeightmapPNG(char *filename, uint *x, uint *y, byte **map) +static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, byte **map) { FILE *fp; png_structp png_ptr = NULL; @@ -232,7 +232,7 @@ static void ReadHeightmapBMPImageData(byte *map, BmpInfo *info, BmpData *data) * If map == NULL only the size of the BMP is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ -static bool ReadHeightmapBMP(char *filename, uint *x, uint *y, byte **map) +static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, byte **map) { FILE *f; BmpInfo info; @@ -444,45 +444,56 @@ void FixSlopes() } /** - * Reads the heightmap with the correct file reader + * Reads the heightmap with the correct file reader. + * @param dft Type of image file. + * @param filename Name of the file to load. + * @param [out] x Length of the image. + * @param [out] y Height of the image. + * @param [inout] map If not \c NULL, destination to store the loaded block of image data. + * @return Whether loading was successful. */ -static bool ReadHeightMap(char *filename, uint *x, uint *y, byte **map) +static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, byte **map) { - switch (_file_to_saveload.mode) { - default: NOT_REACHED(); + switch (dft) { + default: + NOT_REACHED(); + #ifdef WITH_PNG - case SL_PNG: + case DFT_HEIGHTMAP_PNG: return ReadHeightmapPNG(filename, x, y, map); #endif /* WITH_PNG */ - case SL_BMP: + + case DFT_HEIGHTMAP_BMP: return ReadHeightmapBMP(filename, x, y, map); } } /** * Get the dimensions of a heightmap. + * @param dft Type of image file. * @param filename to query * @param x dimension x * @param y dimension y * @return Returns false if loading of the image failed. */ -bool GetHeightmapDimensions(char *filename, uint *x, uint *y) +bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, uint *y) { - return ReadHeightMap(filename, x, y, NULL); + return ReadHeightMap(dft, filename, x, y, NULL); } /** * Load a heightmap from file and change the map in his current dimensions * to a landscape representing the heightmap. * It converts pixels to height. The brighter, the higher. + * @param dft Type of image file. * @param filename of the heightmap file to be imported */ -void LoadHeightmap(char *filename) +void LoadHeightmap(DetailedFileType dft, const char *filename) { uint x, y; byte *map = NULL; - if (!ReadHeightMap(filename, &x, &y, &map)) { + if (!ReadHeightMap(dft, filename, &x, &y, &map)) { free(map); return; } diff --git a/src/heightmap.h b/src/heightmap.h index 39aa404972..35b71b9284 100644 --- a/src/heightmap.h +++ b/src/heightmap.h @@ -1,4 +1,4 @@ -/* $Id: heightmap.h 21845 2011-01-18 22:31:06Z rubidium $ */ +/* $Id: heightmap.h 27650 2016-09-04 12:57:43Z alberth $ */ /* * This file is part of OpenTTD. @@ -12,6 +12,8 @@ #ifndef HEIGHTMAP_H #define HEIGHTMAP_H +#include "fileio_type.h" + /** * Order of these enums has to be the same as in lang/english.txt * Otherwise you will get inconsistent behaviour. @@ -21,8 +23,8 @@ enum HeightmapRotation { HM_CLOCKWISE, ///< Rotate the map clockwise 45 degrees }; -bool GetHeightmapDimensions(char *filename, uint *x, uint *y); -void LoadHeightmap(char *filename); +bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, uint *y); +void LoadHeightmap(DetailedFileType dft, const char *filename); void FlatEmptyWorld(byte tile_height); void FixSlopes(); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index f8ac814017..b932ec7d85 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: industry_gui.cpp 27277 2015-05-09 09:24:19Z frosch $ */ +/* $Id: industry_gui.cpp 27751 2017-02-26 15:34:15Z alberth $ */ /* * This file is part of OpenTTD. @@ -56,6 +56,20 @@ enum CargoSuffixType { CST_DIR, ///< Industry-directory window }; +/** Ways of displaying the cargo. */ +enum CargoSuffixDisplay { + CSD_CARGO, ///< Display the cargo without sub-type (cb37 result 401). + CSD_CARGO_AMOUNT, ///< Display the cargo and amount (if useful), but no sub-type (cb37 result 400 or fail). + CSD_CARGO_TEXT, ///< Display then cargo and supplied string (cb37 result 800-BFF). + CSD_CARGO_AMOUNT_TEXT, ///< Display then cargo, amount, and string (cb37 result 000-3FF). +}; + +/** Transfer storage of cargo suffix information. */ +struct CargoSuffix { + CargoSuffixDisplay display; ///< How to display the cargo and text. + char text[512]; ///< Cargo suffix text. +}; + static void ShowIndustryCargoesWindow(IndustryType id); /** @@ -71,20 +85,51 @@ static void ShowIndustryCargoesWindow(IndustryType id); * @param ind_type the industry type * @param indspec the industry spec * @param suffix is filled with the string to display - * @param suffix_last lastof(suffix) */ -static void GetCargoSuffix(uint cargo, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, char *suffix, const char *suffix_last) +static void GetCargoSuffix(uint cargo, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, CargoSuffix &suffix) { - suffix[0] = '\0'; + suffix.text[0] = '\0'; + suffix.display = CSD_CARGO_AMOUNT; + if (HasBit(indspec->callback_mask, CBM_IND_CARGO_SUFFIX)) { - uint16 callback = GetIndustryCallback(CBID_INDUSTRY_CARGO_SUFFIX, 0, (cst << 8) | cargo, const_cast(ind), ind_type, (cst != CST_FUND) ? ind->location.tile : INVALID_TILE); - if (callback == CALLBACK_FAILED || callback == 0x400) return; - if (callback > 0x400) { + TileIndex t = (cst != CST_FUND) ? ind->location.tile : INVALID_TILE; + uint16 callback = GetIndustryCallback(CBID_INDUSTRY_CARGO_SUFFIX, 0, (cst << 8) | cargo, const_cast(ind), ind_type, t); + if (callback == CALLBACK_FAILED) return; + + if (indspec->grf_prop.grffile->grf_version < 8) { + if (GB(callback, 0, 8) == 0xFF) return; + if (callback < 0x400) { + StartTextRefStackUsage(indspec->grf_prop.grffile, 6); + GetString(suffix.text, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), lastof(suffix.text)); + StopTextRefStackUsage(); + suffix.display = CSD_CARGO_AMOUNT_TEXT; + return; + } ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_CARGO_SUFFIX, callback); - } else if (indspec->grf_prop.grffile->grf_version >= 8 || GB(callback, 0, 8) != 0xFF) { - StartTextRefStackUsage(indspec->grf_prop.grffile, 6); - GetString(suffix, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), suffix_last); - StopTextRefStackUsage(); + return; + + } else { // GRF version 8 or higher. + if (callback == 0x400) return; + if (callback == 0x401) { + suffix.display = CSD_CARGO; + return; + } + if (callback < 0x400) { + StartTextRefStackUsage(indspec->grf_prop.grffile, 6); + GetString(suffix.text, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), lastof(suffix.text)); + StopTextRefStackUsage(); + suffix.display = CSD_CARGO_AMOUNT_TEXT; + return; + } + if (callback >= 0x800 && callback < 0xC00) { + StartTextRefStackUsage(indspec->grf_prop.grffile, 6); + GetString(suffix.text, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 - 0x800 + callback), lastof(suffix.text)); + StopTextRefStackUsage(); + suffix.display = CSD_CARGO_TEXT; + return; + } + ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_CARGO_SUFFIX, callback); + return; } } } @@ -105,9 +150,9 @@ static inline void GetAllCargoSuffixes(uint cb_offset, CargoSuffixType cst, cons assert_compile(lengthof(cargoes) <= lengthof(suffixes)); for (uint j = 0; j < lengthof(cargoes); j++) { if (cargoes[j] != CT_INVALID) { - GetCargoSuffix(cb_offset + j, cst, ind, ind_type, indspec, suffixes[j], lastof(suffixes[j])); + GetCargoSuffix(cb_offset + j, cst, ind, ind_type, indspec, suffixes[j]); } else { - suffixes[j][0] = '\0'; + suffixes[j].text[0] = '\0'; } } } @@ -313,7 +358,7 @@ public: const IndustrySpec *indsp = GetIndustrySpec(this->index[i]); - char cargo_suffix[3][512]; + CargoSuffix cargo_suffix[3]; GetAllCargoSuffixes(0, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; byte p = 0; @@ -323,7 +368,7 @@ public: if (indsp->accepts_cargo[j] == CT_INVALID) continue; if (p > 0) str++; SetDParam(p++, CargoSpec::Get(indsp->accepts_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j]); + SetDParamStr(p++, cargo_suffix[j].text); } d = maxdim(d, GetStringBoundingBox(str)); @@ -337,7 +382,7 @@ public: if (indsp->produced_cargo[j] == CT_INVALID) continue; if (p > 0) str++; SetDParam(p++, CargoSpec::Get(indsp->produced_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j]); + SetDParamStr(p++, cargo_suffix[j].text); } d = maxdim(d, GetStringBoundingBox(str)); } @@ -432,7 +477,7 @@ public: } /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ - char cargo_suffix[3][512]; + CargoSuffix cargo_suffix[3]; GetAllCargoSuffixes(0, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; byte p = 0; @@ -442,7 +487,7 @@ public: if (indsp->accepts_cargo[j] == CT_INVALID) continue; if (p > 0) str++; SetDParam(p++, CargoSpec::Get(indsp->accepts_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j]); + SetDParamStr(p++, cargo_suffix[j].text); } DrawString(left, right, y, str); y += FONT_HEIGHT_NORMAL; @@ -457,7 +502,7 @@ public: if (indsp->produced_cargo[j] == CT_INVALID) continue; if (p > 0) str++; SetDParam(p++, CargoSpec::Get(indsp->produced_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j]); + SetDParamStr(p++, cargo_suffix[j].text); } DrawString(left, right, y, str); y += FONT_HEIGHT_NORMAL; @@ -713,44 +758,57 @@ public: int y = top + WD_FRAMERECT_TOP; bool first = true; bool has_accept = false; - char cargo_suffix[3][512]; if (i->prod_level == PRODLEVEL_CLOSURE) { DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE); y += 2 * FONT_HEIGHT_NORMAL; } - if (HasBit(ind->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(ind->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) { - GetAllCargoSuffixes(0, CST_VIEW, i, i->type, ind, i->accepts_cargo, cargo_suffix); - for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { - if (i->accepts_cargo[j] == CT_INVALID) continue; - has_accept = true; - if (first) { - DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING); - y += FONT_HEIGHT_NORMAL; - first = false; - } - SetDParam(0, i->accepts_cargo[j]); - SetDParam(1, i->incoming_cargo_waiting[j]); - SetDParamStr(2, cargo_suffix[j]); - DrawString(left + WD_FRAMETEXT_LEFT, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO); + CargoSuffix cargo_suffix[3]; + GetAllCargoSuffixes(0, CST_VIEW, i, i->type, ind, i->accepts_cargo, cargo_suffix); + bool stockpiling = HasBit(ind->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(ind->callback_mask, CBM_IND_PRODUCTION_256_TICKS); + + uint left_side = left + WD_FRAMERECT_LEFT * 4; // Indent accepted cargoes. + for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { + if (i->accepts_cargo[j] == CT_INVALID) continue; + has_accept = true; + if (first) { + DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_REQUIRES); y += FONT_HEIGHT_NORMAL; + first = false; } - } else { - GetAllCargoSuffixes(0, CST_VIEW, i, i->type, ind, i->accepts_cargo, cargo_suffix); - StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; - byte p = 0; - for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { - if (i->accepts_cargo[j] == CT_INVALID) continue; - has_accept = true; - if (p > 0) str++; - SetDParam(p++, CargoSpec::Get(i->accepts_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j]); - } - if (has_accept) { - DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, str); - y += FONT_HEIGHT_NORMAL; + switch (cargo_suffix[j].display) { + case CSD_CARGO_AMOUNT: + if (stockpiling) { + SetDParam(0, i->accepts_cargo[j]); + SetDParam(1, i->incoming_cargo_waiting[j]); + DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT); + break; + } + /* FALL THROUGH */ + + case CSD_CARGO: + SetDParam(0, CargoSpec::Get(i->accepts_cargo[j])->name); + DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO); + break; + + case CSD_CARGO_TEXT: + SetDParam(0, CargoSpec::Get(i->accepts_cargo[j])->name); + SetDParamStr(1, cargo_suffix[j].text); + DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT); + break; + + case CSD_CARGO_AMOUNT_TEXT: + SetDParam(0, i->accepts_cargo[j]); + SetDParam(1, i->incoming_cargo_waiting[j]); + SetDParamStr(2, cargo_suffix[j].text); + DrawString(left_side, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT); + break; + + default: + NOT_REACHED(); } + y += FONT_HEIGHT_NORMAL; } GetAllCargoSuffixes(3, CST_VIEW, i, i->type, ind, i->produced_cargo, cargo_suffix); @@ -767,7 +825,7 @@ public: SetDParam(0, i->produced_cargo[j]); SetDParam(1, i->last_month_production[j]); - SetDParamStr(2, cargo_suffix[j]); + SetDParamStr(2, cargo_suffix[j].text); SetDParam(3, ToPercent8(i->last_month_pct_transported[j])); uint x = left + WD_FRAMETEXT_LEFT + (this->editable == EA_RATE ? SETTING_BUTTON_WIDTH + 10 : 0); DrawString(x, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_TRANSPORTED); @@ -1204,7 +1262,7 @@ protected: /* Industry name */ SetDParam(p++, i->index); - static char cargo_suffix[lengthof(i->produced_cargo)][512]; + static CargoSuffix cargo_suffix[lengthof(i->produced_cargo)]; GetAllCargoSuffixes(3, CST_DIR, i, i->type, indsp, i->produced_cargo, cargo_suffix); /* Industry productions */ @@ -1212,7 +1270,7 @@ protected: if (i->produced_cargo[j] == CT_INVALID) continue; SetDParam(p++, i->produced_cargo[j]); SetDParam(p++, i->last_month_production[j]); - SetDParamStr(p++, cargo_suffix[j]); + SetDParamStr(p++, cargo_suffix[j].text); } /* Transported productions */ diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index cbe13fc82c..9d99228c28 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: intro_gui.cpp 26986 2014-10-09 21:16:29Z frosch $ */ +/* $Id: intro_gui.cpp 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -60,13 +60,21 @@ struct SelectGameWindow : public Window { virtual void OnInit() { - bool missing = _current_language->missing >= _settings_client.gui.missing_strings_threshold && !IsReleasedVersion(); - this->GetWidget(WID_SGI_TRANSLATION_SELECTION)->SetDisplayedPlane(missing ? 0 : SZSP_NONE); + bool missing_sprites = _missing_extra_graphics > 0 && !IsReleasedVersion(); + this->GetWidget(WID_SGI_BASESET_SELECTION)->SetDisplayedPlane(missing_sprites ? 0 : SZSP_NONE); + + bool missing_lang = _current_language->missing >= _settings_client.gui.missing_strings_threshold && !IsReleasedVersion(); + this->GetWidget(WID_SGI_TRANSLATION_SELECTION)->SetDisplayedPlane(missing_lang ? 0 : SZSP_NONE); } virtual void DrawWidget(const Rect &r, int widget) const { switch (widget) { + case WID_SGI_BASESET: + SetDParam(0, _missing_extra_graphics); + DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_INTRO_BASESET, TC_FROMSTRING, SA_CENTER); + break; + case WID_SGI_TRANSLATION: SetDParam(0, _current_language->missing); DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_INTRO_TRANSLATION, TC_FROMSTRING, SA_CENTER); @@ -76,20 +84,29 @@ struct SelectGameWindow : public Window { virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { + StringID str = 0; switch (widget) { - case WID_SGI_TRANSLATION: { - SetDParam(0, _current_language->missing); - int height = GetStringHeight(STR_INTRO_TRANSLATION, size->width); - if (height > 3 * FONT_HEIGHT_NORMAL) { - /* Don't let the window become too high. */ - Dimension textdim = GetStringBoundingBox(STR_INTRO_TRANSLATION); - textdim.height *= 3; - textdim.width -= textdim.width / 2; - *size = maxdim(*size, textdim); - } else { - size->height = height + padding.height; - } + case WID_SGI_BASESET: + SetDParam(0, _missing_extra_graphics); + str = STR_INTRO_BASESET; break; + + case WID_SGI_TRANSLATION: + SetDParam(0, _current_language->missing); + str = STR_INTRO_TRANSLATION; + break; + } + + if (str != 0) { + int height = GetStringHeight(str, size->width); + if (height > 3 * FONT_HEIGHT_NORMAL) { + /* Don't let the window become too high. */ + Dimension textdim = GetStringBoundingBox(str); + textdim.height *= 3; + textdim.width -= textdim.width / 2; + *size = maxdim(*size, textdim); + } else { + size->height = height + padding.height; } } } @@ -111,9 +128,9 @@ struct SelectGameWindow : public Window { } break; - case WID_SGI_LOAD_GAME: ShowSaveLoadDialog(SLD_LOAD_GAME); break; - case WID_SGI_PLAY_SCENARIO: ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break; - case WID_SGI_PLAY_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break; + case WID_SGI_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break; + case WID_SGI_PLAY_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break; + case WID_SGI_PLAY_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break; case WID_SGI_EDIT_SCENARIO: StartScenarioEditor(); break; case WID_SGI_PLAY_NETWORK: @@ -199,6 +216,11 @@ static const NWidgetPart _nested_select_game_widgets[] = { EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 7), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SGI_BASESET_SELECTION), + NWidget(NWID_VERTICAL), + NWidget(WWT_EMPTY, COLOUR_ORANGE, WID_SGI_BASESET), SetMinimalSize(316, 12), SetFill(1, 0), SetPadding(0, 10, 7, 10), + EndContainer(), + EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SGI_TRANSLATION_SELECTION), NWidget(NWID_VERTICAL), NWidget(WWT_EMPTY, COLOUR_ORANGE, WID_SGI_TRANSLATION), SetMinimalSize(316, 12), SetFill(1, 0), SetPadding(0, 10, 7, 10), diff --git a/src/landscape.cpp b/src/landscape.cpp index 49f9f33483..c2b2b4998c 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1,4 +1,4 @@ -/* $Id: landscape.cpp 27009 2014-10-13 14:22:48Z rubidium $ */ +/* $Id: landscape.cpp 27650 2016-09-04 12:57:43Z alberth $ */ /* * This file is part of OpenTTD. @@ -31,6 +31,7 @@ #include "object_base.h" #include "company_func.h" #include "pathfinder/npf/aystar.h" +#include "saveload/saveload.h" #include #include @@ -1221,7 +1222,7 @@ void GenerateLandscape(byte mode) if (mode == GWM_HEIGHTMAP) { SetGeneratingWorldProgress(GWP_LANDSCAPE, steps + GLS_HEIGHTMAP); - LoadHeightmap(_file_to_saveload.name); + LoadHeightmap(_file_to_saveload.detail_ftype, _file_to_saveload.name); IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); } else if (_settings_game.game_creation.land_generator == LG_TERRAGENESIS) { SetGeneratingWorldProgress(GWP_LANDSCAPE, steps + GLS_TERRAGENESIS); diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 888cd19f05..d5061d2b3b 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -11,7 +11,7 @@ ##gender male -# $Id: afrikaans.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: afrikaans.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2602,29 +2602,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Velde STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Sneeu-bedekte land STR_LAI_CLEAR_DESCRIPTION_DESERT :Woestyn -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} spoor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} spoor met blok seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} spoor met voor-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} spoor met uitgang-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} spoor met kombinasie-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} spoor met roete seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spoor met een-rigting pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spoor met blok en voor-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spoor met blok en uitgang-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spoor met blok en kombinasie-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spoor met blok en pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spoor met blok en een-rigting pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spoor met voor en uitgang seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spoor met voor en kombinasie-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spoor met voor en pad-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spoor met voor en een-rigting pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spoor met uitgang en kombinasie-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spoor met uitgang en pad-seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spoor met uitgang en een-rigting pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spoor met kombinasie en pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} spoor met kombinasie en eenrigting-pad seine -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spoor met pad en een-rigting pad seine -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} trein diensstasie +STR_LAI_RAIL_DESCRIPTION_TRACK :Spoorweg spoor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Spoorweg spoor met blok seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Spoorweg spoor met voor-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Spoorweg spoor met uitgang-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Spoorweg spoor met kombinasie-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Spoorweg spoor met roete seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Spoorweg spoor met een-rigting pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Spoorweg spoor met blok en voor-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Spoorweg spoor met blok en uitgang-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Spoorweg spoor met blok en kombinasie-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Spoorweg spoor met blok en pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Spoorweg spoor met blok en een-rigting pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Spoorweg spoor met voor en uitgang seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Spoorweg spoor met voor en kombinasie-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Spoorweg spoor met voor en pad-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Spoorweg spoor met voor en een-rigting pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Spoorweg spoor met uitgang en kombinasie-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Spoorweg spoor met uitgang en pad-seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Spoorweg spoor met uitgang en een-rigting pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Spoorweg spoor met kombinasie en pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Spoorweg spoor met kombinasie en eenrigting-pad seine +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Spoorweg spoor met pad en een-rigting pad seine +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Spoorweg trein diensstasie STR_LAI_ROAD_DESCRIPTION_ROAD :Pad STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Pad met straatligte @@ -2688,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Maatskappy-besi STR_ABOUT_OPENTTD :{WHITE}Oor OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oorspronklike kopiereg {COPYRIGHT} 1995 Chris Sawyer, Alle regte voorbehou STR_ABOUT_VERSION :{BLACK}OpenTTD uitgawe {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Die OpenTTD span +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Die OpenTTD span # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spaar Spel @@ -2907,8 +2907,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Poging on 'n on STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat 'n korrupte prent. Korrupte prente sal as 'n rooi vraagteken gewys word (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat veelvoudige Aksie 8 inskrywings (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lees verby die einde van die pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :WHITE}Die huidige basis-grafikastel ontbreek sommige sprites.{}Opdateer die basis-grafikastel. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Die huidige basis-grafikastel ontbreek sommige sprites.{}Opdateer die basis-grafikastel.{}Aangesien jy 'n {YELLOW}ontwikkelingsweergawe van OpenTTD{WHITE} het, mag jy dalk 'n {YELLOW}ontwikkelingsweergawe{WHITE} van die basis-grafikastel benodig{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Aangevraagde GRF hulpbronne is nie beskikbaar nie (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} was gedeaktiveer deur {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldige/onbekende sprite uitleg formaat (sprite {3:NUM}) @@ -3295,9 +3293,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereis: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Vrag wag om geprosesseer te word: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,7 +3555,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} waneer STR_REPLACE_VEHICLES_STOP :{BLACK}Staak vervanging STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Druk om die vervanging van die linker gekose enjin tipe te stop -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Vervang: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skakel tussen enjin en wa vervang vensters STR_REPLACE_ENGINES :Enjin STR_REPLACE_WAGONS :Waens diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index d36ba9a039..d4ce9ee791 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -10,7 +10,7 @@ ##grflangid 0x14 -# $Id: arabic_egypt.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: arabic_egypt.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2234,29 +2234,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :حقول STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :ارض ثلجية STR_LAI_CLEAR_DESCRIPTION_DESERT :صحراء -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} مسار -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} مسار مع اشارة اغلاق -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} مسار مع اشارة مبتدئة -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} سكة حديد مع اشارة خروج -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} سكة حديد مع اشارة مزدوجة -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} سكة حديد مع اشارة طريق -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} سكة حديد مع اشارة اتجاة واحد -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} سكة حديد مع اشارة توقف و اشارة مبتدئة -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} سكة حديد مع اشارة توقف و خروج -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} سكة حديد مع اشارة توقف و مزدوجة -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} سكة حديد مع اشارة اغلاق و طريق -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} سكة حديد مع اشارة اغلاق و طريق باتجاة واحد -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} سكة حديد مع اشارة مبدئية و اشارة خروج -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} سكة حديد مع اشارة مبدئية و اشارة مزدوجة -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} سكة حديد مع اشارة مبدئية و طريق -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} سكة حديد مع اشارة مبدئية و اتجاة و احد -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} سكة حديد مع اشارة خروج و مزدوجة -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} سكة حديد مع اشارة خروج و طريق -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} سكة حديد مع اشارة خروج و اتجاة واحد -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} سكة حديد مع اشارة مزدوجة و طريق -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} سكة حديد مع اشارة مزدوجة و طريق باتجاه واحد -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} سكة حديد مع اشارة طريق و اتجاة و احد -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} مستودع صيانة قطارات +STR_LAI_RAIL_DESCRIPTION_TRACK :سكة حديد مسار +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :سكة حديد مسار مع اشارة اغلاق +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :سكة حديد مسار مع اشارة مبتدئة +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :سكة حديد سكة حديد مع اشارة خروج +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :سكة حديد سكة حديد مع اشارة مزدوجة +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :سكة حديد سكة حديد مع اشارة طريق +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :سكة حديد سكة حديد مع اشارة اتجاة واحد +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :سكة حديد سكة حديد مع اشارة توقف و اشارة مبتدئة +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :سكة حديد سكة حديد مع اشارة توقف و خروج +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :سكة حديد سكة حديد مع اشارة توقف و مزدوجة +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :سكة حديد سكة حديد مع اشارة اغلاق و طريق +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :سكة حديد سكة حديد مع اشارة اغلاق و طريق باتجاة واحد +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :سكة حديد سكة حديد مع اشارة مبدئية و اشارة خروج +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :سكة حديد سكة حديد مع اشارة مبدئية و اشارة مزدوجة +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :سكة حديد سكة حديد مع اشارة مبدئية و طريق +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :سكة حديد سكة حديد مع اشارة مبدئية و اتجاة و احد +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :سكة حديد سكة حديد مع اشارة خروج و مزدوجة +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :سكة حديد سكة حديد مع اشارة خروج و طريق +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :سكة حديد سكة حديد مع اشارة خروج و اتجاة واحد +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :سكة حديد سكة حديد مع اشارة مزدوجة و طريق +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :سكة حديد سكة حديد مع اشارة مزدوجة و طريق باتجاه واحد +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :سكة حديد سكة حديد مع اشارة طريق و اتجاة و احد +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :سكة حديد مستودع صيانة قطارات STR_LAI_ROAD_DESCRIPTION_ROAD :طريق STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :طريق مضاء @@ -2320,7 +2320,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الاصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة STR_ABOUT_VERSION :{BLACK}النسخة المفتوحة رقم {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2016 فريق النسخة المفتوحة +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2017 فريق النسخة المفتوحة # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}حفظ اللعبة @@ -2524,7 +2524,6 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :تم تصميم STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :العديد من NewGRF تم تحميلها STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :تحميل {1:STRING}كملف ثابت مع NewGRF {STRING}قد يتسبب بمشكلة توافق. STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} يحتوي على خصائص غير صالحة. جميع الخصائص الغير صالحة سوف يشار لها بعلامة استفهام حمراء. -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}ملف الرسوم المستخدم حاليا يفتقد لبعض الرسوم الاساسية.{}الرجاء حدث ملف الرسوم. STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}تم تعطيلة بواسطة{STRING} # NewGRF related 'general' warnings @@ -2819,9 +2818,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}يحتا STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}يحتاج: {YELLOW}{STRING}{STRING}, {STRING}{STRING} , {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}البضاعة تنتظر التعامل معها: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}ينتج: {YELLOW}{STRING} {STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}ينتج: {YELLOW}{STRING} {STRING}, {STRING} {STRING} ############ range for produces ends @@ -3060,7 +3058,6 @@ STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}لم ي STR_REPLACE_VEHICLES_STOP :{BLACK} اوقف تبديل العربات STR_REPLACE_HELP_STOP_BUTTON :{BLACK} اضغط لايقاف تبديل المحركات المختارة في اليسار -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK} تبديل: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK} بدل بين نافذة استبدال المحركات و العربات STR_REPLACE_ENGINES :محركات STR_REPLACE_WAGONS :عربات diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 88b2eed5a8..4927000891 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -10,7 +10,7 @@ ##grflangid 0x21 -# $Id: basque.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: basque.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -319,6 +319,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Subsidio STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Erakutsi konpainien geltokien zerrenda STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Erakutsi konpaniaren finantza informazioa STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Erakutsi konpaniaren informazio generala +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Helburu zerrenda erakutsi STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafikoak erakutsi STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Erakutsi konpanien ligako taula STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Eraiki industria berria edo industri guztien zerrenda erakutsi @@ -1097,6 +1098,8 @@ STR_CONFIG_SETTING_RESTRICT_ALL :Aditua (ezarpen STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Ezarpenak lehenetsitakoen balio ezberdinarekin STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Balio ezberdinak dituzten ezarpenak zure joko berriaren ezarpenekin alderatuta +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Bezero ezarpenak (ez dira partidatan gordetzen; joko guztiei eragiten die) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Enpresa ezarpenak (partidan gordeta; bakarrik uneko enpresari eragiten dio) STR_CONFIG_SETTINGS_NONE :{WHITE}- Ezer ez - STR_CONFIG_SETTING_OFF :Itzalita @@ -1262,6 +1265,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grafikoen marre STR_CONFIG_SETTING_LAND_GENERATOR :Lur sortzailea: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Jatorrizkoa STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis bakarrik) Maparen menditsutasuna STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industria dentsitatea: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Petroleo findegietatik maparen ertzera dagoen gehienezko distantzia: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Petroleo findegiak bakarrik maparen ertzatik hurbil eraiki daitezke, kostan irla mapetan @@ -1278,6 +1282,7 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Ezer ez STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Jatorrizkoa STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Hobetua STR_CONFIG_SETTING_ROAD_SIDE :Errepideko garraioak: {STRING} +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Gidatzeko aldea aukeratu STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Garaiera maparen norabidea: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Erlojuko orratzen kontrara STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Erlojuko orratzen erara @@ -1333,6 +1338,7 @@ STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Saguaren ezkerr STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING_HELPTEXT :Gaitu mapatik zehar mugitzea saguaren ezkerreko botoia mapan arrastratzerakoan. Oso erabilgarria da ukipen pantailak erabiltzerakoan STR_CONFIG_SETTING_AUTOSAVE :Auto-gordea: {STRING} +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Partida gordetze automatikoaren bitartea aukeratu STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Gordetako jokoen izenetan {STRING} data fomatua erabili STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Gordetako fitxeroen dataren formatoa @@ -1373,7 +1379,9 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Konpainiako gas STR_CONFIG_SETTING_SOUND_NEWS :Periodikoa: {STRING} STR_CONFIG_SETTING_SOUND_NEW_YEAR :Amaiera urtea: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM :Eraikuntza: {STRING} +STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Eraikuntza arrakastatsua edo beste akzioekin soinu bat egin STR_CONFIG_SETTING_SOUND_DISASTER :Desastreak/istripuak: {STRING} +STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Istripu edo desastreen soinu efektuak aktibatu STR_CONFIG_SETTING_SOUND_VEHICLE :Garraioak: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Azpiturak eraikitzea debekatu ibilgailu egokiak ez daudenean eskuragarri: {STRING} @@ -2105,6 +2113,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Egunerak STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Haukeratu dituzun edukiak berrituko dituzten edukiak deskargatuak izateko STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Guztia desmarkatu STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Dekargatuak izango ez diren eduki guztiak markatu +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Kanpoko webguneak bilatu STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}OpenTTD uzten zaude! STR_CONTENT_FILTER_TITLE :{BLACK}Etiketa/izen iragazkia: STR_CONTENT_OPEN_URL :{BLACK}Webgunera joan @@ -2484,6 +2493,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Aireport STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Onartutako zama: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Errail mota: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Trenbidearen abiadura muga: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Bideko abiadura muga: {LTBLUE}{VELOCITY} @@ -2496,29 +2506,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Eremuak STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Elurrez estalitako paisaia STR_LAI_CLEAR_DESCRIPTION_DESERT :Desertua -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} Trenbidea -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} Trenbidea blokeo seinalearekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} trenbidea aurre-seinalekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} trenbidea irteera seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} trenbidea konbo seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} trenbidea bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} trenbidea norabide bakarreko bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} trenbidea blokeo seinale eta aurre-seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} trenbidea blokeo seinale eta irteera seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} trenbidea blokeo seinalea eta konbo seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} trenbidea blokeo seinaleekin eta bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} Trenbidea blokeo eta norabide bakarreko bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} trenbidea aurre-seinale eta irteera seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} trenbidea aurre-seinale eta konbo seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} trenbidea aurre-seinale eta bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} trenbidea aurre-seinale eta norabide bakarreko bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} trenbidea irteera seinale eta konbo seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} trenbidea irteera seinale eta bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} trenbidea irteera seinale eta norabide bakarreko bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} trenbidea konbo seinale eta bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} trenbide konbo seinale eta norabide bakarreko bide seinaleekin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} trenbidea bide seinale eta norabide bakarreko seinaleekina -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} tren gordailua +STR_LAI_RAIL_DESCRIPTION_TRACK :Trenbidea +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Trenbidea Trenbidea blokeo seinalearekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Trenbidea trenbidea aurre-seinalekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Trenbidea trenbidea irteera seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Konbo-seinaledun trenbidea +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Trenbidea trenbidea bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Trenbidea trenbidea norabide bakarreko bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Trenbidea trenbidea blokeo seinale eta aurre-seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Trenbidea trenbidea blokeo seinale eta irteera seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Trenbidea trenbidea blokeo seinalea eta konbo seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Trenbidea trenbidea blokeo seinaleekin eta bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Trenbidea Trenbidea blokeo eta norabide bakarreko bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Trenbidea trenbidea aurre-seinale eta irteera seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Trenbidea trenbidea aurre-seinale eta konbo seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Trenbidea trenbidea aurre-seinale eta bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Trenbidea trenbidea aurre-seinale eta norabide bakarreko bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Trenbidea trenbidea irteera seinale eta konbo seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Trenbidea trenbidea irteera seinale eta bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Trenbidea trenbidea irteera seinale eta norabide bakarreko bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Trenbidea trenbidea konbo seinale eta bide seinaleekin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Konbo-seinale eta norabide bakarreko bide seinaledun trenbidea +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Trenbidea trenbidea bide seinale eta norabide bakarreko seinaleekina +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Trenbidea tren gordailua STR_LAI_ROAD_DESCRIPTION_ROAD :errepidea STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Errepidea farolekin @@ -2582,7 +2592,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Konpainia jabe STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ri buruz STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD bertsioa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gordetako jokoa @@ -2724,6 +2734,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Desgaitua STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}OpenTTD-ren bertsio honekin bateraezina # NewGRF save preset window +STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Ez aldatu berezko balioa # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF parametroak aldatu @@ -2786,8 +2797,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Identifikazio b STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sprite baliogabea dauka. Sprite baliogabeak galdera ikur gorria bezala ikusiko dira (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Action 8 sarrera asko ditu (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Pseudo spritea baino hurrunago irakurri (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Aukeratuta daukazun oinarrizko grafiko paketean "sprite" batzuk falta dira.{}Mesedez eguneratu oinarrizko grafiko paketea -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Erabiltzen ari den grafiko baseari sprite batzuk falta zaizkio.{}Mesedez zure grafiko basea eguneratu ezazu.{}OpenTTD-ren {YELLOW}garapen bertsio bat erabiltzen ari zarenez{WHITE}, grafiko basearen {YELLOW}garapen bertsio bat behar izango duzu{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Eskatutako GRFa ez dago eskuragarri (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} desgaitua izan da {STRING}(en)gatik STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Grafiko deseinu formatu ezezaguna/baliogabea (sprite {3:NUM}) @@ -2986,6 +2995,7 @@ STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Ez dago STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_LONG} STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO_SHORT} {STATION}-(e)tik garraiatua) +STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} kargarako erreserbatua) STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Onartu STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Onartzen diren zamen zerrenda @@ -3168,9 +3178,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Beharrez STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Prosezatzeko zain dagoen zama: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Ekoizpena: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Ekoizpena: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3424,7 +3433,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} zaharr STR_REPLACE_VEHICLES_STOP :{BLACK}Ibilgailuak ordezkatzen gelditu STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikatu ezkerrean aukeratutako motore motaren ordezkapena gelditzeko -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Ordezkatzen: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Aldatu motore pantaila eta bagoi paintailaren artean STR_REPLACE_ENGINES :Motoreak STR_REPLACE_WAGONS :Bagoiak @@ -4053,6 +4061,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... Baso STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... bakarrik elur garaieratik gora eraiki daiteke STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... bakarrik elur garaieratik behera eraiki daiteke +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Ez dago leku aproposik '{STRING}' industriarako # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Ezin da tren gordailua hemen eraiki... @@ -4318,7 +4327,11 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Ezin da STR_DESKTOP_SHORTCUT_COMMENT :Transport Tycoon Deluxe-ren simulazio bat # Translatable descriptions in media/baseset/*.ob* files +STR_BASEGRAPHICS_DOS_DESCRIPTION :Transport Tycoon Deluxe originaleko DOS edizioko grafikoak. +STR_BASESOUNDS_DOS_DESCRIPTION :Transport Tycoon Deluxe originaleko DOS edizioko soinuak. +STR_BASESOUNDS_WIN_DESCRIPTION :Transport Tycoon Deluxe originaleko Windows edizioko grafikoak. STR_BASESOUNDS_NONE_DESCRIPTION :Soinurik gabeko soinu pakete bat +STR_BASEMUSIC_NONE_DESCRIPTION :Musika gabeko musika paketea. ##id 0x2000 # Town building names diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index c876e457c9..fa0640e30e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -12,7 +12,7 @@ ##case m f n p nom gen dat acc abl pre -# $Id: belarusian.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: belarusian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2934,29 +2934,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Палi STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Засьнежаная зямля STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустэльня -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} рэйкi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} рэйкi са звычайнымі сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} рэйкi з уваходнымі прэсыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} рэйкi з выхаднымi сыґналамi (прэсыґналамі) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} рэйкi з камбiнаванымi сыґналамi (прэсыґналамі) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} рэйкi з маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} рэйкi з аднабаковымi маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} рэйкi са звычайнымi й уваходнымі прэсыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} рэйкi са звычайнымi й выхаднымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} рэйкi са звычайнымi й камбiнаванымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} рэйкi са звычайнымi й маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} рэйкi са звычайнымi й аднабаковымi маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} рэйкi з уваходнымi (прэcыгналамi) ды выхаднымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} рэйкi з уваходнымi (прэсыґналамi) ды камбiнаванымi сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} рэйкi з уваходнымi (прэсыґналамi) ды маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} рэйкi з уваходнымi (прэсыґналамi) ды аднабаковымi маршрутнымi (PMS) сыґналамi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} рэйкi з выхаднымi й камбінаванымі прэсыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} рэйкі з выхаднымі (прэсыґналамі) ды маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} рэйкі з выхаднымі (прэсыґналамі) ды аднабаковымі маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} рэйкі з камбінаванымі (прэсыґналамі) ды маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} рэйкі з камбінаванымі (прэсыґналамі) ды аднабаковымі маршрутнымі (PMS) сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} рэйкі з маршрутнымі (PMS) ды аднабаковымі маршрутнымі сыґналамі -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} чыгуначнае дэпо +STR_LAI_RAIL_DESCRIPTION_TRACK :Чыгунка рэйкi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Чыгунка рэйкi са звычайнымі сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Чыгунка рэйкi з уваходнымі прэсыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Чыгунка рэйкi з выхаднымi сыґналамi (прэсыґналамі) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Чыгунка рэйкi з камбiнаванымi сыґналамi (прэсыґналамі) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Чыгунка рэйкi з маршрутнымi (PMS) сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Чыгунка рэйкi з аднабаковымi маршрутнымi (PMS) сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Чыгунка рэйкi са звычайнымi й уваходнымі прэсыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Чыгунка рэйкi са звычайнымi й выхаднымi сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Чыгунка рэйкi са звычайнымi й камбiнаванымi сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Чыгунка рэйкi са звычайнымi й маршрутнымi (PMS) сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Чыгунка рэйкi са звычайнымi й аднабаковымi маршрутнымi (PMS) сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Чыгунка рэйкi з уваходнымi (прэcыгналамi) ды выхаднымi сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Чыгунка рэйкi з уваходнымi (прэсыґналамi) ды камбiнаванымi сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Чыгунка рэйкi з уваходнымi (прэсыґналамi) ды маршрутнымi (PMS) сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Чыгунка рэйкi з уваходнымi (прэсыґналамi) ды аднабаковымi маршрутнымi (PMS) сыґналамi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Чыгунка рэйкi з выхаднымi й камбінаванымі прэсыґналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Чыгунка рэйкі з выхаднымі (прэсыґналамі) ды маршрутнымі (PMS) сыґналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Чыгунка рэйкі з выхаднымі (прэсыґналамі) ды аднабаковымі маршрутнымі (PMS) сыґналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Чыгунка рэйкі з камбінаванымі (прэсыґналамі) ды маршрутнымі (PMS) сыґналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Чыгунка рэйкі з камбінаванымі (прэсыґналамі) ды аднабаковымі маршрутнымі (PMS) сыґналамі +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Чыгунка рэйкі з маршрутнымі (PMS) ды аднабаковымі маршрутнымі сыґналамі +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Чыгунка чыгуначнае дэпо STR_LAI_ROAD_DESCRIPTION_ROAD :Дарога STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Дарога з вулічным асьвятленьнем @@ -3020,7 +3020,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Зямля на STR_ABOUT_OPENTTD :{WHITE}Аб OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Арыґінальныя аўтарскія правы {COPYRIGHT} 1995 Chris Sawyer. Усе правы абароненыя. STR_ABOUT_VERSION :{BLACK}OpenTTD вэрсія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2016 Каманда распрацоўнікаў OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2017 Каманда распрацоўнікаў OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Захаваць гульню @@ -3239,8 +3239,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Спроба в STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} утрымлiвае пашкоджаны спрайт. Усе пашкоджаныя спрайты будуць паказаны чырвоным знакам пытаньня (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Утрымлiвае некалькі блёкаў «Action 8» (спрайт {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Чытаньне па-за канцом псэўда-спрайту (спрайт {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}У бягучым наборы базавай ґрафікі адсутнічаюць выявы некаторых аб'ектаў.{}Калі ласка, абнавіце модуль базавай ґрафікі. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}У выкарыстаным наборы базавай ґрафікі адсутнічаюць некаторыя малюнкі.{}Калі ласка, абнавіце набор малюнкаў.{}Вам можа спатрэбіцца {YELLOW}тэставая вэрсія ґрафічнага набору{WHITE}, таму што ў вас {YELLOW}тэставая вэрсія OpenTTD{WHITE}. STR_NEWGRF_ERROR_GRM_FAILED :Запытаныя рэсурсы GRF недаступныя (спрайт {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} быў адключаны з-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недапушчальны/невядомы фармат размяшчэньня спрайтаў (спрайт {3:NUM}) @@ -3627,9 +3625,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Патр STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Груз, які чакае перапрацоўкі: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3910,7 +3907,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} кал STR_REPLACE_VEHICLES_STOP :{BLACK}Спыніць замену STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Спыніць замену транспарту -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Замяняем: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Пераключэньне паміж вокнамі замены лякаматываў і ваґонаў STR_REPLACE_ENGINES :Лякаматывы STR_REPLACE_WAGONS :Ваґоны diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index d35f44bdb9..e6bbfa55a4 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -11,7 +11,7 @@ ##gender m f -# $Id: brazilian_portuguese.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: brazilian_portuguese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2602,29 +2602,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto -STR_LAI_RAIL_DESCRIPTION_TRACK :Trilho de {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Trilho de {STRING} com sinais normais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Trilho de {STRING} com pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Trilho de {STRING} com sinais de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Trilho de {STRING} com sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Trilho de {STRING} com sinais avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Trilhos de {STRING} com sinais avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Trilho de {STRING} com sinais normais e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Trilho de {STRING} com sinais normais e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Trilho de {STRING} com sinais normais e sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Trilho de {STRING} com sinais normais e avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Trilho de {STRING} com sinais normais e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Trilho de {STRING} com pré-sinais e de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Trilho de {STRING} com pré-sinais e sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Trilho de {STRING} com pré-sinais e sinais avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Trilho de {STRING} com pré-sinais e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Trilho de {STRING} com sinais de saída e sinais-combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Trilho de {STRING} com sinais de saída e avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Trilho de {STRING} com sinais de saída e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Trilho de {STRING} com sinais-combo e avançados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Trilho de {STRING} com sinais-combo e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Trilho de {STRING} com sinais avançados e avançados de mão única -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito de {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :Trilho de Ferrovia +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Trilho de Ferrovia com sinais normais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Trilho de Ferrovia com pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Trilho de Ferrovia com sinais de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Trilho de Ferrovia com sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Trilho de Ferrovia com sinais avançados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Trilhos de Ferrovia com sinais avançados de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Trilho de Ferrovia com sinais normais e pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Trilho de Ferrovia com sinais normais e pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Trilho de Ferrovia com sinais normais e sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Trilho de Ferrovia com sinais normais e avançados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Trilho de Ferrovia com sinais normais e avançados de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Trilho de Ferrovia com pré-sinais e de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Trilho de Ferrovia com pré-sinais e sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Trilho de Ferrovia com pré-sinais e sinais avançados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Trilho de Ferrovia com pré-sinais e avançados de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Trilho de Ferrovia com sinais de saída e sinais-combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Trilho de Ferrovia com sinais de saída e avançados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Trilho de Ferrovia com sinais de saída e avançados de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Trilho de Ferrovia com sinais-combo e avançados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Trilho de Ferrovia com sinais-combo e avançados de mão única +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Trilho de Ferrovia com sinais avançados e avançados de mão única +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito de Ferrovia STR_LAI_ROAD_DESCRIPTION_ROAD :Rodovia STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Rodovia iluminada @@ -2688,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :O terreno é pr STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 A equipe do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 A equipe do OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salvar Jogo @@ -2907,8 +2907,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Tentativa de us STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um sprite corrupto. Todos os sprites corruptos serão exibidos como um "?" vermelho STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém multiplas entradas de Ação 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Leitura após o final do pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Estão faltando alguns sprites na base de gráficos em uso.{}Por favor atualize a base de gráficos -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}O pacote de gráficos base atuais está faltando alguns sprites.{}Favor atualizar o pacote de gráficos base.{}Já que você está usando um {YELLOW}snapshot em desenvolvimento do OpenTTD{WHITE}, você também precisa do {YELLOW}Snapshot do pacote de gráficos base em desenvolvimento{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF requeridos indisponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de layout de sprite inválido/desconhecido (sprite {3:NUM}) @@ -3295,9 +3293,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requer: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Carga aguardando processamento -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,7 +3555,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} quando STR_REPLACE_VEHICLES_STOP :{BLACK}Parar Substituição STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pressione para parar a subsituição do tipo de motor que selecionou à esquerda -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Substituindo: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Troca entre substituir máquinas e substituir vagões STR_REPLACE_ENGINES :Motores STR_REPLACE_WAGONS :Vagões diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 328546ba9e..79d3b4689b 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -12,7 +12,7 @@ ##case m f n p -# $Id: bulgarian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: bulgarian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2540,29 +2540,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поля STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Заснежена земя STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустиня -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} линия -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} линия с блокиращи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} линия с пре-сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} линия с изходни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} линия с комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} линия с насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} линия с еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} линия с блокиращи и пре-сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} линия с блокиращи и изходни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} линия с блокиращи и комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} линия с блокиращи и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} линия с блокиращи и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} линия с пред и изходни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} линя с пред и комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} линия с пред и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} линия с пред и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} линия с изходни и комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} линия с изходни и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} линия с изходни и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} линия с комбо и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} линия с комбо и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} линия с насочващи и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} влаково депо +STR_LAI_RAIL_DESCRIPTION_TRACK :ЖП път линия +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :ЖП път линия с блокиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :ЖП път линия с пре-сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :ЖП път линия с изходни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :ЖП път линия с комбо сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :ЖП път линия с насочващи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :ЖП път линия с еднопосочни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :ЖП път линия с блокиращи и пре-сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :ЖП път линия с блокиращи и изходни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :ЖП път линия с блокиращи и комбо сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :ЖП път линия с блокиращи и насочващи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :ЖП път линия с блокиращи и еднопосочни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :ЖП път линия с пред и изходни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :ЖП път линя с пред и комбо сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :ЖП път линия с пред и насочващи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :ЖП път линия с пред и еднопосочни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :ЖП път линия с изходни и комбо сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :ЖП път линия с изходни и насочващи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :ЖП път линия с изходни и еднопосочни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :ЖП път линия с комбо и насочващи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :ЖП път линия с комбо и еднопосочни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :ЖП път линия с насочващи и еднопосочни сигнали +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :ЖП път влаково депо STR_LAI_ROAD_DESCRIPTION_ROAD :път STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Асфалтов път с улично осветление @@ -2626,7 +2626,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земя, пр STR_ABOUT_OPENTTD :{WHITE}Относно OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторски права {COPYRIGHT} 1995 Крис Сойер (Chris Sawyer), Всички права са запазени STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Запази играта @@ -2838,8 +2838,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Опит за STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} съдържа повреден обект. Вскички повредени обекти ще бъдат показани като червена въпросителна (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contains multiple Action 8 entries (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Read past end of pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Текущите основни графики имат празни картинки.{}Моля обновете си основните графики. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Текущо използвания графичен сет има липсващи спрайтове.{}Моля обновете графичния сет.{}Тъй като играете {YELLOW}версия на OpenTTD в процес на разработка{WHITE}, може да се нуждаете и от {YELLOW}версията на графичния сет, която е в разработка{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Изискваните GRF resources не са на разположение (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} беше изключено от {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) @@ -3216,9 +3214,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Нужд STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Товар чакащ до бъде преработен: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3477,7 +3474,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} ког STR_REPLACE_VEHICLES_STOP :{BLACK}Спиране на замяната STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Натиснете за спиране подновяването на избрания в ляво двигател -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Замяна: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Превключване между замяна на локомотиви и вагони STR_REPLACE_ENGINES :Двигатели STR_REPLACE_WAGONS :Вагони diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index eee7e7dfa8..23fe7e4e69 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -11,7 +11,7 @@ ##gender Masculin Femenin -# $Id: catalan.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: catalan.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1407,7 +1407,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :El més antic d STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :El més modern disponible STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :El més utilitzat disponible STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostra els camins reservats: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Dóna a les vies reservades un color diferent per ajudar en problemes de trens que refusen entrar en blocs basats en camí +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Dóna a les vies reservades un color diferent per visualitzar problemes d'encaminament de trens STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantingues les eines de construcció actives després del seu ús: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantingues les eines de construcció pels ponts, túnels, etc. obertes després d'utilitzar-les STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupa les despeses a la finestra de finances de la companyia: {STRING} @@ -1762,6 +1762,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Comprova STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostra els paràmetres de les IA/Script de la partida STR_INTRO_TOOLTIP_QUIT :{BLACK}Surt d'OpenTTD +STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu-ne si hi ha actualitzacions disponibles. STR_INTRO_TRANSLATION :{BLACK}A aquesta traducció li falten {NUM} caden{P a es}. Si us plau ajuda a fer millor OpenTTD unint-te com a traductor. Veure readme.txt per més detalls. # Quit window @@ -2590,6 +2591,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nom de l STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Càrrega acceptada: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipus de via: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límit de velocitat de la via: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Límit de velocitat de la carretera: {LTBLUE}{VELOCITY} @@ -2602,29 +2604,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Camps de conreu STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terreny nevat STR_LAI_CLEAR_DESCRIPTION_DESERT :Desert -STR_LAI_RAIL_DESCRIPTION_TRACK :Via de {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} via amb senyals de bloc -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} via amb pre-senyals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} via amb senyals de sortida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} via amb senyals combinats -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} via amb senyals de camí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} via amb senyals de camí d'un sentit -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING}via amb senyals de bloc i pre-senyals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} via amb senyals de bloc i de sortida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} via amb senyals de bloc i combinats -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} via amb senyals de bloc i de camí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} via amb senyals de bloc i de camí d'un sentit -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} via amb pre-senyals i senyals de sortida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} via amb pre-senyals i senyals combinats -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} via amb pre-senyals i senyals de camí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} via amb pre-senyals i senyals de camí d'un sentit -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} via amb senyals de sortida i combinats -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} via amb senyals de sortida i de camí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} via amb senyals de sortida i de camí d'un sentit -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} via amb senyals combinats i de camí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} via amb senyals combinats i de camí d'un sentit -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} via amb senyals de camí i de camí d'un sentit -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} cotxeres de tren +STR_LAI_RAIL_DESCRIPTION_TRACK :Via ferroviària +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Via ferroviària amb senyals de secció +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Via ferroviària amb senyals d'entrada +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Via ferroviària amb senyals de sortida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Via ferroviària amb senyals combinats +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Ferrocarril via amb senyals de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Via ferroviària amb senyals de ruta d'un sentit +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Via ferroviària amb senyals de secció i d'entrada +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Via ferroviària amb senyals de secció i de sortida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Via ferroviària amb senyals de secció i combinats +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Via ferroviària amb senyals de secció i de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Via ferroviària amb senyals de secció i de ruta d'un sentit +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Via ferroviària amb senyals d'entrada i de sortida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Via ferroviària amb senyals d'entrada i combinats +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Via ferroviària amb senyals d'entrada i senyals de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Via ferroviària amb senyals d'entrada i de ruta d'un sentit +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Via ferroviària amb senyals combinats i de sortida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Via ferroviària amb senyals de sortida i de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Via ferroviària amb senyals de sortida i de ruta d'un sentit +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Via ferroviària amb senyals combinats i de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Via ferroviària amb senyals combinats i de ruta d'un sentit +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Via ferroviària amb senyals de ruta i de ruta d'un sentit +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Cotxeres de vehicles ferroviaris STR_LAI_ROAD_DESCRIPTION_ROAD :Carretera STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Carretera amb fanals @@ -2688,7 +2690,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :terreny propiet STR_ABOUT_OPENTTD :{WHITE}Quant a l'OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer. Tots els drets reservats. STR_ABOUT_VERSION :{BLACK}OpenTTD versió {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 L'equip de l'OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 L'equip de l'OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Desa la Partida @@ -2907,8 +2909,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Intent d'utilit STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} conté un sprite corrupte. Tots els sprites corruptes seran mostrats amb un interrogant vermell (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Conté múltiples entrades d'acció 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :S'ha llegit després del final d'un pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Al joc de gràfics base establert actualment li falten un nombre de sprites.{}Si us plau, actualitzeu el joc de gràfics base. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Als gràfics base actualment utilitzats els hi falta un nombre de sprites.{}Si us plau, actualitzeu el conjunt de gràfics base.{}Com que esteu jugant amb una {YELLOW}versió de desenvolupament de l'OpenTTD{WHITE}, pot ser que necessiteu una {YELLOW}versió de desenvolupament dels gràfics base{WHITE}. STR_NEWGRF_ERROR_GRM_FAILED :Els recursos GRF demanats no estan disponibles (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ha estat desactivat per {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de disposició de sprite no vàlid o desconegut (sprite {3:NUM}). @@ -3295,9 +3295,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessit STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}esperant +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Càrrega en espera de ser processada: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3392,7 +3396,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacita STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagons Automotrius: {GOLD}+{POWER}{BLACK} Pes: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Remodelable a: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Totes les càrregues -STR_PURCHASE_INFO_ALL_BUT :Tots menys {CARGO_LIST} +STR_PURCHASE_INFO_ALL_BUT :Qualsevol excepte {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforç de tracció màxim: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {GOLD}{COMMA} cel·les @@ -3558,10 +3562,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} quan s STR_REPLACE_VEHICLES_STOP :{BLACK}Para de substituir STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Prem per aturar el reemplaçament del model seleccionat a l'esquerra -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Substituint: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Canvia entre finestres de substitució de vagons i de motors STR_REPLACE_ENGINES :Motors STR_REPLACE_WAGONS :Vagons +STR_REPLACE_ALL_RAILTYPE :Tots els vehicles ferroviaris STR_REPLACE_HELP_RAILTYPE :{BLACK}Tria el tipus de via dels models de vehicle que vols substituir STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostra quin model dels seleccionats a l'esquerra es substitueix, si n'hi ha @@ -3884,7 +3888,7 @@ STR_ORDER_CONDITIONAL_UNCONDITIONAL :salta a l'ordre STR_ORDER_CONDITIONAL_NUM :Salta a l'ordre {COMMA} quan {STRING} {STRING} {COMMA} STR_ORDER_CONDITIONAL_TRUE_FALSE :Salta a l'ordre {COMMA} quan {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Ordre incorrecte) +STR_INVALID_ORDER :{RED} (Ordre incorrecta) # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horari) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index e665df6130..e4afe762ea 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -12,7 +12,7 @@ ##case nom gen dat aku vok lok ins -# $Id: croatian.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: croatian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1857,6 +1857,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Provjeri STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Prikaži postavke UI-ja/Skripte igre STR_INTRO_TOOLTIP_QUIT :{BLACK}Izzađi it 'OpenTTD'-a +STR_INTRO_BASESET :{BLACK}Trenutno odabranom osnovnom grafičkom setu nedostaje {NUM} sprite{P "" a a}. Potražite nadogradnju grafičkog seta. STR_INTRO_TRANSLATION :{BLACK}Ovom prijevodu nedostaje {NUM} slijed. Molimo, pomognite učiniti OpenTTD boljim tako da se prijavite kao prevoditelj. Pogledajte readme.txt za detalje. # Quit window @@ -2685,6 +2686,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Naziv po STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Prihvaćeni teret: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Vrsta željeznice: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Najveća brzina željeznice: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ograničenje brzine na cesti: {LTBLUE}{VELOCITY} @@ -2697,29 +2699,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Polja STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zemlja pokrivena snijegom STR_LAI_CLEAR_DESCRIPTION_DESERT :Pustinja -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} pruga -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} pruga sa blok-signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} pruga sa pred-signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} pruga sa izlaznim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} pruga sa kombiniranim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} pruga sa putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} pruga sa jednosmjernim putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} pruga sa blok-signalima i pred-signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} pruga sa blok-signalima i izlaznim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} pruga sa blok-signalima i kombiniranim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} pruga sa blok-signalima i putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} pruga sa blok-signalima i jednosmjernim putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} pruga sa pred-signalima i izlaznim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} pruga sa pred-signalima i kombiniranim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} pruga sa pred-signalima i putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} pruga sa pred-signalima i jednosmjernim putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} pruga sa izlaznim i kombiniranim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} pruga sa izlaznim i putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} pruga sa izlaznim i jednosmjernim putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} pruga sa kombiniranim i putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} pruga sa kombiniranim i jednosmjernim putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} pruga sa putnim i jednosmjernim putnim signalima -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} spremište vlaka +STR_LAI_RAIL_DESCRIPTION_TRACK :Pruga +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Pruga sa blok-signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Pruga sa pred-signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Pruga sa izlaznim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Pruga sa kombiniranim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Pruga sa putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Pruga sa jednosmjernim putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Pruga sa blok-signalima i pred-signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Pruga sa blok-signalima i izlaznim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Pruga sa blok-signalima i kombiniranim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Pruga sa blok-signalima i putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Pruga sa blok-signalima i jednosmjernim putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Pruga sa pred-signalima i izlaznim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Pruga sa pred-signalima i kombiniranim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Pruga sa pred-signalima i putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Pruga sa pred-signalima i jednosmjernim putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Pruga sa izlaznim i kombiniranim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Pruga sa izlaznim i putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Pruga sa izlaznim i jednosmjernim putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Pruga sa kombiniranim i putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Pruga sa kombiniranim i jednosmjernim putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Pruga sa putnim i jednosmjernim putnim signalima +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Spremište vlakova STR_LAI_ROAD_DESCRIPTION_ROAD :Cesta STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Cesta s javnom rasvjetom @@ -2783,7 +2785,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemlja u posjed STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD tim # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spremi igru @@ -3002,8 +3004,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Pokušaj koriš STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sadrži neispravan sprite. Svi neispravni grafički znakovi bit će pokazani kao crveni upitnik (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Sadrži višestruke unose za Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Pročitaj nakon kraja od pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Baznom grafičkom setu u uporabi nedostaju neki spriteovi.{}Ažurirajte bazni grafički set -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Trenutno korištenom osnovnom grafičkom setu nedostaju pojedini crteži.{}Molimo da nadogradite osnovni grafički set.{}Pošto igrate {YELLOW}razvojnu inačicu OpenTTD-a{WHITE}, možda će vam trebati i {YELLOW}razvojna inačica osnovnog grafičkog seta{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Zatraženi GRF resursi nisu dostupni (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je isključen od strane {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Pogrešan/nepoznat format raspored sprite-a (sprite {3:NUM}) @@ -3390,9 +3390,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treba: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}čeka +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Teret koji čeka obradu: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3653,10 +3657,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kada j STR_REPLACE_VEHICLES_STOP :{BLACK}Prestani zamijenjivati vozila STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikni za zaustavljanje zamjene lijevo odabrane vrste lokomotive -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Zamjenjujem:{ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Prebaci između prozora za izmjenu lokomotiva i vagona STR_REPLACE_ENGINES :Lokomotive STR_REPLACE_WAGONS :Vagoni +STR_REPLACE_ALL_RAILTYPE :Sva pružna vozila STR_REPLACE_HELP_RAILTYPE :{BLACK}Odaberite vrstu željeznice za koju želite zamijeniti lokomotive STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Prikazuje sa kojom se lokomotivom zamjenjuje lijevo odabrana lokomotiva, ako postoji koji diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 9a246b62a5..e2c25f21f3 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -12,7 +12,7 @@ ##case nom gen dat acc voc loc ins big small -# $Id: czech.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: czech.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1848,6 +1848,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Ukázat, STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Zobrazit nastavení AI a hry STR_INTRO_TOOLTIP_QUIT :{BLACK}Ukončit 'OpenTTD' +STR_INTRO_BASESET :{BLACK}V aktuálně zvolené základní sadě grafiky chybí {NUM} sprit{P "" y ů}. Zkuste, prosím, vyhledat aktualizovanou základní sadu. STR_INTRO_TRANSLATION :{BLACK}Tento překlad postrádá {NUM} řetěz{P ec ce ců}. Prosím pomozte OpenTTD udělat lepším a přihlaste se jako překladatel. Pro více informací, čtěte readme.txt. # Quit window @@ -2682,6 +2683,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Název d STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Přijímané zboží: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Druh kolejí: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Rychlostní omezení tratě: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Rychlostní omezení silnice: {LTBLUE}{VELOCITY} @@ -2694,29 +2696,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Pole STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zasněžená země STR_LAI_CLEAR_DESCRIPTION_DESERT :Poušť -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} trať -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} trať s obyčejným návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} trať s vjezdovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} trať s výjezdovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} trať s kombinovaným návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} trať s dokonalejším (PBS) návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} trať s dokonalejším (PBS) jednosměrným návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} trať s obyčejným a vjezdovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} trať s obyčejným a odjezdovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} trať s obyčejným a kombinovaným návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} trať s obyčejným a cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} trať s obyčejným a jednosměrným cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} trať s vjezdovým a odjezdovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} trať s vjezdovým a kombinovaným návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} trať s vjezdovým a cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} trať s vjezdovým a jednosměrným cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} trať s výjezdovým a kombinovaným návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} trať s výjezdovým a cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} trať s výjezdovým a jednosměrným cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} trať s kombinovaným a cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} trať s kombinovaným a jednosměrným cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} trať s cestovým a jednosměrným cestovým návěstidlem -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} železniční depo +STR_LAI_RAIL_DESCRIPTION_TRACK :Železniční trať +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železniční trať s obyčejnými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železniční trať s vjezdovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železniční trať s odjezdovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Železniční trať s kombinovanými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Železniční trať s dokonalejšími (PBS) návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Železniční trať s jednosměrnými cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Železniční trať s obyčejnými a vjezdovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Železniční trať s obyčejnými a odjezdovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Železniční trať s obyčejnými a kombinovanými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Železniční trať s obyčejnými a cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Železniční trať s obyčejnými a jednosměrnými cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Železniční trať s vjezdovými a odjezdovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Železniční trať s vjezdovými a kombinovanými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Železniční trať s vjezdovými a cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Železniční trať s vjezdovými a jednosměrnými cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Železniční trať s odjezdovými a kombinovanými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Železniční trať s odjezdovými a cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Železniční trať s odjezdovými a jednosměrnými cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Železniční trať s kombinovanými a cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Železniční trať s kombinovanými a jednosměrnými cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Železniční trať s cestovými a jednosměrnými cestovými návěstidly +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železniční depo STR_LAI_ROAD_DESCRIPTION_ROAD :Silnice STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Silnice s pouličním osvětlením @@ -2780,7 +2782,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Půda vlastněn STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Původní copyright: {COPYRIGHT} 1995 Chris Sawyer, všechna práva vyhrazena STR_ABOUT_VERSION :{BLACK}OpenTTD verze {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Tým OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Tým OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Uložit hru @@ -2999,8 +3001,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Pokus o použit STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} obsahuje poškozený sprite. Všechny takové se zobrazí jako červený otazník (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Obsahuje vícero Akce 8 záznamů (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Čtení konce pseudo-spritu (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Právě používanému základnímu grafickému setu chybí obrázky.{}Prosím, updatujte ho -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Aktuálnímu grafickému setu chybí nějaké části.{}Aktualizuj prosím grafický set.{}Pokud hraješ{YELLOW}vývojovou verzi OpenTTD{WHITE}, možná potřebuješ {YELLOW}vývojovou verzi základních grafik{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Požadované zdroje GRF nejsou dostupné (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} byla vypnuta {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Neplatný/neznámý sprite layout formát (sprite {3:NUM}) @@ -3387,9 +3387,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vyžaduj STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Náklad čekající na zpracování: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3653,10 +3652,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} když STR_REPLACE_VEHICLES_STOP :{BLACK}Vypnout vyměňování STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Zmáčkni toto tlačítko, když nechceš vyměňovat typ lokomotivy vybraný v levém seznamu -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Vyměňování: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Přepne mezi okny na výměnu lokomotiv a vagonů STR_REPLACE_ENGINES :lokomotivy STR_REPLACE_WAGONS :vagony +STR_REPLACE_ALL_RAILTYPE :Všechna drážní vozidla STR_REPLACE_HELP_RAILTYPE :{BLACK}Vyber typ kolejí, pro které chceš měnit lokomotivy STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Tady je zobrazeno, za jakou lokomotivu se ta v levém seznamu vyměňuje @@ -4189,7 +4188,7 @@ STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... nelz STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... obrázek je příliš velký STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Varování kvůli velikosti -STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Tak velká zmena velikosti zdrojové mapy není doporučena. Pokračovat s generováním? +STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Tak velká změna velikosti zdrojové mapy není doporučena. Pokračovat v generování? # Soundset messages STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Byl nalezen pouze nouzový zvukový soubor. Pokud chcete zvuky, nainstalujte prosim zvukové soubory skrze systém stahování obsahu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4475972032..d1f11d2fba 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -10,7 +10,7 @@ ##grflangid 0x2d -# $Id: danish.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: danish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Marker STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snedækket land STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} spor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} spor med bloksignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} spor med with pre-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} spor med udgangssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} spor med kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} spor med rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spor med en-vejs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spor med blok- og pre-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spor med blok- og udgangs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spor med blok og kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spor med blok- og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spor med blok og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spor med pre- og udgangs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spor med pre- og kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spor med pre- og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spor med pre- og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spor med udgangs- og kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spor med udgangs- og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spor med udgangs- og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spor med kombinerede og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} spor med kombinerede og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spor med rute- og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} togdepot +STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbane spor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbane spor med bloksignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbane spor med with pre-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbane spor med udgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbane spor med kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbane spor med rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med en-vejs-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blok- og pre-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blok- og udgangs-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blok og kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blok- og rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blok og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med pre- og udgangs-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane spor med pre- og kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med pre- og rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbane spor med pre- og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor med udgangs- og kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med udgangs- og rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med udgangs- og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinerede og rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinerede og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med rute- og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togdepot STR_LAI_ROAD_DESCRIPTION_ROAD :Vej STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Vej med gadelygter @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land ejet af se STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheder reserveret STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gem spil @@ -2874,7 +2874,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Gå til STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Tidligere grafikelement STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, springe over nogen pseudo / recolour / FONT sprites og indpakning rundt fra den første sprite til det sidste STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes. -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nulstil relativ STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nulstil den nuværende relative forskydning STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Absolut) @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Forsøg på at STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} indeholder en ødelagt sprite. Alle ødelagte sprites vil blive vist som et rødt spørgsmålstegn (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Indeholder adskillige handling 8 indgange (grafikelement {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Læs forbi slutningen af pseudo-grafikelement (grafikelement {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Det brugte basis grafiksæt mangler en række elementer.{}Opdater venligst grafiksættet. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Den grafikpakke som bruges er ufuldstændig.{}Opdater venligst grafikpakken.{}eftersom du spiller et{YELLOW} development snapshot of OpenTTD{WHITE},får du måske også brug for er{YELLOW}development snapshot of the base graphics{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF ressourcer er ikke tilgængelige (grafikelement {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blev deaktiveret af {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt / ukendt grafikelement layoutformat (grafikelement {3:NUM}) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kræver: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Fragt der venter på forarbejdning: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} når d STR_REPLACE_VEHICLES_STOP :{BLACK}Stop udskiftning STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Tryk for at stoppe udskiftningen at den køretøjstype, som du har valgt til venstre -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Udskifter: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skift imellem lokomotiv- og vognudskiftningsvindue STR_REPLACE_ENGINES :Lokomotiver STR_REPLACE_WAGONS :Vogne diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index e83c7cae0b..2f1e4bbfb9 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -10,7 +10,7 @@ ##grflangid 0x1f -# $Id: dutch.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: dutch.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1761,6 +1761,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken n STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Toon AI/Game script instellingen STR_INTRO_TOOLTIP_QUIT :{BLACK}Verlaat 'OpenTTD' +STR_INTRO_BASESET :{BLACK}De huidige gekozen graphics set mist {NUM} afbeelding{P "" en}. Controleer of er updates zijn voor deze basisset. STR_INTRO_TRANSLATION :{BLACK}Deze vertaling mist {NUM} tekst{P "" en}. Help aub om OpenTTD beter te maken door je al vertaler aan te melden. Zie readme.txt voor details. # Quit window @@ -2589,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Vliegvel STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Geaccepteerde vracht: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Rail type: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Spoor snelheidslimiet: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Snelheidslimiet weg: {LTBLUE}{VELOCITY} @@ -2601,29 +2603,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Akkers STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Sneeuw STR_LAI_CLEAR_DESCRIPTION_DESERT :Woestijn -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} spoor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} spoor met blokseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} spoor met voorseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} spoor met exitseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} spoor met combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} spoor met routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spoor met eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spoor met blok en voorseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spoor met blok en exitseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spoor met blok en combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spoor met blok en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spoor met blok en eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spoor met voor- en exitseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spoor met voor- en combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spoor met voor- en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spoor met voor- en eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spoor met exit- en combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spoor em exit- en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spoor met exit- en eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spoor met combo- en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} Spoor met combo- en eenrichtingssein -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spoor met route en eenrichtingssein -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} trein depot +STR_LAI_RAIL_DESCRIPTION_TRACK :Spoorweg spoor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Spoorweg spoor met blokseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Spoorweg spoor met voorseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Spoorweg spoor met exitseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Spoorweg spoor met combo-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Spoorweg spoor met routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Spoorweg spoor met eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Spoorweg spoor met blok en voorseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Spoorweg spoor met blok en exitseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Spoorweg spoor met blok en combo-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Spoorweg spoor met blok en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Spoorweg spoor met blok en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Spoorweg spoor met voor- en exitseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Spoorweg spoor met voor- en combo-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Spoorweg spoor met voor- en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Spoorweg spoor met voor- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Spoorweg spoor met exit- en combo-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Spoorweg spoor met exit- en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Spoorweg spoor met exit- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Spoorweg spoor met combo- en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Spoorweg Spoor met combo- en eenrichtingssein +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Spoorweg spoor met route en eenrichtingssein +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Spoorweg trein depot STR_LAI_ROAD_DESCRIPTION_ROAD :Weg STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Weg met straatlantaarns @@ -2687,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedr STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele copyright {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden STR_ABOUT_VERSION :{BLACK}OpenTTD versie {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Het OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Het OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spel Opslaan @@ -2906,8 +2908,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Poging om ongel STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige afbeelding. Alle ongeldige afbeeldingen worden getoond als een rood vraagteken (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere acties 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-sprite gelezen (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}De huidige basis graphics-set mist een aantal sprites..{}Werk de graphics-set bij aub -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}De momenteel gebruikte basis graphics set mist een aantal sprites.{} Werk de ingestelde basis graphics bij.{} Aangezien u een {YELLOW} ontwikkeling momentopname van OpenTTD{WHITE} speelt, heeft u ook een {YELLOW} ontwikkeling snapshot van de basis graphics set{WHITE} nodig STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF middelen niet beschikbaar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldig/onbekend sprite lay-out-formaat (sprite {3:NUM}) @@ -3294,9 +3294,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereist: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Vracht klaar om te worden verwerkt: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,10 +3556,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} als ou STR_REPLACE_VEHICLES_STOP :{BLACK}Stop het vervangen STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klik op deze knop als je de aan de linkerkant geselecteerde locomotief niet wilt vervangen -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Aan het vervangen: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Wissel tussen locomotief- en wagonvervangvensters STR_REPLACE_ENGINES :Motoren STR_REPLACE_WAGONS :Wagons +STR_REPLACE_ALL_RAILTYPE :Alle railvoertuigen STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecteer een spoortype waar je locomotieven voor wilt vervangen STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Dit geeft weer waarmee de aan de linkerkant geselecteerde locomotief vervangen wordt diff --git a/src/lang/english.txt b/src/lang/english.txt index 7518d37e29..f63bffa453 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -10,7 +10,7 @@ ##grflangid 0x01 -# $Id: english.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: english.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1761,6 +1761,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Check fo STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Display AI/Game script settings STR_INTRO_TOOLTIP_QUIT :{BLACK}Exit 'OpenTTD' +STR_INTRO_BASESET :{BLACK}The currently selected base graphics set is missing {NUM} sprite{P "" s}. Please check for updates for the baseset. STR_INTRO_TRANSLATION :{BLACK}This translation misses {NUM} string{P "" s}. Please help make OpenTTD better by signing up as translator. See readme.txt for details. # Quit window @@ -2589,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Airport STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{RAW_STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Rail type: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Rail speed limit: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Road speed limit: {LTBLUE}{VELOCITY} @@ -2601,29 +2603,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Fields STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snow-covered land STR_LAI_CLEAR_DESCRIPTION_DESERT :Desert -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} track -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} track with block signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} track with pre-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} track with exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} track with combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} track with path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} track with one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} track with block and pre-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} track with block and exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} track with block and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} track with block and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} track with block and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} track with pre- and exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} track with pre- and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} track with pre- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} track with pre- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} track with exit- and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} track with exit- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} track with exit- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} track with combo- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} track with combo- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} track with path and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} train depot +STR_LAI_RAIL_DESCRIPTION_TRACK :Railway track +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Railway track with block signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Railway track with pre-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Railway track with exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Railway track with combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Railway track with path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Railway track with one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Railway track with block and pre-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Railway track with block and exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Railway track with block and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Railway track with block and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Railway track with block and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Railway track with pre- and exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Railway track with pre- and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Railway track with pre- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Railway track with pre- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Railway track with exit- and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Railway track with exit- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Railway track with exit- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Railway track with combo- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Railway track with combo- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Railway track with path and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Railway train depot STR_LAI_ROAD_DESCRIPTION_ROAD :Road STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Road with street lights @@ -2687,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game @@ -2906,8 +2908,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Attempt to use STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{RAW_STRING} contains a corrupt sprite. All corrupt sprites will be shown as a red question mark (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contains multiple Action 8 entries (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Read past end of pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}The currently used base graphics set is missing a number of sprites.{}Please update the base graphics set -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}The currently used base graphics set is missing a number of sprites.{}Please update the base graphics set.{}Since you are playing a {YELLOW}development snapshot of OpenTTD{WHITE}, you might also need a {YELLOW}development snapshot of the base graphics{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF resources not available (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:RAW_STRING} was disabled by {2:RAW_STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) @@ -3294,9 +3294,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING}, {STRING}{RAW_STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}waiting +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{RAW_STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{RAW_STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Cargo waiting to be processed: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{RAW_STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING} ############ range for produces ends @@ -3557,10 +3561,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} when o STR_REPLACE_VEHICLES_STOP :{BLACK}Stop Replacing Vehicles STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Press to stop the replacement of the engine type selected on the left -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Replacing: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Switch between engine and wagon replacement windows STR_REPLACE_ENGINES :Engines STR_REPLACE_WAGONS :Wagons +STR_REPLACE_ALL_RAILTYPE :All rail vehicles STR_REPLACE_HELP_RAILTYPE :{BLACK}Choose the rail type you want to replace engines for STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Displays which engine the left selected engine is being replaced with, if any diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 21803191fa..7f41fbba2f 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -10,7 +10,7 @@ ##grflangid 0x3d -# $Id: english_AU.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: english_AU.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2576,29 +2576,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Fields STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snow-covered land STR_LAI_CLEAR_DESCRIPTION_DESERT :Desert -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} track -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} track with block signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} track with pre-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} track with exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} track with combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} track with path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} track with one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} track with block and pre-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} track with block and exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} track with block and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} track with block and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} track with block and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} track with pre- and exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} track with pre- and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} track with pre- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} track with pre- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} track with exit- and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} track with exit- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} track with exit- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} track with combo- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} track with combo- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} track with path and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} train depot +STR_LAI_RAIL_DESCRIPTION_TRACK :Railway track +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Railway track with block signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Railway track with pre-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Railway track with exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Railway track with combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Railway track with path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Railway track with one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Railway track with block and pre-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Railway track with block and exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Railway track with block and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Railway track with block and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Railway track with block and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Railway track with pre- and exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Railway track with pre- and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Railway track with pre- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Railway track with pre- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Railway track with exit- and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Railway track with exit- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Railway track with exit- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Railway track with combo- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Railway track with combo- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Railway track with path and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Railway train depot STR_LAI_ROAD_DESCRIPTION_ROAD :Road STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Road with street lights @@ -2662,7 +2662,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game @@ -2873,8 +2873,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Attempt to use STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contains a corrupt sprite. All corrupt sprites will be shown as a red question mark (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contians multiple Action 8 entries (sprite{3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Read past end of psuedo-sprite (sprite{3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}The currently used base graphics set is missing a number of sprites.{}Please update the base graphics set -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}The currently used base graphics set is missing a number of sprites.{}Please update the base graphics set.{}Since you are playing a {YELLOW}development snapshot of OpenTTD{WHITE}, you might also need a {YELLOW}development snapshot of the base graphics{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF resources not available (sprite{3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} was disabled by {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) @@ -3261,9 +3259,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Cargo waiting to be processed: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3508,7 +3505,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} when o STR_REPLACE_VEHICLES_STOP :{BLACK}Stop Replacing Vehicles STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Press to stop the replacement of the engine type selected on the left -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Replacing: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Switch between engine and wagon replacement windows STR_REPLACE_ENGINES :Engines STR_REPLACE_WAGONS :Wagons diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index cd654491db..637c4a8a11 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -10,7 +10,7 @@ ##grflangid 0x00 -# $Id: english_US.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: english_US.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1761,6 +1761,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Check fo STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Display AI/Game script settings STR_INTRO_TOOLTIP_QUIT :{BLACK}Quit 'OpenTTD' +STR_INTRO_BASESET :{BLACK}The currently selected base graphics set is missing {NUM} sprite{P "" s}. Please check for updates for the baseset. STR_INTRO_TRANSLATION :{BLACK}This translation misses {NUM} string{P "" s}. Please help make OpenTTD better by signing up as translator. See readme.txt for details. # Quit window @@ -2589,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Airport STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Rail type: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Rail speed limit: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Road speed limit: {LTBLUE}{VELOCITY} @@ -2601,29 +2603,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Fields STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snow-covered land STR_LAI_CLEAR_DESCRIPTION_DESERT :Desert -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} track -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} track with block signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} track with pre-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} track with exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} track with combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} track with path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} track with one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} track with block and pre-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} track with block and exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} track with block and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} track with block and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} track with block and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} track with pre- and exit-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} track with pre- and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} track with pre- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} track with pre- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} track with exit- and combo-signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} track with exit- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} track with exit- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} track with combo- and path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} track with combo- and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} track with path and one-way path signals -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} train depot +STR_LAI_RAIL_DESCRIPTION_TRACK :Railroad track +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Railroad track with block signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Railroad track with pre-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Railroad track with exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Railroad track with combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Railroad track with path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Railroad track with one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Railroad track with block and pre-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Railroad track with block and exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Railroad track with block and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Railroad track with block and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Railroad track with block and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Railroad track with pre- and exit-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Railroad track with pre- and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Railroad track with pre- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Railroad track with pre- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Railroad track with exit- and combo-signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Railroad track with exit- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Railroad track with exit- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Railroad track with combo- and path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Railroad track with combo- and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Railroad track with path and one-way path signals +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Railroad train depot STR_LAI_ROAD_DESCRIPTION_ROAD :Road STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Road with street lights @@ -2687,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game @@ -2906,8 +2908,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Attempt to use STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contains a corrupt sprite. All corrupt sprites will be shown as a red question mark (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contains multiple Action 8 entries (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Read past end of pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}The currently used base graphics set is missing a number of sprites.{}Please update the base graphics set -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}The currently used base graphics set is missing a number of sprites.{}Please update the base graphics set.{}Since you are playing a {YELLOW}development snapshot of OpenTTD{WHITE}, you might also need a {YELLOW}development snapshot of the base graphics{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF resources not available (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} was disabled by {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) @@ -3294,9 +3294,11 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}waiting + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Cargo waiting to be processed: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,10 +3559,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} when o STR_REPLACE_VEHICLES_STOP :{BLACK}Stop Replacing Vehicles STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Press to stop the replacement of the engine type selected on the left -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Replacing: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Switch between engine and car replacement windows STR_REPLACE_ENGINES :Engines STR_REPLACE_WAGONS :Cars +STR_REPLACE_ALL_RAILTYPE :All rail vehicles STR_REPLACE_HELP_RAILTYPE :{BLACK}Choose the rail type you want to replace engines for STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Displays which engine the left selected engine is being replaced with, if any diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 6da5ee95ff..a8f8822f8f 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -11,7 +11,7 @@ ##case n -# $Id: esperanto.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: esperanto.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2265,7 +2265,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanie poseda STR_ABOUT_OPENTTD :{WHITE}Pri OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Origina kopirajto {COPYRIGHT} 1995 Chris Sawyer, Ĉiuj rajtoj rezervitaj STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 La teamo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 La teamo de OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Konservu Ludon @@ -2451,7 +2451,6 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} bezo STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :la GRF-dosiero estas farita por traduki STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Tro da NewGRF-oj estas ŝarĝataj STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} enhavas rompitan bildeton. Ĉiuj rompitaj bildetoj aspektos kiel ruĝaj demandsignoj (?) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}La nuntempe uza baza grafikaĵaro mankas kelkajn da bildetoj.{}Bonvolu renovigu la baza grafikaĵaro STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} estis malaktivata per {STRING} # NewGRF related 'general' warnings @@ -2732,9 +2731,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Bezonas: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING}, {STRING.n}{STRING}, {STRING.n}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Kargo atendanta procedon: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produktas: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produktas: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -2977,7 +2975,6 @@ STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Ne elekt STR_REPLACE_VEHICLES_STOP :{BLACK}Ĉesu Anstataŭi STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Premu por ĉesi anstataŭi la maldekstre elektitan maŝinon -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Anstataŭante: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Ŝaltu inter maŝina kaj vagona anstataŭigo STR_REPLACE_ENGINES :Maŝinoj STR_REPLACE_WAGONS :Vagonoj diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 5f270ec407..14979ce0ce 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -11,7 +11,7 @@ ##case g in sü -# $Id: estonian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: estonian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2659,29 +2659,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Põllud STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Lumine maa STR_LAI_CLEAR_DESCRIPTION_DESERT :Kõrb -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} rööbas -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} rööpad koos blokksignaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} rööpad koos eelsignaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} rööpad väljasõidusignaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} rööpad kombineeritud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} rööpad koos täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} tööpad koos ühesuunaliste täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} rööpad koos blokk- ja eelsignaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} rööpad koos blokk- ja väljumissignaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} rööpad koos blokk- ja kombineeritud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} rööpad koos blokk- ja täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} rööpad koos blokksignaalidega ja ühesuunaliste täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} rööpad koos eel- ja väljumissignaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} rööpad koos eel- ja kombineeritud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} rööpad koos eel- ja täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} rööpad koos eel- ja ühesuunaliste täiustatud signaaligeda -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} rööpad koos väljumis- ja kombineeritud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} rööpad koos väljumis- ja täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} rööpad koos väljumis. ja ühesuunaliste täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} rööpad koos komineeriutd ja täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} rööpad koos komineeritud ja ühesuunaliste täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} rööpad koos täisutatud ja ühesuunaliste täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} Rongidepoo +STR_LAI_RAIL_DESCRIPTION_TRACK :Raudtee rööbas +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Raudtee rööpad koos blokksignaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Raudtee rööpad koos eelsignaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Raudtee rööpad väljasõidusignaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Raudtee rööpad kombineeritud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Raudtee rööpad koos täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Raudtee tööpad koos ühesuunaliste täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Raudtee rööpad koos blokk- ja eelsignaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Raudtee rööpad koos blokk- ja väljumissignaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Raudtee rööpad koos blokk- ja kombineeritud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Raudtee rööpad koos blokk- ja täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Raudtee rööpad koos blokksignaalidega ja ühesuunaliste täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Raudtee rööpad koos eel- ja väljumissignaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Raudtee rööpad koos eel- ja kombineeritud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Raudtee rööpad koos eel- ja täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Raudtee rööpad koos eel- ja ühesuunaliste täiustatud signaaligeda +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Raudtee rööpad koos väljumis- ja kombineeritud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Raudtee rööpad koos väljumis- ja täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Raudtee rööpad koos väljumis. ja ühesuunaliste täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Raudtee rööpad koos komineeriutd ja täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Raudtee rööpad koos komineeritud ja ühesuunaliste täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Raudtee rööpad koos täisutatud ja ühesuunaliste täiustatud signaalidega +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Raudtee Rongidepoo STR_LAI_ROAD_DESCRIPTION_ROAD :Sõidutee STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Valgustatud sõidutee @@ -2745,7 +2745,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ettevõtte maa STR_ABOUT_OPENTTD :{WHITE}OpenTTD lisainfo STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Algne autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud STR_ABOUT_VERSION :{BLACK}OpenTTD osa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 OpenTTD meeskond +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD meeskond # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Mängu salvestamine @@ -2964,8 +2964,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Kasutati kõlbm STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sisaldab vigast pilti. Kõiki vigaseid pilte näidatakse punase küsimärgina (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Sisaldab mitut Action 8 kirjet (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Loe pseudo-sprite lõpust edasi (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Praegune alusgraafika kogu ei sisalda mitmeid spraite.{}Palun uuenda alusgraafika kogu -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Praegune alusgraafika kogu ei sisalda mitmeid spraite.{}Palun uuenda alusgraafika kogu.{}Kuna sa mängid {YELLOW}OpenTTD arendusversiooniga{WHITE}, siis ilmselt pead sa kasutama {YELLOW}alusgraafika kogu arendusversiooni{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Soovitud GRFi ressursid ei ole saadaval (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blokeeriti {STRING} poolt STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :«Sprite» paigutus kõlbmatus vormis («sprite» {3:NUM}) @@ -3352,9 +3350,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vajab: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Käitlust ootav kaup: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3615,7 +3612,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kui va STR_REPLACE_VEHICLES_STOP :{BLACK}Lõpeta Sõidukite Asendamine STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Vajuta lõpetamaks vasakult valitud veduri asendust -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Asendamisel: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Vaheta aken mootori ja vaguni asendamise aknate vahel STR_REPLACE_ENGINES :Vedurid STR_REPLACE_WAGONS :Vaguneid diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 0f9dd1d7a4..10121bc64a 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -11,7 +11,7 @@ ##gender m f n -# $Id: faroese.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: faroese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2341,29 +2341,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Markir STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Kava-klætt lendi STR_LAI_CLEAR_DESCRIPTION_DESERT :Oyðimørk -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} breyt -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} breyt við blokk teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} breyt við for teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} breyt við útvegs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} breyt við blandings teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} breyt við leið teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} breyt við einvegis leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} breyt við blokk og for teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} breyt við blokk og útvegs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} breyt við block og blandings teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} breyt við blokk og leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} breyt við blokk og einvegis leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} breyt við for og útvegis teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} breyt við for og blandings teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} breyt við for og leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} breyt við for og einvegis leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} breyt við útvegs og blandings teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} breyt við útvegs og leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} breyt við útvegs og einvegis leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} breyt við blandings og leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} breyt við blandings og einvegis leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} breyt við leiðs og einvegis leiðs teknum -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} Tok goymsla +STR_LAI_RAIL_DESCRIPTION_TRACK :{G=m}Jarnbreyt breyt +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{G=m}Jarnbreyt breyt við blokk teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{G=m}Jarnbreyt breyt við for teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{G=m}Jarnbreyt breyt við útvegs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{G=m}Jarnbreyt breyt við blandings teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{G=m}Jarnbreyt breyt við leið teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{G=m}Jarnbreyt breyt við einvegis leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{G=m}Jarnbreyt breyt við blokk og for teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{G=m}Jarnbreyt breyt við blokk og útvegs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{G=m}Jarnbreyt breyt við block og blandings teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{G=m}Jarnbreyt breyt við blokk og leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{G=m}Jarnbreyt breyt við blokk og einvegis leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{G=m}Jarnbreyt breyt við for og útvegis teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{G=m}Jarnbreyt breyt við for og blandings teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{G=m}Jarnbreyt breyt við for og leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{G=m}Jarnbreyt breyt við for og einvegis leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{G=m}Jarnbreyt breyt við útvegs og blandings teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{G=m}Jarnbreyt breyt við útvegs og leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{G=m}Jarnbreyt breyt við útvegs og einvegis leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{G=m}Jarnbreyt breyt við blandings og leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{G=m}Jarnbreyt breyt við blandings og einvegis leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{G=m}Jarnbreyt breyt við leiðs og einvegis leiðs teknum +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{G=m}Jarnbreyt Tok goymsla STR_LAI_ROAD_DESCRIPTION_ROAD :Vegur STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Vegur við lyktapelum @@ -2427,7 +2427,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ogn hjá fyrit STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upprunalig upphavsrættindi {COPYRIGHT} 1995 Chris Sawyer, Øll rættindi umbiðin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáva {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD toymi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD toymi # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Goym spæl @@ -2923,9 +2923,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tørvar: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Farmur ið bíðar eftir at verða viðgjørdur: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Framleiður: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Framleiður: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3168,7 +3167,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} tá ga STR_REPLACE_VEHICLES_STOP :{BLACK}Steðga umbýting av flutningstólum STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Trýst fyri at steðga umbýtanini av motor slagnum tú valdi á vinstru síðu -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Býtur um: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skift ímillum motor og vogna umbýtingar vindeyga STR_REPLACE_ENGINES :Motorar STR_REPLACE_WAGONS :Vognar diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index d3a79d3655..037b0594d9 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -10,7 +10,7 @@ ##grflangid 0x35 -# $Id: finnish.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: finnish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Peltoja STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Lumen peittämää maata STR_LAI_CLEAR_DESCRIPTION_DESERT :Aavikkoa -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} suojastusopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} tulo-opastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} poistumisopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} yhdistelmäopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} yksisuuntaisilla reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} suojastus- ja tulo-opastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} suojastus- ja poistumisopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} suojastus- ja yhdistelmäopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} suojastus- ja reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} suojastus- ja yksisuuntaisilla reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} tulo- ja poistumisopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} tulo- ja yhdistelmäopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} tulo- ja reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} tulo- ja yksisuuntaisilla reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} poistumis- ja yhdistelmäopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} poistumis- ja reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} poistumis- ja yksisuuntaisilla opastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} yhdistelmä- ja reittiopastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} yhdistelmä- ja yksisuuntaisilla opastimilla -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} reitti- ja yksisuuntaisilla opastimilla -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} veturitalli +STR_LAI_RAIL_DESCRIPTION_TRACK :Rautatie +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Rautatie suojastusopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Rautatie tulo-opastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Rautatie poistumisopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Rautatie yhdistelmäopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Rautatie reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Rautatie yksisuuntaisilla reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Rautatie suojastus- ja tulo-opastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Rautatie suojastus- ja poistumisopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Rautatie suojastus- ja yhdistelmäopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Rautatie suojastus- ja reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Rautatie suojastus- ja yksisuuntaisilla reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Rautatie tulo- ja poistumisopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Rautatie tulo- ja yhdistelmäopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Rautatie tulo- ja reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Rautatie tulo- ja yksisuuntaisilla reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Rautatie poistumis- ja yhdistelmäopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Rautatie poistumis- ja reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Rautatie poistumis- ja yksisuuntaisilla opastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Rautatie yhdistelmä- ja reittiopastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Rautatie yhdistelmä- ja yksisuuntaisilla opastimilla +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Rautatie reitti- ja yksisuuntaisilla opastimilla +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Rautatie veturitalli STR_LAI_ROAD_DESCRIPTION_ROAD :Tie STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Tie katuvaloilla @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Yhtiön omistam STR_ABOUT_OPENTTD :{WHITE}Tietoja OpenTTD:stä STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Alkuperäiset oikeudet {COPYRIGHT} 1995 Chris Sawyer, kaikki oikeudet pidätetään STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Tallenna peli @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Yritys käyttä STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sisältää korruptoituneen spriten. Kaikki korruptoituneet spritet näkyvät punaisina kysymysmerkkeinä (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Sisältää useita Action 8-merkintöjä (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Luku pseudo-spriten ohi (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Käytössä olevasta perusgrafiikkapaketista puuttuu spritejä.{}Ole hyvä ja päivitä perusgrafiikkapaketti -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Käytössä olevasta perusgrafiikkapaketista puuttuu spritejä.{}Päivitä perusgrafiikkapaketti.{}Koska pelaat {YELLOW}OpenTTD:n kehitysversiota{WHITE}, saatat myös tarvita {YELLOW}kehitysversion perusgrafiikkapaketista{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-resurssit eivät ole saatavilla (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Virheellinen/tuntematon spriten asettelumuoto (sprite {3:NUM}) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tarvitse STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Käsittelyä odottava rahti: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kun va STR_REPLACE_VEHICLES_STOP :{BLACK}Lopeta ajoneuvojen korv. STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Napsauta pysäyttääksesi vasemmalta valitun veturityypin korvauksen. -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Korvataan: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Vaihda toiseen korvausikkunaan STR_REPLACE_ENGINES :Veturit STR_REPLACE_WAGONS :Vaunut diff --git a/src/lang/french.txt b/src/lang/french.txt index 8982712a75..f773b29f3b 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -11,7 +11,7 @@ ##gender m m2 f -# $Id: french.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: french.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1762,6 +1762,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Vérifie STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Afficher la configuration des scripts STR_INTRO_TOOLTIP_QUIT :{BLACK}Quitter OpenTTD +STR_INTRO_BASESET :{BLACK}{NUM} sprite{P "" s} manque{P "" "nt"} dans les graphiques de base actuellement sélectionnés. Veuillez vérifier les mises à jours pour les graphiques de base. STR_INTRO_TRANSLATION :{BLACK}Il manque {NUM} chaîne{P "" s} dans cette traduction. Merci d'aider à améliorer OpenTTD en vous inscrivant comme traducteur. Voir readme.txt pour les détails. # Quit window @@ -2322,7 +2323,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construi STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Alterner entre construire et retirer des voies, des signaux, des points de contrôle et des gares.{}Ctrl pour retirer également la voie lors du retrait des points de contrôle et des gares. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Convertir/Améliorer le type de rail.{}Shift pour afficher seulement le coût estimé. -STR_RAIL_NAME_RAILROAD :Voie ferrée simple +STR_RAIL_NAME_RAILROAD :Voie ferrée STR_RAIL_NAME_ELRAIL :Voie ferrée électrifiée STR_RAIL_NAME_MONORAIL :Monorail STR_RAIL_NAME_MAGLEV :Maglev @@ -2590,6 +2591,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nom de l STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargaison acceptée{NBSP}: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Type de rail{NBSP}: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Vitesse limite de la voie{NBSP}: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Vitesse limite de la route{NBSP}: {LTBLUE}{VELOCITY} @@ -2602,29 +2604,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Champs STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terre enneigée STR_LAI_CLEAR_DESCRIPTION_DESERT :Désert -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING}{NBSP} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} avec signaux de bloc -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} avec pré-signaux -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} avec signaux de sortie -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} avec signaux combinés -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} avec signaux de chemin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} avec signaux de chemin à sens unique -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} avec signal de bloc et pré-signaux -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} avec signal de bloc et signaux de sortie -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} avec signal de bloc et signaux combinés -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} avec signaux de bloc et de chemin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} avec signaux de bloc et de chemin à sens unique -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} avec pré-signal et signal de sortie -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} avec pré-signal et signal combiné -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} avec pré-signal et signal de chemin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} avec pré-signal et signal de chemin à sens unique -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} avec signal de sortie et signal combiné -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} avec signal de sortie et signal de chemin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} avec signal de sortie et signal de chemin à sens unique -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} avec signal combiné et signal de chemin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} avec signal combiné et signal de chemin à sens unique -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} avec signal de chemin et signal de chemin à sens unique -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Dépôt de trains de {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :Voie ferrée +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Voie ferrée avec signaux de bloc +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Voie ferrée avec pré-signaux +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Voie ferrée avec signaux de sortie +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Voie ferrée avec signaux combinés +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Voie ferrée avec signaux de chemin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Voie ferrée avec signaux de chemin à sens unique +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Voie ferrée avec signal de bloc et pré-signaux +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Voie ferrée avec signal de bloc et signaux de sortie +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Voie ferrée avec signal de bloc et signaux combinés +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Voie ferrée avec signaux de bloc et de chemin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Voie ferrée avec signaux de bloc et de chemin à sens unique +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Voie ferrée avec pré-signal et signal de sortie +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Voie ferrée avec pré-signal et signal combiné +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Voie ferrée avec pré-signal et signal de chemin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Voie ferrée avec pré-signal et signal de chemin à sens unique +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Voie ferrée avec signal de sortie et signal combiné +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Voie ferrée avec signal de sortie et signal de chemin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Voie ferrée avec signal de sortie et signal de chemin à sens unique +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Voie ferrée avec signal combiné et signal de chemin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Voie ferrée avec signal combiné et signal de chemin à sens unique +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Voie ferrée avec signal de chemin et signal de chemin à sens unique +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Dépôt ferroviaire STR_LAI_ROAD_DESCRIPTION_ROAD :Route STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Route avec lampadaires @@ -2688,7 +2690,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrain apparte STR_ABOUT_OPENTTD :{WHITE}À propos de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Tous droits réservés STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 L'équipe OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 L'équipe OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sauvegarder la partie @@ -2907,8 +2909,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Tentative d'uti STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contient un sprite corrompu. Tous les sprites corrompus seront remplacés par un point d'interrogation rouge (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Présence multiple de l'Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lecture après la fin des pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Il manque certains sprites dans les graphiques de base actuellement utilisés.{}Veuillez mettre à jour les graphiques de base. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Il manque un certain nombre de sprites dans les graphiques de base actuellement utilisés.{}Veuillez mettre à jour les graphiques de base.{}Comme vous jouez avec une {YELLOW}version de développement d'OpenTTD{WHITE}, vous devriez utiliser une {YELLOW}version de développement des graphiques de base{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Indisponibilité de la ressource demandée (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} a été désactivé par {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de sprite invalide ou inconnu (sprite {3:NUM}) @@ -3295,9 +3295,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nécessi STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nécessite +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}en attente +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Marchandise en attente d'être utilisée{NBSP}: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,10 +3562,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} si vie STR_REPLACE_VEHICLES_STOP :{BLACK}Stopper le remplacement STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Appuyer sur ce bouton pour arrêter le remplacement du type de véhicule sélectionné à gauche -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}En remplacement{NBSP}: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Alterner entre les fenêtres de remplacement des locomotives ou des wagons STR_REPLACE_ENGINES :Locomotives STR_REPLACE_WAGONS :Wagons +STR_REPLACE_ALL_RAILTYPE :Tous le véhicules sur rail STR_REPLACE_HELP_RAILTYPE :{BLACK}Choisir un type de rail pour le remplacement de locomotives STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Ceci affiche par quel type de véhicule sera remplacé celui sélectionné à gauche, si possible diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index e97f0412d1..cb80db70b4 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -12,7 +12,7 @@ ##case nom gen dat voc -# $Id: gaelic.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: gaelic.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2812,29 +2812,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Achaidhean STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Tìr sneachdach STR_LAI_CLEAR_DESCRIPTION_DESERT :Fàsach -STR_LAI_RAIL_DESCRIPTION_TRACK :Slighe {STRING.gen} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Slighe {STRING.gen} le comharran bacaidh -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Slighe {STRING.gen} le ro-chomharran -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Slighe {STRING.gen} le comharran a-mach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Slighe {STRING.gen} le comharran aonaichte -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Slighe {STRING.gen} le comharran slighe -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Slighe {STRING.gen} le comharran aon-shligheach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Slighe {STRING.gen} le comharran bacaidh is ro-chomharran -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Slighe {STRING.gen} le comharran-bacaidh is a-mach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Slighe {STRING.gen} le comharran-bacaidh is aonaichte -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Slighe {STRING.gen} le comharran-bacaidh is slighe -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Slighe {STRING.gen} le comharran-bacaidh is aon-shligheach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Slighe {STRING.gen} le ro-chomharran is comharran a-mach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Slighe {STRING.gen} le ro-chomharran is comharran aonaichte -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Slighe {STRING.gen} le ro-chomharran is comharran slighe -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Slighe {STRING.gen} le ro-chomharran is comharran aon-shligheach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Slighe {STRING.gen} le comharran a-mach is aonaichte -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Slighe {STRING.gen} le comharran a-mach is slighe -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Slighe {STRING.gen} le comharran a-mach is aon-shligheach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Slighe {STRING.gen} le comharran aonaichte is slighe -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Slighe {STRING.gen} le comharran aonaichte is aon-shligheach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Slighe {STRING.gen} le comharran slighe is aon-shligheach -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Trèan-lann {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :Slighe Rathad-iarainn +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Slighe Rathad-iarainn le comharran bacaidh +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Slighe Rathad-iarainn le ro-chomharran +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Slighe Rathad-iarainn le comharran a-mach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Slighe Rathad-iarainn le comharran aonaichte +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Slighe Rathad-iarainn le comharran slighe +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Slighe Rathad-iarainn le comharran aon-shligheach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Slighe Rathad-iarainn le comharran bacaidh is ro-chomharran +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Slighe Rathad-iarainn le comharran-bacaidh is a-mach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Slighe Rathad-iarainn le comharran-bacaidh is aonaichte +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Slighe Rathad-iarainn le comharran-bacaidh is slighe +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Slighe Rathad-iarainn le comharran-bacaidh is aon-shligheach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Slighe Rathad-iarainn le ro-chomharran is comharran a-mach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Slighe Rathad-iarainn le ro-chomharran is comharran aonaichte +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Slighe Rathad-iarainn le ro-chomharran is comharran slighe +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Slighe Rathad-iarainn le ro-chomharran is comharran aon-shligheach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Slighe Rathad-iarainn le comharran a-mach is aonaichte +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Slighe Rathad-iarainn le comharran a-mach is slighe +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Slighe Rathad-iarainn le comharran a-mach is aon-shligheach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Slighe Rathad-iarainn le comharran aonaichte is slighe +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Slighe Rathad-iarainn le comharran aonaichte is aon-shligheach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Slighe Rathad-iarainn le comharran slighe is aon-shligheach +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Trèan-lann Rathad-iarainn STR_LAI_ROAD_DESCRIPTION_ROAD :Rathad STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Rathad le solasan-rathaid @@ -2916,7 +2916,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tìr a' chompan STR_ABOUT_OPENTTD :{WHITE}Mu dheidhinn OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Còir-lethbhreac tùsail {COPYRIGHT} 1995 Chris Sawyer, a h-uile còir glèidhte STR_ABOUT_VERSION :{BLACK}OpenTTD tionndadh {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 An sgioba OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 An sgioba OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sàbhail an geama @@ -3135,8 +3135,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Chaidh feuchain STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}Tha sprite coirbte am broinn {STRING.gen}. Thèid a h-uile sprite coirbte a shealltainn na comharradh-ceiste dhearg (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Tha iomadh innteart gnìomh 8 ann (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Chaidh leughadh thar deireadh a' sprite mas fhìor (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Tha sprite no dhà a dhìth air an t-seata ghrafaigeachd bhunasach a tha thu a' cleachdadh an-dràsta.{}Feuch an ùraich thu an seata grafaigeachd bunasach -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Tha sprite no dhà a dhìth air an t-seata ghrafaigeachd bhunasach a tha thu a' cleachdadh an-dràsta.{}Feuch an ùraich thu an seata grafaigeachd bunasach.{}Bhon a tha thu a' cluich le {YELLOW}snapshot leasachaidh aig OpenTTD{WHITE}, ’S dòcha gu bheil {YELLOW} snapshot leasachaidh dhen t-seata grafaigeachd bunasach{WHITE} a dhìth ort cuideachd STR_NEWGRF_ERROR_GRM_FAILED :Chan eil na goireasan GRF a chaidh iarraidh ri làimh (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :Chaidh {1:STRING} a chur à comas le {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Fòrmat co-dhealbhachd sprite mì-dhligheach/neo-aithnichte (sprite {3:NUM}) @@ -3523,9 +3521,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Feum air STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Carago a' feitheamh air giullachd: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3786,7 +3783,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} nuair STR_REPLACE_VEHICLES_STOP :{BLACK}Sguir dhe leasachadh nan carbadan STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Briog air ach nach tèid einnseanan dhen t-seòrsa a thagh thu air an taobh chlì a leasachadh -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}A' leasachadh: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Gearr leum eadar uinneagan leasachadh nan einnseanan is nan carbadan STR_REPLACE_ENGINES :Einnseanan STR_REPLACE_WAGONS :Carbadan diff --git a/src/lang/galician.txt b/src/lang/galician.txt index f00c1578c7..2a6e2f2111 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -11,7 +11,7 @@ ##gender m f n -# $Id: galician.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: galician.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2560,29 +2560,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Leiras STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terra cuberta de neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto -STR_LAI_RAIL_DESCRIPTION_TRACK :Vía de {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vía de {STRING} con sinais de bloqueo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vía de {STRING} con sinais avanzados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vía de {STRING} con sinais de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vía de {STRING} con sinais combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vía de {STRING} con sinais de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vía de {STRING} con sinais de ruta monosentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vía de {STRING} con sinais de bloqueo e avanzados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vía de {STRING} con sinais de bloqueo e saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vía de {STRING} con sinais de bloqueo e combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vía de {STRING} con sinais de bloqueo e de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vía de {STRING} con sinais de bloqueo e de ruta monosentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Vía de {STRING} con sinais avanzados e de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vía de {STRING} con sinais avanzados e combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vía de {STRING} con sinais avanzados e de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Vía de {STRING} con sinais avanzados e de ruta monosentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vía de {STRING} con sinais de saída e combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vía de {STRING} con sinais de saída e de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vía de {STRING} con sinais de saída e de ruta monosentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vía de {STRING} con sinais combo e de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vía de {STRING} con sinais combo e de ruta monosentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vía de {STRING} con sinais de ruta e de ruta monosentido -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito ferroviario {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :Vía de Ferrocarril +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vía de Ferrocarril con sinais de bloqueo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vía de Ferrocarril con sinais avanzados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vía de Ferrocarril con sinais de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vía de Ferrocarril con sinais combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vía de Ferrocarril con sinais de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vía de Ferrocarril con sinais de ruta monosentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vía de Ferrocarril con sinais de bloqueo e avanzados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vía de Ferrocarril con sinais de bloqueo e saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vía de Ferrocarril con sinais de bloqueo e combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vía de Ferrocarril con sinais de bloqueo e de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vía de Ferrocarril con sinais de bloqueo e de ruta monosentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Vía de Ferrocarril con sinais avanzados e de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vía de Ferrocarril con sinais avanzados e combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vía de Ferrocarril con sinais avanzados e de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Vía de Ferrocarril con sinais avanzados e de ruta monosentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vía de Ferrocarril con sinais de saída e combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vía de Ferrocarril con sinais de saída e de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vía de Ferrocarril con sinais de saída e de ruta monosentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vía de Ferrocarril con sinais combo e de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vía de Ferrocarril con sinais combo e de ruta monosentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vía de Ferrocarril con sinais de ruta e de ruta monosentido +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito ferroviario Ferrocarril STR_LAI_ROAD_DESCRIPTION_ROAD :Estrada STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Estrada con iluminación @@ -2646,7 +2646,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreo propieda STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright orixinal {COPYRIGHT} 1995 Chris Sawyer, Tódolos dereitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 O equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 O equipo de OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gravar partida @@ -2860,8 +2860,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Intento de usar STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contén un sprite corrupto. Tódolos sprites corruptos mostraranse coma unha interrogación vermella (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contén múltiples entradas de acción 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lectura máis aló da fin dun pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE} Ao conxunto de gráficos básicos empregado actualmente fáltalle un número de sprites.{}Por favor, actualiza o conxunto de gráficos básico -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE} Ao conxunto de gráficos básicos empregado actualmente fáltalle un número de sprites.{}Por favor, actualiza o conxunto de gráficos básico.{}Dado que estás a xogar unha {YELLOW}versión de desenrolo de OpenTTD{WHITE}, é posíbel que tamén necesites unha {YELLOW}versión de desenrolo do conjunto de gráficos base{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Os recursos GRF solicitados non están disponíbeis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desactivado por {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites inválido ou descoñecido (sprite {3:NUM}) @@ -3243,9 +3241,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Require: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Carga esperando ser procesada: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3504,7 +3501,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} cando STR_REPLACE_VEHICLES_STOP :{BLACK}Parar de substituír vehículos STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Presiona para parar a substitución do tipo de máquina seleccionada na esquerda -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Substituíndo: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Cambia entre as fiestras de substitución de locomotoras e vagóns STR_REPLACE_ENGINES :Locomotoras STR_REPLACE_WAGONS :Vagóns diff --git a/src/lang/german.txt b/src/lang/german.txt index 62877f6721..5d4f385ca9 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -11,7 +11,7 @@ ##gender m w n p -# $Id: german.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: german.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2602,29 +2602,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Ackerland STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Schneebedecktes Land STR_LAI_CLEAR_DESCRIPTION_DESERT :Wüste -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING}: Gleise -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING}: Gleise mit Blocksignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING}: Gleise mit Vorsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING}: Gleise mit Ausfahrtsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING}: Gleise mit Kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING}: Gleise mit Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING}: Gleise mit einseitigem Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING}: Gleise mit Block- und Vorsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING}: Gleise mit Block- und Ausfahrtsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING}: Gleise mit Block- und Kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING}: Gleise mit Block- und Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING}: Gleise mit Blocksignal und einseitigem Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING}: Gleise mit Vor- und Ausfahrtsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING}: Gleise mit Vor- und Kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING}: Gleise mit Vor- und Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING}: Gleise mit Vorsignal und einseitigem Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING}: Gleise mit Ausfahrts- und Kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING}: Gleise mit Ausfahrts- und Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING}: Gleise mit Ausfahrtssignal und einseitigem Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING}: Gleise mit Kombinations- und Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING}: Gleise mit Kombinationssignal und einseitigem Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING}: Gleise mit Pfadsignal und einseitigem Pfadsignal -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING}: Zugdepot +STR_LAI_RAIL_DESCRIPTION_TRACK :Schienen: Gleise +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Schienen: Gleise mit Blocksignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Schienen: Gleise mit Vorsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Schienen: Gleise mit Ausfahrtsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Schienen: Gleise mit Kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Schienen: Gleise mit Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Schienen: Gleise mit einseitigem Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Schienen: Gleise mit Block- und Vorsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Schienen: Gleise mit Block- und Ausfahrtsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Schienen: Gleise mit Block- und Kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Schienen: Gleise mit Block- und Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Schienen: Gleise mit Blocksignal und einseitigem Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Schienen: Gleise mit Vor- und Ausfahrtsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Schienen: Gleise mit Vor- und Kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Schienen: Gleise mit Vor- und Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Schienen: Gleise mit Vorsignal und einseitigem Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Schienen: Gleise mit Ausfahrts- und Kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Schienen: Gleise mit Ausfahrts- und Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Schienen: Gleise mit Ausfahrtssignal und einseitigem Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Schienen: Gleise mit Kombinations- und Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Schienen: Gleise mit Kombinationssignal und einseitigem Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Schienen: Gleise mit Pfadsignal und einseitigem Pfadsignal +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Schienen: Zugdepot STR_LAI_ROAD_DESCRIPTION_ROAD :Straße STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Straße mit Laternen @@ -2688,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firmeneigenes G STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Transport Tycoon-Urheberrecht {COPYRIGHT} 1995 Chris Sawyer, alle Rechte vorbehalten STR_ABOUT_VERSION :{BLACK}OpenTTD-Version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD-Team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-Team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spiel speichern @@ -2907,8 +2907,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Zugriff auf ein STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} enthält fehlerhafte Grafiken. Diese werden als Fragezeichen (?) dargestellt STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Enthält mehrere Action 8 - Einträge (Sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lesezugriff über das Ende des Pseudosprites hinaus (Sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Den momentan verwendeten Basisgrafiken fehlen Sprites.{}Durch ein Update der Basisgrafiken kann dieser Fehler behoben werden -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Den momentan verwendeten Basisgrafiken fehlen einige Sprites.{}Bitte update die Basisgrafiken.{}Weil dieses eine {YELLOW}Entwickler-Version von OpenTTD{WHITE} ist, ist es möglich, dass auch eine {YELLOW}Entwickler-Version der Basisgrafiken{WHITE} benötigt wird. STR_NEWGRF_ERROR_GRM_FAILED :Die angeforderte GRF-Ressource ist nicht verfügbar (Sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} wurde von {STRING} deaktiviert STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ungültiges oder unbekanntes Format für Spritelayout (Sprite {3:NUM}) @@ -3295,9 +3293,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Benötig STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Zur Verarbeitung bereitstehende Fracht: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,7 +3555,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} wenn a STR_REPLACE_VEHICLES_STOP :{BLACK}Fahrzeugersetzung aus STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klick zum Abbrechen der Ersetzung des Fahrzeugtyps auf der linken Seite -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Ersetzen: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Umschalter für Lok- oder Waggonersetzung STR_REPLACE_ENGINES :Schienenfahrzeuge STR_REPLACE_WAGONS :Waggons diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 881a0660d5..4f233d35c5 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -12,7 +12,7 @@ ##case subs date geniki -# $Id: greek.txt 27503 2016-01-24 18:45:36Z translators $ +# $Id: greek.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1870,6 +1870,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Έλεγ STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Εμφάνιση ρυθμίσεων για AI και της δέσμης ενεργειών του παιχνιδιού STR_INTRO_TOOLTIP_QUIT :{BLACK}Έξοδος από το «OpenTTD» +STR_INTRO_BASESET :{BLACK}Λείπουν {NUM} sprite{P "" s} από το επιλεγμένο βασικό σετ γραφικών. Παρακαλούμε ελέγξτε για ενημερώσεις του βασικού σετ. STR_INTRO_TRANSLATION :{BLACK}Λείπουν {NUM} παράμετροι από τη μετάφραση. Παρακαλούμε βοηθήστε να κάνουμε το OpenTTD καλύτερο εγγραφόμενοι ως μεταφραστές. Δείτε το αρχείο readme.txt για λεπτομέρειες. # Quit window @@ -2698,6 +2699,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Όνομ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Αποδεκτά εμπορεύματα: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Τύπος σιδηροτροχιάς: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Όριο ταχύτητας σιδηροτροχιάς: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Όριο ταχύτητας δρόμου: {LTBLUE}{VELOCITY} @@ -2710,29 +2712,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Χωράφια STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Χιονισμένο έδαφος STR_LAI_CLEAR_DESCRIPTION_DESERT :Έρημος -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} σιδηροτροχιά -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} σιδηροτροχιά με σήματα τμήματος -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} σιδηροτροχιά με σήματα ειδοποίησης -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} σιδηροτροχιά με σήματα εξόδου -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} σιδηροτροχιά με συνδυαστικά σήματα -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} σιδηροτροχιά με σήματα διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} σιδηροτροχιά με σήματα μονόδρομους διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} σιδηροτροχιά με σήματα τμήματος και ειδοποίησης -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} σιδηροτροχιά με σήματα τμήματος και εξόδου -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} σιδηροτροχιά με σήματα τμήματος και συνδυαστικά -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} σιδηροτροχιά με σήματα τμήματος και διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} σιδηροτροχιά με σήματα τμήματος και μονόδρομους διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} σιδηροτροχιά με σήματα ειδοποίησης και εξόδου -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} σιδηροτροχιά με σήματα ειδοποίησης και συνδυαστικά -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} σιδηροτροχιά με σήματα ειδοποίησης και διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} σιδηροτροχιά με σήματα ειδοποίησης και μονόδρομους διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} σιδηροτροχιά με σήματα εξόδου και συνδυαστικά -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} σιδηροτροχιά με σήματα εξόδου και διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} σιδηροτροχιά με σήματα εξόδου και μονόδρομους διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} σιδηροτροχιά με σήματα διαδρομής και συνδυαστικά -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} σιδηροτροχιά σήματα μονόδρομους διαδρομής και συνδυαστικά -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} σιδηροτροχιά με σήματα διαδρομής και μονόδρομους διαδρομής -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} αμαξοστάσιο τρένων +STR_LAI_RAIL_DESCRIPTION_TRACK :Σιδηροδρομική τροχιά +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Σιδηροδρομική τροχιά με σήματα εξόδου +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Σιδηροδρομική τροχιά με συνδυαστικά σήματα +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Σιδηροδρομική τροχιά με σήματα διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα μονόδρομης διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και ειδοποίησης +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και εξόδου +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και συνδυαστικά +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα τμήματος και μονόδρομους διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και εξόδου +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και συνδυαστικά +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα ειδοποίησης και μονόδρομης διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Σιδηροδρομική τροχιά με σήματα εξόδου και συνδυαστικά +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Σιδηροδρομική τροχιά με σήματα εξόδου και διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα εξόδου και μονόδρομης διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Σιδηρόδρομος με σήματα διαδρομής και συνδυαστικά +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα μονόδρομης διαδρομής και συνδυαστικά +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Σιδηροδρομική τροχιά με σήματα διαδρομής και μονόδρομης διαδρομής +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Αμαξοστάσιο σιδηροδρομικών τρένων STR_LAI_ROAD_DESCRIPTION_ROAD :Δρόμος STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Δρόμος με φωτισμό @@ -2796,7 +2798,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτη STR_ABOUT_OPENTTD :{WHITE}Σχετικά με το OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Αρχικά Πνευματικά Δικαιώματα {COPYRIGHT} 1995 Chris Sawyer, Όλα τα δικαιώματα διατηρούνται STR_ABOUT_VERSION :{BLACK}Έκδοση OpenTTD{REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Η ομάδα του OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Η ομάδα του OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Αποθήκευση Παιχνιδιού @@ -3015,8 +3017,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Προσπάθ STR_NEWGRF_ERROR_CORRUPT_SPRITE :Το {YELLOW}{STRING} περιέχει ένα αλλοιωμένο sprite. Όλα τα αλλοιωμένα sprites θα εμφανίζονται ως κόκκινα ερωτηματικά (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Περιέχει πολλαπλές καταχωρήσεις Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Διάβασε πέρα από το τέλος του ψευδό-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Λείπουν μερικά sprites από το τρέχον βασικό σετ γραφικών.{}Παρακαλώ ενημερώστε το βασικό σετ γραφικών -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Λείπουν μερικά sprites από το τρέχον βασικό σετ γραφικών.{}Παρακαλώ ενημερώστε το βασικό σετ γραφικών{}Επειδή παίζετε {YELLOW}δοκιμαστική έκδοση του OpenTTD{WHITE}, μπορεί να χρειάζεται να έχετε εγκατεστημένη {YELLOW}δοκιμαστική έκδοση των βασικών γραφικών{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Οι ζητημένοι πόροι GRF δεν είναι διαθέσιμοι (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :Το {1:STRING} απενεργοποιήθηκε από το {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Άκυρη/άγνωστη μορφή σχεδίου sprite (sprite {3:NUM}) @@ -3403,9 +3403,11 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Απαι STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}σε αναμονή + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Εμπόρευματα σε αναμονή: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3672,10 +3674,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} ότα STR_REPLACE_VEHICLES_STOP :{BLACK}Διακοπή Αντικατάστασης Οχημάτων STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Πατήστε για να σταματήσει η αντικατάσταση του τύπου μηχανής επιλεγμένος στα αριστερά -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Αντικατάσταση: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Εναλλαγή μεταξύ των παραθύρων αντικατάστασης μηχανών και βαγονιών STR_REPLACE_ENGINES :Μηχανές STR_REPLACE_WAGONS :Βαγόνια +STR_REPLACE_ALL_RAILTYPE :Όλα τα οχήματα σιδηρόδρομου STR_REPLACE_HELP_RAILTYPE :{BLACK}Επιλέξτε τον τύπο σιδηροδρόμου για τον οποίο θέλετε να γίνει η αντικατάσταση των μηχανών STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Εμφανίζει ποια μηχανή αυτή στα αριστερά θα αντικατασταθεί, εάν υπάρχει diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 26ec1b61f2..0edca6d96c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -12,7 +12,7 @@ ##case singular plural gen -# $Id: hebrew.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: hebrew.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2615,29 +2615,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :שדות STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :אדמה מכוסה בשלג STR_LAI_CLEAR_DESCRIPTION_DESERT :מדבר -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} מסילה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} מסילה עם רמזורים חוסמים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} מסילה עם רמזורים מקדימים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} מסילה עם רמזורי יציאה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} מסילה עם רמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} מסילה עם רמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} מסילה עם רמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} מסילה עם רמזורים חוסמים ומקדימים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} מסילה עם רמזורים חוסמים ורמזורי יציאה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} מסילה עם רמזורים חוסמים ורמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} מסילה עם רמזורים חוסמים ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} מסילה עם רמזורים חוסמים ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} מסילה עם רמזורים מקדימים ורמזורי יציאה -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} מסילה עם רמזורים מקדימים ורמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} מסילה עם רמזורים מקדימים ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} מסילה עם רמזורים מקדימים ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} מסילה עם רמזורי יציאה ורמזורים משולבים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} מסילה עם רמזורי יציאה ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} מסילה עם רמזורי יציאה ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} מסילה עם רמזורים משולבים ורמזורי נתיב -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} מסילה עם רמזורים משולבים ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} מסילה עם רמזורי נתיב ורמזורי נתיב חד-סטריים -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} מוסך רכבות +STR_LAI_RAIL_DESCRIPTION_TRACK :מסילת ברזל מסילה +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :מסילת ברזל מסילה עם רמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ומקדימים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורי יציאה +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורים חוסמים ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורי יציאה +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורים מקדימים ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה ורמזורים משולבים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורי יציאה ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :מסילת ברזל מסילה עם רמזורים משולבים ורמזורי נתיב +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורים משולבים ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :מסילת ברזל מסילה עם רמזורי נתיב ורמזורי נתיב חד-סטריים +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :מסילת ברזל מוסך רכבות STR_LAI_ROAD_DESCRIPTION_ROAD :כביש STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :כביש עם תאורת רחוב @@ -2701,7 +2701,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :שטח בבעל STR_ABOUT_OPENTTD :{WHITE}OpenTTD אודות STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}כל הזכויות שמורות , {COPYRIGHT}1995 כריס סויר - {NBSP}זכויות יוצרים מקוריות STR_ABOUT_VERSION :{BLACK}{REV} גירסה , OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}שמור משחק @@ -2920,8 +2920,6 @@ STR_NEWGRF_ERROR_INVALID_ID :ניסיון ש STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} מכיל אלמנט גרפי שגוי. כל האלמנטים הגרפיים השגויים יוצגו כסימן שאלה אדום (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :מכיל מספר רשומות Action 8 (ספרייט {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :קראת אחר סוף הפסאודו-ספרייט (ספרייט {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}בערכת גרפיקה הבסיסית חסרים מספר ספרייטים.{}אנא עדכן את הערכה הגרפית הבסיסית -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}בערכת גרפיקה הבסיסית חסרים מספר ספרייטים.{}אנא עדכן את הערכה הגרפית הבסיסית.{}מכיוון שהינך משחק {YELLOW}גרסת פיתוח של OpenTTD{WHITE}, אולי תצטרך {YELLOW}גרסת פיתוח של ערכת הגרפיקה הבסיסית{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :משאב GRF המבוקש אינו זמין (ספרייט {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} נהפך ללא זמין ע"י {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :מבנה פורמט ספרייט לא תקין/לא ידוע (ספרייט {3:NUM}) @@ -3308,9 +3306,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{YELLOW}{3:STRI STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{YELLOW}{5:STRING}{4:STRING},{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :דורש ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}סחורה שמחכה לעיבוד: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{YELLOW}{1:STRING}{0:STRING}{BLACK} :מייצר STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{YELLOW}{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :מייצר ############ range for produces ends @@ -3571,7 +3568,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} כאש STR_REPLACE_VEHICLES_STOP :{BLACK}הפסק את החלפת הכלים STR_REPLACE_HELP_STOP_BUTTON :{BLACK}לחץ כאן להפסיק את ההחלפה -STR_REPLACE_ENGINE_WAGON_SELECT :{ORANGE}{STRING}{BLACK} : מחליף STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}החלף בין חלונות החלפת קרון וקטר STR_REPLACE_ENGINES :מנועים/קטרים STR_REPLACE_WAGONS :קרונות diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 01e6a58019..22cc8a3e4d 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -11,7 +11,7 @@ ##case t ba -# $Id: hungarian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: hungarian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2665,29 +2665,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Szántóföld STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Havas föld STR_LAI_CLEAR_DESCRIPTION_DESERT :Sivatag -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} vasúti pálya -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} vasúti pálya normál jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} vasúti pálya előjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} vasúti pálya kijárati jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} vasúti pálya kombinált jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} vasúti pálya irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} vasúti pálya egyirányú irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} vasúti pálya normál- és előjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} vasúti pálya normál- és kijárati jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} vasúti pálya normál- és kombinált jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} vasúti pálya normál- és irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} vasúti pálya normál- és egyirányú irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} vasúti pálya elő- és kijárati jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} vasúti pálya elő- és kombinált jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} vasúti pálya elő- és irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} vasúti pálya elő- és egyirányú irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} vasúti pálya kijárati- és kombinált jelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} vasúti pálya kijárati- és irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} vasúti pálya kijárati- és egyirányú irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} vasúti pálya kombinált- és irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} vasúti pálya kombinált- és egyirányú irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} vasúti pálya irány- és egyirányú irányjelzőkkel -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} járműtelep +STR_LAI_RAIL_DESCRIPTION_TRACK :Vasút vasúti pálya +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vasút vasúti pálya normál jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vasút vasúti pálya előjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vasút vasúti pálya kijárati jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vasút vasúti pálya kombinált jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vasút vasúti pálya irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vasút vasúti pálya egyirányú irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vasút vasúti pálya normál- és előjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vasút vasúti pálya normál- és kijárati jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vasút vasúti pálya normál- és kombinált jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vasút vasúti pálya normál- és irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vasút vasúti pálya normál- és egyirányú irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Vasút vasúti pálya elő- és kijárati jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vasút vasúti pálya elő- és kombinált jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vasút vasúti pálya elő- és irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Vasút vasúti pálya elő- és egyirányú irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vasút vasúti pálya kijárati- és kombinált jelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vasút vasúti pálya kijárati- és irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vasút vasúti pálya kijárati- és egyirányú irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vasút vasúti pálya kombinált- és irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vasút vasúti pálya kombinált- és egyirányú irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vasút vasúti pálya irány- és egyirányú irányjelzőkkel +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Vasút járműtelep STR_LAI_ROAD_DESCRIPTION_ROAD :Út STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Út közvilágítással @@ -2751,7 +2751,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Vállalat álta STR_ABOUT_OPENTTD :{WHITE}Az OpenTTD-ről STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Eredeti copyright {COPYRIGHT} 1995 Chris Sawyer, Minden jog fenntartva STR_ABOUT_VERSION :{BLACK}OpenTTD {REV} verzió -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 Az OpenTTD csapat +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 Az OpenTTD csapat # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Játék mentése @@ -2970,8 +2970,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Érvénytelen I STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} hibás sprite-ot tartalmaz. Minden hibás sprite piros kérdőjellel (?) kerül jelölésre STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Több Action 8 bejegyzést tartalmaz (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Ál-sprite távoli végének olvasása (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}A jelenleg használt grafikus alapcsomagból hiányzik számos sprite.{}Kérlek frissítsd a grafikus alapcsomagot -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}A használt alap grafikus csomagból néhány egység hiányzik.{}Kérjük frissítsd az alap grafikus csomagot.{}Mivel az {YELLOW}OpenTTD fejlesztői változatát{WHITE} használod, lehet, hogy a {YELLOW}fejlesztői alap grafikus csomagot{WHITE} kellene használnod STR_NEWGRF_ERROR_GRM_FAILED :Kért GRF források nem elérhetőek (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} kikapcsolva {STRING} által STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Érvénytelen/ismeretlen sprite szerkezet formátum (sprite {3:NUM}) @@ -3358,9 +3356,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Felhaszn STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Feldolgozásra váró rakomány: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3621,7 +3618,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} - csak STR_REPLACE_VEHICLES_STOP :{BLACK}Járműcsere befejezése STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Nyomd meg ezt a gombot, ha be akarod fejezni a bal oldalon kiválasztott járművek cseréjét -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Lecserél: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Váltás a mozdony és a vagoncserélő ablak között STR_REPLACE_ENGINES :Mozdonyok STR_REPLACE_WAGONS :Vagonok diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 8805837e8a..57f570c8b8 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -11,7 +11,7 @@ ##gender karlkyn kvenkyn hvorugkyn -# $Id: icelandic.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: icelandic.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2450,29 +2450,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Akur STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snjóþekið land STR_LAI_CLEAR_DESCRIPTION_DESERT :Eyðimörk -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} spor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} spor með hefðbundnum umferðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} spor með for-merkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} spor með frámerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} spor með tvívirkum merkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} spor með leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spor með einstefnu leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spor með hefðbundnum- og formerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spor með hefðbundnum- og frámerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spor með hefðbundnum- tvívirkum merkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spor með hefðbundnum- og leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spor með hefðbundnum- og einstefnu leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spor með for- og frámerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spor með for- og tvívirkum merkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spor með for- og leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spor með for- og einstefnu leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spor með frá- og tvívirkum merkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spor með frá- og leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spor með frá- og einstefnu leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spor með tvívirkum- og leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} spor með tvívirkum- og einstefnu leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spor með leiðarmerkjum og einstefnu leiðarmerkjum -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} lestarskýli +STR_LAI_RAIL_DESCRIPTION_TRACK :Járnbrautarspor spor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Járnbrautarspor spor með hefðbundnum umferðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Járnbrautarspor spor með for-merkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Járnbrautarspor spor með frámerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Járnbrautarspor spor með tvívirkum merkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Járnbrautarspor spor með leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Járnbrautarspor spor með einstefnu leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Járnbrautarspor spor með hefðbundnum- og formerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Járnbrautarspor spor með hefðbundnum- og frámerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Járnbrautarspor spor með hefðbundnum- tvívirkum merkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Járnbrautarspor spor með hefðbundnum- og leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Járnbrautarspor spor með hefðbundnum- og einstefnu leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Járnbrautarspor spor með for- og frámerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Járnbrautarspor spor með for- og tvívirkum merkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Járnbrautarspor spor með for- og leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Járnbrautarspor spor með for- og einstefnu leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Járnbrautarspor spor með frá- og tvívirkum merkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Járnbrautarspor spor með frá- og leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Járnbrautarspor spor með frá- og einstefnu leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Járnbrautarspor spor með tvívirkum- og leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Járnbrautarspor spor með tvívirkum- og einstefnu leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Járnbrautarspor spor með leiðarmerkjum og einstefnu leiðarmerkjum +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Járnbrautarspor lestarskýli STR_LAI_ROAD_DESCRIPTION_ROAD :Vegur STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Vegur með götuljósum @@ -2536,7 +2536,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land í eigu fy STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upphaflegur höfundarréttur {COPYRIGHT} 1995 Chris Sawyer, Öll réttindi áskilin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáfa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 OpenTTD hópurinn +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD hópurinn # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Vista leik @@ -2736,8 +2736,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Verið að reyn STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} inniheldur gallaða mynd. Allar gallaðar myndir munu birtast sem rauð spurningamerki (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Inniheldur margþættar aðgerðir, 8 innkomur (hreyfimynd {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Les fyrir endan af gervi-hreyfimynd (hreyfimynd {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Grunnteiknisafnið sem er í notkun vantar hluta af hreyfimyndunum.{}Vinsamlegast uppfærðu grunnteiknisafnið -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Í Grafíska safnið sem nú er í notkun vantar nokkrar myndir.{}Vinsamlegast uppfærið grafíska safnið.{}Þar sem þú ert að spila {YELLOW}þróunar útgáfu af OpenTTD{WHITE}, gæti verið að þú þyrftir líka {YELLOW} þróunar útgáfu af grafíska safninu{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Umbeðin GRF gögn ekki tiltæk (hreyfimynd {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} var óvirkjað af {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Rangt/óþekkt hreyfimyndar snið (hreyfimynd {3:NUM}) @@ -3085,9 +3083,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Þarf: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Farmur sem bíður verkunar: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Framleiðir: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Framleiðir: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3330,7 +3327,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} ef gö STR_REPLACE_VEHICLES_STOP :{BLACK}Stöðva skipti STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Smelltu til að stöðva skipti á vagntegundinni sem valin er vinstra megin -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Skipti út: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skipta á milli útskiptiglugga dráttar- og flutningavagna STR_REPLACE_ENGINES :Dráttarvagnar STR_REPLACE_WAGONS :Vagnar diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 1137713bd3..11b68967d2 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -10,7 +10,7 @@ ##grflangid 0x5a -# $Id: indonesian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: indonesian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Ladang STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Daerah tertutup salju STR_LAI_CLEAR_DESCRIPTION_DESERT :Gurun Pasir -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} track -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} Lintasan dengan "block signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} lintasan dengan "pre-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} lintasan dengan "exit-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING}lintasan dengan "combo-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} lintasan dengan "path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} lintasan dengan sinyal satu arah -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} lintasan dengan "block and pre-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} lintasan dengan "block and exit-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} lintasan dengan "block and combo-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} lintasan dengan "block and path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} lintasan dengan "block and one-way path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} lintasan dengan "pre- and exit-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} lintasan dengan "pre- and combo-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} lintasan dengan "pre- and path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} lintasan dengan "pre- and one-way path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} lintasan dengan "exit- and combo-signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} lintasan dengan "exit- and path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} lintasan dengan "exit- and one-way path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} lintasan dengan "combo- and path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} lintasan dengan "combo- and one-way path signals" -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} lintasan dengan "path and one-way path signals" -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} depo kereta +STR_LAI_RAIL_DESCRIPTION_TRACK :Rel Kereta track +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Rel Kereta Lintasan dengan "block signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Rel Kereta lintasan dengan "pre-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Rel Kereta lintasan dengan "exit-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Rel Keretalintasan dengan "combo-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Rel Kereta lintasan dengan "path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Rel Kereta lintasan dengan sinyal satu arah +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Rel Kereta lintasan dengan "block and pre-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Rel Kereta lintasan dengan "block and exit-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Rel Kereta lintasan dengan "block and combo-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Rel Kereta lintasan dengan "block and path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Rel Kereta lintasan dengan "block and one-way path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Rel Kereta lintasan dengan "pre- and exit-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Rel Kereta lintasan dengan "pre- and combo-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Rel Kereta lintasan dengan "pre- and path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Rel Kereta lintasan dengan "pre- and one-way path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Rel Kereta lintasan dengan "exit- and combo-signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Rel Kereta lintasan dengan "exit- and path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Rel Kereta lintasan dengan "exit- and one-way path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Rel Kereta lintasan dengan "combo- and path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Rel Kereta lintasan dengan "combo- and one-way path signals" +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Rel Kereta lintasan dengan "path and one-way path signals" +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Rel Kereta depo kereta STR_LAI_ROAD_DESCRIPTION_ROAD :Jalan STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Jalan raya dengan lampu @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah milik Per STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hak Cipta asli {COPYRIGHT} 1995 Chris Sawyer, Hak Cipta dilindungi STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Tim OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Tim OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Simpan Permainan @@ -2902,8 +2902,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Mencoba menggun STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} terdapat sprite yang rusak. Semua sprite rusak akan ditandai dengan tanda tanya merah (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Memuat beberapa entri Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Baca akhir sprite palsu (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Beberapa 'sprite' tidak terdapat pada Set Grafik Dasar yang sedang digunakan.{}Silahkan update Set Grafik Dasar -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Set grafis dasar kekurangan beberapa sprite.{}Tolong perbarui set grafis dasar.{}Karena anda memainkan {YELLOW}snapshot pengembangan OpenTTD{WHITE}, anda mungkin memerlukan{YELLOW}snapshot pengembangan set grafis dasar{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Sumber GRF yang diminta tidak tersedia (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} dinonaktifkan oleh {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format sprite salah/tidak diketahui (sprite {3:NUM}) @@ -3290,9 +3288,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Membutuh STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Kargo yang sedang menunggu di proses: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3553,7 +3550,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} saat t STR_REPLACE_VEHICLES_STOP :{BLACK}Berhenti Mengganti STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Tekan untuk menghentikan penggantian jenis kendaraan terpilih di sisi kiri -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Mengganti: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Pindah tampilan penggantian lokomitif atau gerbong STR_REPLACE_ENGINES :Lokomotif STR_REPLACE_WAGONS :Gerbong diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 8f7c071771..47fd96720d 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -10,7 +10,7 @@ ##grflangid 0x08 -# $Id: irish.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: irish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Garrantaí STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Talamh faoi shneachta STR_LAI_CLEAR_DESCRIPTION_DESERT :Fásach -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} ráille -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} ráille ar a bhfuil comharthaí bloc -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} ráille ar a bhfuil réamhchomharthaí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} ráille ar a bhfuil comharthaí amach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} ráille ar a bhfuil comharthaí teaglama -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} ráille ar a bhfuil comharthaí cosáin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} ráille ar a bhfuil comharthaí cosáin aonbhealaigh -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} ráille ar a bhfuil comharthaí bloic agus réamhchomharthaí -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} ráille ar a bhfuil comharthaí bloic agus amach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} ráille ar a bhfuil comharthaí bloic agus teaglama -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} ráille ar a bhfuil comharthaí bloic agus cosáin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} ráille ar a bhfuil comharthaí bloic agus cosáin aonbhealaigh -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} ráille ar a bhfuil réamhchomharthaí agus comharthaí amach -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} ráille ar a bhfuil réamhchomharthaí agus comharthaí teaglama -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} ráille ar a bhfuil réamhchomharthaí agus comharthaí cosáin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} ráille ar a bhfuil réamhchomharthaí agus comharthaí cosáin aonbhealaigh -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} ráille ar a bhfuil comharthaí amach agus teaglama -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} ráille ar a bhfuil comharthaí amach agus cosáin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} ráille ar a bhfuil comharthaí amach agus cosáin aonbhealaigh -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} ráille ar a bhfuil comharthaí teaglama agus cosáin -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} ráille ar a bhfuil comharthaí teaglama agus cosáin aonbhealaigh -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} ráille ar a bhfuil comharthaí cosáin agus cosáin aonbhealaigh -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} iosta traenach +STR_LAI_RAIL_DESCRIPTION_TRACK :Iarnród ráille +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Iarnród ráille ar a bhfuil comharthaí bloc +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Iarnród ráille ar a bhfuil réamhchomharthaí +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Iarnród ráille ar a bhfuil comharthaí amach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Iarnród ráille ar a bhfuil comharthaí teaglama +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Iarnród ráille ar a bhfuil comharthaí cosáin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Iarnród ráille ar a bhfuil comharthaí cosáin aonbhealaigh +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Iarnród ráille ar a bhfuil comharthaí bloic agus réamhchomharthaí +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Iarnród ráille ar a bhfuil comharthaí bloic agus amach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Iarnród ráille ar a bhfuil comharthaí bloic agus teaglama +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Iarnród ráille ar a bhfuil comharthaí bloic agus cosáin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Iarnród ráille ar a bhfuil comharthaí bloic agus cosáin aonbhealaigh +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Iarnród ráille ar a bhfuil réamhchomharthaí agus comharthaí amach +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Iarnród ráille ar a bhfuil réamhchomharthaí agus comharthaí teaglama +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Iarnród ráille ar a bhfuil réamhchomharthaí agus comharthaí cosáin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Iarnród ráille ar a bhfuil réamhchomharthaí agus comharthaí cosáin aonbhealaigh +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Iarnród ráille ar a bhfuil comharthaí amach agus teaglama +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Iarnród ráille ar a bhfuil comharthaí amach agus cosáin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Iarnród ráille ar a bhfuil comharthaí amach agus cosáin aonbhealaigh +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Iarnród ráille ar a bhfuil comharthaí teaglama agus cosáin +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Iarnród ráille ar a bhfuil comharthaí teaglama agus cosáin aonbhealaigh +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Iarnród ráille ar a bhfuil comharthaí cosáin agus cosáin aonbhealaigh +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Iarnród iosta traenach STR_LAI_ROAD_DESCRIPTION_ROAD :Bóthair STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Bóthair le soilse sráide @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Talamh faoi úi STR_ABOUT_OPENTTD :{WHITE}Maidir le OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Cóipcheart bunaidh {COPYRIGHT} 1995 Chris Sawyer, Gach ceart ar cosaint STR_ABOUT_VERSION :{BLACK}OpenTTD leagan {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 An fhoireann OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 An fhoireann OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sábháil an Cluiche @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Iarracht ID nea STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}Tá sprite truaillithe in {STRING}. Taispeánfar gach sprite truaillithe mar chomhartha ceiste (?) dearg. STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Tá iontrálacha iolraccha Ghníomhaíocht 8 ann (sprid {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Léadh tar éis deireadh an pseudo-sprid (sprid {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Tá roinnt sprite in easnamh sa tsraith bhunúsach grafaicí atá in úsáid faoi láthair.{}Déan úasghrádú ar an tsraith bhunúsach grafaicí le do thoil -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Tá roinnt sprideanna in easnamh sa tacar bunghraificí atá in úsáid faoi láthair.{}Nuashonraigh an tacar bunghraificí.{}Toisc go bhfuil tú ag imirt ar {YELLOW}roghbhlúire forbróirí (development snapshot) OpenTTD{WHITE}, seans go mbeidh {YELLOW}roghbhlúire forbróirí de na bunghraificí{WHITE} ag teastáil uait STR_NEWGRF_ERROR_GRM_FAILED :Níl na hacmhainní GRF a iarradh ar fáil (sprid {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :Bhí {1:STRING} díchumasaithe ag {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formáid neamhbhailí/anaithnid do leagan amach na spride (sprid {3:NUM}) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Teastaí STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Lastas ag fanacht le próiseáil: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Táirgtear: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Táirgtear: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} má t STR_REPLACE_VEHICLES_STOP :{BLACK}Stad ag athsholáthar Feithiclí STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Brúigh chun deireadh a chur le hathsholáthar den chineál innill atá roghnaithe ar chlé -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Ag athsholáthar: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Athraigh idir na fuinneoga athsholáthair innill agus vaigíní STR_REPLACE_ENGINES :Innill STR_REPLACE_WAGONS :Vaigíní diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 917fd0d4a8..39f699eca0 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -12,7 +12,7 @@ ##case ms mp fs fp -# $Id: italian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: italian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1424,11 +1424,11 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostra gli arri STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostra gli orari di arrivo e partenza previsti nelle tabelle orarie STR_CONFIG_SETTING_QUICKGOTO :Creazione rapida degli ordini dei veicoli: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-seleziona il comando 'Vai a' quando si apre la finestra degli ordini -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Ferrovia predefinita (a inizio/ripresa partita): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo di ferrovia da selezionare dopo l'inizio o il caricamento di una partita. 'La prima disponibile' seleziona il tipo più vecchio di binari, 'L'ultima disponibile' seleziona il tipo più vecchio di binari, e 'La più usata' seleziona il tipo più utilizzato al momento -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :La prima disponibile -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :L'ultima disponibile -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :La più usata +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo di rotaie predefinito (a inizio/ripresa partita): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo di rotaie da selezionare dopo l'inizio o il caricamento di una partita. 'Il primo disponibile' seleziona il tipo più vecchio di binari, 'L'ultimo disponibile' seleziona il tipo più nuovo di binari, e 'Il più usato' seleziona il tipo più utilizzato al momento +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Il primo disponibile +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :L'ultimo disponibile +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Il più usato STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostra i percorsi riservati sui binari: {STRING} STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Dà ai binari riservati un colore differente, aiutando a correggere problemi di treni che si rifiutano di entrare in blocchi protetti con segnali a percorso STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantieni aperte le finestre di costruzione dopo l'uso: {STRING} @@ -1785,6 +1785,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Controll STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostra le impostazioni delle IA e degli Script STR_INTRO_TOOLTIP_QUIT :{BLACK}Esci da 'OpenTTD' +STR_INTRO_BASESET :{BLACK}Nel pacchetto grafico di base attualmente selezionato mancano {NUM} sprite. È consigliabile controllare gli aggiornamenti del pacchetto. STR_INTRO_TRANSLATION :{BLACK}A questa traduzione mancano {NUM} string{P a he}. Aiutaci a migliorare OpenTTD iscrivendoti come traduttore. Vedi readme.txt per dettagli. # Quit window @@ -2619,6 +2620,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome blo STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carichi accettati: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo di rotaie: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limite di velocità rotaie: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite di velocità strada: {LTBLUE}{VELOCITY} @@ -2631,29 +2633,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campi STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terreno innevato STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} con segnali di blocco -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} con pre-segnali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} con segnali di uscita -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} con segnali combinati -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} con segnali a percorso -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} con segnali a percorso s.u. -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} con segnali di blocco e pre-segnali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} con segnali di blocco e di uscita -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} con segnali di blocco e combinati -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} con segnali di blocco e a percorso -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} con segnali di blocco e a percorso s.u. -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} con pre-segnali e segnali di uscita -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} con pre-segnali e segnali combinati -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} con pre-segnali e segnali a percorso -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} con pre-segnali e segnali a percorso s.u. -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} con segnali di uscita e combinati -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} con segnali di uscita e a percorso -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} con segnali di uscita e a percorso s.u. -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} con segnali combinati e a percorso -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} con segnali combinati e a percorso s.u. -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} con segnali a percorso e a percorso s.u. -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Deposito {STRING.ms} +STR_LAI_RAIL_DESCRIPTION_TRACK :Ferrovia +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Ferrovia con segnali di blocco +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Ferrovia con pre-segnali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Ferrovia con segnali di uscita +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Ferrovia con segnali combinati +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Ferrovia con segnali a percorso +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Ferrovia con segnali a percorso s.u. +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Ferrovia con segnali di blocco e pre-segnali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Ferrovia con segnali di blocco e di uscita +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Ferrovia con segnali di blocco e combinati +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Ferrovia con segnali di blocco e a percorso +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Ferrovia con segnali di blocco e a percorso s.u. +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ferrovia con pre-segnali e segnali di uscita +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Ferrovia con pre-segnali e segnali combinati +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Ferrovia con pre-segnali e segnali a percorso +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Ferrovia con pre-segnali e segnali a percorso s.u. +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Ferrovia con segnali di uscita e combinati +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Ferrovia con segnali di uscita e a percorso +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Ferrovia con segnali di uscita e a percorso s.u. +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Ferrovia con segnali combinati e a percorso +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Ferrovia con segnali combinati e a percorso s.u. +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Ferrovia con segnali a percorso e a percorso s.u. +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Deposito ferroviario STR_LAI_ROAD_DESCRIPTION_ROAD :Strada STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Strada con lampioni @@ -2717,7 +2719,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno possedu STR_ABOUT_OPENTTD :{WHITE}Informazioni su OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright originale {COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati STR_ABOUT_VERSION :{BLACK}OpenTTD versione {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Il team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Il team OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salva partita @@ -2891,7 +2893,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Ispezion STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} a {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Oggetto -STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo rotaia +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo di rotaie STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametro variabile NewGRF 60+x (esadecimale) @@ -2936,8 +2938,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Tentativo di ut STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contiene degli sprite corrotti. Tutti gli sprite corrotti saranno mostrati come punti interrogativi (?) rossi STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contiene occorrenze multiple dell'azione 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lettura oltre la fine dello pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Nel pacchetto grafico di base attualmente in uso mancano alcuni sprite.{}È consigliabile aggiornare il pacchetto grafico di base -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Nel pacchetto grafico di base attualmente in uso mancano alcuni sprite.{}È consigliabile aggiornare il pacchetto grafico di base.{}Poiché si sta giocando con uno {YELLOW}snapshot di sviluppo di OpenTTD{WHITE}, potrebbe essere necessario uno {YELLOW}snapshot di sviluppo del pacchetto grafico di base{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Risorsa GRF richiesta non disponibile (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} è stato disabilitato da {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato di layout dello sprite sconosciuto o non valido (sprite {3:NUM}) @@ -3324,9 +3324,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Richiede STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}in attesa +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Carico in attesa di lavorazione: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3587,12 +3591,12 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} una vo STR_REPLACE_VEHICLES_STOP :{BLACK}Interrompi rimpiazzamento STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Premere per interrompere il rimpiazzamento del modello di locomotiva selezionato a sinistra -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Rimpiazza: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Scambia tra loro le finestre di rimpiazzamento delle locomotive e dei vagoni STR_REPLACE_ENGINES :Locomotive STR_REPLACE_WAGONS :Vagoni +STR_REPLACE_ALL_RAILTYPE :Tutti i veicoli ferroviari -STR_REPLACE_HELP_RAILTYPE :{BLACK}Selezionare il tipo di rotaia per la quale si desidera rimpiazzare le locomotive +STR_REPLACE_HELP_RAILTYPE :{BLACK}Selezionare il tipo di rotaie per il quale si desidera rimpiazzare le locomotive STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostra con quale locomotiva sarà rimpiazzato il modello eventualmente selezionato a sinistra STR_REPLACE_RAIL_VEHICLES :Veicoli ferroviari STR_REPLACE_ELRAIL_VEHICLES :Veicoli ferroviari elettrici diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index e33e9a6c27..73a1cff1e0 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -10,7 +10,7 @@ ##grflangid 0x39 -# $Id: japanese.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: japanese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2589,6 +2589,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}空港 STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}受入れ貨物: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE : {BLACK}線路の種類: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}線路の制限速度: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}道路の最高速度: {LTBLUE}{VELOCITY} @@ -2601,29 +2602,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :耕作地 STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :積雪地帯 STR_LAI_CLEAR_DESCRIPTION_DESERT :砂漠 -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} 線路 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} 信号付線路 (閉塞) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} 信号付線路 (入口) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} 信号付線路 (出口) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} 信号付線路 (コンボ) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} 信号付線路 (パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} 信号付線路 (一方通行パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} 信号付線路 (閉塞+入口) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} 信号付線路 (閉塞+出口) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} 信号付線路 (閉塞+コンボ) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} 信号付線路 (閉塞+パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} 信号付線路 (閉塞+一方通行パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} 信号付線路 (入口+出口) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} 信号付線路 (入口+コンボ) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} 信号付線路 (入口+パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} 信号付線路 (入口+一方通行パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} 信号付線路 (出口+コンボ) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} 信号付線路 (出口+パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} 信号付線路 (出口+一方通行パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} 信号付線路 (コンボ+パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} 信号付線路 (コンボ+一方通行パス) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} 信号付線路 (パス+一方通行パス) -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} 列車庫 +STR_LAI_RAIL_DESCRIPTION_TRACK :鉄道 (非電化) 線路 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :鉄道 (非電化) 信号付線路 (閉塞) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :鉄道 (非電化) 信号付線路 (入口) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :鉄道 (非電化) 信号付線路 (出口) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :鉄道 (非電化) 信号付線路 (コンボ) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :鉄道 (非電化) 信号付線路 (パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :鉄道 (非電化) 信号付線路 (一方通行パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :鉄道 (非電化) 信号付線路 (閉塞+入口) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :鉄道 (非電化) 信号付線路 (閉塞+出口) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :鉄道 (非電化) 信号付線路 (閉塞+コンボ) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :鉄道 (非電化) 信号付線路 (閉塞+パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :鉄道 (非電化) 信号付線路 (閉塞+一方通行パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :鉄道 (非電化) 信号付線路 (入口+出口) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :鉄道 (非電化) 信号付線路 (入口+コンボ) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :鉄道 (非電化) 信号付線路 (入口+パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :鉄道 (非電化) 信号付線路 (入口+一方通行パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :鉄道 (非電化) 信号付線路 (出口+コンボ) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :鉄道 (非電化) 信号付線路 (出口+パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :鉄道 (非電化) 信号付線路 (出口+一方通行パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :鉄道 (非電化) 信号付線路 (コンボ+パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :鉄道 (非電化) 信号付線路 (コンボ+一方通行パス) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :鉄道 (非電化) 信号付線路 (パス+一方通行パス) +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :鉄道 (非電化) 列車庫 STR_LAI_ROAD_DESCRIPTION_ROAD :道路 STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :街灯付道路 @@ -2687,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :社有地 STR_ABOUT_OPENTTD :{WHITE}OpenTTDについて STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}オリジナル版権{COPYRIGHT} 1995 Chris Sawyer All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD バージョン {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}ゲームを保存 @@ -2906,8 +2907,6 @@ STR_NEWGRF_ERROR_INVALID_ID :不正なIDが STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING}には破損スプライトがあります。破損スプライトは赤疑問符({RED}?{YELLOW})として表示されます STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :アクション8のエントリが複数含まれています (スプライト {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :疑似スプライトのデータが十分にありません (スプライト {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}使用中の基本グラフィックセットから複数のスプライトが欠落しています。{}セットを更新して下さいますよう、お願いします -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}使用中の基本グラフィックセットから複数のスプライトが欠落しています。{}セットを更新して下さいますよう、お願いします{}{YELLOW}OpenTTDの速報開発版{WHITE}をお使いの際は、{YELLOW}速報開発版に即したグラフィックセット{WHITE}が必要となる場合があります STR_NEWGRF_ERROR_GRM_FAILED :要求されたGRFのリソースは使用できません (スプライト {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}は{STRING}により無効にされました STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :不正なレイアウト書式です (スプライト {3:NUM}) @@ -3294,9 +3293,10 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}必要 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}、{STRING}{STRING}、{STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資 +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT : {YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}加工待ちの貨物: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING}、{STRING}{STRING} ############ range for produces ends @@ -3557,10 +3557,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :老朽化した STR_REPLACE_VEHICLES_STOP :{BLACK}置換終了 STR_REPLACE_HELP_STOP_BUTTON :{BLACK}クリックすると選択した輸送機器の置換を終了します -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}置換対象: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}置換対象を機関車/貨車に切り替えます STR_REPLACE_ENGINES :機関車 STR_REPLACE_WAGONS :貨車 +STR_REPLACE_ALL_RAILTYPE :全ての鉄道車両 STR_REPLACE_HELP_RAILTYPE :{BLACK}置換対象となる線路種類を切り替えます STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}左で選択された機関車の置換対象を(あれば)表示します diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 3c0a1d5333..45988d6f3a 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -11,7 +11,7 @@ ##gender m f -# $Id: korean.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: korean.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -911,7 +911,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :아이슬란드 STR_GAME_OPTIONS_CURRENCY_ITL :이탈리아 리라 (ITL) STR_GAME_OPTIONS_CURRENCY_NLG :네덜란드 길더 (NLG) STR_GAME_OPTIONS_CURRENCY_NOK :노르웨이 크로네 (NOK) -STR_GAME_OPTIONS_CURRENCY_PLN :폴란드 즐로티 (PLN) +STR_GAME_OPTIONS_CURRENCY_PLN :폴란드 즈워티 (PLN) STR_GAME_OPTIONS_CURRENCY_RON :루마니아 레우 (RON) STR_GAME_OPTIONS_CURRENCY_RUR :러시아 루블 (RUR) STR_GAME_OPTIONS_CURRENCY_SIT :슬로바키아 톨라 (SIT) @@ -1708,7 +1708,7 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}설정 STR_CONFIG_ERROR :{WHITE}설정 파일에서 오류 발생 STR_CONFIG_ERROR_ARRAY :{WHITE}... 배열 '{STRING}'에서 오류 발생 STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... '{1:STRING}'에 잘못된 값('{0:STRING}')이 지정되었습니다. -STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... 설정 '{STRING}' 끝에 후행문자(??) +STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... '{STRING}' 설정의 끝에 후행 문자가 있습니다. STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... NewGRF '{STRING}' 무시중: '{STRING}'{G 1 "과" "와"} GRF ID가 겹침 STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... 유효하지 않은 NewGRF '{STRING}' 무시중: {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :찾을 수 없음 @@ -1722,7 +1722,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... 기 STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... 기본 효과음 세트({STRING})가 무시되었습니다: 파일을 찾을 수 없습니다. STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... 기본 배경음 세트({STRING})가 무시되었습니다: 파일을 찾을 수 없습니다. STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}메모리 초과 -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES}의 스프라이트 캐시 할당에 실패하였습니다. 스프라이트 캐시는 {BYTES} 만큼으로 감소합니다. 이는 OpenTTD의 성능을 저하시킬 것입니다. 메모리 요구사항을 낮추려면 32bpp를 비활성화하거나 화면 확대 옵션을 기본값에 가깝게 조절하십시오. +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES}의 스프라이트 캐시 할당에 실패하였습니다. 스프라이트 캐시 용량이 {BYTES}로 감소합니다. 이는 OpenTTD의 성능을 저하시킬 것입니다. 메모리 요구사항을 낮추려면 32bpp를 비활성화하거나 화면 확대 설정을 기본값에 가깝게 조절하십시오. # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1762,6 +1762,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}새로 STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}인공지능/게임 스크립트 설정창을 엽니다. STR_INTRO_TOOLTIP_QUIT :{BLACK}'OpenTTD'를 종료합니다. +STR_INTRO_BASESET :{BLACK}현재 선택된 기본 그래픽 세트에는 {NUM}개의 스프라이트가 빠져있습니다. 기본 세트를 업데이트하세요. STR_INTRO_TRANSLATION :{BLACK}이 버전의 OpenTTD는 {NUM}개의 문장이 한국어로 번역되지 않았습니다. OpenTTD가 더욱 발전할 수 있도록 번역에 참여하세요. 자세한 사항은 readme.txt를 참고하세요. # Quit window @@ -2590,6 +2591,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}공항 STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}받을 수 있는 화물: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}철도 종류: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}선로의 제한 속력: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}도로 속도 제한: {LTBLUE}{VELOCITY} @@ -2602,29 +2604,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :들판 STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :눈덮인 땅 STR_LAI_CLEAR_DESCRIPTION_DESERT :사막 -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :일반 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :입구 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :출구 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :복합 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :단방향 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :일반 신호기와 입구 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :일반 신호기와 출구 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :일반 신호기와 복합 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :일반 신호기와 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :일반 신호기와 단방향 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :입구 신호기와 출구 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :입구 신호기와 복합 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :입구 신호기와 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :입구 신호기와 단방향 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :출구 신호기와 복합 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :출구 신호기와 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :출구 신호기와 단방향 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :복합 신호기와 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :복합 신호기와 단방향 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :경로 신호기와 단방향 경로 신호기가 설치된 {STRING} 선로 -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} 차량기지 +STR_LAI_RAIL_DESCRIPTION_TRACK :철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :일반 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :입구 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :출구 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :복합 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :단방향 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :일반 신호기와 입구 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :일반 신호기와 출구 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :일반 신호기와 복합 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :일반 신호기와 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :일반 신호기와 단방향 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :입구 신호기와 출구 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :입구 신호기와 복합 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :입구 신호기와 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :입구 신호기와 단방향 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :출구 신호기와 복합 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :출구 신호기와 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :출구 신호기와 단방향 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :복합 신호기와 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :복합 신호기와 단방향 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :경로 신호기와 단방향 경로 신호기가 설치된 철도 선로 +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :철도 차량기지 STR_LAI_ROAD_DESCRIPTION_ROAD :도로 STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :가로등이 있는 도로 @@ -2688,7 +2690,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :회사 소유 STR_ABOUT_OPENTTD :{WHITE}OpenTTD에 대해서 STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD 버전 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD 개발팀 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD 개발팀 # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}게임 저장 @@ -2869,12 +2871,12 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}스프라이트 정렬 {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}다음 스프라이트 -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(위조/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다. +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}스프라이트 번호 입력 STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}입력한 스프라이트 번호로 이동합니다. 만약 입력한 번호의 스프라이트가 일반 스프라이트가 아닐경우, 그 다음으로 오는 일반 스프라이트로 이동합니다. STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}이전 스프라이트 -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}(위조/재색상/글씨 스프라이트를 제외한) 이전 보통 스프라이트로 이동하고, 첫 번째 스프라이트에 다다르면 마지막으로 돌아갑니다. -STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}현재 선택된 스프라이트를 표시합니다. 이 스프라이트가 그려졌을때의 정렬은 무시합니다. +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 이전 보통 스프라이트로 이동하고, 첫 번째 스프라이트에 다다르면 마지막으로 돌아갑니다. +STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}현재 선택된 스프라이트를 표현합니다. 이 스프라이트를 표현할 때, 정렬 상태는 무시하고 표현합니다. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}X축이나 Y축 방향으로 스프라이트를 이동시킵니다. CTRL+클릭하면 한 번에 8씩 이동시킬 수 있습니다. STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}상대값 초기화 STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}현재 상대값 좌표를 초기화 @@ -2905,10 +2907,8 @@ STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :예기치 않 STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :알려지지 않은 액션 0 속성 {4:HEX} (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :유효하지 않은 ID 사용 시도 (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} 에 손상된 객체가 있습니다. 모든 손상된 객체는 붉은 물음표로 보일 것입니다. -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :여러 개의 액션 8 엔트리 포함 (스프라이트 {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :모조-스프라이트의 지나간 끝을 읽음 (스프라이트 {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}최근에 이용한 기본 그래픽 세트에 객체가 많이 손실되었습니다.{}기본 그래픽 세트를 업데이트 하십시오. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}현재 사용중인 기본 그래픽에 그래픽이 다수 존재하지 않습니다.{}기본 그래픽 세트를 업데이트해 주십시오.{}현재 당신이 {YELLOW}OpenTTD의 개발 버전{WHITE}을 사용하고 있기 때문에, {YELLOW}기본 그래픽의 개발 버전{WHITE}이 필요할 수 있습니다. +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :여러 개의 Action 8 엔트리 포함 (스프라이트 {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :유사 스프라이트의 끝이었던 부분을 읽으려고 시도함 (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :요청한 GRF 자원을 사용할 수 없음 (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}(은)는 {STRING} 때문에 사용할 수 없습니다 STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :유효하지 않은/알 수 없는 스프라이트 구조 유형 (스프라이트 {3:NUM}) @@ -2937,7 +2937,7 @@ STR_NEWGRF_BROKEN :{WHITE}'{0:STRI STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}차고지 안에 있지 않은 '{1:ENGINE}'에 대한 동력 차량 상태가 바뀌었습니다. STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:ENGINE}'{G 1 "이" "가"} 차고지 안에 있지 않으면 차량 길이가 바뀝니다. STR_NEWGRF_BROKEN_CAPACITY :{WHITE}차량이 기지 안에 있지 않거나 개조가 불가능한 상태에서 '{1:ENGINE}'의 수송량이 변경되었습니다. -STR_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:COMPANY}'에 속한 열차 '{0:VEHICLE}'의 길이가 잘못된 값을 가지고 있습니다. NewGRF에 의한 문제로 추축됩니다. 게임이 비동기화 또는 충돌을 일으킬 수 있습니다. +STR_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:COMPANY}'에 속한 열차 '{0:VEHICLE}'의 길이가 잘못된 값을 가지고 있습니다. NewGRF에 의한 문제로 보입니다. 게임이 비동기화 또는 충돌을 일으킬 수 있습니다. STR_NEWGRF_BUGGY :{WHITE}NewGRF '{STRING}' (이)가 잘못된 정보를 제공하고 있습니다. STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}{1:ENGINE}(을)를 만들기 이전과 이후의 화물/개조 정보가 현재의 구매 목록과 다릅니다. 이 경우 자동 교체시 열차 개조에 실패할 수도 있습니다. @@ -3295,9 +3295,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}필요 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}받는 화물 +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}대기중 +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}생산되기 위해 대기 중인 화물량: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,10 +3562,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :낡으면 {ENGI STR_REPLACE_VEHICLES_STOP :{BLACK}차량 교체 중지 STR_REPLACE_HELP_STOP_BUTTON :{BLACK}왼쪽에서 선택한 기관차 종류의 차량교체를 중지하려면 이 버튼을 누르세요. -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}교체중: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}기관차/화물차 교체 창으로 전환합니다. STR_REPLACE_ENGINES :기관차 STR_REPLACE_WAGONS :화물차 +STR_REPLACE_ALL_RAILTYPE :모든 철도 차량 STR_REPLACE_HELP_RAILTYPE :{BLACK}교체할 기관차의 철도 종류를 고르세요 STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}왼쪽의 선택한 기관차가 어떤 기관차로 교체되고 있는지 표시합니다. diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 82320a89f2..410c96ad95 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -12,7 +12,7 @@ ##case gen acc abl dat -# $Id: latin.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: latin.txt 27761 2017-02-27 18:45:37Z translators $ # 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. @@ -1949,6 +1949,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Inspicer STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Monstrare optiones IA/Ludi scriptorum STR_INTRO_TOOLTIP_QUIT :{BLACK}Exire OpenTTD +STR_INTRO_BASESET :{BLACK}Hoc fundamento graphico desunt spiritus {NUM}. Quaere novam editionem huius fundamenti. STR_INTRO_TRANSLATION :{BLACK}In hac interpretatione, {NUM} series desunt. Quaesimus, iuva OpenTTD meliorari et dic te velle interpretem esse. Vide readme.txt in quo plura sunt. # Quit window @@ -2791,6 +2792,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nomen te STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Onera accepta: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Typus ferriviae: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Velocitas maxima ferriviae: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Velocitas maxima viae: {LTBLUE}{VELOCITY} @@ -2803,29 +2805,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Agri STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terra Nivea STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserta -STR_LAI_RAIL_DESCRIPTION_TRACK :Astarium {STRING.gen} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Astarium {STRING.gen} cum signalibus zonalibus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Astarium {STRING.gen} cum signalibus aditus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Astarium {STRING.gen} cum signalibus exitus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Astarium {STRING.gen} cum signalibus compositis -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Astarium {STRING.gen} cum signalibus itineris -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Astarium {STRING.gen} cum signalibus itineris unius cursus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Astarium {STRING.gen} cum signalibus zonalibus et aditus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Astarium {STRING.gen} cum signalibus zonalibus et exitus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Astarium {STRING.gen} cum signalibus zonalibus et compositis -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Astarium {STRING.gen} cum signalibus zonalibus et itineris -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Astarium {STRING.gen} cum signalibus zonalibus et itineris unius cursus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Astarium {STRING.gen} cum signalibus aditus et exitus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Astarium {STRING.gen} cum signalibus aditus et compositis -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Astarium {STRING.gen} cum signalibus aditus et itineris -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Astarium {STRING.gen} cum signalibus aditus et itineris unius cursus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Astarium {STRING.gen} cum signalibus exitus et compositis -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Astarium {STRING.gen} cum signalibus exitus et itineris -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Astarium {STRING.gen} cum signalibus exitus et itineris unius cursus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Astarium {STRING.gen} cum signalibus compositis et itineris -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Astarium {STRING.gen} cum signalibus compositis et itineris unius cursus -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Astarium {STRING.gen} cum signalibus itineris et unius cursus itineris -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Receptaculum {STRING.gen} +STR_LAI_RAIL_DESCRIPTION_TRACK :Astarium Ferriviae +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Ferrivia cum signalibus zonalibus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Ferrivia cum signalibus aditus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Ferrivia cum signalibus exitus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Ferrivia cum signalibus compositis +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Ferrivia cum signalibus itineris +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Ferrivia cum signalibus itineris unius cursus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Ferrivia cum signalibus zonalibus et aditus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Ferrivia cum signalibus zonalibus et exitus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Ferrivia cum signalibus zonalibus et compositis +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Ferrivia cum signalibus zonalibus et itineris +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Ferrivia cum signalibus zonalibus et itineris unius cursus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ferrivia cum signalibus aditus et exitus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Ferrivia cum signalibus aditus et compositis +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Ferrivia cum signalibus aditus et itineris +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Ferrivia cum signalibus aditus et itineris unius cursus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Ferrivia cum signalibus exitus et compositis +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Ferrivia cum signalibus exitus et itineris +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Ferrivia cum signalibus exitus et itineris unius cursus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Ferrivia cum signalibus compositis et itineris +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Ferrivia cum signalibus compositis et itineris unius cursus +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Ferrivia cum signalibus itineris et unius cursus itineris +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Receptaculum ferriviarium STR_LAI_ROAD_DESCRIPTION_ROAD :Via STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Via cum lampadibus @@ -2889,7 +2891,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terra societati STR_ABOUT_OPENTTD :{WHITE}De OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Privilegium impressorium originale {COPYRIGHT} MCMXCV Chris Sawyer, Omnia proprietatis iura reservantur STR_ABOUT_VERSION :{BLACK}OpenTTD editio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} MMII-MMXVI Manus OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} MMII-MMXVII Manus OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Servare Ludum @@ -3108,8 +3110,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Conatus agnosca STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} spiritum corruptum habet. Omnes spiritus corrupti monstrabuntur forma rubro puncto interrogativo - ? STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Continet plures Actiones 8 (spiritus {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lectio post terminum pseudospiritus (spiritus {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Fundamento graphico adhibito deest nonulli spiritus.{}Utinam arcessas novam editionem -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Fundamento graphico adhibito deest nonulli spiritus.{}Utinam arcessas novam editionem.{}Quoniam ludis {YELLOW}editionem OpenTTD adhuc in explicando{WHITE}, fortasse etiam tibi necesse est {YELLOW}editio fundamenti graphici OpenTTD in explicando{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Opes GRF desideratae non parabiles (spiritus {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} neglectus est a {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Irrita/ignota dispositio spiritus (spiritus {3:NUM}) @@ -3496,9 +3496,11 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Postulat STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}manet + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Onera utenda manentia: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING} ############ range for produces ends @@ -3759,10 +3761,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} cum ve STR_REPLACE_VEHICLES_STOP :{BLACK}Consistere mutationem vehiculorum STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Preme ut mutatio vehiculi sinistri consistatur -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Mutatio: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Mutare inter mutationem hamaxarum curruumque STR_REPLACE_ENGINES :Hamaxarum STR_REPLACE_WAGONS :Curruum +STR_REPLACE_ALL_RAILTYPE :Omnia vehicula ferriviaria STR_REPLACE_HELP_RAILTYPE :{BLACK}Eligere typum astarii cui est hamaxas commutandas STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Haec monstrat novum vehiculum desideratum, si adest diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index ac2268f50c..7dc19132b7 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -12,7 +12,7 @@ ##case kas -# $Id: latvian.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: latvian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -562,8 +562,8 @@ STR_MONTH_DEC :Decembris ############ range for months ends # Graph window -STR_GRAPH_KEY_BUTTON :{BLACK}Leģenda -STR_GRAPH_KEY_TOOLTIP :{BLACK}Diagrammās rādīt leģendas +STR_GRAPH_KEY_BUTTON :{BLACK}Apzīmējumu atslēga +STR_GRAPH_KEY_TOOLTIP :{BLACK}Diagrammās rādīt apzīmējumu atslēgas STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} @@ -577,7 +577,7 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Uzņēmu STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kravas apmaksas cenas STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Dienas pārvadājumos -STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Izmaksas par 10 vienību (vai 10,000 litru) kravas pārvadāšanu par 20mit lauciņiem +STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Izmaksas par 10 vienību (vai 10,000 litru) kravas pārvadāšanu par 20 lauciņiem STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Iespējot visu STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Atspējot visu STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Rādīt visas kravas samaksu salīdzināšanas diagrammā @@ -588,8 +588,8 @@ STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLA STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Rādīt detalizētus uzņēmējdarbības vērtējumus # Graph key window -STR_GRAPH_KEY_CAPTION :{WHITE}Leģendas uzņēmumu diagrammās -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klikšķināt šeit, lai izslēgtu/ieslēgtu uzņēmuma iekļaušanu diagrammā +STR_GRAPH_KEY_CAPTION :{WHITE}Apzīmējumu atslēgas uzņēmumu diagrammās +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klikšķināt šeit, lai ieslēgtu/izslēgtu uzņēmuma attēlošanu diagrammā # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Uzņēmumu rangu saraksts @@ -703,6 +703,7 @@ STR_SMALLMAP_CAPTION :{WHITE}Karte - STR_SMALLMAP_TYPE_CONTOURS :kontūras STR_SMALLMAP_TYPE_VEHICLES :transportlīdzekļi STR_SMALLMAP_TYPE_INDUSTRIES :ražotnes +STR_SMALLMAP_TYPE_ROUTEMAP :kravas plūsma STR_SMALLMAP_TYPE_ROUTES :maršruti STR_SMALLMAP_TYPE_VEGETATION :augu valsts STR_SMALLMAP_TYPE_OWNERS :īpašnieki @@ -760,6 +761,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Pārslē STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nerādīt neviena uzņēmuma īpašumus uz kartes STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Rādīt visu uzņēmumu īpašumus uz kartes STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Nerādīt kravas uz kartes +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Rādīt visas kravas uz kartes # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Rādīt pēdējo ziņojumu vai avīzes rakstu @@ -1338,6 +1340,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Izslēgta STR_CONFIG_SETTING_LEFT_MOUSE_BTN_SCROLLING :Kreisā klikšķa ritināšana: {STRING} STR_CONFIG_SETTING_AUTOSAVE :Automātiskā saglabāšana: {STRING} +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Izvēlēties spēles automātiskās saglabāšanas starplaikus STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Lietot {STRING} datuma formātu saglabāto spēļu nosaukumos STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Datuma formāts spēļu saglabājuma failu nosaukumos @@ -2215,9 +2218,15 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Pārslē STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Caurspīdības vietā objektus padarīt neredzamus # Linkgraph legend window -STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Atzīmēt kompānijas kuras uzrādīt +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Kravas plūsmas apzīmējumi +STR_LINKGRAPH_LEGEND_ALL :{BLACK}Visi +STR_LINKGRAPH_LEGEND_NONE :{BLACK}Neviens +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Izvēlēties attēlojamos uzņēmumus # Linkgraph legend window and linkgraph legend in smallmap +STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}nelietots +STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLACK}piesātināts +STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}pārslogots # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Pārklājuma iezīmēšana @@ -2533,29 +2542,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Lauki STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Apsnigusi zeme STR_LAI_CLEAR_DESCRIPTION_DESERT :Tuksnesis -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} sliedes -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} ceļš ar bloķēšanas signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} sliedes ar pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} sliedes ar izejas signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} sliedes ar kombinētajām signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} sliedes ar ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} sliedes ar vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} sliedes ar bloka un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} sliedes ar bloka un izejas signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} sliedes ar bloka un kombinētajām signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} sliedes ar bloka un ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} sliedes ar bloka un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} sliedes ar izejas un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} sliedes ar kombinētajām un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} sliedes ar ceļu un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} sliedes ar vienvirziena ceļu un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} sliedes ar izejas un kombinētajām signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} sliedes ar izejas un ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} sliedes ar izejas un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} sliedes ar kombinētajām un ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} sliedes ar kombinētajām un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} sliedes ar ceļa un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} vilcienu depo +STR_LAI_RAIL_DESCRIPTION_TRACK :Dzelzceļš sliedes +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Dzelzceļš ceļš ar bloķēšanas signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Dzelzceļš sliedes ar pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Dzelzceļš sliedes ar izejas signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Dzelzceļš sliedes ar kombinētajām signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Dzelzceļš sliedes ar ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Dzelzceļš sliedes ar vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Dzelzceļš sliedes ar bloka un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Dzelzceļš sliedes ar bloka un izejas signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Dzelzceļš sliedes ar bloka un kombinētajām signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Dzelzceļš sliedes ar bloka un ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Dzelzceļš sliedes ar bloka un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Dzelzceļš sliedes ar izejas un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Dzelzceļš sliedes ar kombinētajām un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Dzelzceļš sliedes ar ceļu un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Dzelzceļš sliedes ar vienvirziena ceļu un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Dzelzceļš sliedes ar izejas un kombinētajām signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Dzelzceļš sliedes ar izejas un ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Dzelzceļš sliedes ar izejas un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Dzelzceļš sliedes ar kombinētajām un ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Dzelzceļš sliedes ar kombinētajām un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Dzelzceļš sliedes ar ceļa un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Dzelzceļš vilcienu depo STR_LAI_ROAD_DESCRIPTION_ROAD :Ceļš STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Ceļš ar ielu apgaismojumu @@ -2619,7 +2628,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Uzņēmumam pie STR_ABOUT_OPENTTD :{WHITE}Par OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oriģināla autortiesības {COPYRIGHT} 1995 Kriss Sojers. Visas tiesības paturētas STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD darba grupa +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD darba grupa # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Saglabāt spēli @@ -2831,8 +2840,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Mēģinājums i STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} satur bojātu gariņu. Visi bojātie gariņi tiks parādīti ar sarkanu jautājuma zīmi (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Satur vairākus Action 8 ierakstus (gariņš {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lasīt aiz pseidogariņa beigām (gariņš {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Pašlaik lietotajai pamata grafikas kopai trūkst daļa gariņu.{}Lūdzu atjauniniet pamata grafikas kopu -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Pašlaik lietotajai pamata grafikas kopai trūkst daļa gariņu.{}Lūdzu atjauniniet pamata grafikas kopu.{}Tā kā jūs spēlējat {YELLOW}OpenTTD izstrādes momentuzņēmumu{WHITE}, jums varētu būt nepieciešams arī {YELLOW}pamata grafikas izstrādes momentuzņēmums{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Pieprasītie GRF resursi nav pieejami (gariņš {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ar {2:STRING} tika atspējots STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Nederīgs/nezināms gariņa izkārtojuma formāts (gariņš {3:NUM}) @@ -3008,6 +3015,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikšķināt uz servisa, lai iecentrētu skatu uz rūpnīcu/pilsētu. Ctrl+klikšķis atvērs jaunu skatu lauku uz pilsētu/rūpnīcu # Story book window +STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Stāstu grāmata STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globālā stāstu grāmata STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM} lapa @@ -3218,9 +3226,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nepiecie STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Krava, kuru ir jāapstrādā: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3478,7 +3485,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kad ve STR_REPLACE_VEHICLES_STOP :{BLACK}Pārtraukt transportlīdzekļu nomaiņu STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Nospiest, lai apturētu kreisajā pusē atlasītās lokomotīves aizstāšanu -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Nomainīt: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Parslēgties starp lokomotīves un vagona aizstāšanas logiem STR_REPLACE_ENGINES :Lokomotīves STR_REPLACE_WAGONS :Vagoni @@ -3815,7 +3821,7 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Saraksts STR_TIMETABLE_NO_TRAVEL :Bez braukšanas STR_TIMETABLE_NOT_TIMETABLEABLE :Ceļot (automātiski; pēc nākamā manuālā rīkojuma saraksta) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Braukšana (nav pēc saraksta) +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Braukšana (nav sarakstā) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Braukt ar ne vairāk kā {2:VELOCITY} (nav sarakstā) STR_TIMETABLE_TRAVEL_FOR :Braukt līdz {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Braukt uz {STRING} ar ne vairāk kā {VELOCITY} @@ -4242,7 +4248,7 @@ STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Vispirms STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Nevar sākties un beigties tajā paša vietā STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Tilta gali nav vienā līmenī STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Tilts ir pārāk zems šim zemes apvidum -STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}Tilts ir pārāk augsts priekš šī vilciena. +STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}Tilts ir pārāk augsts šim zemes apvidum. STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Sākumam un beigām jābūt uz vienas līnijas STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... abiem tilta galiem jābūt uz zemes STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... tilts ir pārāk garš @@ -4269,7 +4275,7 @@ STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... tā STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nevar izveidot grupu... STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Nevar izdzēst šo grupu... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Nevar pārdēvēt grupu... -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}No šīs grupas nevar noņemt visus transportlīdzekļus... +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nevar noņemt no šīs grupas visus transportlīdzekļus... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nevar pievienot transportlīdzekļus šai grupai... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nevar pievienot koplietojamos transportlīdzekļus šai grupai... @@ -4285,8 +4291,8 @@ STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Nevar pi STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Nevar pielāgot lidaparātu... STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Nevar nosaukt vilcienu... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Autotransporta līdzekli nevar nosaukt... -STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Nevar pārdēvēt kuģi... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Nevar nosaukt autotransporta līdzekli... +STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Nevar nosaukt kuģi... STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Nevar nosaukt lidaparātu... STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Nevar apturēt/palaist vilcienu... @@ -4372,6 +4378,10 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Nevar dz STR_DESKTOP_SHORTCUT_COMMENT :Uz 'Transport Tycoon Deluxe' balstīta simulācijas spēle # Translatable descriptions in media/baseset/*.ob* files +STR_BASEGRAPHICS_DOS_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS izdevuma grafika. +STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS (vācu) izdevuma grafika. +STR_BASEGRAPHICS_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma grafika. +STR_BASESOUNDS_NONE_DESCRIPTION :Skaņu kopa bez skaņas. STR_BASEMUSIC_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika. STR_BASEMUSIC_NONE_DESCRIPTION :Mūzikas kopa bez mūzikas diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index ca74be468e..c2aba05e3b 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -12,7 +12,7 @@ ##case kas ko kam ka kuo kur kreip -# $Id: lithuanian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: lithuanian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2820,29 +2820,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Laukai STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Užpustyta žemė STR_LAI_CLEAR_DESCRIPTION_DESERT :Dykuma -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} bėgiai -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} bėgiai su paprastais šviesoforais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} ebgiai su prie signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} bėgiai su išvažiavimo signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} bėgiai su kombinuotais signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} bėgiai su trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} bėgiai su vienpusiais trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} begiai su paprastais ir prie signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} bėgiai su paprastais ir išvažiavimo signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} bėgiai su paprastais ir kombinuotais signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} bėgiai su paprastais ir trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} bėgiai su paprastais ir vienpusiais trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} bėgiai su pre ir išvažiavimo signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} bėgiai su prie ir kombinuotais signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} bėgiai su prie ir trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} bėgiai su prie ir vienpusiais trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} bėgiai su išvažiavimo ir kombinuotais signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} bėgiai su išvažiavimo ir trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} bėgiai su išvažiavimo ir vienpusiais signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} bėgiai su kombinuotais ir trasos signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} bėgiai su kombinuotais ir vienpusiais signalais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} bėgiai su trasos ir vienpusiais signalais -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} traukinių depas +STR_LAI_RAIL_DESCRIPTION_TRACK :Geležinkelis bėgiai +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Geležinkelis bėgiai su paprastais šviesoforais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Geležinkelis ebgiai su prie signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Geležinkelis bėgiai su išvažiavimo signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Geležinkelis bėgiai su kombinuotais signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Geležinkelis bėgiai su trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Geležinkelis bėgiai su vienpusiais trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Geležinkelis begiai su paprastais ir prie signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Geležinkelis bėgiai su paprastais ir išvažiavimo signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Geležinkelis bėgiai su paprastais ir kombinuotais signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Geležinkelis bėgiai su paprastais ir trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Geležinkelis bėgiai su paprastais ir vienpusiais trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Geležinkelis bėgiai su pre ir išvažiavimo signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Geležinkelis bėgiai su prie ir kombinuotais signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Geležinkelis bėgiai su prie ir trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Geležinkelis bėgiai su prie ir vienpusiais trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Geležinkelis bėgiai su išvažiavimo ir kombinuotais signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Geležinkelis bėgiai su išvažiavimo ir trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Geležinkelis bėgiai su išvažiavimo ir vienpusiais signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Geležinkelis bėgiai su kombinuotais ir trasos signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Geležinkelis bėgiai su kombinuotais ir vienpusiais signalais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Geležinkelis bėgiai su trasos ir vienpusiais signalais +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Geležinkelis traukinių depas STR_LAI_ROAD_DESCRIPTION_ROAD :Kelias STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Kelias su žibintais @@ -2906,7 +2906,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanijos žem STR_ABOUT_OPENTTD :{WHITE}Apie OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pradinės versijos teisės priklauso {COPYRIGHT} 1995 Chris Sawyer, Visos teisės saugomos STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 OpenTTD komanda +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD komanda # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Išsaugoti žaidimą @@ -3125,8 +3125,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Bandymas panaud STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} turi sugadintą spruklį. Visi sugadinti sprukliai bus rodomi kaip raudoni klaustukai (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Susideda iš keleto veiksmo 8 įrašų (spruklys {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Skaitymas už pseudospruklio pabaigos (spruklys {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Šiuo metu naudojamam grafikos rinkiniui trūksta keleto spruklių.{}Atnaujinkite pagrindinį grafikos rinkinį -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Šiuo metu naudojamam pagrindinės grafikos rinkiniui trūsta keleto spruklių.{}Atnaujinkite pagrindinės grafikos rinkinį.{} Kadangi žaidžiate {YELLOW} negalutinę, vis dar kuriamą OpenTTD versiją, {WHITE}, jums, ko gero, reikėtų įdiegti atitinkamą{YELLOW}naujausią, negalutinį pagrindinės grafikos rinkinį.{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Pageidautas GRF resursas yra neprieinamas (spruklys {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} buvo išjungtas {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Neteisingas/nežinomas spruklio išdėstymo formatas (spruklys {3:NUM}) @@ -3513,9 +3511,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Reikalau STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING}, {STRING.ko}{STRING}, {STRING.ko}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Krovinys, kuris bus perdirbtas: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gamina: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Gamina: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3814,7 +3811,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} jei pa STR_REPLACE_VEHICLES_STOP :{BLACK}Stabdyti tr. priemonių keitimą STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Spustelk, jei nori sustabdyti šiuo metu vykdomą keitimo procedūrą -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Keičiama: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Pereidinėti tarp garvežių ir vagonų pakeitimo langų STR_REPLACE_ENGINES :Varikliai STR_REPLACE_WAGONS :Vagonai diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 5794508e88..84b1d6a113 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -10,7 +10,7 @@ ##grflangid 0x23 -# $Id: luxembourgish.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: luxembourgish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1761,6 +1761,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Check op STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Weis KI an Spill-Script-Astellungen STR_INTRO_TOOLTIP_QUIT :{BLACK}Aus 'OpenTTD' eraus goen +STR_INTRO_BASESET :{BLACK}Dem grad ausgewielte Basis Grafikset fehlen {NUM} Srite{P "" s}. W.e.g. no Updates fir dëse Set sichen. STR_INTRO_TRANSLATION :{BLACK}Dës Iwwersetzung huet {NUM} String{P "" s}. Hëllef OpenTTD besser ze man andems du dech als Iwwersetzer mells! Lies readme.txt fir d'Detailer. # Quit window @@ -2589,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Fluchhaf STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Akzeptéiert Wuer: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Schinnentyp: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Schinne-Geschw.-Limit: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Stroosse-Geschw.-Limit: {LTBLUE}{VELOCITY} @@ -2601,29 +2603,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Felder STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Schnéibedeckt Land STR_LAI_CLEAR_DESCRIPTION_DESERT :Wüst -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} Schinn -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} Schinn mat Blocksignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} Schinn mat Presignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} Schinn mat Ausgangs-Signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} Schinn mat Kombo-Signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} Schinn mat Weesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} Schinn mat Einbahnsignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} Schinn mat Block- an Presignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} Schinn mat Block- an Ausgangssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} Schinn mat Block- a Kombosignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} Schinn mat Block- a Weesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} Schinn mat Block- a Einbahnsignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} Schinn mat Pre- an Ausgangssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} Schinn mat Pre- a Kombosignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} Schinn mat Pre- a Weesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} Schinn mat Pre- an Einbahnweesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} Schinn mat Ausgangs- a Kombosignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} Schinn mat Ausgangs- a Weesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} Schinn mat Ausgang- an Einbahnweesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} Schinn mat Kombo- an Weesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} Schinn mat Kombo- an Einbahnweesignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} Schinn mat Wee- and Einbahnweesignaler -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} Zuchschapp +STR_LAI_RAIL_DESCRIPTION_TRACK :Schinn +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Schinn mat Blocksignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Schinn mat Presignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Schinn mat Ausgangs-Signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Schinn mat Kombo-Signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Schinn mat Weesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Schinn mat Einbahnsignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Schinn mat Block- an Presignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Schinn mat Block- an Ausgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Schinn mat Block- a Kombosignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Schinn mat Block- a Weesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Schinn mat Block- a Einbahnsignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Schinn mat Pre- an Ausgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Schinn mat Pre- a Kombosignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Schinn mat Pre- a Weesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Schinn mat Pre- an Einbahnweesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Schinn mat Ausgangs- a Kombosignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Schinn mat Ausgangs- a Weesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Schinn mat Ausgang- an Einbahnweesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Schinn mat Kombo- an Weesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Schinn mat Kombo- an Einbahnweesignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Schinn mat Wee- and Einbahnweesignaler +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Zuchschapp STR_LAI_ROAD_DESCRIPTION_ROAD :Strooss STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Strooss mat Luuchten @@ -2687,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land am Firmenb STR_ABOUT_OPENTTD :{WHITE}Iwwert OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original Copyright {COPYRIGHT} 1995 Chris Sawyer, All Rechter virbehalen STR_ABOUT_VERSION :{BLACK}OpenTTD Versioun {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 D'OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 D'OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spill späicheren @@ -2906,8 +2908,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Versicht invali STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} huet eng korrupt Sprite. All korrupt Sprites ginn als Fragezeichen (?) duergestallt STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Huet eng Rei Action 8 Einträg (Sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lanscht d'Enn vum Pseudo-Sprite gelies (Sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}D'momentan benotzten Grafikset huet e puer Sprites ze mann.{}W.e.g d'Basisgrafikset updaten -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Am grad benotzten Basis-Grafikset fehlen e puer Sprites.{}W.e.g Basis-Grafikset updaten.{}Wellsde en {YELLOW}Development Snapshot vun OpenTTD spills{WHITE}, brauchsde och en {YELLOW}Development Snapshot vum Basis-Grafikset{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Ugefroten GRF Ressource net verfügbar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} gouf ausgeschalt vun {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/onbekannten Sprite Layout Format (Sprite {3:NUM}) @@ -3294,9 +3294,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Brauch: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Luedunge déi nach verschafft musse ginn: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,10 +3556,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} wann a STR_REPLACE_VEHICLES_STOP :{BLACK}Stop Gefieraustosch STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Drécken fir den Austosch ze stoppen -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Tauschen aus: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Wiessel tëscht Maschin- an Waggonaustosch-Fënster STR_REPLACE_ENGINES :Lokomotiven STR_REPLACE_WAGONS :Waggonen +STR_REPLACE_ALL_RAILTYPE :All Zich STR_REPLACE_HELP_RAILTYPE :{BLACK}Wielt de Schinnentyp fir déi Lokomotiven ausgetosch ginn STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Weist un wellech Lokomotiv vun der lénks ugewielter Lokomotiv ausgetosch soll ginn, wann et zoutrëfft diff --git a/src/lang/malay.txt b/src/lang/malay.txt index b048a12148..be138c3c16 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -10,7 +10,7 @@ ##grflangid 0x3c -# $Id: malay.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: malay.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1073,6 +1073,7 @@ STR_CONFIG_SETTING_TYPE_GAME_INGAME :Tetapan permain STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Tetapan syarikat (disimpan di simpanan; berkesan hanya permainan baru) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Tetapan syarikat (disimpan di penyimpanan; hanya berkesan kepada syarikat semasa) +STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategori: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Hadkan senarai di bawah menggunakan penapis yang telah ditetapkan STR_CONFIG_SETTING_RESTRICT_BASIC :Asas (menunjukkan tetapan yang penting sahaja) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Terperinci (tunjukkan kebanyakan tetapan) @@ -1080,6 +1081,7 @@ STR_CONFIG_SETTING_RESTRICT_ALL :Expert (memapar STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Tetapan dengan nilai berbeza dari yang lalai STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Tetapan dengan nilai yang berbeza daripada tetapan baru permainananda +STR_CONFIG_SETTINGS_NONE :{WHITE}- Tiada - STR_CONFIG_SETTING_OFF :Matikan STR_CONFIG_SETTING_ON :Hidupkan @@ -1165,6 +1167,7 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Jumlah ruang ra STR_CONFIG_SETTING_MULTIPINDTOWN :Benarkan pelbagai industri sejenis di setiap bandar: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Biasanya sebuah bandar tidak mahu lebih daripada beberapa industri. Dengan tetapan ini membolehakn beberapa industri di bandar yang sama STR_CONFIG_SETTING_SIGNALSIDE :Pamer isyarat: {STRING} +STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Di sebelah kanan STR_CONFIG_SETTING_SHOWFINANCES :Tunjukkan tetingkap kewangan setiap penghujung tahun: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Arahan baru ialah 'tanpa henti' secara lazim: {STRING} STR_CONFIG_SETTING_STOP_LOCATION :Arahan keretapi baru berhenti secara lazim di pletfom {STRING} @@ -1302,6 +1305,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Tunjukkan landa STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Alat binaan tetap aktif selepas digunakan: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :Perbelanjaan kumpulan dalam tetingkap kewangan syarikat: {STRING} +STR_CONFIG_SETTING_SOUND_CONFIRM :Pembinaan: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Nyahaktif infrastruktur bangunan apabila tiada kenderaan yang sesuai: {STRING} STR_CONFIG_SETTING_MAX_TRAINS :Amaun maksimum kereta api setiap syarikat: {STRING} @@ -1324,6 +1328,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Benarkan Kepint STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes sebelum skrip adalah digantung: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :Tempoh waktu servis dalam peratusan: {STRING} +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pilih sama ada selenggara kenderaan dimulakan sejak tempoh masa dari servis terakhir atau apabila peratusan kebolehupayaan kenderaan berkurang kepada peratusan tertentu. +STR_CONFIG_SETTING_SERVINT_DISABLED :Dilumpuhkan STR_CONFIG_SETTING_NOSERVICE :Servis tidak diperlukan apabila kerosakan kenderaan ditetapkan kepada tiada: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Benarkan had kelajuan untuk gerabak: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :Tiada landasan elektrik: {STRING} @@ -1332,6 +1338,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ketibaan kender STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ketibaan kenderaan di stesen pesaing: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Kemalangan / bencana: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Maklumat syarikat: {STRING} +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Paparkan surat khabar mengenai pembukaan syarikat baru, atau apabila syarikat dalam risiko untuk muflis STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Pembukaan industri: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE :Penutupan industri: {STRING} STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Perubahan ekonomi: {STRING} @@ -1353,6 +1360,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Tahun permulaan STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gunakan ekonomi baik (perubahan yang lebih kecil): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Benarkan membeli saham syarikat lain: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Bina semafor secara automatik sebelum: {STRING} +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Tetapkan tahun apabila isyarat berjenis elektrik digunakan untuk landasan. Sebelum tahun ini, isyarat bukan elektrik akan digunakan (memiliki fungsi yang sama, tetapi berlainan reka bentuk) STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Gunakan GUI isyarat: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Jenis isyarat yang dibina secara lazim: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Isyarat sekatan @@ -2308,29 +2316,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Ladang STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Tanah diliputi salji STR_LAI_CLEAR_DESCRIPTION_DESERT :Padang pasir -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} landasan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} landasan dengan isyarat sekatan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} landasan dengan pra-isyarat -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} landasan dengan isyarat keluar -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} landasan dengan isyarat kombo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} landasan dengan isyarat laluan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} landasan dengan isyarat satu hala -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} landasan dengan isyarat sekatan dan pra-isyarat -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} landasan dengan isyarat sekatan dan keluar -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} landasan dengan isyarat sekatan dan kombo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} landasan dengan isyarat sekatan dan laluan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} landasan dengan isyarat sekatan dan satu hala -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} landasan dengan isyarat pra- dan keluar -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} landasan dengan isyarat pra- dan kombo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} landasan dengan isyarat pra- dan laluan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} landasan dengan isyarat pra- dan satu hala -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} landasan dengan isyarat keluar dan kombo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} landasan dengan isyarat keluar dan laluan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} landasan dengan isyarat keluar dan satu hala -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} landasan dengan isyarat kombo dan laluan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} landasan dengan isyarat kombo dan satu hala -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} landasan dengan isyarat laluan dan satu hala -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} depoh keretapi +STR_LAI_RAIL_DESCRIPTION_TRACK :Landasan keretapi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Keretapi landasan dengan isyarat sekatan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Keretapi landasan dengan pra-isyarat +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Landasan keretapi dengan isyarat keluar +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Landasan keretapi dengan isyarat kombo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Keretapi landasan dengan isyarat laluan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Landasan keretapi dengan isyarat satu hala +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Keretapi landasan dengan isyarat sekatan dan pra-isyarat +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Landasan keretapi dengan isyarat sekatan dan keluar +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Landasan keretapi dengan isyarat sekatan dan kombo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Keretapi landasan dengan isyarat sekatan dan laluan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Landasan keretapi dengan isyarat sekatan dan satu hala +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Keretapi landasan dengan isyarat pra- dan keluar +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Keretapi landasan dengan isyarat pra- dan kombo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Keretapi landasan dengan isyarat pra- dan laluan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Keretapi landasan dengan isyarat pra- dan satu hala +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Landasan keretapi dengan isyarat keluar dan kombo. +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Landasan keretapi dengan isyarat keluar dan laluan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Landasan keretapi dengan isyarat keluar dan satu hala +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Landasan keretapi dengan isyarat kombo dan signal laluan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Landasan keretapi dengan isyarat kombo dan satu hala +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Keretapi landasan dengan isyarat laluan dan satu hala +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Keretapi depoh keretapi STR_LAI_ROAD_DESCRIPTION_ROAD :Jalanraya STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Jalan raya berlampu @@ -2394,7 +2402,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah dimiliki STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hakcipta Asal {COPYRIGHT} 1995 Chris Sawyer, Hakcipta terpelihara STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Simpankan Permainan @@ -2602,7 +2610,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Cubaan untuk me STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} mengandungi peperi yang rosak. Semua peperi yang rosak akan ditunjukkan menggunakan tanda soal (?) merah. STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Mengandungi pelbagai Tindakan 8 kemasukan (peperi {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Bacaan melepasi penghujung peperi-pseudo (peperi {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Set asas grafik yang sedang digunakan, hilang sebilangan sprites.{}Sila mengemaskini set asas grafik STR_NEWGRF_ERROR_GRM_FAILED :Sumber GRF yang diminta tidak diperolehi (peperi {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} telah dinyahaktifkan oleh {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Tidak sah/diketahui format susun atur (peperi {3:NUM}) @@ -2770,6 +2777,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik di atas servis untuk memusatkan pemandangan kepada industri/bandar. Ctrl+Klik untuk membuka tetingkap pemandangan di lokasi bandar # Story book window +STR_STORY_BOOK_TITLE :{YELLOW}{STRING} # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Nama stesen - klik pada nama untuk memusatkan pemandangan ke stesen. Ctrl+Klik membuka tetingkap pemandangan di lokasi stesen @@ -2936,6 +2944,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Pengelua STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% dihantar) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Pusatkan pemandangan utama ke lokasi industri. Ctrl+Klik untuk membuka tetingkap pemandangan di lokasi industri STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tahap produksi: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW} Industri mengumumkan penutupan serta merta! ############ range for requires starts STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING} @@ -2943,9 +2952,9 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Memerluk STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Diperlukan + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Kargo yang sedang menunggu untuk diproses: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3197,7 +3206,6 @@ STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Tiada ke STR_REPLACE_VEHICLES_STOP :{BLACK}Hentikan Penggantian Kenderaan STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Menekan untuk menghentikan ketukaran jenis engin yang telah dipilih di sebelah kiri -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Menggantikan: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Beralih antara tetingkap enjin dan penggantian wagon STR_REPLACE_ENGINES :Enjin STR_REPLACE_WAGONS :Gerabak @@ -3313,6 +3321,7 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Tempoh P STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Tambah 10 tempoh penyenggelaraan. Ctrl+Klik untuk tambah 5 tempoh penyenggelaraan STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Kurangkan 10 tempoh penyenggelaraan. Ctrl+Klik untuk kurangkan 5 tempoh penyenggelaraan +STR_VEHICLE_DETAILS_PERCENT :Peratusan STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Nama keretapi STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Nama kenderaan jalanraya @@ -4035,6 +4044,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Tidak bo STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kenderaan sudah musnah +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Mulakan permainan baru selepas {DATE_SHORT} atau gunakan NewGRF yang digunakan kenderaan terdahulu # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Keretapi tidak boleh melanggar isyarat kerana terdapat kemungkinan bahaya... @@ -4081,6 +4091,8 @@ STR_DESKTOP_SHORTCUT_COMMENT :Sebuah permaina # Translatable descriptions in media/baseset/*.ob* files STR_BASEGRAPHICS_DOS_DESCRIPTION :Grafik asal Transport Tycoon Deluxe DOS edition. STR_BASEGRAPHICS_WIN_DESCRIPTION :Grafik asal Transport Tycoon Deluxe edisi Windows. +STR_BASEMUSIC_WIN_DESCRIPTION :Muzik asal Transport Tycoon Deluxe edisi Windows. +STR_BASEMUSIC_NONE_DESCRIPTION :Pek muzik tanpa muzik sebenar. ##id 0x2000 # Town building names diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index c4bf859360..934258bdfd 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -12,7 +12,7 @@ ##case small -# $Id: norwegian_bokmal.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: norwegian_bokmal.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2605,29 +2605,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Jorder STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snødekket land STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING}spor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING}spor med blokksignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING}spor med forsignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING}spor med utgangssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING}spor med kombinasjonssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING}spor med avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spor med enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spor med blokk- og forsignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spor med blokk- og utgangssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spor med blokk- og kombinasjonssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spor med blokk- og avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spor med blokk- og enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spor med for- og utgangssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spor med for- og kombinasjonssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spor med for- og avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spor med for- og enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spor med utgangs- og kombinasjonssignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spor med utgangs- og avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spor med utgangs- og enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spor med kombinasjon- og avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} spor med kombinasjon- og enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spor med avanserte- og enveis avanserte signaler -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} togstall +STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbanespor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med blokksignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbanespor med forsignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbanespor med utgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbanespor med kombinasjonssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbanespor med avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med enveis avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blokk- og forsignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blokk- og utgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blokk- og kombinasjonssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blokk- og avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blokk- og enveis avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med for- og utgangssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane spor med for- og kombinasjonssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med for- og avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbane spor med for- og enveis avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor med utgangs- og kombinasjonssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med utgangs- og avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med utgangs- og enveis avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinasjon- og avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinasjon- og enveis avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med avanserte- og enveis avanserte signaler +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togstall STR_LAI_ROAD_DESCRIPTION_ROAD :Vei STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Vei med gatelykter @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firma-eid lando STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opprinnelig opphavsbeskyttet {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Lagre spill @@ -2910,8 +2910,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Forsøk på å STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} inneholder en ødelagt sprite. Alle ødelagte spriter blir vist som røde spørsmålstegn (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Inneholder flere Handling 8-oppføringer (figur {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Leste forbi slutten av pseudo-sprite (figur {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Det benyttede grafikksettet mangler en del spriter.{}Du må oppdatere grafikksettet. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Den benyttede grafikkpakken mangler en mengde bildeelementer.{}Du må oppdatere grafikkpakken.{}Siden du spiller en {YELLOW}utviklingsversjon av OpenTTD{WHITE}, kan det være at du også trenger en {YELLOW}utviklingsversjon av grafikkpakken{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Etterspurte GRF-ressurser ikke tilgjengelig (figur {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ble deaktivert av {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layout-format (figur {3:NUM}) @@ -3298,9 +3296,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Trenger: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Varer som venter på behandling: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3561,7 +3558,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} når g STR_REPLACE_VEHICLES_STOP :{BLACK}Stopp erstatning av kjøretøy STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikk denne knappen for å stoppe erstatning av lokomotivet som er valgt på venstresiden -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Erstatter: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Veksle mellom tog- og vognerstatningsvinduet STR_REPLACE_ENGINES :Lokomotiv STR_REPLACE_WAGONS :Vogner diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 3869f5278f..714eb2aa5e 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -12,7 +12,7 @@ ##case small -# $Id: norwegian_nynorsk.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: norwegian_nynorsk.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2522,29 +2522,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Jorde STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snødekt land STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} spor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} spor med blokksignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} spor med startsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} spor med sluttsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} spor med kombinerte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} spor med avanserte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spor med einvegssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spor med blokk- og startsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spor med blokk- og sluttsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spor med blokk- og kombinerte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spor med blokk- og avanserte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spor med blokk- og einvegssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spor med start- og sluttsignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spor med start- og kombinerte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spor med start- og avanserte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spor med start- og einvegssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spor med slutt- og kombinerte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spor med slutt- og avanserte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spor med slutt- og einvegssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spor med kombinerte og avanserte signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} spor med kombinerte og einvegssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spor med avanserte og einvegssignal -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} togstall +STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbane spor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbane spor med blokksignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbane spor med startsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbane spor med sluttsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbane spor med kombinerte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbane spor med avanserte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med einvegssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blokk- og startsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blokk- og sluttsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blokk- og kombinerte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blokk- og avanserte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blokk- og einvegssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med start- og sluttsignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane spor med start- og kombinerte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med start- og avanserte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbane spor med start- og einvegssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor med slutt- og kombinerte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med slutt- og avanserte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med slutt- og einvegssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinerte og avanserte signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinerte og einvegssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med avanserte og einvegssignal +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togstall STR_LAI_ROAD_DESCRIPTION_ROAD :Veg STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Veg med gatelykter @@ -2608,7 +2608,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Feltet eigast a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opphaveleg opphavsbeskytta av {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheiter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV}. Oversett til nynorsk av Thor Morten Skogrand med fleire. -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Lagre spel @@ -2823,8 +2823,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Forsøk på å STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} inneheld øydelagd grafikk. All øydelagd grafikk vil bli vist som raude spørsmålsteikn (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Inneheld fleire tilfelle av handling 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lest forbi slutten av pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Det nåværande grafikksettet manglar ein del bilete.{}Vennligst oppdater grafikksettet. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Det valde grafikksettet manglar nokre bilete.{}Vær venleg og forny grafikksettet.{}I og med at du spelar eit {YELLOW}utviklingsutkast av OpenTTD{WHITE} treng du òg eit {YELLOW}utviklingsutkast av grafikksettet{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Etterspurde GRF-ressursar ikkje tilgjengeleg (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} vart deaktivert av {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjend sprite layout-format (sprite {3:NUM}) @@ -3211,9 +3209,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treng: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Varer som ventar på å bli behandla: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Lagar: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Lagar: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3474,7 +3471,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} når g STR_REPLACE_VEHICLES_STOP :{BLACK}Stopp utskiftinga av køyretøy STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikk denne knappen for å avbryte utskiftinga av lokomotivet du har vald på venstresida -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Erstatter: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skift mellom tog- og vognerstatningsvindauget STR_REPLACE_ENGINES :Lokomotiv STR_REPLACE_WAGONS :Vogner diff --git a/src/lang/polish.txt b/src/lang/polish.txt index eda2b86426..234b4abe33 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -12,7 +12,7 @@ ##case d c b n m w -# $Id: polish.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: polish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2141,6 +2141,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Poszukaj STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Pokaż ustawienia SI / Game Script STR_INTRO_TOOLTIP_QUIT :{BLACK}Wyjdź z 'OpenTTD' +STR_INTRO_BASESET :{BLACK}Aktualnie używany podstawowy zestaw graficzny nie posiada {NUM} wymagan{P ego ych ych} sprite{P 'u 'ów 'ów}. Proszę poszukać aktualizacji dla zestawu podstawowego. STR_INTRO_TRANSLATION :{BLACK}Tej wersji językowej brakuje jeszcze {NUM} wpis{P "" y ów}. Możesz pomóc ulepszyć nam OpenTTD rejestrując się jako tłumacz. Szczegóły znajdziesz w pliku readme.txt. # Quit window @@ -2969,6 +2970,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nazwa po STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Akceptowany ładunek: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Typ torów: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limit prędkości linii kolejowej: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Drogowe ograniczenie prędkości: {LTBLUE}{VELOCITY} @@ -2981,29 +2983,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Pola STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zaśnieżony teren STR_LAI_CLEAR_DESCRIPTION_DESERT :Pustynia -STR_LAI_RAIL_DESCRIPTION_TRACK :{G=m}{STRING} odcinek -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} tor z semaforam blokowymi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} tor z semaforami wejściowymi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} tor z semaforem wyjściowym -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} tor z semaforami złożonymi (combo) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} tor z semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} tor z jednokierunkowymi semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} tor z semaforami blokowymi i semaforami wejścia -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} tor z semaforami blokowymi i semaforami wyjścia -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} tor z semaforami blokowymi i semaforami złożonymi (combo) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} tor z semaforami blokowymi i semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} tor z semaforami blokowymi i jednokierunkowymi semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} tor z semaforami wejścia i wyjścia -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} tor z semaforami wejścia i semaforami złożonymi (combo) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} tor z semaforami wejścia i semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} tor z semaforami wejścia i jednokierunkowymi semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} tor z semaforami wyjścia i semaforami złożonymi (combo) -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} tor z semaforami wyjścia i semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} tor z semaforami wyjścia i jednokierunkowymi semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} tor z semaforami złożonymi (combo) i semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} tor z semaforami złożonymi (combo) i jednokierunkowymi semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} tor z semaforami trasy i jednokierunkowymi semaforami trasy -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{G=f}Warsztaty - {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :{G=m}Tor kolejowy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Tor kolejowy z semaforam blokowymi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Tor kolejowy z semaforami wejściowymi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Tor kolejowy z semaforem wyjściowym +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Tor kolejowy z semaforami złożonymi (combo) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Tor kolejowy z semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Tor kolejowy z jednokierunkowymi semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Tor kolejowy z semaforami blokowymi i semaforami wejścia +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Tor kolejowy z semaforami blokowymi i semaforami wyjścia +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Tor kolejowy z semaforami blokowymi i semaforami złożonymi (combo) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Tor kolejowy z semaforami blokowymi i semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Tor kolejowy z semaforami blokowymi i jednokierunkowymi semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Tor kolejowy z semaforami wejścia i wyjścia +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Tor kolejowy z semaforami wejścia i semaforami złożonymi (combo) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Tor kolejowy z semaforami wejścia i semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Tor kolejowy z semaforami wejścia i jednokierunkowymi semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Tor kolejowy z semaforami wyjścia i semaforami złożonymi (combo) +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Tor kolejowy z semaforami wyjścia i semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Tor kolejowy z semaforami wyjścia i jednokierunkowymi semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Tor kolejowy z semaforami złożonymi (combo) i semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Tor kolejowy z semaforami złożonymi (combo) i jednokierunkowymi semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Tor kolejowy z semaforami trasy i jednokierunkowymi semaforami trasy +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{G=f}Warsztaty kolejowe STR_LAI_ROAD_DESCRIPTION_ROAD :Droga STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Droga z oświetleniem ulicznym @@ -3067,7 +3069,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren w posiada STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prawa Autorskie {COPYRIGHT} 1995 Chris Sawyer, Wszelkie prawa zastrzeżone STR_ABOUT_VERSION :{BLACK}OpenTTD wersja {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 Zespół OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 Zespół OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Zapisz grę @@ -3286,8 +3288,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Próba użycia STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} zawiera uszkodzoną teksturę. Wszystkie uszkodzone tekstury będą pokazane jako czerwony znak zapytania (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Zawiera wiele wpisów Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Odczyt poza obszar pseudo-sprite'u (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Aktualnie używany zestaw grafik jest niekompletny.{}Proszę zaktualizować podstawowy zestaw grafik -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}W aktualnie używanym podstawowym zestawie graficznym brakuje pewnej ilości sprite'ów.{}Proszę zaktualizowaćswój zestaw graficzny.{}Z powodu tego, że używasz {YELLOW}rozwojowej wersji OpenTTD{WHITE}, możesz potrzebować również {YELLOW}rozwojowej wersji podstawowego zestawu graficznego{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Potrzebne źródło GRF nie jest dostępne (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} został wyłączony przez {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Niepoprawny/nieznany format układu sprite'u (sprite {3:NUM}) @@ -3674,9 +3674,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Wymaga: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Ładunek oczekujący na przetworzenie: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3943,10 +3942,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kiedy STR_REPLACE_VEHICLES_STOP :{BLACK}Zatrzymaj zastępowanie STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Wciśnij ten przycisk jeśli nie chcesz zmieniać pojazdu zaznaczone po lewej stronie -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Zastępowanie: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Przejdź pomiędzy oknami zamiany lokomotyw i wagonów STR_REPLACE_ENGINES :Lokomotywy STR_REPLACE_WAGONS :Wagony +STR_REPLACE_ALL_RAILTYPE :Wszystkie pojazdy szynowe STR_REPLACE_HELP_RAILTYPE :{BLACK}Wybierz dla jakiego typu torów chcesz zastąpić lokomotywy STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Wyświetla typ pojazdu na jaki będzie zastąpiony pojazd zaznaczony po lewej stronie diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 01dba8d15b..0da0ae6658 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -11,7 +11,7 @@ ##gender n m f mp fp -# $Id: portuguese.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: portuguese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -845,6 +845,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} tem uma ordem nula STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} tem ordens duplicadas STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} tem uma ordem inválida no seu horário +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} tem um aeroporto nas ordens cuja pista de aterragem é muito curta STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} está a ficar velho STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} está a ficar muito velho @@ -1288,17 +1289,21 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Mostrar a popul STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grossura das linhas nos gráficos: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Largura da linha nos gráficos. Uma linha mais estreita é de leitura mais precisa, enquanto uma linha mais espessa é mais fácil de ver e as cores distinguem-se melhor. -STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de terra: {STRING} +STR_CONFIG_SETTING_LANDSCAPE :Cenário: {STRING} +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os estilos dos cenários definem a jogabilidade base, cada um com cargas e requerimentos diferentes para o desenvolvimento das cidades. NewGRF e Scripts de Jogo permitem um controlo mais refinado +STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de terreno: {STRING} +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador original é dependente do conjunto gráfico base, e compõe formas de terreno já afixadas. TerraGenesis é um gerador baseado no algoritmo de ruído de Perlin que permite definições mais refinadas STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING} +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Apenas TerraGenesis) Relevo do terreno STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade industrial: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e que nível deve ser mantido durante o jogo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre o limite do mapa e Refinarias de Petróleo: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias de petróleo são construídas apenas próximo da borda do mapa, isto é, na costa para mapas de ilha STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altura a neve começa em paisagens sub-árticas. A neve também afecta a geração de indústrias e os requisitos de crescimento das cidades -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rudeza do terreno (apenas TerraGenesis) : {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rudeza do terreno: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Apenas TerraGenesis) Escolhe a frequência de montes: paisagens macias têm menos montes e mais espalhados. Paisagens duras têm muitos montes, que podem parecer repetitivos STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito suave STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Suave @@ -1597,8 +1602,8 @@ STR_CONFIG_SETTING_LARGER_TOWNS :Proporção de STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de povoações que se tornarão cidades, logo cidades que começarão maiores e crescerão mais depressa STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 em {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial para dimensão da metrópole: {STRING} -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho relativo das cidades em relação ao tamanho normal das mesmas aquando o inicio do jogo +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial para a dimensão das metrópoles: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho relativo das metrópoles em relação ao tamanho normal das cidades aquando o início do jogo STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizar gráfico de distribuição a cada {STRING} dia{P 0:2 "" s} STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tempo entre recalculos subsequentes de cada gráfico. Cada recalculo calcula os planos para cada componente do gráfico. Isto significa que um valor X para essa configuração não indica que o gráfico será todo actualizado a cada X dias. Apenas alguns componentes serão. Quanto mais curto o definir, mais tempo será necessário ao CPU para o calcular. Quanto mais longo, mais tempo levará até que a distribuição da carga inicie em novas rotas. @@ -1661,13 +1666,23 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Métrico (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Localização +STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Gráficos STR_CONFIG_SETTING_SOUND :{ORANGE}Efeitos sonoros STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interface +STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Geral +STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Visualizadores STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Construção +STR_CONFIG_SETTING_ADVISORS :{ORANGE}Notícias / Assessores STR_CONFIG_SETTING_COMPANY :{ORANGE}Empresa +STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Contabilidade STR_CONFIG_SETTING_VEHICLES :{ORANGE}Veículos +STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Física STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Em rota +STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Limitações STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Desastres / Acidentes +STR_CONFIG_SETTING_GENWORLD :{ORANGE}Geração do mundo +STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Meio Ambiente +STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoridades STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Cidades STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrias STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuição de Carga @@ -1741,7 +1756,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Seleccio STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Mostrar opções de jogo STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostrar tabela de classificações -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Definições de Display +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostrar definições STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostrar definições de NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verificar conteúdo novo e actualizado para descarga STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostrar definições de IA e de script de jogo @@ -2587,29 +2602,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} linha -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} linha com sinais de bloqueio -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} linha com pre-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} linha com sinais de saída -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} linha com sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} linha com sinais de caminho -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} linha com sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} linha com bloqueio e pré-sinais -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} linha com bloqueio e sinais de saida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} linha com bloqueio e sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} linha com bloqueio e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} linha com bloqueio e sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} linha com pré-sinais e sinais de saida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} linha com pré-sinais e sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} linha com pré-sinais e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} linha com pré-sinais e sinais de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} linha com sinais de saida e sinais combinados -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} linha com sinais de saida e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} linha com sinais de saida e de sentido único -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} linha com sinais combinados e sinais de rota -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} linha com sinais combinados e sentido unico -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} linha com sinais de rota e de sentido unico -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} depósito de comboios +STR_LAI_RAIL_DESCRIPTION_TRACK :Caminhos-de-ferro linha +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Caminhos-de-ferro linha com sinais de bloqueio +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Caminhos-de-ferro linha com pre-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Caminhos-de-ferro linha com sinais de saída +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Caminhos-de-ferro linha com sinais combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Caminhos-de-ferro linha com sinais de caminho +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Caminhos-de-ferro linha com bloqueio e pré-sinais +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais de saida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Caminhos-de-ferro linha com bloqueio e sinais de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais de saida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Caminhos-de-ferro linha com pré-sinais e sinais de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Caminhos-de-ferro linha com sinais de saida e sinais combinados +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Caminhos-de-ferro linha com sinais de saida e sinais de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais de saida e de sentido único +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Caminhos-de-ferro linha com sinais combinados e sinais de rota +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais combinados e sentido unico +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Caminhos-de-ferro linha com sinais de rota e de sentido unico +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Caminhos-de-ferro depósito de comboios STR_LAI_ROAD_DESCRIPTION_ROAD :Estrada STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Estrada com iluminação @@ -2673,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno proprie STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 A equipa do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 A equipa do OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar Jogo @@ -2860,7 +2875,11 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir para STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Gráfico anterior STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceder ao gráfico normal anterior, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no início STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do gráfico seleccionado actualmente. O alinhamento é ignorado a desenhar este gráfico -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover o gráfico, mudando os desvios X e Y +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Desloca o gráfico, alterando os intervalos X e Y. Ctrl+Clique desloca o gráfico 8 unidades de uma só vez +STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Repor relativo +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Repor intervalos relativos atuais +STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Intervalo X: {NUM}, Intervalo Y: {NUM} (Absoluto) +STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}Intervalo X: {NUM}, Intervalo Y: {NUM} (Relativo) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Escolher gráfico STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Escolha um gráfico de qualquer lado no ecrã @@ -2888,8 +2907,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Tentativa de us STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um objecto gráfico corrompido. Todos os objectos gráficos corrompidos serão apresentados como um ponto de interrogação (?) vermelho. STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Action 8 - (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Leitura além dos limites do pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}O conjunto de gráficos base actual tem objectos gráficos em falta.{}Por favor faça a sua actualização. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}O conjunto de gráficos base actualmente em uso tem um conjunto de gráficos em falta.{}Por favor actualize o conjunto de gráficos base.{}Visto que está a usar uma {YELLOW}imagem de desenvolvimento do OpenTTD{WHITE}, poderá também precisar de {YELLOW}uma imagem dos gráficos base de desenvolvimento{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF pedidos não disponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de Gráfico Inválido ou desconhecido (sprite {3:NUM}) @@ -3276,9 +3293,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessá STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Carga aguardando processamento: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3338,6 +3354,7 @@ STR_GROUP_RENAME_TOOLTIP :{BLACK}Mudar o STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da autosubstituição global STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Apagar Grupo +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem a certeza de que quer apagar este grupo e quaisquer descendentes? STR_GROUP_ADD_SHARED_VEHICLE :Adic. veíc. partilh. STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos os veículos @@ -3538,7 +3555,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} quando STR_REPLACE_VEHICLES_STOP :{BLACK}Parar Subst. de Veículos STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pressione para parar a subsituição do tipo de motor que seleccionou à esquerda -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Trocando: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Alternar entre a janela de substituição de locomotivas e a janela de substituição de vagões STR_REPLACE_ENGINES :Locomotivas STR_REPLACE_WAGONS :Vagões @@ -3879,6 +3895,10 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viagem (sem pro STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Viajar no máximo a {2:VELOCITY} (sem programação) STR_TIMETABLE_TRAVEL_FOR :Viajar durante {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar por {STRING} no máximo a {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (durante {STRING}, sem programação) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (por {STRING}, sem programação) no máximo a {VELOCITY} +STR_TIMETABLE_STAY_FOR_ESTIMATED :(permanecer durante {STRING}, sem programação) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar durante {STRING}, sem programação) STR_TIMETABLE_STAY_FOR :e ficar durante {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viaja para {STRING} STR_TIMETABLE_DAYS :{COMMA} dia{P "" s} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 11ee3c5a89..7d12a26e98 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -10,7 +10,7 @@ ##grflangid 0x28 -# $Id: romanian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: romanian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1100,6 +1100,7 @@ STR_CONFIG_SETTING_TYPE_GAME_INGAME :Setări joc (st STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Setări companie (stocate în fişierele de salvare; afectează doar jocurile noi) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Setări companie (stocate în fişierul de salvare; afectează doar compania curentă) +STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Arată în lista de mai jos doar setările modificate STR_CONFIG_SETTING_RESTRICT_BASIC :Setări de bază (afişează numai setări importante) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Setări avansate (afişează majoritatea setărilor) @@ -1114,6 +1115,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Setări joc (st STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Setări joc (stocate în salvări; afectează doar jocul curent) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Setări companie (stocate în salvări; afectează doar jocurile noi) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Setări compenia (stocate în salvări; afectează doar compania curentă) +STR_CONFIG_SETTINGS_NONE :{WHITE}- Nespecificat - STR_CONFIG_SETTING_OFF :Inactiv STR_CONFIG_SETTING_ON :Activ @@ -1280,18 +1282,25 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Afișează popu STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosimea liniilor din grafice: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grosimea liniilor din grafice. O linie subțire este mai informativă, o linie mai groasă este mai ușor de văzut și are culorile mai usor de distins +STR_CONFIG_SETTING_LANDSCAPE :Peisaj: {STRING} +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Peisajele definesc scenariile de bază a jocului cu cerințe diferite pentru încărcături și dezvoltare a orașelor. NewGRF și scripturile de joc permit un control mai fin STR_CONFIG_SETTING_LAND_GENERATOR :Generator teren: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis +STR_CONFIG_SETTING_TERRAIN_TYPE :Tip teren: {STRING} +STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitatea industriei: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distanța maximă de la marginea hărții pentru rafinării: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinăriile de petrol vor fi construite doar la marginea hărţii, sau pe coastă, în cazul harţilor insulare STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Grosimea stratului de zăpadă: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Duritatea terenului (doar pt TerraGenesis) : {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Doar TerraGenesis) Alegeți frecvența dealurilor: Peisajele line au dealuri mai puține și mai întinse. Peisajele dure au multe dealuri și pot arăta repetitiv STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Foarte fin STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Fin STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Dur STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Foarte dur +STR_CONFIG_SETTING_VARIETY :Distribuția varietății: {STRING} STR_CONFIG_SETTING_TREE_PLACER :Algoritm amplasare arbori: {STRING} +STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Alegeți distribuția copacilor pe hartă: 'Original' plantează copacii dispersați uniform, 'Îmbunătățit' îi plantează grupat STR_CONFIG_SETTING_TREE_PLACER_NONE :Niciunul STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Îmbunătăţit @@ -1552,6 +1561,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT :Numărul maxim STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :dezactivat STR_CONFIG_SETTING_ZOOM_MIN :Nivelul maxim de apropiere imagine: {STRING} +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Nivelul maxim de apropiere a câmpului vizual. Luați aminte că nivelele înalte ridică necesarul de memorie STR_CONFIG_SETTING_ZOOM_MAX :Nivelul maxim de îndepărtare imagine: {STRING} STR_CONFIG_SETTING_ZOOM_LVL_MIN :x4 STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :x2 @@ -1579,7 +1589,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetric STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetric STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modalitatea de distribuire a pasagerilor: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simetric" înseamnă că aproximativ același număr de pasageri va fi transportat din stația A spre stația B, precum de la B la A. "asimetric" presupune transportul unui număr arbitrar de pasageri în fiecare direcție. "manual" înseamnă că repartizarea pasagerilor nu va fi automatizată. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modalitatea de distribuire a poştei: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simetric" înseamnă că aproximativ aceeași cantitate de poștă va fi expediată din stația A spre stația B, precum de la B la A. "asimetric" presupune expedierea de cantități arbitrare de poștă în fiecare direcție. "manual" înseamnă că repartizarea poștei nu va fi automatizată. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modalitatea de distribuire pentru clasa de cargo BLINDAT: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modalitatea de distribuire pentru alte clase de cargo: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Acurateţea distribuţiei: {STRING} @@ -1626,9 +1638,15 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Localizare STR_CONFIG_SETTING_SOUND :{ORANGE}Efecte sonore STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interfaţă +STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Câmpuri vizuale STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Construcţie +STR_CONFIG_SETTING_ADVISORS :{ORANGE}Știri / Consilieri +STR_CONFIG_SETTING_COMPANY :{ORANGE}Companie STR_CONFIG_SETTING_VEHICLES :{ORANGE}Vehicule STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Direcţionare +STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Dezastre / Accidente +STR_CONFIG_SETTING_GENWORLD :{ORANGE}Generare lume +STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Mediu STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Oraşe STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrii STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuţie cargo @@ -2537,6 +2555,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Încărcături acceptate: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limită viteză pe calea ferată: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Viteza limită a drumului: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Stânci @@ -2547,29 +2566,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Teren agricol STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Teren înzăpezit STR_LAI_CLEAR_DESCRIPTION_DESERT :Deşert -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} cale ferată -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} cale ferată cu semafoare -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} cale ferată cu presemafoare -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} cale ferată cu semafoare de ieșire -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} cale ferată cu semafoare combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} cale ferată cu semafoare de direcționare -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} cale ferată cu semafoare de direcționare unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} cale ferată cu semafoare și presemafoare -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} cale ferată cu semafoare și semafoare de ieșire -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} cale ferată cu semafoare și semafoare combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} cale ferată cu semafoare și semafoare de direcționare -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} cale ferată cu semafoare și semafoare de direcționare unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} cale ferată cu presemafoare și semafoare de ieșire -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} cale ferată cu presemafoare și semafoare combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} cale ferată cu presemafoare și semafoare de direcționare -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} cale ferată cu presemafoare și semafoare de direcționare unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} cale ferată cu semafoare de ieșire și semafoare combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} cale ferată cu semafoare de ieșire și semafoare direcționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} cale ferată cu semafoare de ieșire și semafoare direcționale unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} cale ferată cu semafoare combo și semafoare direcționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} cale ferată cu semafoare combo și semafoare direcționale unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} cale ferată cu semafoare direcționale şi semafoare directionale unidirecționale -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} depou trenuri +STR_LAI_RAIL_DESCRIPTION_TRACK :Cale ferată cale ferată +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Cale ferată cale ferată cu semafoare +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Cale ferată cale ferată cu presemafoare +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Cale ferată cale ferată cu semafoare de ieșire +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Cale ferată cale ferată cu semafoare combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Cale ferată cale ferată cu semafoare de direcționare +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare de direcționare unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Cale ferată cale ferată cu semafoare și presemafoare +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Cale ferată cale ferată cu semafoare și semafoare de ieșire +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Cale ferată cale ferată cu semafoare și semafoare combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Cale ferată cale ferată cu semafoare și semafoare de direcționare +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare și semafoare de direcționare unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Cale ferată cale ferată cu presemafoare și semafoare de ieșire +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Cale ferată cale ferată cu presemafoare și semafoare combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Cale ferată cale ferată cu presemafoare și semafoare de direcționare +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Cale ferată cale ferată cu presemafoare și semafoare de direcționare unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Cale ferată cale ferată cu semafoare de ieșire și semafoare combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Cale ferată cale ferată cu semafoare de ieșire și semafoare direcționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare de ieșire și semafoare direcționale unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Cale ferată cale ferată cu semafoare combo și semafoare direcționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare combo și semafoare direcționale unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Cale ferată cale ferată cu semafoare direcționale şi semafoare directionale unidirecționale +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Cale ferată depou trenuri STR_LAI_ROAD_DESCRIPTION_ROAD :Şosea STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Stradă iluminată @@ -2633,7 +2652,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren în propr STR_ABOUT_OPENTTD :{WHITE}Despre OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Toate drepturile rezervate STR_ABOUT_VERSION :{BLACK}OpenTTD versiunea {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Echipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Echipa OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salvează joc @@ -2652,6 +2671,7 @@ STR_SAVELOAD_SAVE_BUTTON :{BLACK}Salveaz STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Salvează cu numele selectat jocul curent STR_SAVELOAD_LOAD_BUTTON :{BLACK}Încarcă STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Încarcă salvarea selectată +STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Încarcă harta selectată STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalii joc STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nicio informaţie disponibilă STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} @@ -2754,6 +2774,8 @@ STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Mută î STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Mută fişierul NewGRF selectat mai sus în listă STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Mută în jos STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mută fişierul NewGRF selectat mai jos în listă +STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Upgrade +STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Actualizați fișierele NewGRF pentru care aveți o versiune mai nouă instalată STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}O listă a fişierelor NewGRF instalate STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Setează parametri @@ -2779,6 +2801,9 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Dezactivat STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatibil cu această versiune de OpenTTD # NewGRF save preset window +STR_SAVE_PRESET_CANCEL :{BLACK}Anulează +STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Nu schimba setarea implicită +STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Salvează setarea pe numele selectat # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Schimbă parametrii NewGRF @@ -2809,7 +2834,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Mergi la STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Imaginea precedentă STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Mergi la precedenta imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi şi reporneşte când s-a ajuns la sfârşit STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Reprezentarea imaginii curente. Aliniamentul este ignorat -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mişcă imaginea schimbând distanţele pe axele X şi Y +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mișcă imaginea schimbând distanțele pe axele X şi Y. Ctrl+Clic pentru mutarea imaginii câte opt unități la un pas STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Resetează relativele STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Resetază limitele relative actuale STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Limita X: {NUM}, Limita Y: {NUM} (Absolut) @@ -2841,8 +2866,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Încercare de a STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} conţine o imagine coruptă. Toate imaginile corupte vor fi afişate ca semne de întrebare (?) roşii STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Conține mai multe intrări pentru Acțiunea 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Citire după sfârşitul preudo-elementului grafic (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Unele imagini lipsesc din setul grafic de bază.{}Vă rugăm actualizaţi setul grafic de bază -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE} Pachetul grafic de bază folosit în acest moment este incomplet, un număr de sprite-uri lipsesc ..{}Trebuie să actualizezi acest pachet grafic de bază.{}Deoarece te joci o {YELLOW}versiune de dezvoltare a OpenTTD{WHITE}, este posibil să ai nevoie de o {YELLOW}versiune de dezvoltare a pachetului grafic de bază{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Resursele GRF solicitate nu sunt disponibile (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} a fost dezactivat de {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Structură necunoscută/invalidă pentru elementul grafic (sprite {3:NUM}) @@ -3227,9 +3250,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Are nevo STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Incarcatura in asteaptarea procesarii: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3489,7 +3511,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} când STR_REPLACE_VEHICLES_STOP :{BLACK}Oprire înlocuire vehicule STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Apasă aici pentru a opri înlocuirea motorului selectat în stânga -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Înlocuire: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Comutã între ferestrele de înlocuire motoare si vagoane STR_REPLACE_ENGINES :Motoare STR_REPLACE_WAGONS :Vagoane @@ -3825,11 +3846,14 @@ STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Schimba STR_TIMETABLE_TOOLTIP :{BLACK}Orar - click pe un ordin pentru a-l selecta STR_TIMETABLE_NO_TRAVEL :NU este calatorie -STR_TIMETABLE_NOT_TIMETABLEABLE :Călătorie (automat; orar generat de următorul ordin manual) +STR_TIMETABLE_NOT_TIMETABLEABLE :Călătorie (automat; programată după următoarea comandă manuală) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Calatorie (fara orar) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Mergi cu maxim {2:VELOCITY} (fără planificare) +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Călătoriți (neplanificat) cu maxim {2:VELOCITY} STR_TIMETABLE_TRAVEL_FOR :Calatorii pentru {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Mergi către {STRING} cu maxim {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Călătorie (pentru {STRING}, neplanificată) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Călătoriți (pentru {STRING}, neprogramat) cu cel mult {VELOCITY} +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(călătorie pentru {STRING}, neprogramată) STR_TIMETABLE_STAY_FOR :şi opreşte pentru {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :şi călătoreşte pentru {STRING} STR_TIMETABLE_DAYS :{COMMA} zi{P "" le} @@ -3958,6 +3982,8 @@ STR_AI_SETTINGS_START_DELAY :Perioada (în z STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}, fișier readme al {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}, lista de modificări a {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING}, licența fișierului {STRING} +STR_TEXTFILE_WRAP_TEXT :{WHITE}Încadrează textul +STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Încadrează textul ferestrei ca să fie vizibil integral, fără derulare STR_TEXTFILE_VIEW_README :{BLACK}Vezi fișierul readme STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Listă modificări STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenţă diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 2997e0be13..d9f4a843a6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -12,7 +12,7 @@ ##case m f n p nom gen dat acc abl pre -# $Id: russian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: russian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -363,7 +363,7 @@ STR_BUTTON_LOCATION :{BLACK}Обзо STR_BUTTON_RENAME :{BLACK}Переименовать STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Закрыть окно -STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Заголовок окна - тащите его для перемещения окна +STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Окна можно перетаскивать, схватив за заголовок STR_TOOLTIP_SHADE :{BLACK}Свернуть окно, оставив заголовок STR_TOOLTIP_DEBUG :{BLACK}Показать отладочную информацию NewGRF STR_TOOLTIP_DEFSIZE :{BLACK}Изменить размеры окна на значения по умолчанию. Ctrl+щелчок сохранит текущий размер как значение по умолчанию. @@ -396,9 +396,9 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|Q # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Длина: {NUM} -STR_MEASURE_AREA :{BLACK}Площадь: {NUM} x {NUM} +STR_MEASURE_AREA :{BLACK}Площадь: {NUM} × {NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Длина: {NUM}{}Разница высот: {HEIGHT} -STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Площадь: {NUM} x {NUM}{}Разница высот: {HEIGHT} +STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Площадь: {NUM} × {NUM}{}Разница высот: {HEIGHT} # These are used in buttons @@ -565,12 +565,12 @@ STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Строите ############ range ends here ############ range for road construction menu starts -STR_ROAD_MENU_ROAD_CONSTRUCTION :Строительство автомобильных коммуникаций -STR_ROAD_MENU_TRAM_CONSTRUCTION :Строительство трамвайных коммуникаций +STR_ROAD_MENU_ROAD_CONSTRUCTION :Строительство автомобильной инфраструктуры +STR_ROAD_MENU_TRAM_CONSTRUCTION :Строительство трамвайной инфраструктуры ############ range ends here ############ range for waterways construction menu starts -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Строительство водных коммуникаций +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Строительство инфраструктуры водного транспорта ############ range ends here ############ range for airport construction menu starts @@ -593,7 +593,7 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :История ############ range ends here ############ range for about menu starts -STR_ABOUT_MENU_LAND_BLOCK_INFO :Информация о земле +STR_ABOUT_MENU_LAND_BLOCK_INFO :Информация об участке земли STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Консоль STR_ABOUT_MENU_AI_DEBUG :Отладка ИИ / скриптов @@ -715,7 +715,7 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Стои STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Оплата за перевозку грузов STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Дней в пути -STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Оплата за доставку 10 единиц (10 000 литров) груза на расстояние в 20 клеток +STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Оплата за доставку 10 единиц (10{NBSP}000 литров) груза на расстояние в 20 клеток STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Показать все STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Спрятать все STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Показать все виды грузов на графике @@ -750,7 +750,7 @@ STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA} STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Подробная информация о компании ############ Those following lines need to be in this order!! -STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Кол-во ТС: +STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Количество ТС: STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Станции: STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Мин. прибыль: STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Мин. доход: @@ -758,15 +758,15 @@ STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Макс STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Доставлено: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Груз: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Деньги: -STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Заём: +STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Займ: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Всего: ############ End of order list -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Количество транспортных средств, принёсших доход в прошлом году. +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Количество транспортных средств, принёсших доход в прошлом году STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Количество обслуживаемых станций. Если несколько типов станций связаны в одну, они все учитываются отдельно. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Прибыль транспорта с самым низким доходом (среди транспортных средств старше 2-х лет) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Наименьший квартальный доход за последние 3 года STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Наибольший квартальный доход за последние 3 года -STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Кол-во груза, доставленного за последние 4 квартала +STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Количество груза, доставленного за последние 4 квартала STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Количество типов груза, доставленного за последний квартал STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Количество денег на банковском счету компании STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Размер займа, полученного этой компанией в банке @@ -775,9 +775,9 @@ STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Всег # Music window STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Музыкальный автомат STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLACK}Все -STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Старый Стиль -STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Новый Стиль -STR_MUSIC_PLAYLIST_EZY_STREET :{TINY_FONT}{BLACK}Уличный Стиль +STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Старый стиль +STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Новый стиль +STR_MUSIC_PLAYLIST_EZY_STREET :{TINY_FONT}{BLACK}Уличный стиль STR_MUSIC_PLAYLIST_CUSTOM_1 :{TINY_FONT}{BLACK}Пользоват. 1 STR_MUSIC_PLAYLIST_CUSTOM_2 :{TINY_FONT}{BLACK}Пользоват. 2 STR_MUSIC_MUSIC_VOLUME :{TINY_FONT}{BLACK}Громкость музыки @@ -801,7 +801,7 @@ STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Пере STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Выбор программы «Все треки» STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Выбор программы «Старый стиль музыки» STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Выбор программы «Новый стиль музыки» -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Выбрать музыкальную программу +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Выбор программы «Ezy Street» STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Выбор программы «Пользоват. 1» STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Выбор программы «Пользоват. 2» STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Вкл./Выкл. случайный выбор программы @@ -838,7 +838,7 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL.abl :транспо STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Магнат Века STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY.abl :Магнатом Века STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} -STR_HIGHSCORE_STATS :{BIG_FONT}«{STRING}» ({COMMA}) +STR_HIGHSCORE_STATS :{BIG_FONT}«{STRING}» ({COMMA}) STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}Директора компании «{COMPANY}» называют {STRING.abl}! STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME}, президент компании «{COMPANY}», заслужил титул «{STRING}»! @@ -943,8 +943,8 @@ STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLAC STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Взрыв нефтеперегонного завода вблизи г.{NBSP}{TOWN}! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Взрыв завода при подозрительных обстоятельствах вблизи г.{NBSP}{TOWN}! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}НЛО приземлилось возле г.{NBSP}{TOWN}! -STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Обвал на угольной шахте вызывает оползень в районе г.{NBSP}{TOWN}! -STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Потоп!{}По крайней мере {COMMA} человек{P "" а ""} признан{P "" о о} пропавшим{P "" и и} без вести в результате наводнения! +STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Обвал на угольной шахте вызвал оползень в районе г.{NBSP}{TOWN}! +STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Потоп!{}По крайней мере {COMMA} человек{P "" а ""} пропал{P "" о о} без вести в результате наводнения! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Транспортная компания в опасном положении! STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} будет продана или объявлена банкротом, если не улучшит финансовые показатели! @@ -964,7 +964,7 @@ STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}Предприятие «{STRING}» объявляет о скором закрытии! STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}{STRING} закрывается из-за проблем с поставками сырья! -STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}«{STRING}» объявляет о закрытии в связи с отсутствием деревьев в округе! +STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}«{STRING}» объявляет о закрытии в связи с полной вырубкой близлежащих лесов! STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Создана зона евро!{}{}Теперь в вашей стране в качестве единой валюты используется евро! STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Мировой спад{}{}Финансовые эксперты дают ужасные прогнозы в связи с кризисом экономики! @@ -989,7 +989,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}У ТС STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}У ТС «{VEHICLE}» недействительное задание STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}У ТС «{VEHICLE}» повторяющиеся задания STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}У ТС «{VEHICLE}» некорректный пункт назначения -STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} направлен{G 0 "" а о ы} в аэропорт со слишком короткой полосой +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} направлен{G 0 "" а о ы} в аэропорт со слишком короткой взлётно-посадочной полосой STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}ТС «{VEHICLE}» устарело STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}ТС «{VEHICLE}» сильно устарело @@ -1913,6 +1913,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Найт STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Изменить настройки ИИ / игрового скрипта STR_INTRO_TOOLTIP_QUIT :{BLACK}Выйти из OpenTTD +STR_INTRO_BASESET :{BLACK}В выбранном наборе базовой графики отсутствует {NUM} спрайт{P "" а ов}. Пожалуйста, обновите набор графики. STR_INTRO_TRANSLATION :{BLACK}На этот язык не переведен{P 0 а ы о} {NUM} строк{P а и ""}. Вы можете помочь проекту, зарегистрировавшись как переводчик. Инструкции в файле readme.txt. # Quit window @@ -2065,7 +2066,7 @@ STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Клиенты STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Клиентов сейчас/макс.{}Компаний сейчас/макс. -STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} +STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}×{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Размер карты STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Размер карты игры{}Нажмите для сортировки по площади STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Дата @@ -2082,7 +2083,7 @@ STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}ИНФ STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Клиенты: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} STR_NETWORK_SERVER_LIST_LANGUAGE :{SILVER}Язык: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Ландшафт: {WHITE}{STRING} -STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Размер карты: {WHITE}{COMMA}x{COMMA} +STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Размер карты: {WHITE}{COMMA}×{COMMA} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Версия сервера: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Адрес сервера: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Дата начала: {WHITE}{DATE_SHORT} @@ -2416,7 +2417,7 @@ STR_CONTENT_TYPE_GS_LIBRARY :Библиот # Content downloading progress window STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Загрузка контента... STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Запрашиваем файлы... -STR_CONTENT_DOWNLOAD_FILE :{WHITE}Сейчас скачивается {STRING} ({NUM} из {NUM}) +STR_CONTENT_DOWNLOAD_FILE :{WHITE}Идёт загрузка {STRING} ({NUM} из {NUM}) STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Загрузка завершена STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} из {BYTES} загружено ({NUM}%) @@ -2661,7 +2662,7 @@ STR_OBJECT_BUILD_CAPTION :{WHITE}Выбо STR_OBJECT_BUILD_TOOLTIP :{BLACK}Выберите создаваемый объект. При нажатом Shift - оценка стоимости постройки. STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Выберите класс объекта для строительства STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Предварительный просмотр объекта -STR_OBJECT_BUILD_SIZE :{BLACK}Размер: {GOLD}{NUM} x {NUM} клеток +STR_OBJECT_BUILD_SIZE :{BLACK}Размер: {GOLD}{NUM} × {NUM} клеток STR_OBJECT_CLASS_LTHS :Маяки STR_OBJECT_CLASS_TRNS :Передатчики @@ -2759,7 +2760,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Влад STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Владелец ж/д пути: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Администрация: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нет -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координаты: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING}) +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координаты: {LTBLUE}{NUM} × {NUM} × {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построено: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Класс станции: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станции: {LTBLUE}{STRING} @@ -2769,6 +2770,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Зона STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Принимает: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Тип ж/д полотна: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Макс. скорость ж/д: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Макс. скорость авто: {LTBLUE}{VELOCITY} @@ -2781,29 +2783,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поля STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Заснеженная земля STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустыня -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} путь -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} путь с сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} путь с входными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} путь с выходными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} путь с комбинированными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} путь с маршрутными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} путь с односторонними маршрутными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} путь с обычными и входными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} путь с обычными и выходными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} путь с обычными и комбиниров. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} путь с обычными и маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} путь с обычными и одностор. маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} путь с входными и выходными сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} путь с входными и комбинир. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} путь с входными и маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} путь с входными и одностор. маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} путь с выходными и комбиниров. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} путь с выходными и маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} путь с выходными и односторонн. маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} путь с комбинир. и маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} путь с комбинир. и односторонн. маршрутн. сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} путь с маршрутным и одностор. маршрутным сигналами -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING.n} депо +STR_LAI_RAIL_DESCRIPTION_TRACK :Ж/д путь +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Ж/д путь с сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Ж/д путь с входными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Ж/д путь с выходными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Ж/д путь с комбинированными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Ж/д путь с маршрутными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Ж/д путь с односторонними маршрутными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Ж/д путь с обычным и входным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Ж/д путь с обычным и выходным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Ж/д путь с обычными и комбинированными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Ж/д путь с обычными и маршрутными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Ж/д путь с обычным и односторонним маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ж/д путь с входным и выходным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Ж/д путь с входным и комбинированным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Ж/д путь с входными и маршрутными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Ж/д путь с входным и односторонним маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Ж/д путь с выходными и комбинированными сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Ж/д путь с выходным и маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Ж/д путь с выходным и односторонним маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Ж/д путь с комбинированным и маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Ж/д путь с комбинированным и односторонним маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Ж/д путь с маршрутным и односторонним маршрутным сигналами +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Ж/д депо STR_LAI_ROAD_DESCRIPTION_ROAD :Дорога STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Дорога с уличным освещением @@ -2867,7 +2869,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земля в STR_ABOUT_OPENTTD :{WHITE}Об OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинальные авторские права {COPYRIGHT} 1995 Chris Sawyer. Все права защищены. STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Команда разработчиков OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Команда разработчиков OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Сохранить игру @@ -2932,7 +2934,7 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Вруч STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Поворот карты: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Название карты: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер: -STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM} STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Максимальная высота карты STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Изменить высоту снеговой линии @@ -2953,7 +2955,7 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Изме STR_GENERATION_WORLD :{WHITE}Создание мира... STR_GENERATION_ABORT :{BLACK}Прервать STR_GENERATION_ABORT_CAPTION :{WHITE}Прервать создание игрового мира -STR_GENERATION_ABORT_MESSAGE :{YELLOW}Вы серьезно хотите прервать создание мира? +STR_GENERATION_ABORT_MESSAGE :{YELLOW}Вы действительно хотите прервать создание мира? STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Создание мира @@ -3086,8 +3088,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Попытка STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} содержит повреждённый спрайт. Все повреждённые спрайты будут показаны красным знаком вопроса (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Содержит несколько блоков «Action 8» (спрайт {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Чтение за концом псевдо-спрайта (спрайт {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}В текущем наборе базовой графики отсутствуют изображения некоторых объектов.{}Пожалуйста, обновите модуль базовой графики. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}В используемом наборе базовой графики отсутствуют некоторые изображения.{}Пожалуйста, обновите набор изображений.{}Так как у вас {YELLOW}тестовая версия OpenTTD{WHITE}, вам может понадобиться {YELLOW}тестовая версия графического набора{WHITE}. STR_NEWGRF_ERROR_GRM_FAILED :Запрошенные ресурсы GRF недоступны (спрайт {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} был отключён из-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недопустимый/неизвестный формат расположения спрайтов (спрайт {3:NUM}) @@ -3161,9 +3161,9 @@ STR_TOWN_POPULATION :{BLACK}Насе # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Мегаполис) -STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Население: {ORANGE}{COMMA}{BLACK} Зданий: {ORANGE}{COMMA} -STR_TOWN_VIEW_PASSENGERS_LAST_MONTH_MAX :{BLACK}Пассажиров за прошлый месяц: {ORANGE}{COMMA}{BLACK} макс.: {ORANGE}{COMMA} -STR_TOWN_VIEW_MAIL_LAST_MONTH_MAX :{BLACK}Почты за прошлый месяц: {ORANGE}{COMMA}{BLACK} макс.: {ORANGE}{COMMA} +STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Население: {ORANGE}{COMMA}{BLACK} Зданий: {ORANGE}{COMMA} +STR_TOWN_VIEW_PASSENGERS_LAST_MONTH_MAX :{BLACK}Пассажиров в прошлом месяце: {ORANGE}{COMMA}{BLACK}; макс.: {ORANGE}{COMMA} +STR_TOWN_VIEW_MAIL_LAST_MONTH_MAX :{BLACK}Почты в прошлом месяце: {ORANGE}{COMMA}{BLACK}; макс.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Груз, необходимый для роста города: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} требу{G 0 е е е ю}тся STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} требу{G 0 е е е ю}тся зимой @@ -3175,8 +3175,8 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Горо STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Город {RED}не{BLACK} развивается STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Уровень шума в городе: {ORANGE}{COMMA}{BLACK} макс: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Показать город в основном окне. Ctrl+щелчок - показать в дополнительном окне. -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Местные власти -STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Информация о местных властях +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Администрация +STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Взаимодействие с администрацией города STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Переименовать город STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Расширить @@ -3191,9 +3191,9 @@ STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Адми STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Рейтинг транспортных компаний STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Доступные действия: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Список возможных действий в этом городе - щёлкните для получения доп. сведений -STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Применить -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Выполнить выделенное действие в списке выше +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Список возможных действий в этом городе. Описание выбранного действия приводится ниже. +STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Выполнить +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Выполнить выбранное действие STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Малая рекламная кампания STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Средняя рекламная кампания @@ -3299,7 +3299,7 @@ STR_STATIOV_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинг STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Показать рейтинг станции -STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Месячный объём поставок и местный рейтинг: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Месячный объём перевозок и местный рейтинг: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Группировать @@ -3316,7 +3316,7 @@ STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHO STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} с этой станции STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_SHORT} через эту станцию STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} на эту станцию -STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} без пересадок +STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} без остановок STR_STATION_VIEW_GROUP_S_V_D :Откуда - Через - Куда STR_STATION_VIEW_GROUP_S_D_V :Откуда - Куда - Через @@ -3436,7 +3436,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Прод STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Компания STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Имя директора -STR_BUY_COMPANY_MESSAGE :{WHITE}Мы ищем транспортную компанию для присоединения к ней.{}{}Вы хотите купить {COMPANY} за {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Мы ищем потенциального покупателя для нашей компании.{}{}Не желаете ли Вы приобрести {COMPANY} за {CURRENCY_LONG}? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Инфраструктура «{COMPANY}» @@ -3462,7 +3462,7 @@ STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Спис # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Произведено за прошлый месяц: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Произведено в прошлом месяце: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показать предприятие в основном окне. Ctrl+щелчок - показать в дополнительном окне. STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}% @@ -3474,9 +3474,13 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Треб STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Требуется: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{CARGO_LONG} {BLACK}ожидает +STR_INDUSTRY_VIEW_ACCEPT_CARGO_TEXT :{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_TEXT :{YELLOW}{CARGO_LONG}{STRING} + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Груз, ожидающий переработки: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3747,10 +3751,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} ког STR_REPLACE_VEHICLES_STOP :{BLACK}Прекратить замену STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Прекратить замену транспорта -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Заменяем: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Переключение между окнами замены локомотивов и вагонов STR_REPLACE_ENGINES :Локомотивы STR_REPLACE_WAGONS :Вагоны +STR_REPLACE_ALL_RAILTYPE :Весь ж/д транспорт STR_REPLACE_HELP_RAILTYPE :{BLACK}Тип ж/д транспорта, подлежащего замене STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Транспорт, на который происходит замена @@ -3853,7 +3857,7 @@ STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надё STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Построен в {LTBLUE}{NUM} г.{BLACK} Стоимость: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Ёмкость: {LTBLUE}отсутствует{STRING} STR_VEHICLE_INFO_CAPACITY :{BLACK}Ёмкость: {LTBLUE}{CARGO_LONG}{3:STRING} -STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Ёмкость: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) +STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Ёмкость: {LTBLUE}{CARGO_LONG}{3:STRING} (×{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Ёмкость: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Выручка перевозки: {LTBLUE}{CURRENCY_LONG} @@ -3874,16 +3878,16 @@ STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Назв STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Название возд. судна # Extra buttons for train details windows -STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Построен в {LTBLUE}{NUM} г.{BLACK} Стоимость: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Стоимость: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Построен в {LTBLUE}{NUM} г. {BLACK}Стоимость: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Стоимость: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Общая загруженность состава: STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} (Всего: {CARGO_SHORT}) -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (×{NUM}) STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Пусто STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} из {STATION} -STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} из {STATION} (x{NUM}) +STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} из {STATION} (×{NUM}) STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Груз STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Показать сведения о перевозимых грузах @@ -4034,7 +4038,7 @@ STR_ORDER_IMPLICIT :(Автомат STR_ORDER_FULL_LOAD :(Полная погрузка) STR_ORDER_FULL_LOAD_ANY :(Полная погрузка любым грузом) -STR_ORDER_NO_LOAD :(Не грузиться) +STR_ORDER_NO_LOAD :(Не загружаться) STR_ORDER_UNLOAD :(Разгрузиться и забрать груз) STR_ORDER_UNLOAD_FULL_LOAD :(Разгрузиться и ждать полной загрузки) STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Разгрузиться и ждать полной загрузки любым грузом) @@ -4269,7 +4273,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<недосту STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Игра была сохранена в версии без поддержки трамваев. Все трамваи удалены. # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Генерация карты остановлена...{}... нет доступных мест для размещения городов +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Создание карты прекращено...{}... нет доступных мест для размещения городов STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... в этом сценарии нет городов STR_ERROR_PNGMAP :{WHITE}Не удалось загрузить ландшафт из PNG... @@ -4323,7 +4327,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Запр STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}... администрация города {TOWN} запрещает вам это делать STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Администрация г.{NBSP}{TOWN} запрещает постройку ещё одного аэропорта в городе STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Администрация г.{NBSP}{TOWN} не разрешает строительство аэропорта из-за высокого уровня шума. -STR_ERROR_BRIBE_FAILED :{WHITE}Ваша попытка дать взятку была раскрыта местным следователем +STR_ERROR_BRIBE_FAILED :{WHITE}Ваша попытка дать взятку была раскрыта следователем # Levelling errors STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Здесь невозможно повысить уровень земли... @@ -4363,7 +4367,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... не STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Города не будут строить дороги сами. Вы можете включить строительство дорог в разделе «Настройки -> Окр.{NBSP}среда -> Города». STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Идут дорожные работы... STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Невозможно уничтожить город:{}к нему относится станция или депо, либо невозможно очистить одну из занимаемых им клеток. -STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}...в центре города нет места для статуи +STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... в центре города нет места для статуи # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... слишком много предприятий @@ -4419,7 +4423,7 @@ STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Нево STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Невозможно удалить пассажирскую трамвайную остановку... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Невозможно удалить грузовую трамвайную остановку... STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Сначала удалите остановку -STR_ERROR_THERE_IS_NO_STATION :{WHITE}...здесь нет станции +STR_ERROR_THERE_IS_NO_STATION :{WHITE}... здесь нет станции STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Сначала снесите ж/д станцию STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Сначала снесите автобусную остановку @@ -4439,7 +4443,7 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Нево STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Невозможно удалить точку пути... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Сначала удалите точку пути -STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... буй на пути +STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... буй мешает STR_ERROR_BUOY_IS_IN_USE :{WHITE}... этот буй используется другой компанией! # Depot related errors @@ -4471,7 +4475,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неверны # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}ТС «{VEHICLE}» слишком длинное после замены STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Правила автозамены/обновления не были применены -STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(денег мало) +STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(недостаточно денег) # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Недопустимая комбинация путей @@ -4485,10 +4489,10 @@ STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Здес STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Не удалось удалить рельсы... STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Не удалось удалить сигнал... STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Невозможно преобразовать здесь сигнал... -STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...здесь нет железной дороги -STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...сигналы отсутствуют +STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... здесь нет железной дороги +STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... сигналы отсутствуют -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Здесь невозможно преобразовать тип рельса... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Здесь невозможно преобразовать тип рельсов... # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Сначала удалите дорогу @@ -4497,8 +4501,8 @@ STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Здес STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Здесь невозможно проложить трамвайные пути... STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Не удалось удалить дорогу... STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Не удалось удалить трамвайные пути... -STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...здесь нет дороги -STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...здесь нет трамвайных путей +STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... здесь нет дороги +STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... здесь нет трамвайных путей # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Здесь невозможно построить канал... @@ -4541,30 +4545,30 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... ту # Object related errors STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... слишком много объектов STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Невозможно построить объект... -STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Объект на пути -STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... штаб-квартира компании на пути +STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Объект мешает +STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... штаб-квартира компании мешает STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Невозможно купить эту землю... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... вы и так уже владеете этим! # Group related errors -STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Не удалось создать группу... -STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Не удалось удалить группу... -STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Не удалось переименовать группу... -STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Не удалось установить корректное вложение групп... -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Не удалось удалить весь транспорт из группы... -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Не удалось добавить транспорт в группу... -STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Не удалось добавить транспорт с общим маршрутом в группу... +STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Невозможно создать группу... +STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Невозможно удалить группу... +STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Невозможно переименовать группу... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Невозможно установить корректное вложение групп... +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Невозможно удалить весь транспорт из группы... +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Невозможно добавить транспорт в группу... +STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Невозможно добавить транспорт с общим маршрутом в группу... # Generic vehicle errors STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Поезд мешает -STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Автомобиль на пути -STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Корабль на пути -STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}ОН ЛЕТИТ! +STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Автомобиль мешает +STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Корабль мешает +STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Воздушное судно мешает STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Невозможно переоборудовать поезд... STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Невозможно переоборудовать автомобиль... -STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Не удалось переоборудовать корабль... -STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Не удалось переоборудовать самолёт... +STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Невозможно переоборудовать корабль... +STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Невозможно переоборудовать самолёт... STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Невозможно переименовать поезд... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Невозможно переименовать автомобиль... @@ -4573,28 +4577,28 @@ STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Нево STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Невозможно остановить/запустить поезд... STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Невозможно остановить/запустить автомобиль... -STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Не удалось остановить/запустить корабль... -STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Не удалось остановить/запустить авиатранспорт... +STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Невозможно остановить/запустить корабль... +STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Невозможно остановить/запустить авиатранспорт... -STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Не удалось отправить поезд в депо... +STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Невозможно отправить поезд в депо... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Невозможно отправить автомобиль в гараж... -STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Не удалось отправить корабль в док... -STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Не удалось отправить самолёт в ангар... +STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Невозможно отправить корабль в док... +STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Невозможно отправить самолёт в ангар... -STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Не удалось купить ж/д транспорт... +STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Невозможно купить ж/д транспорт... STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Невозможно купить автомобиль... -STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Не удалось купить корабль... -STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Не удалось купить воздушное судно... +STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Невозможно купить корабль... +STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Невозможно купить воздушное судно... STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Невозможно изменить название модели поезда... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Невозможно изменить название модели автомобиля... STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Невозможно изменить название модели корабля... STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Невозможно изменить название модели возд. судна... -STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Не удалось продать поезд... -STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Не удалось продать автомобиль... -STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Не удалось продать корабль... -STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Не удалось продать самолёт... +STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Невозможно продать поезд... +STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Невозможно продать автомобиль... +STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Невозможно продать корабль... +STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Невозможно продать самолёт... STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Локомотив и/или вагон недоступен STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Автотранспорт недоступен @@ -4602,7 +4606,7 @@ STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Кора STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Авиатранспорт недоступен STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Слишком много транспорта в игре -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Не удалось изменить частоту обслуживания... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Невозможно изменить частоту обслуживания... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... транспортное средство уничтожено @@ -4613,7 +4617,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Начн # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Невозможно игнорировать светофор. Опасно... -STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Не удалось развернуть поезд... +STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Невозможно развернуть поезд... STR_ERROR_TRAIN_START_NO_POWER :У поезда нет тяги STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Невозможно развернуть автомобиль... @@ -4626,12 +4630,12 @@ STR_ERROR_TOO_MANY_ORDERS :{WHITE}Слиш STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Невозможно вставить новое задание... STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Невозможно удалить это задание... STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Невозможно изменить это задание... -STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Не удалось переместить это задание... -STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не удалось пропустить текущее задание... -STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Не удалось перейти к выделенному заданию... +STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Невозможно переместить это задание... +STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Невозможно пропустить текущее задание... +STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Невозможно перейти к выделенному заданию... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... ТС не может достигнуть всех станций STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... ТС не может достигнуть этой станции -STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}...ТС с общим маршрутом не может достигнуть этой станции +STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... ТС с общим маршрутом не может достигнуть этой станции STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Невозможно использовать общий маршрут... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Невозможно создать индивидуальный маршрут... @@ -4947,7 +4951,7 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :Грузови STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :Почтовый фургон MPS STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Почтовый фургон Reynard STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Почтовый фургон Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :Почтовый фургон «MightyMover» +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :Почтовый фургон MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Почтовый фургон Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Почтовый фургон Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Цистерна Witcombe (нефть) diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 840e3ffd72..f929809f64 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -12,7 +12,7 @@ ##case nom big gen dat aku vok lok ins -# $Id: serbian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: serbian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2796,29 +2796,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Polja STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snegom prekrivena zemlja STR_LAI_CLEAR_DESCRIPTION_DESERT :Pustinja -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} kolosek -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} kolosek sa blok signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} kolosek sa predsignalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} kolosek sa izlaznom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} kolosek sa kombinovanom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} kolosek sa putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} kolosek sa jednosmernom putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} kolosek sa blok i predsignalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} kolosek sa blok i izlaznom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} kolosek sa blok i kombinovanom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} kolosek sa blok i putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} kolosek sa blok i jednosmernom putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} kolosek sa pred i izlaznom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} kolosek sa pred i kombinovanom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} kolosek sa pred i putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} kolosek sa pred i jednosmernom putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} kolosek sa izlaznom i kombinovanom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} kolosek sa izlaznom i putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} kolosek sa izlaznom i jednosmernom putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} kolosek sa kombinovanom i putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} kolosek sa kombinovanom i jednosmernom putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} kolosek sa putnom i jednosmernom putnom signalizacijom -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} železnički depo +STR_LAI_RAIL_DESCRIPTION_TRACK :Železnica kolosek +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železnica kolosek sa blok signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železnica kolosek sa predsignalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železnica kolosek sa izlaznom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Železnica kolosek sa kombinovanom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Železnica kolosek sa putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Železnica kolosek sa jednosmernom putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Železnica kolosek sa blok i predsignalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Železnica kolosek sa blok i izlaznom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Železnica kolosek sa blok i kombinovanom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Železnica kolosek sa blok i putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Železnica kolosek sa blok i jednosmernom putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Železnica kolosek sa pred i izlaznom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Železnica kolosek sa pred i kombinovanom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Železnica kolosek sa pred i putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Železnica kolosek sa pred i jednosmernom putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Železnica kolosek sa izlaznom i kombinovanom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Železnica kolosek sa izlaznom i putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Železnica kolosek sa izlaznom i jednosmernom putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Železnica kolosek sa kombinovanom i putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Železnica kolosek sa kombinovanom i jednosmernom putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Železnica kolosek sa putnom i jednosmernom putnom signalizacijom +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železnica železnički depo STR_LAI_ROAD_DESCRIPTION_ROAD :Put STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Kolovoz sa uličnom rasvetom @@ -2882,7 +2882,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemljište u po STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originalni kopirajt {COPYRIGHT} 1995 Chris Sawyer, Sva prava zadržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD tim # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Sačuvaj poziciju @@ -3101,8 +3101,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Pokušaj koriš STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sadrži neispravan sprajt. Svi neispravni sprajtovi će biti prikazani kao crveni znakovi pitanja (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Sadrži više Akcija 8 ulaza (sprajt {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Čitanje iza završetka pseudo-sprajta (sprajt {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Odabranom skupu osnovnih grafika nedostaje neki broj sprajtova.{}Molimo Vas da ga ažurirate -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Grafičkom setu koji je trenutno u upotrebi nedostaje određen broj sprajtova.{}Osvežite grafički set.{}S obzirom da igrate {YELLOW}razvojnu verziju OpenTTD-a{WHITE}, treba vam i {YELLOW}razvojna verzija grafičkog seta{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Traženi GRF resursi nisu dostupni (sprajt {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je isključen od strane {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Neispravan/nepoznat format prikazivanja sprajta (sprajt {3:NUM}) @@ -3489,9 +3487,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potražu STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING}, {STRING.aku}{STRING}, {STRING.aku}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Tovar koji čeka na obradu: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3768,7 +3765,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kada p STR_REPLACE_VEHICLES_STOP :{BLACK}Zaustavi Zamenu Vozila STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pritisnite kako bi se zaustavila zamena vrsta lokomotive označene sa leve strane -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Zamenjuje se: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Prebacuje između prikaza zamene lokomotiva i zamene vagona STR_REPLACE_ENGINES :Lokomotive STR_REPLACE_WAGONS :Vagoni diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 18b6524361..eabe1dc12d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -10,7 +10,7 @@ ##grflangid 0x56 -# $Id: simplified_chinese.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: simplified_chinese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :田地 STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :雪地 STR_LAI_CLEAR_DESCRIPTION_DESERT :沙漠 -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} 轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :有通过信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :有入口信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :有出口信号灯的{STRING} 轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :有复合信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :有路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} 有单向路径信号灯的轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :有通过信号灯和入口信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :有通过信号灯和出口信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :有通过信号灯和复合信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :有通过信号灯和路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :有通过信号灯和单向路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :有入口信号灯和出口信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :有入口信号灯和复合信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :有入口信号灯和路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :有入口信号灯和单向路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :有出口信号灯和复合信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :有出口信号灯和路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :有出口信号灯和单向路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :有复合信号灯和路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :有复合信号灯和单向路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :有路径信号灯和单向路径信号灯的{STRING}轨道 -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} 列车车库 +STR_LAI_RAIL_DESCRIPTION_TRACK :铁路 轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :有通过信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :有入口信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :有出口信号灯的铁路 轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :有复合信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :有路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :铁路 有单向路径信号灯的轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :有通过信号灯和入口信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :有通过信号灯和出口信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :有通过信号灯和复合信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :有通过信号灯和路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :有通过信号灯和单向路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :有入口信号灯和出口信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :有入口信号灯和复合信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :有入口信号灯和路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :有入口信号灯和单向路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :有出口信号灯和复合信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :有出口信号灯和路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :有出口信号灯和单向路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :有复合信号灯和路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :有复合信号灯和单向路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :有路径信号灯和单向路径信号灯的铁路轨道 +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :铁路 列车车库 STR_LAI_ROAD_DESCRIPTION_ROAD :公路 STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :带路灯的公路 @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司属地 STR_ABOUT_OPENTTD :{WHITE}关于 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留一切权力。 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD 团队 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD 团队 # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}保存游戏 @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :尝试使用非 STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} 含有损坏的图形元素{}所有损坏的图形元素{}将显示为红色的问号(?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :具有多个Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :图像读取时发生越界错误 (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}当前基础图形组缺失部分图片。{}请升级图形组。 -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}当前使用的基础图形包参数有误。{}请更新基础图形包。{}如果你正在使用 {YELLOW}OPENTTD的开发测试版{WHITE},你需要 {YELLOW}相应配套的基础图形包。{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :GRF源文件不可访问 (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} 被 {STRING} 禁用 STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :错误/未知的sprite输出格式 (sprite {3:NUM}) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}等待的货物: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} 变老 STR_REPLACE_VEHICLES_STOP :{BLACK}停止更新 STR_REPLACE_HELP_STOP_BUTTON :{BLACK}点击这里可以停止继续更新车辆 -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}替换项目: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}可以切换 机车/挂车 替换项目 STR_REPLACE_ENGINES :机车 STR_REPLACE_WAGONS :挂车 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index cf26f75e23..e94c26d2af 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -12,7 +12,7 @@ ##case g -# $Id: slovak.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: slovak.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2669,29 +2669,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Polia STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zasnežený terén STR_LAI_CLEAR_DESCRIPTION_DESERT :Púšť -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} trať -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} trať so signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} trať s pre-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} trať s exit-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} trať s combo-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} trať s path signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} trať s jednosmernými signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} trať s block a pre-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} trať s block a exit-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} trať s block a combo-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} trať s BLOCK a PATH signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} trať s block a jednosmernými signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} trať s pre- and exit-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} trať s pre- a combo-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} trať s pre- a path signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} trať s pred- a jednosmernými semafórmy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} trať s výstupnémi a kombinovanými semafórmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} trať s výstupnými semafórmi a semafórmi cesty -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} trať s výstupnými a jednosmernými semafórmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} trať s kombinovanými semafórmi a semafórmi cesty -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} trať s kombinovanými a jednosmernými semafórmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} trať so semáfórmi cesty a jednosmernými -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} vlakové depo +STR_LAI_RAIL_DESCRIPTION_TRACK :Železnica trať +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železnica trať so signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železnica trať s pre-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železnica trať s exit-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Železnica trať s combo-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Železnica trať s path signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Železnica trať s jednosmernými signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Železnica trať s block a pre-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Železnica trať s block a exit-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Železnica trať s block a combo-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Železnica trať s BLOCK a PATH signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Železnica trať s block a jednosmernými signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Železnica trať s pre- and exit-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Železnica trať s pre- a combo-signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Železnica trať s pre- a path signálmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Železnica trať s pred- a jednosmernými semafórmy +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Železnica trať s výstupnémi a kombinovanými semafórmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Železnica trať s výstupnými semafórmi a semafórmi cesty +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Železnica trať s výstupnými a jednosmernými semafórmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Železnica trať s kombinovanými semafórmi a semafórmi cesty +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Železnica trať s kombinovanými a jednosmernými semafórmi +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Železnica trať so semáfórmi cesty a jednosmernými +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železnica vlakové depo STR_LAI_ROAD_DESCRIPTION_ROAD :Cesta STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Cesta s lampami @@ -2755,7 +2755,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pôvodný copyright: {COPYRIGHT} 1995 Chris Sawyer, všetky práva vyhradené STR_ABOUT_VERSION :{BLACK}OpenTTD verzia {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 team OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Uložiť hru @@ -2974,8 +2974,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Pokus o použit STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} obsahuje poškodený sprite. Všetky poškodené sprajty budú zobrazené ako červený otáznik (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Obsahuje viacnásobné záznamy Action 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Čítanie za koncom pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}V používanej základnej grafickej sade chýbajú niektoré grafické objekty.{}Aktualizujte prosím základnú grafickú sadu. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Aktuálne používanej základnej sade grafiky chýba niekoľko spritov.{}Prosím zaktualizujte základnú sadu grafiky.{}Keďže hráte {YELLOW}vývojovú verziu OpenTTD{WHITE}, môžete tiež potrebovať{YELLOW}vývojovú verziu základnej sady grafiky{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Požadované GRF prostriedky nie sú dosupné (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} bol vypnutý {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Nesprávny/neznámy formát rozloženia sprite(ov) (sprite {3:NUM}) @@ -3362,9 +3360,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potrebuj STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Náklad cakajúci na spracovanie: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3625,7 +3622,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} ked je STR_REPLACE_VEHICLES_STOP :{BLACK}Zastaviť výmenu vozidiel STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Stlačte pre zastavenie výmeny lokomotívy vybranej z ľavého zoznamu -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Výmena: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Prepne medzi oknami na výmenu lokomotív a vagónov STR_REPLACE_ENGINES :Lokomotívy STR_REPLACE_WAGONS :Vagónov diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index ebeb557f8b..e4177849ce 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -11,7 +11,7 @@ ##case r d t -# $Id: slovenian.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: slovenian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2754,29 +2754,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Polja STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zasnežen teren STR_LAI_CLEAR_DESCRIPTION_DESERT :Puščava -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} tiri -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING}tiri s signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} tiri s pred-signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} tiri z izhodnimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} tiri s kombiniranimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} tiri s signali steze -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} tiri s signali za enosmerno stezo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} tiri z normalnimi in pred-signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} tiri z normalnimi in izhodnimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} tiri z normalnimi in kombiniranimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} tiri z normalnimi in steznimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} tiri z normalnimi in enosmernimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} tiri s pred in izhodnimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} tiri s pred in kombiniranimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} tiri s pred in steznimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} tiri s pred in enosmernimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} tiri z izhodnimi in kombiniranimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} tiri z izhodnimi in steznimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} tiri z izhodnimi in enosmernimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} tiri s kombiniranimi in steznimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} tiri s kombiniranimi in enosmernimi signali -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} tiri s steznimi in enosmernimi signali -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} železniška garaža +STR_LAI_RAIL_DESCRIPTION_TRACK :Železnica tiri +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železnicatiri s signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železnica tiri s pred-signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železnica tiri z izhodnimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Železnica tiri s kombiniranimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Železnica tiri s signali steze +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Železnica tiri s signali za enosmerno stezo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Železnica tiri z normalnimi in pred-signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Železnica tiri z normalnimi in izhodnimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Železnica tiri z normalnimi in kombiniranimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Železnica tiri z normalnimi in steznimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Železnica tiri z normalnimi in enosmernimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Železnica tiri s pred in izhodnimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Železnica tiri s pred in kombiniranimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Železnica tiri s pred in steznimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Železnica tiri s pred in enosmernimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Železnica tiri z izhodnimi in kombiniranimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Železnica tiri z izhodnimi in steznimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Železnica tiri z izhodnimi in enosmernimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Železnica tiri s kombiniranimi in steznimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Železnica tiri s kombiniranimi in enosmernimi signali +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Železnica tiri s steznimi in enosmernimi signali +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železnica železniška garaža STR_LAI_ROAD_DESCRIPTION_ROAD :Cesta STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Cesta z razsvetljavo @@ -2840,7 +2840,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ozemlje v lasti STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prvotne avtorske pravice {COPYRIGHT} 1995 Chris Sawyer, vse pravice pridržane STR_ABOUT_VERSION :{BLACK}OpenTTD različica {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 ekipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 ekipa OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Shrani igro @@ -3059,8 +3059,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Poskus uporabe STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} vsebuje eno poškodovano sličico. Vse poškodovane sličice se bodo prikazale kot rdeči vprašaji (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Vsebuje več Ukaz 8 vnosov (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Prebrana datoteka preko meje za sličice (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}V uporabljenem osnovnem setu grafik manjkajo sličice.{}Prosim, posodobi osnovni set grafik -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Trenutni set osnovnih grafik ne vsebuje določenih sličic. Posodobi osnovni set.{}Odkar igraš {YELLOW} razvojni pogled OpenTTD{WHITE}, nogoče potrebuješ tudi {YELLOW}razvojni pogled osnovnih grafik{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Zahtevani viri GRF niso na voljo (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je bil izklopljen zaradi {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Neveljaven/neznan format zapisa sličic (sprite {3:NUM}) @@ -3447,9 +3445,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potrebuj STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Tovor na čakanju obdelave: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvaja: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvaja: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3710,7 +3707,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} ko se STR_REPLACE_VEHICLES_STOP :{BLACK}Ustavi menjavo vozil STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Pritisni za zaustavitev zamenjave na levi izbranega tipa lokomotive -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Zamenjuje: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Preklop med okni za menjavo lokomotiv in vagonov STR_REPLACE_ENGINES :Lokomotive STR_REPLACE_WAGONS :Vagoni diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 20d3302bb8..5be54106b6 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -11,7 +11,7 @@ ##gender m f -# $Id: spanish.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: spanish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -111,7 +111,7 @@ STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} d STR_QUANTITY_MAIZE :{WEIGHT_LONG} de maíz STR_QUANTITY_FRUIT :{WEIGHT_LONG} de fruta STR_QUANTITY_DIAMONDS :{COMMA}{NBSP}bolsa{P "" s} de diamantes -STR_QUANTITY_FOOD :{WEIGHT_LONG} de alimento +STR_QUANTITY_FOOD :{WEIGHT_LONG} de alimentos STR_QUANTITY_PAPER :{WEIGHT_LONG} de papel STR_QUANTITY_GOLD :{COMMA}{NBSP}bolsa{P "" s} de oro STR_QUANTITY_WATER :{VOLUME_LONG} de agua @@ -229,10 +229,10 @@ STR_LIST_FILTER_TITLE :{BLACK}Patrón STR_LIST_FILTER_OSKTITLE :{BLACK}Escriba un patrón de filtrado STR_LIST_FILTER_TOOLTIP :{BLACK}Introduzca una palabra clave para filtrar la lista -STR_TOOLTIP_GROUP_ORDER :{BLACK}Seleccionar orden de agrupamiento -STR_TOOLTIP_SORT_ORDER :{BLACK}Seleccione ordenación (descendiente/ascendiente) -STR_TOOLTIP_SORT_CRITERIA :{BLACK}Seleccione criterio de orden -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Seleccione criterio de filtrado +STR_TOOLTIP_GROUP_ORDER :{BLACK}Selecciona orden de agrupamiento +STR_TOOLTIP_SORT_ORDER :{BLACK}Selecciona orden de clasificación (descendiente/ascendiente) +STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecciona orden de clasificación +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecciona criterio de filtrado STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_LOCATION :{BLACK}Sitio STR_BUTTON_RENAME :{BLACK}Renombrar @@ -468,7 +468,7 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de me ############ range ends here ############ range for about menu starts -STR_ABOUT_MENU_LAND_BLOCK_INFO :Información sobre terreno +STR_ABOUT_MENU_LAND_BLOCK_INFO :Información del terreno STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración de Script de Juego / IA @@ -660,7 +660,7 @@ STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Saltar a STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Saltar a la siguiente pista de la selección STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Detener música STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Comenzar música -STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Mueva los cursores para fijar volumen de música y efectos +STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Arrastre los controles deslizantes para ajustar el volumen de música y efectos STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Seleccionar programa 'todas las pistas' STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Seleccionar programa 'estilo antiguo' STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Seleccionar programa 'estilo moderno' @@ -978,7 +978,7 @@ STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Pantalla STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marca esta opción para jugar OpenTTD a pantalla completa STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resolución de pantalla -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Seleccione la resolución de pantalla a usar +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecciona la resolución de pantalla a usar STR_GAME_OPTIONS_RESOLUTION_OTHER :Otras STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Tamaño de la interfaz @@ -1431,7 +1431,7 @@ STR_CONFIG_SETTING_SOUND_AMBIENT :Ambiental: {STR STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Reproducir sonidos ambientales de terreno, industrias y municipios STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Deshabilitar construcción de infraestructuras cuando no haya vehículos apropiados disponibles: {STRING} -STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Cuando se activa, solamente se pueden construir infraestructuras si hay vehículos disponibles para ellas, previniendo un gasto innecesario de tiempo y dinero +STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Cuando se activa, solo pueden construirse infraestructuras si hay vehículos disponibles para ellas, previniendo un gasto innecesario de tiempo y dinero STR_CONFIG_SETTING_MAX_TRAINS :Número máximo de trenes por empresa: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Número máximo de trenes que una compañía puede tener STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Número máximo de automóviles por empresa: {STRING} @@ -1444,7 +1444,7 @@ STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Número máximo STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Desactivar trenes para el ordenador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Activar esta opción deshabilita la construcción de trenes para las IA STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desactivar vehículos de carretera para el ordenador: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Activar esta opción deshabilita la construcción de vehículos de carretra para las IA +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Activar esta opción deshabilita la construcción de vehículos de carretera para las IA STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Desactivar aeroplanos para el ordenador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activar esta opción deshabilita la construcción de aeronaves para las IA STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barcos para el ordenador: {STRING} @@ -1602,7 +1602,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS :Proporción de STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Número de pueblos que se convertirán en ciudades. Las ciudades comienzan siendo más grandes y crecen más rápido STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 de cada {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ninguna -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial tamaño de ciudad: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial del tamaño de ciudad: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamaño medio de las ciudades en relación a los pueblos normales al comienzo de la partida STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizar el grafo de distribución cada {STRING}{NBSP}día{P 0:2 "" s} @@ -1713,11 +1713,11 @@ STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... igno STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... ignorando NewGRF inválido '{STRING}': {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :no encontrado STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :inseguro para uso estático -STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :NewGRF de sistema +STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :NewGRF del sistema STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :incompatible con esta versión de OpenTTD STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :desconocido STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... el nivel de compresión '{STRING}' no es válido -STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... el formato de guardado '{STRING}' no está disponible. Revertiendo a '{STRING}' +STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... el formato de guardado '{STRING}' no está disponible. Revirtiendo a '{STRING}' STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignorando conjunto de gráficos base '{STRING}': no encontrado STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorando conjunto de sonidos base '{STRING}': no encontrado STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorando conjunto de música base '{STRING}': no encontrado @@ -2282,7 +2282,7 @@ STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Poner ob STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Leyenda de Movimientos de Carga STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todas STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ninguna -STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Seleccione las compañías a ser mostradas +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Seleccione las compañías a mostrar # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}sin uso @@ -2524,7 +2524,7 @@ STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Click pa STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nombre aleatorio STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Generar nuevo nombre -STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Tamaño municipio: +STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Tamaño del municipio: STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pequeña STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Mediana STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Grande @@ -2569,7 +2569,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Seleccio STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Permite seleccionar la industria a mostrar # Land area window -STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Información sobre el terreno +STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Información del terreno STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Coste de despeje: {LTBLUE}N/D STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Coste de despeje: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Beneficio cuando es limpiado: {LTBLUE}{CURRENCY_LONG} @@ -2590,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nombre d STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceptada: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de ferrocarril: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límite de velocidad del ferrocarril: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Límite de velocidad de carretera: {LTBLUE}{VELOCITY} @@ -2602,29 +2603,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Tierra cubierta por nieve STR_LAI_CLEAR_DESCRIPTION_DESERT :Desierto -STR_LAI_RAIL_DESCRIPTION_TRACK :Vía de {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} con señales de bloque -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} con señales de entrada -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} con señales de salida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} con señales combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} con señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} con señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} con señales de bloque y señales de entrada -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} con señales de bloque y señales de salida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} con señales de bloque y señales combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} con señales de bloque y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} con señales de bloque y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} con señales de entrada y señales de salida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} con señales de entrada y señales combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} con señales de entrada y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} con señales de entrada y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} con señales de salida y señales combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} con señales de salida y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} con señales de salida y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} con señales combo y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} con señales combo y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} con señales de ruta y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} depósito de tren +STR_LAI_RAIL_DESCRIPTION_TRACK :Vía de ferrocarril +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vía de ferrocarril con señales de bloque +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vía de ferrocarril con señales de entrada +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vía de ferrocarril con señales de salida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vía de ferrocarril con señales combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vía de ferrocarril con señales de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vía de ferrocarril con señales de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vía de ferrocarril con señales de bloque y de entrada +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vía de ferrocarril con señales de bloque y de salida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vía de ferrocarril con señales de bloque y combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vía de ferrocarril con señales de bloque y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vía de ferrocarril con señales de bloque y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ferrocarril con señales de entrada y señales de salida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vía de ferrocarril con señales de entrada y combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vía de ferrocarril con señales de entrada y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Ferrocarril con señales de entrada y señales de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vía de ferrocarril con señales de salida y combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vía de ferrocarril con señales de salida y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vía de ferrocarril con señales de salida y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vía de ferrocarril con señales combo y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vía de ferrocarril con señales combo y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vía de ferrocarril con señales de dirección y de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Ferrocarril depósito de tren STR_LAI_ROAD_DESCRIPTION_ROAD :Carretera STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Carretera con farolas @@ -2688,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright Original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 El equipo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 El equipo OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar Juego @@ -2907,8 +2908,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Intento de usar STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contiene un sprite corrupto. Todos los sprites corruptos serán mostrados como un interrogante rojo (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contiene múltiples entradas de Acción 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Lectura más allá del fin de un pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Al conjunto de gráficos base actualmente en uso le faltan algunos sprites.{}El conjunto de gráficos base debe ser actualizado -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Al conjunto de gráficos base actualmente en uso le faltan algunos sprites.{}El conjunto de gráficos base debe ser actualizado.{}Dado que estás jugando una {YELLOW}versión de desarrollo de OpenTTD{WHITE}, es posible que también necesites una {YELLOW}versión de desarrollo del conjunto de gráficos base{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF solicitados no disponibles (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} fue desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites inválido o desconocido (sprite {3:NUM}) @@ -3102,7 +3101,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Ninguna - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Seleccionar todos los tipos de estación -STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Seleccionar todos los tipos de carga (incluidas las que no están en espera) +STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Selecciona todos los tipos de carga (incluidas las que no están en espera) STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Ningún tipo de carga está esperando # Station view window @@ -3295,9 +3294,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requiere STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Carga esperando a ser procesada: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3321,7 +3319,7 @@ STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLA STR_VEHICLE_LIST_AVAILABLE_TRAINS :Trenes disponibles STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Vehículos de carretera disponibles STR_VEHICLE_LIST_AVAILABLE_SHIPS :Barcos disponibles -STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Aviones disponibles +STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Aeronaves disponibles STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver la lista de modelos disponibles para este tipo de vehículo STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Administrar lista @@ -3558,10 +3556,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} cuando STR_REPLACE_VEHICLES_STOP :{BLACK}Parar de reemplazar vehículos STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Presiona este botón para detener el reemplazo del vehículo situado a la izquierda -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Reemplazando: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Cambia entre las ventanas de cambio de vagón y locomotora STR_REPLACE_ENGINES :Locomotoras STR_REPLACE_WAGONS :Vagones +STR_REPLACE_ALL_RAILTYPE :Todos los vehículos ferroviarios STR_REPLACE_HELP_RAILTYPE :{BLACK}Seleccione tipo de ferrocarril para el que desea reemplazar locomotoras STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Muestra con qué vehículo está siendo reemplazado el vehículo de la izquierda @@ -3768,7 +3766,7 @@ STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Cambiar STR_ORDER_REFIT :{BLACK}Reformar STR_ORDER_REFIT_TOOLTIP :{BLACK}Selecciona el tipo de carga a reformar en esta orden. Ctrl+Click para eliminar la orden de reforma STR_ORDER_REFIT_AUTO :{BLACK}Reforma en la estación -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Seleccionar el tipo de carga a la que reformar en esta orden. Ctrl+Click elimina la orden de reforma. La reforma solamente puede llevarse a cabo si el vehículo lo permite +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selecciona el tipo de carga a reformar en esta orden. Ctrl+Click elimina la orden de reforma. La reforma solamente puede llevarse a cabo si el vehículo lo permite STR_ORDER_DROP_REFIT_AUTO :Carga fijada STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponible @@ -3961,9 +3959,9 @@ STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Nombre del script STR_AI_DEBUG_SETTINGS :{BLACK}Configuración STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Cambiar la configuración del script -STR_AI_DEBUG_RELOAD :{BLACK}Recarga la IA +STR_AI_DEBUG_RELOAD :{BLACK}Recargar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Elimina la IA, recarga el código y reinicia la IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activar/desactivar la pausa automática cuando un mensaje de log de la IA coincide con la cadena de parada +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activa/desactiva la pausa automática cuando un mensaje de log de la IA coincide con la cadena de parada STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Pausar con: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Pausar cuando el script registre esta cadena STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Cuando un mensaje de log de una IA coincide con esta cadena, el juego se pausa @@ -3980,7 +3978,7 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Uno de l STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La ventana de depuración de scripts solo está disponible para el servidor # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}Configuración de Scripts +STR_AI_CONFIG_CAPTION :{WHITE}Configuración de Scripts de Juego / IA STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script de Juego que será cargada en la próxima partida STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serán cargadas en la próxima partida STR_AI_CONFIG_HUMAN_PLAYER :Jugador Humano @@ -4077,7 +4075,7 @@ STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Archivo no legi STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :No se puede escribir en el archivo STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Comprobación de integridad de los datos fallida STR_GAME_SAVELOAD_NOT_AVAILABLE : -STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}El juego ha sido guardado en una versión sin soporte para tranvías. Todos los tranvías serán eliminados +STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}El juego se ha guardado en una versión sin soporte para tranvías. Todos los tranvías han sido eliminados # Map generation messages STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Generación de mapa abortada...{}... no hay localizaciones apropiadas para municipios @@ -4094,7 +4092,7 @@ STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... no s STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... la imagen es demasiado grande STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Alerta de escala -STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Cambiar demasiado el tamaño del mapa de origen no está recomendado. ¿Desea continuar con la generación? +STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}No es recomendable cambiar en exceso el tamaño del mapa original. ¿Desea continuar con la generación? # Soundset messages STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Solamente se encontró un conjunto de sonidos vacío. Si lo desea, instale un conjunto de sonidos a través del 'Contenido Online' @@ -4478,7 +4476,7 @@ STR_BASEMUSIC_NONE_DESCRIPTION :Un conjunto de # Town building names STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1 :Bloque alto de oficinas STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1 :Bloque de oficinas -STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Bloque de viviendas pequeño +STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Bloque de apartamentos pequeño STR_TOWN_BUILDING_NAME_CHURCH_1 :Iglesia STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1 :Gran bloque de oficinas STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Casas del municipio @@ -4615,10 +4613,10 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (D STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (Diésel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (Diésel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (Diésel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Eléctrica) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Eléctrica) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Eléctrica) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Eléctrica) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Eléctrico) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Eléctrico) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Eléctrico) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Eléctrico) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Vagón de Pasajeros STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Furgón de Correos STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Vagón de Carbón @@ -4630,7 +4628,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WOOD_TRUCK :Vagón de Mader STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_IRON_ORE_HOPPER :Vagoneta de Mineral de Hierro STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_STEEL_TRUCK :Vagón de Acero STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_ARMORED_VAN :Vagón Blindado -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FOOD_VAN :Vagón de Alimento +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FOOD_VAN :Vagón de Alimentos STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PAPER_TRUCK :Vagón de Papel STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COPPER_ORE_HOPPER :Vagoneta de Mineral de Cobre STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WATER_TANKER :Cisterna de Agua @@ -4660,7 +4658,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WOOD_TRUCK :Vagón de Mader STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_IRON_ORE_HOPPER :Vagoneta de Mineral de Hierro STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_STEEL_TRUCK :Vagón de Acero STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_ARMORED_VAN :Vagón Blindado -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Vagón de Alimento +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Vagón de Alimentos STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PAPER_TRUCK :Vagón de Papel STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COPPER_ORE_HOPPER :Vagoneta de Mineral de Cobre STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WATER_TANKER :Cisterna de Agua @@ -4676,10 +4674,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Vagón de Jugue STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Vagón de Pilas STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Vagón de Refrescos STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Vagón de Plásticos -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Eléctrica) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Eléctrica) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Eléctrica) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Eléctrica) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Eléctrico) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Eléctrico) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Eléctrico) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Vagón de Pasajeros STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Furgón de Correos @@ -4692,7 +4690,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Vagón de Mader STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Vagoneta de Mineral de Hierro STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Vagón de Acero STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Vagón Blindado -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Vagón de Alimento +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Vagón de Alimentos STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Vagón de Papel STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Vagoneta de Mineral de Cobre STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Cisterna de Agua @@ -4733,9 +4731,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Camión de Gana STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Camión de Mercancías Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Camión de Mercancías Craighead STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Camión de Mercancías Goss -STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Camión Granero Hereford -STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Camión Granero Thomas -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Camión Granero Goss +STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Camión de Grano Hereford +STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Camión de Grano Thomas +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Camión de Grano Goss STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :Camión Maderero Witcombe STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :Camión Maderero Foster STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Camión Maderero Moreland @@ -4748,9 +4746,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Camión de Acer STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Furgón Blindado Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Furgón Blindado Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Furgón Blindado Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Furgón de Comida Foster -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Furgón de Comida Perry -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Furgón de Comida Chippy +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Furgón de Alimentos Foster +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Furgón de Alimentos Perry +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Furgón de Alimentos Chippy STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Camión de Papel Uhl STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Camión de Papel Balogh STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :Camión de Papel MPS diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 7b4b2a7098..d6760eca4f 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -11,7 +11,7 @@ ##gender m f -# $Id: spanish_MX.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: spanish_MX.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -301,7 +301,7 @@ STR_SORT_BY_WAITING_TOTAL :Cargamento tota STR_SORT_BY_WAITING_AVAILABLE :Cargamento disponible en espera STR_SORT_BY_RATING_MAX :Valoración más alta de cargamento STR_SORT_BY_RATING_MIN :Valoración más baja de cargamento -STR_SORT_BY_ENGINE_ID :Id. de locomotora (orden clásico) +STR_SORT_BY_ENGINE_ID :EngineID (classic sort)Id. locomotora (orden clásico) STR_SORT_BY_COST :Costo STR_SORT_BY_POWER :Potencia STR_SORT_BY_TRACTIVE_EFFORT :Fuerza de tracción @@ -379,7 +379,7 @@ STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configuración STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opciones de transparencia STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nombres de pueblos STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nombres de estaciones -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar puestos guías +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar puntos guías STR_SETTINGS_MENU_SIGNS_DISPLAYED :Mostrar carteles propios STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Mostrar carteles y nombres del competidor STR_SETTINGS_MENU_FULL_ANIMATION :Animación completa @@ -893,7 +893,7 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecci ############ start of currency region STR_GAME_OPTIONS_CURRENCY_GBP :Libra británica (GBP) -STR_GAME_OPTIONS_CURRENCY_USD :Dólar americano (USD) +STR_GAME_OPTIONS_CURRENCY_USD :Dólar estadounidense (USD) STR_GAME_OPTIONS_CURRENCY_EUR :Euro (EUR) STR_GAME_OPTIONS_CURRENCY_JPY :Yen japonés (¥) STR_GAME_OPTIONS_CURRENCY_ATS :Chelín austríaco (ATS) @@ -1008,7 +1008,7 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}El modo # Custom currency window STR_CURRENCY_WINDOW :{WHITE}Moneda personalizada -STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Tasa de cambio: {ORANGE}{CURRENCY_LONG} = £ {COMMA} +STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Tasa de cambio: {ORANGE} {CURRENCY_LONG} = £ {COMMA} STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reducir el valor de la moneda por una libra (£) STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementar el valor de la moneda por una libra (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ajustar el valor de cambio de la moneda por una Libra (£) @@ -1027,7 +1027,7 @@ STR_CURRENCY_SET_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Establec STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Cambiar a euro antes STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Cambiar a euro después -STR_CURRENCY_PREVIEW :{LTBLUE}Vista previa: {ORANGE}{CURRENCY_LONG} +STR_CURRENCY_PREVIEW :{LTBLUE}Vista previa: {ORANGE} {CURRENCY_LONG} STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 libras (£) en la moneda STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Cambiar parámetro de moneda personalizada @@ -1148,7 +1148,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Costos de opera STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Nivel de los costos de mantenimiento y operación de vehículos e infraestructura STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidad de construcción: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Restringir la velocidad de las acciones de construcción de jugadores no humanos -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Descomposturas de vehículos: {STRING} +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Averías de vehículos: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controlar cada cuánto los vehículos con poco mantenimiento sufren fallas STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador de subsidio: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Establecer cuánto se paga por subsidios conectados @@ -1473,8 +1473,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de ma STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevas aeronaves, en caso de no definirse otro explícitamente STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantenimiento predeterminado para barcos: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevos barcos, en caso de no definirse otro explícitamente -STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento si las descomposturas están desactivadas: {STRING} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, los vehículos no recibirán mantenimiento si no pueden descomponerse +STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento si las averías están desactivadas: {STRING} +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, los vehículos no recibirán mantenimiento si no pueden averiarse STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad para vagones: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Al activarse, se tienen en cuenta los límites de velocidad de los vagones para decidir la máxima velocidad de un tren STR_CONFIG_SETTING_DISABLE_ELRAILS :Desactivar ferrocarriles eléctricos: {STRING} @@ -1762,6 +1762,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Revisar STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostrar configuración de scripts STR_INTRO_TOOLTIP_QUIT :{BLACK}Salir de 'OpenTTD' +STR_INTRO_BASESET :{BLACK}A los gráficos base elegidos les hace falta {NUM} spirte{P "" s}. Necesitan actualizarse. STR_INTRO_TRANSLATION :{BLACK}A esta traducción le falta{P 0 "" n} {NUM} cadena{P "" s}. Considera ayudar a mejorar OpenTTD convirtiéndote en traductor. Consulta el archivo readme.txt para más detalles. # Quit window @@ -2271,7 +2272,7 @@ STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Activar STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Activar o desactivar transparencia para árboles. Ctrl+Clic para excluir de tecla rápida 'X' STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Activar o desactivar transparencia para casas. Ctrl+Clic para excluir de tecla rápida 'X' STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Activar o desactivar transparencia para industrias. Ctrl+Clic para excluir de tecla rápida 'X' -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Activar o desactivar transparencia para edificios como estaciones, depósitos o puestos guías. Ctrl+Clic para excluir de tecla rápida 'X' +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Activar o desactivar transparencia para edificios como estaciones, depósitos o puntos guías. Ctrl+Clic para excluir de tecla rápida 'X' STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Activar o desactivar transparencia para puentes. Ctrl+Clic para excluir de tecla rápida 'X' STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Activar o desactivar transparencia para estructuras como faros o antenas. Ctrl+Clic para excluir de tecla rápida 'X' STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Activar o desactivar transparencia para catenaria. Ctrl+Clic para excluir de tecla rápida 'X' @@ -2302,7 +2303,7 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Provee: STR_JOIN_STATION_CAPTION :{WHITE}Ampliar estación STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Construir aparte -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir puestos guías +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir puntos guías STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir aparte # Rail construction toolbar @@ -2332,8 +2333,8 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientac STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Elegir la orientación del depósito de trenes # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Puesto guía -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Elegir el tipo de puesto guía +STR_WAYPOINT_CAPTION :{WHITE}Punto guía +STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Elegir el tipo de punto guía # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selección de estación @@ -2350,7 +2351,7 @@ STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Mostrar STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Construir el tipo de estación elegida STR_STATION_CLASS_DFLT :Estación predeterminada -STR_STATION_CLASS_WAYP :Puestos guías +STR_STATION_CLASS_WAYP :Puntos guías # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Selección de señales @@ -2431,7 +2432,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construi STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir esclusa. Mayús muestra una estimación del precio STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir astillero (para comprar y dar mantenimiento a barcos). Mayús muestra una estimación del precio STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir muelles. Ctrl activa la ampliación de estaciones. Mayús muestra una estimación del precio -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar boya para utilizar como puesto guía marítimo. Mayús muestra una estimación del precio +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar boya para utilizar como punto guía marítimo. Mayús muestra una estimación del precio STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir acueducto. Mayús muestra una estimación del precio STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definir cuerpo de agua.{}Crea un canal, a menos que se pulse Ctrl en un área al nivel del mar, en cuyo caso se inundarán los alrededores STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar ríos @@ -2590,6 +2591,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nombre d STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargamento recibido: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de vía: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límite de velocidad de ferrocarril: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Límite de velocidad de carretera: {LTBLUE}{VELOCITY} @@ -2602,29 +2604,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terreno nevado STR_LAI_CLEAR_DESCRIPTION_DESERT :Desierto -STR_LAI_RAIL_DESCRIPTION_TRACK :Vía de {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vía de {STRING} con señales de bloqueo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vía de {STRING} con señales de entrada -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vía de {STRING} con señales de salida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vía de {STRING} con señales de combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vía de {STRING} con señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vía de {STRING} con señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vía de {STRING} con señales de bloqueo y señales de entrada -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vía de {STRING} con señales de bloqueo y señales de salida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vía de {STRING} con señales de bloqueo y señales combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vía de {STRING} con señales de bloqueo y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vía de {STRING} con señales de bloqueo y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Vía de {STRING} con señales de entrada y señales de salida -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vía de {STRING} con señales de entrada y señales combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vía de {STRING} con señales de entrada y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Vía de {STRING} con señales de entrada y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vía de {STRING} con señales de salida y señales de combo -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vía de {STRING} con señales de salida y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vía de {STRING} con señales de salida y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vía de {STRING} con señales de combo y señales de ruta -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vía de {STRING} con señales de combo y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vía de {STRING} con señales de ruta y señales de ruta de un solo sentido -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito ({STRING}) +STR_LAI_RAIL_DESCRIPTION_TRACK :Vías férreas +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vías férreas con señales de bloqueo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vías férreas con señales de entrada +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vías férreas con señales de salida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vías férreas con señales combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vías férreas con señales de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vías férreas con señales de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vías férreas con señales de bloqueo y de entrada +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vías férreas con señales de bloqueo y de salida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vías férreas con señales de bloqueo y combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vías férreas con señales de bloqueo y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vías férreas con señales de bloqueo y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Vías férreas con señales de entrada y de salida +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vías férreas con señales de entrada y combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vías férreas con señales de entrada y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Vías férreas con señales de entrada y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vías férreas con señales de salida y combo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vías férreas con señales de salida y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vías férreas con señales de salida y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vías férreas con señales combo y de ruta +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vías férreas con señales combo y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vías férreas con señales de ruta y de ruta de un solo sentido +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito (trenes) STR_LAI_ROAD_DESCRIPTION_ROAD :Carretera STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Carretera con alumbrado @@ -2647,7 +2649,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estación de ca STR_LAI_STATION_DESCRIPTION_BUS_STATION :Parada de autobús STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Muelle STR_LAI_STATION_DESCRIPTION_BUOY :Boya -STR_LAI_STATION_DESCRIPTION_WAYPOINT :puesto guía +STR_LAI_STATION_DESCRIPTION_WAYPOINT :Punto guía STR_LAI_WATER_DESCRIPTION_WATER :Agua STR_LAI_WATER_DESCRIPTION_CANAL :Canal @@ -2688,7 +2690,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016, el equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017, el equipo de OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar partida @@ -2907,8 +2909,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Intento de usar STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contiene un sprite con errores. Todos los sprites con errores se muestran como un símbolo de interrogación rojo (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contiene múltiples entradas de Acción 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :La lectura excedió el límite de pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}A los gráficos base actualmente en uso les faltan algunos sprites.{}Los gráficos base deben ser actualizados -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}A los gráficos base actualmente en uso les faltan algunos sprites.{}Los gráficos base deben ser actualizados.{}Dado que esta es una {YELLOW}versión de desarrollo de OpenTTD{WHITE}, es posible que también se requiera una {YELLOW}versión de desarrollo de los gráficos base{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF solicitados no disponibles (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} fue desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites no válido o desconocido (sprite {3:NUM}) @@ -3172,12 +3172,12 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}No permi # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en ubicación del puesto guía. Ctrl+Clic abre una ventana de vista en dicha ubicación -STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambiar nombre de puesto guía +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en ubicación del punto guía. Ctrl+Clic abre una ventana de vista en dicha ubicación +STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambiar nombre de punto guía STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar la vista en la ubicación de la boya. Ctrl+Clic abre una ventana de vista en dicha ubicación STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Cambiar nombre de boya -STR_EDIT_WAYPOINT_NAME :{WHITE}Cambiar nombre de puesto guía +STR_EDIT_WAYPOINT_NAME :{WHITE}Cambiar nombre de punto guía # Finances window STR_FINANCES_CAPTION :{WHITE}Finanzas de {COMPANY} {BLACK}{COMPANY_NUM} @@ -3295,9 +3295,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requiere STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Cargamento esperando a ser procesado: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,10 +3557,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} cuando STR_REPLACE_VEHICLES_STOP :{BLACK}Dejar de reemplazar vehículos STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Presionar este botón para detener el reemplazo del vehículo situado a la izquierda -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Reemplazando: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Cambiar entre reemplazo de vagón y locomotora STR_REPLACE_ENGINES :Locomotoras STR_REPLACE_WAGONS :Vagones +STR_REPLACE_ALL_RAILTYPE :Todos los vehículos ferroviarios STR_REPLACE_HELP_RAILTYPE :{BLACK}Elegir el tipo de vías férreas para las que se desea reemplazar locomotoras STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar el vehículo que reemplazará al otro de la izquierda @@ -3620,7 +3619,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Activida STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Cargando/Descargando STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Partiendo STR_VEHICLE_STATUS_CRASHED :{RED}¡Accidentado! -STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Descompuesto +STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Averiado STR_VEHICLE_STATUS_STOPPED :{RED}Detenido STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Deteniéndose, {VELOCITY} STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Sin potencia @@ -3659,7 +3658,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {L STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potencia: {LTBLUE}{POWER}{BLACK} Velocidad máx.: {LTBLUE}{VELOCITY} {BLACK}F.T. máx.: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Utilidad este año: {LTBLUE}{CURRENCY_LONG} (año pasado: {CURRENCY_LONG}) -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Descomposturas desde el último mantenimiento: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Averías desde el último mantenimiento: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Construido: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacidad: {LTBLUE}Ninguna{STRING} @@ -3816,7 +3815,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ir al depósito STR_ORDER_GO_TO_NEAREST_HANGAR :Ir al hangar más cercano STR_ORDER_CONDITIONAL :Salto de orden condicional STR_ORDER_SHARE :Compartir órdenes -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden marcada o añadirla al final de la lista. Ctrl+Clic sobre una estación para establecer la orden a 'Cargar máx. cualquier carga', sobre un puesto guía para 'Sin paradas' y sobre un depósito para 'Mantenimiento' (esta última desactivará el mantenimiento automático). Ctrl+Clic sobre otro vehículo para hacer que ambos compartan siempre las mismas órdenes. Clic sobre un vehículo para copiar sus órdenes (sin compartirlas). +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden marcada o añadirla al final de la lista. Ctrl+Clic sobre una estación para establecer la orden a 'Cargar máx. cualquier carga', sobre un punto guía para 'Sin paradas' y sobre un depósito para 'Mantenimiento' (esta última desactivará el mantenimiento automático). Ctrl+Clic sobre otro vehículo para hacer que ambos compartan siempre las mismas órdenes. Clic sobre un vehículo para copiar sus órdenes (sin compartirlas). STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Ver todos los vehículos que comparten el mismo itinerario @@ -4241,15 +4240,15 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Primero STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Primero se debe demoler el aeropuerto # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Se amplía más de un puesto guía existente -STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Demasiado cerca de otro puesto guía +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Se amplía más de un punto guía existente +STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Demasiado cerca de otro punto guía -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}No se puede construir el puesto guía aquí... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}No se puede construir el punto guía aquí... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}No se puede colocar la boya aquí... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No se puede cambiar nombre del puesto guía... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No se puede cambiar nombre del punto guía... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}No se puede quitar el puesto guía de aquí... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Primero se debe retirar el puesto guía +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}No se puede quitar el punto guía de aquí... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Primero se debe retirar el punto guía STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... una boya obstaculiza STR_ERROR_BUOY_IS_IN_USE :{WHITE}... ¡boya en uso por otra empresa! @@ -4861,7 +4860,7 @@ STR_FORMAT_BUOY_NAME_SERIAL :Boya {TOWN} #{C STR_FORMAT_COMPANY_NUM :(Empresa {COMMA}) STR_FORMAT_GROUP_NAME :Grupo {COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING}, {0:TOWN} -STR_FORMAT_WAYPOINT_NAME :Puesto guía {TOWN} +STR_FORMAT_WAYPOINT_NAME :Punto guía, {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Puesto guía #{1:COMMA}, {0:TOWN} STR_FORMAT_DEPOT_NAME_TRAIN :Depósito de trenes, {TOWN} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c5b06f6d4c..f3eb203bd0 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -10,7 +10,7 @@ ##grflangid 0x2e -# $Id: swedish.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: swedish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Fält STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snötäckt mark STR_LAI_CLEAR_DESCRIPTION_DESERT :Öken -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} järnvägsspår -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} järnvägsspår med normal signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} järnvägsspår med försignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} järnvägsspår med utfartssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} järnvägsspår med kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} järnvägsspår med avancerad signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} järnvägsspår med avancerad envägssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} järnvägsspår med normal signal och försignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} järnvägsspår med normal signal och utfartssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} järnvägsspår med normal signal och kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} järnvägsspår med normal signal och avancerad signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} järnvägsspår med normal signal och avancerad envägssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} järnvägsspår med för- och utfartssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} järnvägsspår med för- och kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} järnvägsspår med försignal och avancerad signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} järnvägsspår med försignal och envägs avancerad signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} järnvägsspår med utfarts- och kombinationssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} järnvägsspår med utfartssignal och avancerad signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} järnvägsspår med utfartssignal och avancerad envägssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} järnvägsspår med kombinationssignal och avancerad signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} järnvägsspår med kombinationssignal och avancerad envägssignal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} järnvägsspår med avancerad signal och avancerad envägssignal -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} järvägsdepå +STR_LAI_RAIL_DESCRIPTION_TRACK :Järnväg järnvägsspår +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Järnväg järnvägsspår med normal signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Järnväg järnvägsspår med försignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Järnväg järnvägsspår med utfartssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Järnväg järnvägsspår med kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Järnväg järnvägsspår med avancerad signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Järnväg järnvägsspår med avancerad envägssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Järnväg järnvägsspår med normal signal och försignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Järnväg järnvägsspår med normal signal och utfartssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Järnväg järnvägsspår med normal signal och kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Järnväg järnvägsspår med normal signal och avancerad signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Järnväg järnvägsspår med normal signal och avancerad envägssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Järnväg järnvägsspår med för- och utfartssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Järnväg järnvägsspår med för- och kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Järnväg järnvägsspår med försignal och avancerad signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Järnväg järnvägsspår med försignal och envägs avancerad signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Järnväg järnvägsspår med utfarts- och kombinationssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Järnväg järnvägsspår med utfartssignal och avancerad signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Järnväg järnvägsspår med utfartssignal och avancerad envägssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Järnväg järnvägsspår med kombinationssignal och avancerad signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Järnväg järnvägsspår med kombinationssignal och avancerad envägssignal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Järnväg järnvägsspår med avancerad signal och avancerad envägssignal +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Järnväg järvägsdepå STR_LAI_ROAD_DESCRIPTION_ROAD :Väg STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Väg med gatubelysning @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Mark som ägs a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Ursprunglig äganderätt {COPYRIGHT} 1995 Chris Sawyer, Alla rättigheter hävdas STR_ABOUT_VERSION :{BLACK}OpenTTD-version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD-teamet # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spara spel @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Försökt att a STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller en skadad bild. Alla korrupta bilder kommer att visas som ett rött frågetecken (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Innehåller flera Action 8 (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Läste förbi slutet av pseudo-spriteobjekt (spriteobjekt {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Det aktiva grafikpaketet saknar ett antal bilder.{}Var vänlig och uppdatera grafikpaketet -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Det aktiva grafikpaketet saknar ett antal bilder.{}Var vänlig och uppdatera grafikpaketet.{}Eftersom du spelar en {YELLOW}utvecklings-version av OpenTTD{WHITE}, så kan du även behöva en {YELLOW}utvecklings-version av basgrafikpaketet{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Efterfrågade GRF-resurser är inte tillgängliga (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} har inaktiverats av {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Felaktig/okänd layout-format av spriteobjekt (spriteobjekt {3:NUM}) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kräver: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Last som väntar på att bli behandlad: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} vid h STR_REPLACE_VEHICLES_STOP :{BLACK}Sluta byta ut fordon STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Tryck för att sluta byta ut fordonstypen vald på vänster sida -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Ersätter: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Växla mellan lok- och vagnersättningsfönster STR_REPLACE_ENGINES :Lok STR_REPLACE_WAGONS :Vagnar diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 64ad3431b1..1baa96c7b6 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -10,7 +10,7 @@ ##grflangid 0x0a -# $Id: tamil.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: tamil.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2292,29 +2292,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :வயல்வ STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :பனி-படர்ந்த நிலம் STR_LAI_CLEAR_DESCRIPTION_DESERT :பாலைவனம் -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} தடம் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} தடம் கட்ட சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} தடம் முன் சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} தடம் வெளியேறு சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} தடம் இணைந்த சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} தடம் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} தடம் ஒருவழிப் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} தடம் கட்டம் மற்றும் முன் சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} தடம் கட்டம் மற்றும் வெளியேறு சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} தடம் கட்டம் மற்றும் இணைந்த சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} தடம் கட்டம் மற்றும் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} தடம் கட்டம் மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} தடம் முன் மற்றும் வெளியேறு சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} தடம் முன் மற்றும் இணைந்த சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} தடம் முன் மற்றும் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} தடம் முன் மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} தடம் வெளியேறு மற்றும் இணைந்த சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} தடம் வெளியேறு மற்றும் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} தடம் வெளியேறு மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} தடம் இணைந்த மற்றும் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} தடம் இணைந்த மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} தடம் பாதை மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} இரயில் பணிமனை +STR_LAI_RAIL_DESCRIPTION_TRACK :இரயில்வே தடம் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :இரயில்வே தடம் கட்ட சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :இரயில்வே தடம் முன் சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :இரயில்வே தடம் வெளியேறு சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :இரயில்வே தடம் இணைந்த சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :இரயில்வே தடம் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :இரயில்வே தடம் ஒருவழிப் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :இரயில்வே தடம் கட்டம் மற்றும் முன் சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :இரயில்வே தடம் கட்டம் மற்றும் வெளியேறு சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :இரயில்வே தடம் கட்டம் மற்றும் இணைந்த சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :இரயில்வே தடம் கட்டம் மற்றும் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :இரயில்வே தடம் கட்டம் மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :இரயில்வே தடம் முன் மற்றும் வெளியேறு சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :இரயில்வே தடம் முன் மற்றும் இணைந்த சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :இரயில்வே தடம் முன் மற்றும் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :இரயில்வே தடம் முன் மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :இரயில்வே தடம் வெளியேறு மற்றும் இணைந்த சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :இரயில்வே தடம் வெளியேறு மற்றும் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :இரயில்வே தடம் வெளியேறு மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :இரயில்வே தடம் இணைந்த மற்றும் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :இரயில்வே தடம் இணைந்த மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :இரயில்வே தடம் பாதை மற்றும் ஒருவழிப் பாதை சிக்னல்களுடன் +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :இரயில்வே இரயில் பணிமனை STR_LAI_ROAD_DESCRIPTION_ROAD :சாலை STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :தெரு விளக்குகளுடன் சாலை @@ -2378,7 +2378,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :நிறுவ STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ஐ பற்றி STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}அசல் உரிமைகள் {COPYRIGHT} 1995 கிறிஸ் சாயர், எல்லா உரிமைகளும் பதிவுசெய்யப்பட்டது STR_ABOUT_VERSION :{BLACK}OpenTTD பதிப்பு {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD குழுமம் +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD குழுமம் # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}ஆட்டத்தை பதிவு செய் @@ -2912,9 +2912,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}தே STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}பதனிப்பட காத்திருக்கும் சரக்கு: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}தயாரிப்பு: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}தயாரிக்கிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3142,7 +3141,6 @@ STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}எந STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} காலாவதியான பிறகு STR_REPLACE_VEHICLES_STOP :{BLACK}வாகனங்களை மாற்றுவதை நிறுத்தவும் -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}மாற்றல்: {ORANGE}{STRING} STR_REPLACE_ENGINES :பொறிகள் STR_REPLACE_WAGONS :வாகனங்கள் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 4edc36f061..05c0534fda 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -10,7 +10,7 @@ ##grflangid 0x42 -# $Id: thai.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: thai.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -250,6 +250,7 @@ STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}ทำ # Show engines button +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :ถ้าได้อนุญาตที่ปุ่มนี้แล้ว อากาศยานที่ซ่อนจะถูกแสดงออกมา # Query window STR_BUTTON_DEFAULT :{BLACK}ค่าปกติ @@ -970,6 +971,7 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}คว STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}เลือกความละเอียดของหน้าจอที่จะใช้ STR_GAME_OPTIONS_RESOLUTION_OTHER :อื่นๆ +STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}ขนาดของแผงควบคุม STR_GAME_OPTIONS_BASE_GRF :{BLACK}ตั้งค่า Graphic พื้นฐาน @@ -1086,6 +1088,7 @@ STR_CONFIG_SETTING_TYPE_COMPANY_MENU :ตั้งค STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :ตั้งค่าองค์กร (ถูกเก็บไว้ในการบันทึกเกม; มีผลเฉพาะเกมปัจจุบัน) STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}หมวดหมู่: +STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}ชนิด: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}จำกัดรายการด้านล่างให้แสดงเฉพาะการตั้งค่าที่มีการเปลี่ยนแปลง STR_CONFIG_SETTING_RESTRICT_BASIC :ตั้งค่าพื้นฐาน STR_CONFIG_SETTING_RESTRICT_ADVANCED :ตั้งค่าขั้นสูง @@ -1270,6 +1273,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :โรงกล STR_CONFIG_SETTING_SNOWLINE_HEIGHT :ระดับความสูงแนวหิมะ: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :ควบคุมความสูงเริ่มต้นของหิมะบนพื้นภูมิทัศน์อาร์ติคย่อยๆ, หิมะยังมีผลการสร้างอุตสาหกรรม และการเติบโตของเมือง STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :ความหยาบของพื้นที่ (เฉพาะ TerraGenesis): {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choose the frequency of hills: Smooth landscapes have fewer, more wide-spread hills. Rough landscapes have many hills, which may look repetitive STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :ราบเรียบมาก STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :ราบเรียบ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :หยาบ @@ -1626,6 +1630,7 @@ STR_CONFIG_SETTING_SOUND :{ORANGE}เส STR_CONFIG_SETTING_INTERFACE :{ORANGE}ส่วนเชื่อมต่อผู้ใช้ STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}การก่อสร้าง STR_CONFIG_SETTING_VEHICLES :{ORANGE}ยานพาหนะ +STR_CONFIG_SETTING_VEHICLES_PHYSICS :กายภาพ STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}การค้นหาเส้นทางของพาหนะ STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}สิ่งแวดล้อม STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}เมือง @@ -1701,6 +1706,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}เล STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}แสดงตัวเลือกเกม STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}แสดงตารางคะแนนสูงสุด +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}การตั้งค่า หน้าจอ STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}แสดงการกำหนดค่า NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}ตรวจสอบเนื้อหาใหม่และการปรับปรุงสำหรับดาวโหลด STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}แสดงการตั้งค่า AI/Game script @@ -2543,29 +2549,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :ทุ่งห STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :พื้นที่หิมะปกคลุม STR_LAI_CLEAR_DESCRIPTION_DESERT :ทะเลทราย -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} ราง -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING}ทางรถไฟกับ Block Signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING}ทางรถไฟกับ Pre-Signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING}ทางรถไฟกับ Exit-Signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING}ทางรถไฟกับ Combo-Signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING}ทางรถไฟกับ Path Signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING}ทางรถไฟกับ Path Signal แบบเดินทางเดียว -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING}ทางรถไฟกับ Block และ Pre-Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING}ทางรถไฟกับ Block และ Exit-Signal -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING}ทางรถไฟกับ Block และ Combo-Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING}ทางรถไฟกับ Block และ Path Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING}ทางรถไฟกับ Block และ Path Signals แบบเดินรถทางเดียว -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING}ทางรถไฟกับ Pre- และ Exit-Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING}ทางรถไฟกับ Pre- และ Combo-Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING}ทางรถไฟกับ Pre- และ Path Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING}ทางรถไฟและ Pre- และ Path Signals แบบเดินรถทางเดียว -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING}ทางรถไฟกับ Exit- และ Combo-Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING}ทางรถไฟกับ Exit- และ Path Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING}ทางรถไฟและ Exit- และ Path Signals แบบเดินรถทางเดียว -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING}ทางรถไฟและ Combo- และ Path Signals -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING}ทางรถไฟและ Combo- และ Path Signals แบบเดินรถทางเดียว -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING}ทางรถไฟกับ Path และ Path Signals แบบเดินรถทางเดียว -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} โรงซ่อมบำรุงรถไฟ +STR_LAI_RAIL_DESCRIPTION_TRACK :รางรถไฟ ราง +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :รางรถไฟทางรถไฟกับ Block Signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :รางรถไฟทางรถไฟกับ Pre-Signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :รางรถไฟทางรถไฟกับ Exit-Signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :รางรถไฟทางรถไฟกับ Combo-Signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :รางรถไฟทางรถไฟกับ Path Signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :รางรถไฟทางรถไฟกับ Path Signal แบบเดินทางเดียว +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :รางรถไฟทางรถไฟกับ Block และ Pre-Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :รางรถไฟทางรถไฟกับ Block และ Exit-Signal +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :รางรถไฟทางรถไฟกับ Block และ Combo-Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :รางรถไฟทางรถไฟกับ Block และ Path Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :รางรถไฟทางรถไฟกับ Block และ Path Signals แบบเดินรถทางเดียว +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :รางรถไฟทางรถไฟกับ Pre- และ Exit-Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :รางรถไฟทางรถไฟกับ Pre- และ Combo-Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :รางรถไฟทางรถไฟกับ Pre- และ Path Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :รางรถไฟทางรถไฟและ Pre- และ Path Signals แบบเดินรถทางเดียว +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :รางรถไฟทางรถไฟกับ Exit- และ Combo-Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :รางรถไฟทางรถไฟกับ Exit- และ Path Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :รางรถไฟทางรถไฟและ Exit- และ Path Signals แบบเดินรถทางเดียว +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :รางรถไฟทางรถไฟและ Combo- และ Path Signals +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :รางรถไฟทางรถไฟและ Combo- และ Path Signals แบบเดินรถทางเดียว +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :รางรถไฟทางรถไฟกับ Path และ Path Signals แบบเดินรถทางเดียว +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :รางรถไฟ โรงซ่อมบำรุงรถไฟ STR_LAI_ROAD_DESCRIPTION_ROAD :ถนน STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :ถนนพร้อมไฟถนน @@ -2629,7 +2635,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :บริษั STR_ABOUT_OPENTTD :{WHITE}เกี่ยวกับ OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}ลิขสิทธิ์เดิม {COPYRIGHT} ค.ศ.1995 ของ Chris Sawyer, สงวนลิขสิทธิ์ STR_ABOUT_VERSION :{BLACK}OpenTTD รุ่นที่ {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2016 ของ The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2017 ของ The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}บันทึกเกม @@ -2663,6 +2669,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}จำนวนเมือง STR_MAPGEN_DATE :{BLACK}วันที่: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}จำนวนอุตสาหกรรม: +STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}ขนาดความสูงของแผนที่สูงสุด: STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}เส้นความสูงเขตหิมะ: STR_MAPGEN_SNOW_LINE_UP :{BLACK}ปรับเปลี่ยนความสูงของหิมะขึ้นไป 1 ระดับ STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}ปรับเปลี่ยนความสูงของหิมะลงมา 1 ระดับ @@ -2773,6 +2780,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}ไม่ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}ไม่รองรับกับ OpenTTD เวอร์ชั่นนี้ # NewGRF save preset window +STR_SAVE_PRESET_SAVE_TOOLTIP :บันทึก ชุดการตั้งค่า ตามที่ได้เลือกไว้ # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}เปลี่ยนแปลง NewGRF parameters @@ -2831,8 +2839,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Attempt to use STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} บรรจุ sprites ที่สูญหาย. สิ่งที่สูญหายจะแสดงเป็นเครื่องหมายตกใจสีแดง (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contains multiple Action 8 entries (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Read past end of pseudo-sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}กราฟิกพื้นฐานที่ใช้อยู่มี Sprite ไม่สมบูรณ์{}กรุณาปรับรุ่นของ Base Graphic -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}ไฟล์ในกราฟฟิคพื้นฐานหายไปบางส่วน{}กรุณาอัพเดตกราฟฟิคพื้นฐาน.{}ตั้งแต่คุณเริ่มเล่น {YELLOW}ภาพของ OpenTTD{WHITE},คุณอาจต้องการ {YELLOW}ภาพของกราฟฟิคพื้นฐาน{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :ต้นแบบ GRF ที่ต้องการสามารถใช้การได้(sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ถูกยกเลิกโดย {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :ไม่ถูกต้อง/ไม่ทราบ รูปแบบ sprite (sprite {3:NUM}) @@ -3218,9 +3224,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}มี STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}พัสดุและสิ่งของที่รอการผลิต: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}ผลผลิต: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}ผลผลิต: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3342,10 +3347,12 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}เป STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}เปลี่ยนชื่อชนิดของเรือ STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}เปลี่ยนชื่อชนิดของเครื่องบิน +STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :ซ่อน STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}การแสดงผล STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}การแสดงผล +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}ปรับเปลี่ยน ซ่อน/แสดง ของชนิดเครื่องอากาศยาน STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}เปลี่ยนชื่อชนิดของรถไฟ STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}เปลี่ยนชื่อชนิดของรถ @@ -3451,6 +3458,7 @@ STR_REPLACE_VEHICLE_ROAD_VEHICLE :ยานพา STR_REPLACE_VEHICLE_SHIP :ยานพาหนะทางน้ำ STR_REPLACE_VEHICLE_AIRCRAFT :อากาศยาน +STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}พาหนะถูกใช้งานอยู่ STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}เลือกประเภทของรถจักรที่จะแทนที่ STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}เลือกประเภทของพาหนะที่จะแทนที่ทางซ้ายมือ @@ -3465,7 +3473,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} เม STR_REPLACE_VEHICLES_STOP :{BLACK}หยุดการแทนที่ยานพาหนะ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}กดเพื่อเริ่มหยุดการแทนที่ยานพาหนะตามที่เลือกไว้ในรายการ -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}กำลังแทนที่: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}สลับระหว่างหน้าต่างการแทนที่ของรถจักรและรถพ่วง STR_REPLACE_ENGINES :รถจักร STR_REPLACE_WAGONS :รถพ่วง diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index f8d95456b3..cd739c0117 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -10,7 +10,7 @@ ##grflangid 0x0c -# $Id: traditional_chinese.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: traditional_chinese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :田地 STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :覆雪地 STR_LAI_CLEAR_DESCRIPTION_DESERT :沙漠 -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} 鐵軌 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :設有閉塞號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :設有預警號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :設有出口號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :設有預警-出口複合號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :設有路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :設有單向路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :設有閉塞與預警號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :設有閉塞與出口號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :設有閉塞與複合號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :設有閉塞與路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :設有閉塞與單向路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :分別設有預警與出口號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :分別設有預警與複合號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :設有預警與路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :設有預警與單向路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :分別設有出口與複合號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :設有出口與路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :設有出口與單向路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :設有複合與路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :設有複合與單向路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :分別設有一般路徑與單向路徑號誌的{STRING}軌道 -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING}機廠 +STR_LAI_RAIL_DESCRIPTION_TRACK :鐵路 鐵軌 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :設有閉塞號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :設有預警號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :設有出口號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :設有預警-出口複合號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :設有路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :設有單向路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :設有閉塞與預警號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :設有閉塞與出口號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :設有閉塞與複合號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :設有閉塞與路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :設有閉塞與單向路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :分別設有預警與出口號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :分別設有預警與複合號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :設有預警與路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :設有預警與單向路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :分別設有出口與複合號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :設有出口與路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :設有出口與單向路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :設有複合與路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :設有複合與單向路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :分別設有一般路徑與單向路徑號誌的鐵路軌道 +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :鐵路機廠 STR_LAI_ROAD_DESCRIPTION_ROAD :公路 STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :有路燈的公路 @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司所有土 STR_ABOUT_OPENTTD :{WHITE}關於 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原著作權為 {COPYRIGHT} 1995 Chris Sawyer,保留所有權利 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD 開發小組 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD 開發小組 # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}儲存遊戲 @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :子畫面企圖 STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} 包含了毀損的 sprite。所有毀損的 sprite 會以紅色問號 (?) 顯示。 STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :過多的 Action 8 資料 (發生於第 {3:NUM} 個子畫面) STR_NEWGRF_ERROR_READ_BOUNDS :子畫面資料不足 (發生於第 {3:NUM} 個子畫面) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}目前使用的基本圖形集少了某些 sprite。{}請更新基本圖形集。 -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}你正在使用的圖形集缺少了一些圖形.{}請更新圖形集.{}因為你正在使用一個{YELLOW}開發中的OpenTTD{WHITE},你可能需要一個{YELLOW}開發中的圖形集{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :要求的 GRF 資料不存在或無法讀取 (發生於第 {3:NUM} 個子畫面) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} 使 {1:STRING} 被停用 STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :無效或無法識別的子畫面配置格式 (發生於第 {3:NUM} 個子畫面) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要 STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING},{STRING}{STRING},{STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}囤積的貨物: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}產出:{YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}產出:{YELLOW}{STRING}{STRING},{STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :更換舊運具 STR_REPLACE_VEHICLES_STOP :{BLACK}停止替換運輸工具 STR_REPLACE_HELP_STOP_BUTTON :{BLACK}按下之後會停止替換左方指定的車頭 -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}替換:{ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}在車頭及車廂替換畫面間切換。 STR_REPLACE_ENGINES :車頭 STR_REPLACE_WAGONS :車廂 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index a92f551d57..c7a2da1ca8 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -11,7 +11,7 @@ ##case tamlanan -# $Id: turkish.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: turkish.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2590,6 +2590,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Havalima STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}İstenen: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Ray türü: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Ray hız sınırı: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Yol hız sınırı: {LTBLUE}{VELOCITY} @@ -2602,29 +2603,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Mera STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Karlı arazi STR_LAI_CLEAR_DESCRIPTION_DESERT :Çöl -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} blok sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} ön sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} çıkış sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} karışık sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} blok ve ön sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} blok ve çıkış sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} blok ve karışık sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} blok ve yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} blok ve tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} ön ve çıkış sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} ön ve karışık sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} ön ve yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} ön ve tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} çıkış ve karışık sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} çıkış ve yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} çıkış ve tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} karışık ve tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} karışık ve tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} yol ve tek yön yol sinyalli ray -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} tren garajı +STR_LAI_RAIL_DESCRIPTION_TRACK :Ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Blok sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Ön sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Çıkış sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Karışık sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Blok ve ön sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Blok ve çıkış sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Blok ve karışık sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Blok ve yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Blok ve tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Ön ve çıkış sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Ön ve karışık sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Ön ve yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Ön ve tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Çıkış ve karışık sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Çıkış ve yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Çıkış ve tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Karışık ve tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Karışık ve tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Yol ve tek yön yol sinyalli ray +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Tren garajı STR_LAI_ROAD_DESCRIPTION_ROAD :Yol STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Sokak lambalı yol @@ -2688,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Satın alınmı STR_ABOUT_OPENTTD :{WHITE}OpenTTD Hakkında STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Telif hakkı {COPYRIGHT} 1995 Chris Sawyer, Her hakkı saklıdır STR_ABOUT_VERSION :{BLACK}OpenTTD sürüm {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 OpenTTD ekibi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 OpenTTD ekibi # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Oyunu Kaydet @@ -2907,8 +2908,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Geçersiz ID ku STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bozuk bir nesne içeriyor. Tüm bozuk nesneler kırmızı bir soru işareti (?) olarak görünecektir STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Birden çok Action 8 girişi içeriyor (nesne {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Pseudo-nesne bitiminden sonrasını okudu (nesne {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Kullanımda olan temel grafik kümesi bazı nesneleri içermiyor.{}Lütfen temel grafik kümesini güncelleyin -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Kullanımdaki temel grafik kümesi bazı nesneleri içermiyor.{}Lütfen temel grafik setinizi güncelleyin .{}{YELLOW}OpenTTD'nin geliştirme kopyasını {WHITE}kullandığınız için, {YELLOW}temel grafiklerin de{WHITE} geliştirme kopyasını kullanmalısınız. STR_NEWGRF_ERROR_GRM_FAILED :İstenen GRF kaynakları mevcut değil (nesne {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} {STRING} tarafından deaktive edildi STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Geçersiz/bilinmeyen nesne yerleşim biçimi (nesne {3:NUM}) @@ -3295,9 +3294,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}İstenen STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}İstenenler: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}İşlenmeyi bekleyen kargo: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3558,10 +3556,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} eskidi STR_REPLACE_VEHICLES_STOP :{BLACK}Araçları değiştirmeyi durdur STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Değiştirme işlemini durdurmak için basın -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Değiştiriyor: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Lokomotif ve vagon değişimi pencereleri arasında geçiş yap. STR_REPLACE_ENGINES :Lokomotifler STR_REPLACE_WAGONS :Vagon +STR_REPLACE_ALL_RAILTYPE :Tüm demiryolu araçları STR_REPLACE_HELP_RAILTYPE :{BLACK}Lokomatiflerini değiştireceğiniz ray türünü seçin STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Soldaki değiştiriliyorsa neyle değiştirildiğini göster diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index a0356a1559..472996b2a6 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -12,7 +12,7 @@ ##case r d z -# $Id: ukrainian.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: ukrainian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2732,29 +2732,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поле STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Засніжена земля STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустеля -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} з блок-сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} з пресигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} з вихідними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} з комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} з маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} з односторонніми маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} з блок-сигналами і пресигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} з блок-сигналами і вихідними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} з блок-сигналами і комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} з блок-сигналами та маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} з блок-сигналами та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} з пресигналами і вихідними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} з пресигналами і комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} з пресигналами і маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} з пресигналами і одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} з вихідними сигналами та комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} з вихідними та маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} з вихідними та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} з комбосигналами і маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} з комбосигналами та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} з маршрутними та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} залізничне депо +STR_LAI_RAIL_DESCRIPTION_TRACK :Звичайна колія +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Звичайна колія з блок-сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Звичайна колія з пресигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Звичайна колія з вихідними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Звичайна колія з комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Звичайна колія з маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Звичайна колія з односторонніми маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Звичайна колія з блок-сигналами і пресигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Звичайна колія з блок-сигналами і вихідними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Звичайна колія з блок-сигналами і комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Звичайна колія з блок-сигналами та маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Звичайна колія з блок-сигналами та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Звичайна колія з пресигналами і вихідними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Звичайна колія з пресигналами і комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Звичайна колія з пресигналами і маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Звичайна колія з пресигналами і одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Звичайна колія з вихідними сигналами та комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Звичайна колія з вихідними та маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Звичайна колія з вихідними та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Звичайна колія з комбосигналами і маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Звичайна колія з комбосигналами та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Звичайна колія з маршрутними та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Звичайна колія залізничне депо STR_LAI_ROAD_DESCRIPTION_ROAD :Дорога STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Дорога з вуличними ліхтарями @@ -2818,7 +2818,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ця ділян STR_ABOUT_OPENTTD :{WHITE}Про OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторське право {COPYRIGHT} 1995 Кріс Сойєр, Всі права захищені STR_ABOUT_VERSION :{BLACK}OpenTTD версія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 команда OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 команда OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Зберегти гру @@ -3037,8 +3037,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Спроба в STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} містить зіпсований спрайт. Усі зіпсовані спрайти будуть показані як червоний знак питання (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Містить декілька записів Action 8 (спрайт {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Вихід за границю псевдо-спрайта при читанні (спрайт {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}У базовому наборі графіки, що зараз використовується не вистачає спрайтів.{}Будь-ласка оновіть базовий набір графіки -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}В наборі графіки, який використовується на даний момент відсутній ряд спрайтів.{}Будь ласка, поновіть базовий набір графіки.{}Оскільки ви граєте у {YELLOW} тестову версію OpenTTD{WHITE}, вам також може знадобитися {YELLOW}тестовий набір базової графіки{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Недоступні необхідні ресурси GRF (спрайт {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} був вимкнений {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Некоректний або невідомий формат розміщення спрайтів (спрайт {3:NUM}) @@ -3425,9 +3423,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Потр STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z}, {STRING.z}{STRING.z}, {STRING.z}{STRING.z} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Вантаж чекає на обробку: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Продукція: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Продукція: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3688,7 +3685,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} кол STR_REPLACE_VEHICLES_STOP :{BLACK}Зупинити оновлення STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Натисніть для припинення процесу оновлення потягів, що вибрані ліворуч -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Оновлення: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Переключення між вікнами заміни потягів та вагонів. STR_REPLACE_ENGINES :Локомотиви STR_REPLACE_WAGONS :Вагони diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index efaaf9ca80..05438c34f2 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -10,7 +10,7 @@ ##grflangid 0x0b -# $Id: chuvash.txt 27478 2015-12-27 11:40:23Z translators $ +# $Id: chuvash.txt 27753 2017-02-26 18:45:43Z translators $ # 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. @@ -1112,6 +1112,7 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу ############ range for requires starts ############ range for requires ends + ############ range for produces starts ############ range for produces ends diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 8cdd511213..496bebd52b 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -10,7 +10,7 @@ ##grflangid 0x32 -# $Id: frisian.txt 27593 2016-05-29 19:11:48Z frosch $ +# $Id: frisian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2389,29 +2389,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Fjilden STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snie STR_LAI_CLEAR_DESCRIPTION_DESERT :Woastine -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} spoarbaan -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} spoarbaan mei blokseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} spoarbaan mei foar-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} spoarbaan mei útgong-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} spoarbaan mei kombi-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} spoarbaan mei paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} spoarbaan mei ienrjochtings paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} spoarbaan mei blok- en foar-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} spoarbaan mei blok- en útgong-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} spoarbaan mei blok- en kombi-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} spoarbaan mei blok- en paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} spoarbaan mei blok- en ienrjochtings paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} spoarbaan mei foar- en útgong-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} spoarbaan mei foar- en kombi-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} spoarbaan mei foar- en paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} spoarbaan mei foar en ienrjochtings paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} spoarbaan mei útgong- en kombi-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} spoarbaan mei útgong- en paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} spoarbaan mei útgong en ienrjochtings paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} spoarbaan mei kombi- en paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} spoarbaan mei kombi- en ienrjochtings paadseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} spoarbaan mei paad- en ienrjochtings paadseinen -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} treindepot +STR_LAI_RAIL_DESCRIPTION_TRACK :Spoarwei spoarbaan +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Spoarwei spoarbaan mei blokseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Spoarwei spoarbaan mei foar-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Spoarwei spoarbaan mei útgong-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Spoarwei spoarbaan mei kombi-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Spoarwei spoarbaan mei paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Spoarwei spoarbaan mei ienrjochtings paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Spoarwei spoarbaan mei blok- en foar-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Spoarwei spoarbaan mei blok- en útgong-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Spoarwei spoarbaan mei blok- en kombi-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Spoarwei spoarbaan mei blok- en paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Spoarwei spoarbaan mei blok- en ienrjochtings paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Spoarwei spoarbaan mei foar- en útgong-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Spoarwei spoarbaan mei foar- en kombi-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Spoarwei spoarbaan mei foar- en paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Spoarwei spoarbaan mei foar en ienrjochtings paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Spoarwei spoarbaan mei útgong- en kombi-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Spoarwei spoarbaan mei útgong- en paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Spoarwei spoarbaan mei útgong en ienrjochtings paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Spoarwei spoarbaan mei kombi- en paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Spoarwei spoarbaan mei kombi- en ienrjochtings paadseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Spoarwei spoarbaan mei paad- en ienrjochtings paadseinen +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Spoarwei treindepot STR_LAI_ROAD_DESCRIPTION_ROAD :Wei STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Wei mei strjitteljochten @@ -2475,7 +2475,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Lân fan bedriu STR_ABOUT_OPENTTD :{WHITE}Oer OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Orizjineel copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD-ferzje {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 It OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 It OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spul Opslaan @@ -2689,7 +2689,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Hat besocht in STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} befettet in korrupte ôfbylding. Alle korrupte ôfbyldings sille mei in read fraachteken markearre wurde (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Befet meardere Aksje-8 fermeldings (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Ein fan pseudo-ôfbylding lêze (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}It hjoeddeiske basisôfbyldingspakket misset in oantal ôfbylding.{}Besykje dit ôfbyldingspakket te fernijen STR_NEWGRF_ERROR_GRM_FAILED :Oanfrege GRF-bron is net beskikber (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} wie útskeakele troch {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Unjildich/ûnbekind ôfbyldingsútlisformaat (sprite {3:NUM}) @@ -3044,8 +3043,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nedich: STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produseart: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produseart: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3389,6 +3388,7 @@ STR_ORDER_GO_NON_STOP_VIA :Gean non-stop f STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Feroarje it stop gedrach fan selektearre opdracht STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Alle fracht folslein lade +STR_ORDER_DROP_LOAD_IF_POSSIBLE :Lade as beskikber STR_ORDER_DROP_FULL_LOAD_ANY :Samar in fracht folslein lade STR_ORDER_DROP_NO_LOADING :Net laden @@ -3598,6 +3598,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window +STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} feroarings fan {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} lisinsje fan {STRING} STR_TEXTFILE_WRAP_TEXT :{WHITE}Omwikkelje tekst STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Feroarings diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 2f41b766ad..2156610cf3 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -10,7 +10,7 @@ ##grflangid 0x06 -# $Id: ido.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: ido.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -776,7 +776,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Stabeyo di komp # About OpenTTD window STR_ABOUT_VERSION :{BLACK}OpenTTD versiono {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 La kruo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 La kruo OpenTTD # Save/load game/scenario STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Ludo Detali @@ -921,6 +921,7 @@ STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehili: ############ range for requires starts ############ range for requires ends + ############ range for produces starts ############ range for produces ends diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 81569a796e..efaa6dce31 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -10,7 +10,7 @@ ##grflangid 0x26 -# $Id: macedonian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: macedonian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -1202,7 +1202,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Компани STR_ABOUT_OPENTTD :{WHITE}За OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинален copyright {COPYRIGHT} 1995 Chris Sawyer, Сите права се задржани STR_ABOUT_VERSION :{BLACK}OpenTTD верзија {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 OpenTTD тимот +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 OpenTTD тимот # Save/load game/scenario STR_SAVELOAD_LOAD_BUTTON :{BLACK}Оптоварување @@ -1270,7 +1270,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Објекто # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Во моментов се користат база графики поставени недостасува голем број на sprites.{}Надградете ја основата графика во собата. # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Внимание! @@ -1413,6 +1412,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Прои ############ range for requires starts ############ range for requires ends + ############ range for produces starts ############ range for produces ends diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index 0d553b37cf..b5f1d3f03f 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -10,7 +10,7 @@ ##grflangid 0x09 -# $Id: maltese.txt 27293 2015-05-27 17:53:35Z translators $ +# $Id: maltese.txt 27753 2017-02-26 18:45:43Z translators $ # 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. @@ -818,6 +818,7 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN ############ range for requires starts ############ range for requires ends + ############ range for produces starts ############ range for produces ends diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index c97e721deb..c9b772effb 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -10,7 +10,7 @@ ##grflangid 0x11 -# $Id: marathi.txt 27293 2015-05-27 17:53:35Z translators $ +# $Id: marathi.txt 27753 2017-02-26 18:45:43Z translators $ # 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. @@ -1279,8 +1279,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}ला STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}बनव्त: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}बनव्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 77662de212..ce4cfaa51c 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -10,7 +10,7 @@ ##grflangid 0x62 -# $Id: persian.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: persian.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -970,6 +970,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}وضوح STR_GAME_OPTIONS_RESOLUTION_OTHER :دیگر +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :دو برابر STR_GAME_OPTIONS_BASE_GRF :{BLACK}بسته گرافیک پایه STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}بسته گرافیک پایه را انتخاب کنید @@ -2302,29 +2303,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :زمین ها STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :زمین پوشیده از برف STR_LAI_CLEAR_DESCRIPTION_DESERT :صحرا -STR_LAI_RAIL_DESCRIPTION_TRACK :{STRING} ریل -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :{STRING} ریل با نشانگر توقف -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :{STRING} ریل با پیش نشانگر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :{STRING} ریل با نشانگر خروج -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :{STRING} ریل با نشانگر چندگانه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :{STRING} ریل با نشانگر مسیر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :{STRING} ریل با نشانگر مسیر یکطرفه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :{STRING} ریل با نشانگرهای توقف و پیش نشانگر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :{STRING} ریل با نشانگرهای توقف و خروج -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :{STRING} ریل با نشانگرهای توقف و چندگانه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :{STRING} ریل با نشانگرهای توقف و مسیر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :{STRING} ریل با نشانگرهای توقف و مسیر یکطرفه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :{STRING} ریل با پیش نشانگر و نشانگرخروج -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :{STRING} ریل با پیش نشانگر و نشانگرچندگانه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :{STRING} ریل با پیش نشانگر و نشانگز مسیر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :{STRING} ریل با پیش نشانگر و نشانگر مسیر یکطرفه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :{STRING} ریل با نشانگرهای خروج و چندگانه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :{STRING} ریل با نشانگرهای خروج و مسیر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :{STRING} ریل با نشانگرهای خروج و مسیر یکطرفه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :{STRING} ریل با نشانگرهای چندگانه و مسیر -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :{STRING} ریل با نشانگرهای چندگانه و مسیر یکطرفه -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :{STRING} ریل با نشانگرهای مسیر و مسیر یکطرفه -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :{STRING} گاراژ قطار +STR_LAI_RAIL_DESCRIPTION_TRACK :راه‌آهن ریل +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :راه‌آهن ریل با نشانگر توقف +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :راه‌آهن ریل با پیش نشانگر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :راه‌آهن ریل با نشانگر خروج +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :راه‌آهن ریل با نشانگر چندگانه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :راه‌آهن ریل با نشانگر مسیر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :راه‌آهن ریل با نشانگر مسیر یکطرفه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :راه‌آهن ریل با نشانگرهای توقف و پیش نشانگر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :راه‌آهن ریل با نشانگرهای توقف و خروج +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :راه‌آهن ریل با نشانگرهای توقف و چندگانه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :راه‌آهن ریل با نشانگرهای توقف و مسیر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :راه‌آهن ریل با نشانگرهای توقف و مسیر یکطرفه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :راه‌آهن ریل با پیش نشانگر و نشانگرخروج +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :راه‌آهن ریل با پیش نشانگر و نشانگرچندگانه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :راه‌آهن ریل با پیش نشانگر و نشانگز مسیر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :راه‌آهن ریل با پیش نشانگر و نشانگر مسیر یکطرفه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :راه‌آهن ریل با نشانگرهای خروج و چندگانه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :راه‌آهن ریل با نشانگرهای خروج و مسیر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :راه‌آهن ریل با نشانگرهای خروج و مسیر یکطرفه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :راه‌آهن ریل با نشانگرهای چندگانه و مسیر +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :راه‌آهن ریل با نشانگرهای چندگانه و مسیر یکطرفه +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :راه‌آهن ریل با نشانگرهای مسیر و مسیر یکطرفه +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :راه‌آهن گاراژ قطار STR_LAI_ROAD_DESCRIPTION_ROAD :جاده STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :جاده با چراغ راهنمایی رانندگی @@ -2388,7 +2389,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :زمین خری STR_ABOUT_OPENTTD :{WHITE}OpenTTD در باره ی STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD ویرایش {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 The OpenTTD team # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}ذخیره ی بازی @@ -2592,7 +2593,6 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :فایل GRF ب STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :تعداد NewGRF بیشتر از حد می باشد STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :در حال بارگزاری {1:STRING} به عنوان NewGRF ایستا با {STRING} مشکل همخوانی دارد STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} دارای یک تصویر خراب می باشد. تصویرهای خراب با علامت سوال قرمز (؟) نشان داده شدند. -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}بسته گرافیک استفاده شده تعدادی از تصاوبر را ندارد.{}لطفا بسته گرافیکی را به روز کنید STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} غیر فعال گردیده توسط {STRING} # NewGRF related 'general' warnings @@ -2908,6 +2908,7 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}مواد STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}محصولات: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}محصولات: {YELLOW}{STRING}{STRING}, {STRING}{STRING} @@ -3071,6 +3072,7 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK} ستو STR_REPLACE_HELP_STOP_BUTTON :{BLACK}برای توقف جایگزین کردن برای نوع انتخاب شده در سمت چپ کلیک کنید +STR_REPLACE_ELRAIL_VEHICLES :وسایل نقلیه ریلی برقی # Vehicle view diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index c55e362998..58957d06e1 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -11,7 +11,7 @@ ##gender m f -# $Id: urdu.txt 27478 2015-12-27 11:40:23Z translators $ +# $Id: urdu.txt 27753 2017-02-26 18:45:43Z translators $ # 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. @@ -1049,6 +1049,7 @@ STR_CITY_APPROVAL_HOSTILE :مخالفان # Settings tree window STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(کوئی وضاحت موجود نہیں) +STR_CONFIG_SETTING_TYPE :{LTBLUE}ترتیب قسم: {ORANGE}{STRING} @@ -1200,6 +1201,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :مخصوص پٹ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :تعمیراتی ٹول کو استعمال کے بعد فعال رکھیں: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT :کمپنی کی مالیاتی ونڈو میں اخراجات کو اکٹھا دکھائیں: {STRING} +STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :وسیع آواز چلایں STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :موزوں گاڑیاں نہ ہونے کی صورت میں عمارت کو غیر فعال کر دیں: {STRING} STR_CONFIG_SETTING_MAX_TRAINS :کمپنی کی زیادہ سے زیادہ ریل گاڑیاں: {STRING} @@ -2125,6 +2127,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{G=f}{BLACK}ک # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}اوپن ٹی ٹی ڈی کے متعلق +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} ٢٠٠٢ - ٢٠١٦ OpenTTD ٹیم # Save/load game/scenario @@ -2183,6 +2186,7 @@ STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE} جای # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} +STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :غیر متوقع سپرائٹ (sprite {3:NUM}) # NewGRF related 'general' warnings @@ -2264,6 +2268,7 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}منظو ############ range for rating starts +STR_CARGO_RATING_APPALLING :انتہائی خراب ############ range for rating ends @@ -2276,6 +2281,7 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN # Finances window STR_FINANCES_YEAR :{WHITE}{NUM} +STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}پراپرٹی کی بحالی STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} @@ -2310,10 +2316,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory # Industry view +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}گزشتہ ماہ کی پیداوار: ############ range for requires starts ############ range for requires ends + ############ range for produces starts ############ range for produces ends @@ -2336,12 +2344,14 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}فہرس # Group window +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}گروپ ۔ اس گروپ ک تمام گاڑیاں دیکھنے کے لیے اسے دبایں۔ پکڑ کے اوپر نیچے بھی کر سکتے ہیں۔ # Build vehicle window +STR_BUY_VEHICLE_AIRCRAFT_CAPTION :نیا طیارہ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}پہنچ: {GOLD}{COMMA} ٹائلیں @@ -2449,6 +2459,7 @@ STR_VEHICLE_INFO_MAX_SPEED_RANGE :{BLACK}حد ر +STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}سامان # Vehicle refit @@ -2528,6 +2539,7 @@ STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK} وقف # AI configuration window +STR_AI_CONFIG_GAMESCRIPT :{SILVER}کھیل کا سکرپٹ STR_AI_CONFIG_CHANGE_NONE : @@ -2548,6 +2560,7 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}لائس # Vehicle loading indicators +STR_PERCENT_NONE :{WHITE}{NUM}% # Income 'floats' @@ -2591,6 +2604,7 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} # Town related errors +STR_ERROR_CAN_T_RENAME_TOWN :{WHITE} شہر کا نام تبدیل نہی کیا جاسکتا # Industry related errors STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{G=m}{WHITE}... صرف ان شہروں میں بن سکتا ہے جن کی آبادی ۱۲۰۰ سے زیادہ ہے @@ -2598,6 +2612,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{G=m}{WHITE}... # Station construction related errors +STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :ایک اور گودی کے قریب # Station destruction related errors @@ -2627,6 +2642,8 @@ STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE} ڈیپ STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE} ۔۔۔ طرزِ پیڑ کے لیئے غلط طرزِ زپین # Bridge related errors +STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}اسی جگہ شروع اور ختم نہیں کر سکتے +STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}شروع اور ختم سیدھ میں ہو STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... پل کے دونوں کنارے زمین پر ہونے چاہییں STR_ERROR_BRIDGE_TOO_LONG :{WHITE} ۔۔۔ پل زیادھ لمبی ھے @@ -2713,9 +2730,11 @@ STR_DESKTOP_SHORTCUT_COMMENT :Transport Tycoo ##id 0x2000 # Town building names +STR_TOWN_BUILDING_NAME_CHURCH_1 :چرچ ##id 0x4800 # industry names +STR_INDUSTRY_NAME_POWER_STATION :بجلی گھر ############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ These strings may never get a new id, or savegames will break! @@ -2734,7 +2753,9 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :کوئلے کا ٹرک STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :پھلوں کا ٹرک STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Balogh کوئلے کا ٹرک STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Uhl کوئلے کا ٹرک STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :DW کوئلے کا ٹرک diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 5792d35d32..a17adf05e9 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -10,7 +10,7 @@ ##grflangid 0x54 -# $Id: vietnamese.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: vietnamese.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2601,29 +2601,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Cánh đồng STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Đất tuyết phủ STR_LAI_CLEAR_DESCRIPTION_DESERT :Hoang mạc -STR_LAI_RAIL_DESCRIPTION_TRACK :Đường ray {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Đường ray {STRING} với đèn hiệu khóa -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Đường ray {STRING} với đèn tín hiệu báo trước -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Đường ray {STRING} với đèn tín hiệu cửa thoát -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Đường ray {STRING} với đèn tín hiệu kết hợp -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Đường ray {STRING} với đèn dẫn đường -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Đường ray {STRING} với đèn dẫn đường 1-chiều -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Đường ray {STRING} với đèn hiệu khóa và đèn tín hiệu báo trước -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Đường ray {STRING} với đèn hiệu khóa và đèn tín hiệu cửa thoát -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Đường ray {STRING} với đèn hiệu khóa và đèn tín hiệu kết hợp -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Đường ray {STRING} với đèn hiệu khóa và đèn dẫn đường -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Đường ray {STRING} với đèn hiệu khóa và đèn dẫn đường 1-chiều -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Đường ray {STRING} với đèn tín hiệu báo trước và đèn tín hiệu cửa thoát -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Đường ray {STRING} với đèn tín hiệu báo trước và đèn tín hiệu kết hợp -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Đường ray {STRING} với đèn tín hiệu báo trước và đèn dẫn đường -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Đường ray {STRING} với đèn tín hiệu báo trước và đèn dẫn đường 1-chiều -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Đường ray {STRING} với đèn tín hiệu cửa thoát và đèn tín hiệu kết hợp -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Đường ray {STRING} với đèn tín hiệu cửa thoát và đèn dẫn đường -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Đường ray {STRING} với đèn tín hiệu cửa thoát và đèn dẫn đường 1-chiều -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Đường ray {STRING} với đèn tín hiệu kết hợp và đèn dẫn đường -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Đường ray {STRING} với đèn tín hiệu kết hợp và đèn dẫn đường 1-chiều -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Đường ray {STRING} với đèn dẫn đường và đèn dẫn đường 1-chiều -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Xưởng tàu hỏa {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :Đường ray Đường ray +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Đường ray Đường ray với đèn hiệu khóa +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Đường ray Đường ray với đèn tín hiệu báo trước +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Đường ray Đường ray với đèn tín hiệu cửa thoát +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Đường ray Đường ray với đèn tín hiệu kết hợp +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Đường ray Đường ray với đèn dẫn đường +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Đường ray Đường ray với đèn dẫn đường 1-chiều +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Đường ray Đường ray với đèn hiệu khóa và đèn tín hiệu báo trước +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Đường ray Đường ray với đèn hiệu khóa và đèn tín hiệu cửa thoát +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Đường ray Đường ray với đèn hiệu khóa và đèn tín hiệu kết hợp +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Đường ray Đường ray với đèn hiệu khóa và đèn dẫn đường +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Đường ray Đường ray với đèn hiệu khóa và đèn dẫn đường 1-chiều +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Đường ray Đường ray với đèn tín hiệu báo trước và đèn tín hiệu cửa thoát +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Đường ray Đường ray với đèn tín hiệu báo trước và đèn tín hiệu kết hợp +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Đường ray Đường ray với đèn tín hiệu báo trước và đèn dẫn đường +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Đường ray Đường ray với đèn tín hiệu báo trước và đèn dẫn đường 1-chiều +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Đường ray Đường ray với đèn tín hiệu cửa thoát và đèn tín hiệu kết hợp +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Đường ray Đường ray với đèn tín hiệu cửa thoát và đèn dẫn đường +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Đường ray Đường ray với đèn tín hiệu cửa thoát và đèn dẫn đường 1-chiều +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Đường ray Đường ray với đèn tín hiệu kết hợp và đèn dẫn đường +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Đường ray Đường ray với đèn tín hiệu kết hợp và đèn dẫn đường 1-chiều +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Đường ray Đường ray với đèn dẫn đường và đèn dẫn đường 1-chiều +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Xưởng tàu hỏa Đường ray STR_LAI_ROAD_DESCRIPTION_ROAD :Đường bộ STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Đường phố có đèn @@ -2687,7 +2687,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Đất công ty STR_ABOUT_OPENTTD :{WHITE}Về OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Nguyên tác bản quyền {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD phiên bản {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016 Nhóm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 Nhóm OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Lưu Ván Chơi @@ -2906,8 +2906,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Sử dụng IT STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bị hỏng sprite. Tất cả các sprite sẽ hiện thị với dấu hỏi (?) màu đỏ. STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Có nhiều mục thực thi 8 (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Đọc quá giới hạn của sprite giả (sprite {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Gói đồ họa bạn đang dùng thiếu một số mẫu đồ họa.{}Hãy cập nhật gói đồ họa lên phiên bản mới. -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Bộ file đồ họa hiện tại thiết một số sprites.{}Hãy cập nhật phiên bản mới.{}Bởi vì bạn chơi {YELLOW}một phiên bản thử nghiệm đang phát triển OpenTTD{WHITE}, bạn cần phải có cả {YELLOW}bộ file đồ họa đang được phát triển nữa{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Dữ liệu GRF theo yêu cầu không hợp lệ (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} bị tắt bởi {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Định dạng Sprite không hợp lệ hoặc chưa định nghĩa (sprite {3:NUM}) @@ -3294,9 +3292,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Yêu c STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Toa xe đợi để xử lý: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3557,7 +3554,6 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} khi đ STR_REPLACE_VEHICLES_STOP :{BLACK}Ngừng thay thế phương tiện STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Bấm để ngừng việc thay thế kiểu đầu máy đã chọn -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Thay thế: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Chuyển qua lại cửa sổ thay thế đầu máy và toa xe STR_REPLACE_ENGINES :Đầu máy STR_REPLACE_WAGONS :Toa xe diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 26395c25c5..1a7206162f 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -10,7 +10,7 @@ ##grflangid 0x0f -# $Id: welsh.txt 27516 2016-03-01 19:41:31Z frosch $ +# $Id: welsh.txt 27777 2017-03-11 16:49:51Z frosch $ # 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. @@ -2312,7 +2312,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Adeiladu Maglef STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Adeiladu trac rheilffordd. Mae Ctrl yn toglo adeiladu/codi'r rheilffordd, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Adeiladu trac yn defnyddio'r modd Awtoreilffordd. Mae Ctrl yn toglo adeiladu/codi'r rheilffordd, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Adeiladu trên depo (ar gyfer adeiladu a rhoi gwasanaeth i drenau). Mae Shift yn toglo adeiladu/dangos amcangyfrif o'r gost +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Adeiladu depo trenau (ar gyfer adeiladu a rhoi gwasanaeth i drenau). Mae Shift yn toglo adeiladu/dangos amcangyfrif o'r gost STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Newid rheilffordd yn bwynt llwybro. Mae Ctrl yn galluogi uno pwyntiau llwybro, tra fod Shift yn toglo adeiladu/dangos amcangyfrif o'r gost STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Adeiladu gorsaf reilffordd. Mae Ctrl yn galluogi uno gorsafoedd, tra fo Shift yn toglo adeiladu/dangos amcangyfrif o'r gost STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Adeiladu signalau rheilffordd. Mae Ctrl yn toglo signalau semafor/golau lliw{}Mae llusgo'n adeiladu signalau ar hyd trac syth. Mae Ctrl yn adeiladu signalau hyd y gyffordd nesaf{}Mae Ctrl+Clic yn toglo agor y ffenestr dewis signalau. Mae Shift yn toglo adeiladu/amcangyfrif y gost @@ -2323,7 +2323,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Trosi/Di STR_RAIL_NAME_RAILROAD :Rheilffordd STR_RAIL_NAME_ELRAIL :rheilffordd drydan -STR_RAIL_NAME_MONORAIL :monoreilffordd +STR_RAIL_NAME_MONORAIL :Monoreilffordd STR_RAIL_NAME_MAGLEV :maglef # Rail depot construction window @@ -2589,6 +2589,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Enw teil STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Llwythi a dderbynir: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Math rheilffordd: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Terfyn cyflymder rheilffordd: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Terfyn cyflymder ffordd: {LTBLUE}{VELOCITY} @@ -2601,29 +2602,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Caeau STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Tir ag eira STR_LAI_CLEAR_DESCRIPTION_DESERT :Anialdir -STR_LAI_RAIL_DESCRIPTION_TRACK :Cledrau {STRING} -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Cledrau {STRING} gyda signalau bloc -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Cledrau {STRING} gyda rhagsignalau -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Cledrau {STRING} gyda signalau gadael -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Cledrau {STRING} gyda signalau cyfun -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Cledrau {STRING} gyda signalau llwybro -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Cledrau {STRING} gyda signalau llwybro unffordd -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Cledrau {STRING} gyda signalau bloc a rhagsignalau -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Cledrau {STRING} gyda signalau bloc a signalau gadael -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Cledrau {STRING} gyda signalau bloc a signalau cyfun -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Cledrau {STRING} gyda signalau bloc a signalau llwybro -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Cledrau {STRING} gyda signalau bloc a signalau llwybro unffordd -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Cledrau {STRING} gyda rhagsignalau a signalau gadael -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Cledrau {STRING} gyda rhagsignalau a signalau cyfun -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Cledrau {STRING} gyda rhagsignalau a signalau llwybro -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Cledrau {STRING} gyda rhag-signalau a signalau llwybro unffordd -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Cledrau {STRING} gyda signalau gadael a signalau cyfun -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Cledrau {STRING} gyda signalau gadael a signalau llwybro -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Cledrau {STRING} gyda signalau gadael a signalau llwybro unffordd -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Cledrau {STRING} gyda signalau cyfun a llwybro -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Cledrau {STRING} gyda signalau cyfun a signalau llwybr unffordd -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Cledrau {STRING} gyda signalau llwybro a signalau llwybro unffordd -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depo trên {STRING} +STR_LAI_RAIL_DESCRIPTION_TRACK :Cledrau rheilffordd +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Cledrau rheilffordd gyda signalau bloc +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Cledrau rheilffordd gyda rhagsignalau +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Cledrau rheilffordd gyda signalau gadael +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Cledrau rheilffordd gyda signalau cyfun +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Cledrau rheilffordd gyda signalau llwybro +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Cledrau rheilffordd gyda signalau llwybro unffordd +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Cledrau rheilffordd gyda signalau bloc a rhagsignalau +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Cledrau rheilffordd gyda signalau bloc a signalau gadael +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Cledrau rheilffordd gyda signalau bloc a signalau cyfun +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Cledrau rheilffordd gyda signalau bloc a signalau llwybro +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Cledrau rheilffordd gyda signalau bloc a signalau llwybro unffordd +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Cledrau rheilffordd gyda rhagsignalau a signalau gadael +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Cledrau rheilffordd gyda rhagsignalau a signalau cyfun +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Cledrau rheilffordd gyda rhagsignalau a signalau llwybro +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Cledrau rheilffordd gyda rhag-signalau a signalau llwybro unffordd +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Cledrau rheilffordd gyda signalau gadael a signalau cyfun +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Cledrau rheilffordd gyda signalau gadael a signalau llwybro +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Cledrau rheilffordd gyda signalau gadael a signalau llwybro unffordd +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Cledrau rheilffordd gyda signalau cyfun a llwybro +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Cledrau rheilffordd gyda signalau cyfun a signalau llwybr unffordd +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Cledrau rheilffordd gyda signalau llwybro a signalau llwybro unffordd +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depo trenau rheilffordd STR_LAI_ROAD_DESCRIPTION_ROAD :Ffordd STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Ffordd gyda goleuadau stryd @@ -2687,7 +2688,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tir cwmni STR_ABOUT_OPENTTD :{WHITE}Gwybodaeth am OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hawlfraint Wreiddiol {COPYRIGHT} 1995 Chris Sawyer, Holl cedwir pob hawl STR_ABOUT_VERSION :{BLACK}fersiwn OpenTTD {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2016 Y tîm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2017 Y tîm OpenTTD # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Cadw Gêm @@ -2906,8 +2907,6 @@ STR_NEWGRF_ERROR_INVALID_ID :Ceisio defnyddi STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}Mae'r {STRING} yn cynnwys corlun llygredig. Bydd corluniau llygredig yn cael eu dynodi gan farc cwestiwn coch (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Yn cynnwys sawl cofnod Gweithred 8 (corlun {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Darllen heibio i ddiwedd llid-gorlun (corlun {3:NUM}) -STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Mae'r set raffeg sylfaenol a ddefnyddir ar hyn o bryd yn brin o sawl corlun{}Diweddarwch y set raffeg sylfaenol i ddatrys hyn -STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}Mae nifer o gorluniau ar goll o'r set graffeg sylfaenol mewn defnydd.{}Diweddarwch y set graffeg sylfaenol.{}Gane eich bod yn chwarae {YELLOW}ciplun datblygiadol o OpenTTD{WHITE}, efallai y byddwch angen {YELLOW}ciplun ddatblygiadol o'r grafffeg sylfaenol{WHITE} STR_NEWGRF_ERROR_GRM_FAILED :Nid yw'r adnoddau GRF a geisiwyd ar gael (corlun {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :Fe analluogwyd {1:STRING} gan {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Fformat cynllun corlun annilys/anhysbys (corlun {3:NUM}) @@ -3294,9 +3293,8 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Angen: { STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends + ############ range for produces starts -STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Llwythi yn aros i gael ei brosesu: -STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK} STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING}, {STRING}{STRING} ############ range for produces ends @@ -3369,7 +3367,7 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Cerbydau Rheilf STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Cerbydau Monoreilffordd Newydd STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Cerbydau Maglef Newydd -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Cerbydau Rheilffordd +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Cerbydau Rheilffordd Newydd STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Cerbydau Ffordd Newydd STR_BUY_VEHICLE_SHIP_CAPTION :Llongau Newydd STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Awyrennau Newydd @@ -3557,10 +3555,10 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} pan yn STR_REPLACE_VEHICLES_STOP :{BLACK}Gorffen Disodli Cerbydau STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Gwasgwch i atal disodli'r math injan sydd wedi'i ddewis ar y chwith -STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Disodli: {ORANGE}{STRING} STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Newid rhwng y ffenest disodli wagenni a'r un injanau STR_REPLACE_ENGINES :Injanau STR_REPLACE_WAGONS :Wagenni +STR_REPLACE_ALL_RAILTYPE :Pob cerbyd rheilffordd STR_REPLACE_HELP_RAILTYPE :{BLACK}Dewiswch y math o reilffordd yr hoffech chi ddisodli injans ar ei gyfer STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Dangoswch pa injan (os unrhyw) y mae'r injan ar y chwith yn cael ei disodli gyda @@ -4253,7 +4251,7 @@ STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bwï STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bwï mewn defnydd gan cwmni arall! # Depot related errors -STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Methu adeiladu trên depo yma... +STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Methu adeiladu depo trenau yma... STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Methu adeiladu depo cerbydau ffordd yma... STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Methu adeiladu depo cerbyd tramiau yma... STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Methu adeiladu depo llong yma... diff --git a/src/language.h b/src/language.h index f7778fd939..9130e25f48 100644 --- a/src/language.h +++ b/src/language.h @@ -1,4 +1,4 @@ -/* $Id: language.h 27367 2015-08-09 12:33:27Z rubidium $ */ +/* $Id: language.h 27756 2017-02-26 19:40:53Z frosch $ */ /* * This file is part of OpenTTD. @@ -16,18 +16,12 @@ #ifdef WITH_ICU_SORT #include #endif /* WITH_ICU_SORT */ +#include "strings_type.h" static const uint8 CASE_GENDER_LEN = 16; ///< The (maximum) length of a case/gender string. static const uint8 MAX_NUM_GENDERS = 8; ///< Maximum number of supported genders. static const uint8 MAX_NUM_CASES = 16; ///< Maximum number of supported cases. -static const uint TAB_SIZE_OFFSET = 0; ///< The offset for the tab size. -static const uint TAB_SIZE_BITS = 11; ///< The number of bits used for the tab size. -static const uint TAB_SIZE = 1 << TAB_SIZE_BITS; ///< The number of values in a tab. -static const uint TAB_COUNT_OFFSET = TAB_SIZE_BITS; ///< The offset for the tab count. -static const uint TAB_COUNT_BITS = 5; ///< The number of bits used for the amount of tabs. -static const uint TAB_COUNT = 1 << TAB_COUNT_BITS; ///< The amount of tabs. - /** Header of a language file. */ struct LanguagePackHeader { static const uint32 IDENT = 0x474E414C; ///< Identifier for OpenTTD language files, big endian for "LANG" @@ -37,7 +31,7 @@ struct LanguagePackHeader { char name[32]; ///< the international name of this language char own_name[32]; ///< the localized name of this language char isocode[16]; ///< the ISO code for the language (not country code) - uint16 offsets[TAB_COUNT]; ///< the offsets + uint16 offsets[TEXT_TAB_END]; ///< the offsets /** Thousand separator used for anything not currencies */ char digit_group_separator[8]; diff --git a/src/linkgraph/demands.cpp b/src/linkgraph/demands.cpp index 767bec2c9f..f4afbabf0a 100644 --- a/src/linkgraph/demands.cpp +++ b/src/linkgraph/demands.cpp @@ -2,11 +2,11 @@ #include "../stdafx.h" #include "demands.h" -#include +#include #include "../safeguards.h" -typedef std::list NodeList; +typedef std::queue NodeList; /** * Scale various things according to symmetric/asymmetric distribution. @@ -172,11 +172,11 @@ void DemandCalculator::CalcDemand(LinkGraphJob &job, Tscaler scaler) for (NodeID node = 0; node < job.Size(); node++) { scaler.AddNode(job[node]); if (job[node].Supply() > 0) { - supplies.push_back(node); + supplies.push(node); num_supplies++; } if (job[node].Demand() > 0) { - demands.push_back(node); + demands.push(node); num_demands++; } } @@ -191,17 +191,17 @@ void DemandCalculator::CalcDemand(LinkGraphJob &job, Tscaler scaler) while (!supplies.empty() && !demands.empty()) { NodeID from_id = supplies.front(); - supplies.pop_front(); + supplies.pop(); for (uint i = 0; i < num_demands; ++i) { assert(!demands.empty()); NodeID to_id = demands.front(); - demands.pop_front(); + demands.pop(); if (from_id == to_id) { /* Only one node with supply and demand left */ if (demands.empty() && supplies.empty()) return; - demands.push_back(to_id); + demands.push(to_id); continue; } @@ -236,7 +236,7 @@ void DemandCalculator::CalcDemand(LinkGraphJob &job, Tscaler scaler) scaler.SetDemands(job, from_id, to_id, demand_forw); if (scaler.HasDemandLeft(job[to_id])) { - demands.push_back(to_id); + demands.push(to_id); } else { num_demands--; } @@ -245,7 +245,7 @@ void DemandCalculator::CalcDemand(LinkGraphJob &job, Tscaler scaler) } if (job[from_id].UndeliveredSupply() != 0) { - supplies.push_back(from_id); + supplies.push(from_id); } else { num_supplies--; } diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index e63c2f2b38..44762c3149 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -1,4 +1,4 @@ -/* $Id: linkgraph_gui.h 26266 2014-01-19 09:26:56Z fonsinchen $ */ +/* $Id: linkgraph_gui.h 27612 2016-07-10 11:57:16Z fonsinchen $ */ /* * This file is part of OpenTTD. @@ -17,7 +17,7 @@ #include "../widget_type.h" #include "linkgraph_base.h" #include -#include +#include /** * Properties of a link between two stations. @@ -39,7 +39,7 @@ class LinkGraphOverlay { public: typedef std::map StationLinkMap; typedef std::map LinkMap; - typedef std::list > StationSupplyList; + typedef std::vector > StationSupplyList; static const uint8 LINK_COLOURS[]; diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index 6283585c66..0e104b24ee 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -1,4 +1,4 @@ -/* $Id: linkgraphjob.cpp 27178 2015-03-07 18:27:01Z frosch $ */ +/* $Id: linkgraphjob.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -61,7 +61,7 @@ void LinkGraphJob::EraseFlows(NodeID from) */ void LinkGraphJob::SpawnThread() { - if (!ThreadObject::New(&(LinkGraphSchedule::Run), this, &this->thread)) { + if (!ThreadObject::New(&(LinkGraphSchedule::Run), this, &this->thread, "ottd:linkgraph")) { this->thread = NULL; /* Of course this will hang a bit. * On the other hand, if you want to play games which make this hang noticably diff --git a/src/linkgraph/mcf.cpp b/src/linkgraph/mcf.cpp index 6fed7adead..ecdf792afe 100644 --- a/src/linkgraph/mcf.cpp +++ b/src/linkgraph/mcf.cpp @@ -32,6 +32,11 @@ public: */ inline uint GetAnnotation() const { return this->distance; } + /** + * Update the cached annotation value + */ + inline void UpdateAnnotation() { } + /** * Comparator for std containers. */ @@ -47,6 +52,8 @@ public: * can only decrease or stay the same if you add more edges. */ class CapacityAnnotation : public Path { + int cached_annotation; + public: /** @@ -62,7 +69,15 @@ public: * Return the actual value of the annotation, in this case the capacity. * @return Capacity. */ - inline int GetAnnotation() const { return this->GetCapacityRatio(); } + inline int GetAnnotation() const { return this->cached_annotation; } + + /** + * Update the cached annotation value + */ + inline void UpdateAnnotation() + { + this->cached_annotation = this->GetCapacityRatio(); + } /** * Comparator for std containers. @@ -121,7 +136,7 @@ private: LinkGraphJob &job; ///< Link graph job we're working with. /** Lookup table for getting NodeIDs from StationIDs. */ - std::map station_to_node; + std::vector station_to_node; /** Current iterator in the shares map. */ FlowStat::SharesMap::const_iterator it; @@ -137,7 +152,11 @@ public: FlowEdgeIterator(LinkGraphJob &job) : job(job) { for (NodeID i = 0; i < job.Size(); ++i) { - this->station_to_node[job[i].Station()] = i; + StationID st = job[i].Station(); + if (st >= this->station_to_node.size()) { + this->station_to_node.resize(st + 1); + } + this->station_to_node[st] = i; } } @@ -246,6 +265,7 @@ void MultiCommodityFlow::Dijkstra(NodeID source_node, PathVector &paths) paths.resize(size, NULL); for (NodeID node = 0; node < size; ++node) { Tannotation *anno = new Tannotation(node, node == source_node); + anno->UpdateAnnotation(); annos.insert(anno); paths[node] = anno; } @@ -270,6 +290,7 @@ void MultiCommodityFlow::Dijkstra(NodeID source_node, PathVector &paths) if (dest->IsBetter(source, capacity, capacity - edge.Flow(), distance)) { annos.erase(dest); dest->Fork(source, capacity, capacity - edge.Flow(), distance); + dest->UpdateAnnotation(); annos.insert(dest); } } diff --git a/src/linkgraph/refresh.cpp b/src/linkgraph/refresh.cpp index d428d36da8..89ad3ce740 100644 --- a/src/linkgraph/refresh.cpp +++ b/src/linkgraph/refresh.cpp @@ -1,4 +1,4 @@ -/* $Id: refresh.cpp 26889 2014-09-21 14:22:32Z fonsinchen $ */ +/* $Id: refresh.cpp 27614 2016-07-10 12:17:00Z fonsinchen $ */ /* * This file is part of OpenTTD. @@ -72,10 +72,15 @@ LinkRefresher::LinkRefresher(Vehicle *vehicle, HopSet *seen_hops, bool allow_mer vehicle(vehicle), seen_hops(seen_hops), cargo(CT_INVALID), allow_merge(allow_merge), is_full_loading(is_full_loading) { + memset(this->capacities, 0, sizeof(this->capacities)); + /* Assemble list of capacities and set last loading stations to 0. */ for (Vehicle *v = this->vehicle; v != NULL; v = v->Next()) { this->refit_capacities.push_back(RefitDesc(v->cargo_type, v->cargo_cap, v->refit_cap)); - if (v->refit_cap > 0) this->capacities[v->cargo_type] += v->refit_cap; + if (v->refit_cap > 0) { + assert(v->cargo_type < NUM_CARGO); + this->capacities[v->cargo_type] += v->refit_cap; + } } } @@ -200,11 +205,11 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next) StationID next_station = next->GetDestination(); Station *st = Station::GetIfValid(cur->GetDestination()); if (st != NULL && next_station != INVALID_STATION && next_station != st->index) { - for (CapacitiesMap::const_iterator i = this->capacities.begin(); i != this->capacities.end(); ++i) { + for (CargoID c = 0; c < NUM_CARGO; c++) { /* Refresh the link and give it a minimum capacity. */ - if (i->second == 0) continue; - CargoID c = i->first; + uint cargo_quantity = this->capacities[c]; + if (cargo_quantity == 0) continue; /* If not allowed to merge link graphs, make sure the stations are * already in the same link graph. */ @@ -225,7 +230,7 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next) st->index == vehicle->last_station_visited && this->vehicle->orders.list->GetTotalDuration() > (Ticks)this->vehicle->current_order_time) { - uint effective_capacity = i->second * this->vehicle->load_unload_ticks; + uint effective_capacity = cargo_quantity * this->vehicle->load_unload_ticks; if (effective_capacity > (uint)this->vehicle->orders.list->GetTotalDuration()) { IncreaseStats(st, c, next_station, effective_capacity / this->vehicle->orders.list->GetTotalDuration(), 0, @@ -233,10 +238,10 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next) } else if (RandomRange(this->vehicle->orders.list->GetTotalDuration()) < effective_capacity) { IncreaseStats(st, c, next_station, 1, 0, EUM_INCREASE | restricted_mode); } else { - IncreaseStats(st, c, next_station, i->second, 0, EUM_REFRESH | restricted_mode); + IncreaseStats(st, c, next_station, cargo_quantity, 0, EUM_REFRESH | restricted_mode); } } else { - IncreaseStats(st, c, next_station, i->second, 0, EUM_REFRESH | restricted_mode); + IncreaseStats(st, c, next_station, cargo_quantity, 0, EUM_REFRESH | restricted_mode); } } } diff --git a/src/linkgraph/refresh.h b/src/linkgraph/refresh.h index fdb4c42a5b..edd692e9eb 100644 --- a/src/linkgraph/refresh.h +++ b/src/linkgraph/refresh.h @@ -1,4 +1,4 @@ -/* $Id: refresh.h 27020 2014-10-15 18:31:37Z rubidium $ */ +/* $Id: refresh.h 27614 2016-07-10 12:17:00Z fonsinchen $ */ /* * This file is part of OpenTTD. @@ -14,7 +14,7 @@ #include "../cargo_type.h" #include "../vehicle_base.h" -#include +#include #include #include @@ -79,12 +79,11 @@ protected: bool operator<(const Hop &other) const; }; - typedef std::list RefitList; - typedef std::map CapacitiesMap; + typedef std::vector RefitList; typedef std::set HopSet; Vehicle *vehicle; ///< Vehicle for which the links should be refreshed. - CapacitiesMap capacities; ///< Current added capacities per cargo ID in the consist. + uint capacities[NUM_CARGO]; ///< Current added capacities per cargo ID in the consist. RefitList refit_capacities; ///< Current state of capacity remaining from previous refits versus overall capacity per vehicle in the consist. HopSet *seen_hops; ///< Hops already seen. If the same hop is seen twice we stop the algorithm. This is shared between all Refreshers of the same run. CargoID cargo; ///< Cargo given in last refit order. diff --git a/src/main_gui.cpp b/src/main_gui.cpp index fe26335e94..3f43dd05b6 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: main_gui.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: main_gui.cpp 27571 2016-05-22 10:07:48Z frosch $ */ /* * This file is part of OpenTTD. @@ -118,7 +118,7 @@ bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, HighLightStyl } -void CcPlaySound10(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) +void CcPlaySound_EXPLOSION(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) { if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_12_EXPLOSION, tile); } diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 5e7737910c..285be81b95 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: misc_gui.cpp 27588 2016-05-29 18:56:42Z frosch $ */ +/* $Id: misc_gui.cpp 27781 2017-03-11 21:02:32Z frosch $ */ /* * This file is part of OpenTTD. @@ -162,6 +162,7 @@ public: td.airport_class = STR_NULL; td.airport_name = STR_NULL; td.airport_tile_name = STR_NULL; + td.railtype = STR_NULL; td.rail_speed = 0; td.road_speed = 0; @@ -272,6 +273,13 @@ public: line_nr++; } + /* Rail type name */ + if (td.railtype != STR_NULL) { + SetDParam(0, td.railtype); + GetString(this->landinfo_data[line_nr], STR_LANG_AREA_INFORMATION_RAIL_TYPE, lastof(this->landinfo_data[line_nr])); + line_nr++; + } + /* Rail speed limit */ if (td.rail_speed != 0) { SetDParam(0, td.rail_speed); @@ -432,6 +440,7 @@ static const char * const _credits[] = { " Mike Ragsdale - OpenTTD installer", " Christian Rosentreter (tokai) - MorphOS / AmigaOS port", " Richard Kempton (richK) - additional airports, initial TGP implementation", + " HvS - titlegame", "", " Alberto Demichelis - Squirrel scripting language \xC2\xA9 2003-2008", " L. Peter Deutsch - MD5 implementation \xC2\xA9 1999, 2000, 2002", @@ -672,8 +681,8 @@ struct TooltipsWindow : public Window /* Correctly position the tooltip position, watch out for window and cursor size * Clamp value to below main toolbar and above statusbar. If tooltip would * go below window, flip it so it is shown above the cursor */ - pt.y = Clamp(_cursor.pos.y + _cursor.size.y + _cursor.offs.y + 5, scr_top, scr_bot); - if (pt.y + sm_height > scr_bot) pt.y = min(_cursor.pos.y + _cursor.offs.y - 5, scr_bot) - sm_height; + pt.y = Clamp(_cursor.pos.y + _cursor.total_size.y + _cursor.total_offs.y + 5, scr_top, scr_bot); + if (pt.y + sm_height > scr_bot) pt.y = min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; pt.x = sm_width >= _screen.width ? 0 : Clamp(_cursor.pos.x - (sm_width >> 1), 0, _screen.width - sm_width); return pt; diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp index b0cb879176..935d7bd2f1 100644 --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -1,4 +1,4 @@ -/* $Id: cocoa_m.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: cocoa_m.cpp 27675 2016-10-31 19:29:01Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -30,6 +30,10 @@ #include "../safeguards.h" +#if !defined(HAVE_OSX_1011_SDK) +#define kMusicSequenceFile_AnyType 0 +#endif + static FMusicDriver_Cocoa iFMusicDriver_Cocoa; @@ -68,7 +72,7 @@ static void DoSetVolume() * risk compilation errors. The header AudioComponent.h * was introduced in 10.6 so use it to decide which * type definition to use. */ -#ifdef __AUDIOCOMPONENT_H__ +#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK) AudioComponentDescription desc; #else ComponentDescription desc; @@ -159,7 +163,7 @@ void MusicDriver_Cocoa::PlaySong(const char *filename) #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) if (MacOSVersionIsAtLeast(10, 5, 0)) { - if (MusicSequenceFileLoad(_sequence, url, 0, 0) != noErr) { + if (MusicSequenceFileLoad(_sequence, url, kMusicSequenceFile_AnyType, 0) != noErr) { DEBUG(driver, 0, "cocoa_m: Failed to load MIDI file"); CFRelease(url); return; diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index 1e0b1835e5..bf8255a98a 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -1,4 +1,4 @@ -/* $Id: win32_m.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: win32_m.cpp 27673 2016-10-30 18:22:55Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -14,6 +14,7 @@ #include "win32_m.h" #include #include +#include "../os/windows/win32.h" #include "../safeguards.h" @@ -105,6 +106,8 @@ static bool MidiIntIsSongPlaying() static DWORD WINAPI MidiThread(LPVOID arg) { + SetWin32ThreadName(-1, "ottd:win-midi"); + do { char *s; int vol; diff --git a/src/network/core/config.h b/src/network/core/config.h index efe524bb56..a7880e504b 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -1,4 +1,4 @@ -/* $Id: config.h 25590 2013-07-12 17:15:13Z planetmaker $ */ +/* $Id: config.h 27729 2017-01-14 13:12:49Z frosch $ */ /* * This file is part of OpenTTD. @@ -55,8 +55,7 @@ static const uint NETWORK_GRF_NAME_LENGTH = 80; ///< Maximum l /** * Maximum number of GRFs that can be sent. - * This value is related to number of handles (files) OpenTTD can open. - * This is currently 64. Two are used for configuration and sound. + * This limit is reached when PACKET_UDP_SERVER_RESPONSE reaches the maximum size of SEND_MTU bytes. */ static const uint NETWORK_MAX_GRF_COUNT = 62; diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index fe1cc9c92c..afd0244e3b 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -1,4 +1,4 @@ -/* $Id: tcp_connect.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: tcp_connect.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -35,7 +35,7 @@ TCPConnecter::TCPConnecter(const NetworkAddress &address) : address(address) { *_tcp_connecters.Append() = this; - if (!ThreadObject::New(TCPConnecter::ThreadEntry, this, &this->thread)) { + if (!ThreadObject::New(TCPConnecter::ThreadEntry, this, &this->thread, "ottd:tcp")) { this->Connect(); } } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index c800760f3b..a710475f75 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1,4 +1,4 @@ -/* $Id: network_client.cpp 27020 2014-10-15 18:31:37Z rubidium $ */ +/* $Id: network_client.cpp 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -520,7 +520,7 @@ bool ClientNetworkGameSocketHandler::IsConnected() * DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p ************/ -extern bool SafeLoad(const char *filename, int mode, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL); +extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL); NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *p) { @@ -836,7 +836,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet /* The map is done downloading, load it */ ClearErrorMessages(); - bool load_success = SafeLoad(NULL, SL_LOAD, GM_NORMAL, NO_DIRECTORY, lf); + bool load_success = SafeLoad(NULL, SLO_LOAD, DFT_GAME_FILE, GM_NORMAL, NO_DIRECTORY, lf); /* Long savegame loads shouldn't affect the lag calculation! */ this->last_packet = _realtime_tick; diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp index 2337265db1..f628139e8c 100644 --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -1,4 +1,4 @@ -/* $Id: network_command.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: network_command.cpp 27571 2016-05-22 10:07:48Z frosch $ */ /* * This file is part of OpenTTD. @@ -27,7 +27,7 @@ static CommandCallback * const _callback_table[] = { /* 0x01 */ CcBuildPrimaryVehicle, /* 0x02 */ CcBuildAirport, /* 0x03 */ CcBuildBridge, - /* 0x04 */ CcBuildCanal, + /* 0x04 */ CcPlaySound_SPLAT_WATER, /* 0x05 */ CcBuildDocks, /* 0x06 */ CcFoundTown, /* 0x07 */ CcBuildRoadTunnel, @@ -36,9 +36,9 @@ static CommandCallback * const _callback_table[] = { /* 0x0A */ CcRoadDepot, /* 0x0B */ CcRailDepot, /* 0x0C */ CcPlaceSign, - /* 0x0D */ CcPlaySound10, - /* 0x0E */ CcPlaySound1D, - /* 0x0F */ CcPlaySound1E, + /* 0x0D */ CcPlaySound_EXPLOSION, + /* 0x0E */ CcPlaySound_SPLAT_OTHER, + /* 0x0F */ CcPlaySound_SPLAT_RAIL, /* 0x10 */ CcStation, /* 0x11 */ CcTerraform, /* 0x12 */ CcAI, diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index ab04618e7b..ad08b5d731 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -1,4 +1,4 @@ -/* $Id: network_content.cpp 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: network_content.cpp 27576 2016-05-22 10:45:46Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 70374a23c0..00a8ac72bb 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: network_gui.cpp 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: network_gui.cpp 27653 2016-09-04 16:06:50Z alberth $ */ /* * This file is part of OpenTTD. @@ -1187,17 +1187,17 @@ struct NetworkStartServerWindow : public Window { case WID_NSS_LOAD_GAME: _is_network_server = true; - ShowSaveLoadDialog(SLD_LOAD_GAME); + ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break; case WID_NSS_PLAY_SCENARIO: _is_network_server = true; - ShowSaveLoadDialog(SLD_LOAD_SCENARIO); + ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break; case WID_NSS_PLAY_HEIGHTMAP: _is_network_server = true; - ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); + ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break; } } diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 2f454d0697..9373b48f40 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -1,4 +1,4 @@ -/* $Id: network_udp.cpp 27400 2015-09-19 16:49:46Z rubidium $ */ +/* $Id: network_udp.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -109,7 +109,7 @@ static void NetworkUDPQueryServerThread(void *pntr) void NetworkUDPQueryServer(NetworkAddress address, bool manually) { NetworkUDPQueryServerInfo *info = new NetworkUDPQueryServerInfo(address, manually); - if (address.IsResolved() || !ThreadObject::New(NetworkUDPQueryServerThread, info)) { + if (address.IsResolved() || !ThreadObject::New(NetworkUDPQueryServerThread, info, NULL, "ottd:udp-query")) { NetworkUDPQueryServerThread(info); } } @@ -565,7 +565,7 @@ void NetworkUDPRemoveAdvertise(bool blocking) /* Check if we are advertising */ if (!_networking || !_network_server || !_network_udp_server) return; - if (blocking || !ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL)) { + if (blocking || !ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL, NULL, "ottd:udp-advert")) { NetworkUDPRemoveAdvertiseThread(NULL); } } @@ -648,7 +648,7 @@ void NetworkUDPAdvertise() if (_next_advertisement < _last_advertisement) _next_advertisement = UINT32_MAX; if (_next_retry < _last_advertisement) _next_retry = UINT32_MAX; - if (!ThreadObject::New(NetworkUDPAdvertiseThread, NULL)) { + if (!ThreadObject::New(NetworkUDPAdvertiseThread, NULL, NULL, "ottd:udp-advert")) { NetworkUDPAdvertiseThread(NULL); } } diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 800d98ad29..e9c7bc7b2d 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf.cpp 27588 2016-05-29 18:56:42Z frosch $ */ +/* $Id: newgrf.cpp 27769 2017-03-05 14:45:13Z frosch $ */ /* * This file is part of OpenTTD. @@ -550,24 +550,29 @@ static StringID TTDPStringIDToOTTDStringIDMapping(StringID str) */ StringID MapGRFStringID(uint32 grfid, StringID str) { - /* 0xD0 and 0xDC stand for all the TextIDs in the range - * of 0xD000 (misc graphics texts) and 0xDC00 (misc persistent texts). - * These strings are unique to each grf file, and thus require to be used with the - * grfid in which they are declared */ - switch (GB(str, 8, 8)) { - case 0xD0: case 0xD1: case 0xD2: case 0xD3: - case 0xDC: - return GetGRFStringID(grfid, str); - - case 0xD4: case 0xD5: case 0xD6: case 0xD7: - /* Strings embedded via 0x81 have 0x400 added to them (no real - * explanation why...) */ - return GetGRFStringID(grfid, str - 0x400); - - default: break; + if (IsInsideMM(str, 0xD800, 0xE000)) { + /* General text provided by NewGRF. + * In the specs this is called the 0xDCxx range (misc presistent texts), + * but we meanwhile extended the range to 0xD800-0xDFFF. + * Note: We are not involved in the "persistent" business, since we do not store + * any NewGRF strings in savegames. */ + return GetGRFStringID(grfid, str); + } else if (IsInsideMM(str, 0xD000, 0xD800)) { + /* Callback text provided by NewGRF. + * In the specs this is called the 0xD0xx range (misc graphics texts). + * These texts can be returned by various callbacks. + * + * Due to how TTDP implements the GRF-local- to global-textid translation + * texts included via 0x80 or 0x81 control codes have to add 0x400 to the textid. + * We do not care about that difference and just mask out the 0x400 bit. + */ + str &= ~0x400; + return GetGRFStringID(grfid, str); + } else { + /* The NewGRF wants to include/reference an original TTD string. + * Try our best to find an equivalent one. */ + return TTDPStringIDToOTTDStringIDMapping(str); } - - return TTDPStringIDToOTTDStringIDMapping(str); } static std::map _grf_id_overrides; @@ -5474,13 +5479,12 @@ static void FeatureNewName(ByteReader *buf) } break; - case GSF_INDUSTRIES: { - AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, true, name, STR_UNDEFINED); - break; - } - - case GSF_HOUSES: default: + if (IsInsideMM(id, 0xD000, 0xD400) || IsInsideMM(id, 0xD800, 0xE000)) { + AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, true, name, STR_UNDEFINED); + break; + } + switch (GB(id, 8, 8)) { case 0xC4: // Station class name if (_cur.grffile->stations == NULL || _cur.grffile->stations[GB(id, 0, 8)] == NULL) { @@ -5515,14 +5519,6 @@ static void FeatureNewName(ByteReader *buf) } break; - case 0xD0: - case 0xD1: - case 0xD2: - case 0xD3: - case 0xDC: - AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, true, name, STR_UNDEFINED); - break; - default: grfmsg(7, "FeatureNewName: Unsupported ID (0x%04X)", id); break; @@ -5584,7 +5580,7 @@ static const Action5Type _action5_types[] = { /* 0x02 */ { A5BLOCK_INVALID, 0, 0, 0, "Type 0x02" }, /* 0x03 */ { A5BLOCK_INVALID, 0, 0, 0, "Type 0x03" }, /* 0x04 */ { A5BLOCK_ALLOW_OFFSET, SPR_SIGNALS_BASE, 1, PRESIGNAL_SEMAPHORE_AND_PBS_SPRITE_COUNT, "Signal graphics" }, - /* 0x05 */ { A5BLOCK_ALLOW_OFFSET, SPR_ELRAIL_BASE, 1, ELRAIL_SPRITE_COUNT, "Catenary graphics" }, + /* 0x05 */ { A5BLOCK_ALLOW_OFFSET, SPR_ELRAIL_BASE, 1, ELRAIL_SPRITE_COUNT, "Rail catenary graphics" }, /* 0x06 */ { A5BLOCK_ALLOW_OFFSET, SPR_SLOPES_BASE, 1, NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT, "Foundation graphics" }, /* 0x07 */ { A5BLOCK_INVALID, 0, 75, 0, "TTDP GUI graphics" }, // Not used by OTTD. /* 0x08 */ { A5BLOCK_ALLOW_OFFSET, SPR_CANALS_BASE, 1, CANALS_SPRITE_COUNT, "Canal graphics" }, @@ -5621,7 +5617,7 @@ static void GraphicsNew(ByteReader *buf) uint16 offset = HasBit(type, 7) ? buf->ReadExtendedByte() : 0; ClrBit(type, 7); // Clear the high bit as that only indicates whether there is an offset. - if ((type == 0x0D) && (num == 10) && _cur.grffile->is_ottdfile) { + if ((type == 0x0D) && (num == 10) && HasBit(_cur.grfconfig->flags, GCF_SYSTEM)) { /* Special not-TTDP-compatible case used in openttd.grf * Missing shore sprites and initialisation of SPR_SHORE_BASE */ grfmsg(2, "GraphicsNew: Loading 10 missing shore sprites from extra grf."); @@ -5693,35 +5689,6 @@ static void SkipAct5(ByteReader *buf) grfmsg(3, "SkipAct5: Skipping %d sprites", _cur.skip_sprites); } -/** - * Check whether we are (obviously) missing some of the extra - * (Action 0x05) sprites that we like to use. - * When missing sprites are found a warning will be shown. - */ -void CheckForMissingSprites() -{ - /* Don't break out quickly, but allow to check the other - * sprites as well, so we can give the best information. */ - bool missing = false; - for (uint8 i = 0; i < lengthof(_action5_types); i++) { - const Action5Type *type = &_action5_types[i]; - if (type->block_type == A5BLOCK_INVALID) continue; - - for (uint j = 0; j < type->max_sprites; j++) { - if (!SpriteExists(type->sprite_base + j)) { - DEBUG(grf, 0, "%s sprites are missing", type->name); - missing = true; - /* No need to log more of the same. */ - break; - } - } - } - - if (missing) { - ShowErrorMessage(IsReleasedVersion() ? STR_NEWGRF_ERROR_MISSING_SPRITES : STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE, INVALID_STRING_ID, WL_CRITICAL); - } -} - /** * Reads a variable common to VarAction2 and Action7/9/D. * @@ -6199,7 +6166,7 @@ static void ScanInfo(ByteReader *buf) } /* GRF IDs starting with 0xFF are reserved for internal TTDPatch use */ - if (GB(grfid, 24, 8) == 0xFF) SetBit(_cur.grfconfig->flags, GCF_SYSTEM); + if (GB(grfid, 0, 8) == 0xFF) SetBit(_cur.grfconfig->flags, GCF_SYSTEM); AddGRFTextToList(&_cur.grfconfig->name->text, 0x7F, grfid, false, name); @@ -7273,7 +7240,7 @@ static void TranslateGRFStrings(ByteReader *buf) byte num_strings = buf->ReadByte(); uint16 first_id = buf->ReadWord(); - if (!((first_id >= 0xD000 && first_id + num_strings <= 0xD3FF) || (first_id >= 0xDC00 && first_id + num_strings <= 0xDCFF))) { + if (!((first_id >= 0xD000 && first_id + num_strings <= 0xD400) || (first_id >= 0xD800 && first_id + num_strings <= 0xE000))) { grfmsg(7, "TranslateGRFStrings: Attempting to set out-of-range string IDs in action 13 (first: 0x%4X, number: 0x%2X)", first_id, num_strings); return; } @@ -8858,11 +8825,10 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage, S if (_cur.grffile == NULL) usererror("File '%s' lost in cache.\n", filename); if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return; if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return; - _cur.grffile->is_ottdfile = config->IsOpenTTDBaseGRF(); } - if (file_index > LAST_GRF_SLOT) { - DEBUG(grf, 0, "'%s' is not loaded as the maximum number of GRFs has been reached", filename); + if (file_index >= MAX_FILE_SLOTS) { + DEBUG(grf, 0, "'%s' is not loaded as the maximum number of file slots has been reached", filename); config->status = GCS_DISABLED; config->error = new GRFError(STR_NEWGRF_ERROR_MSG_FATAL, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED); return; @@ -9204,8 +9170,9 @@ static void AfterLoadGRFs() * Load all the NewGRFs. * @param load_index The offset for the first sprite to add. * @param file_index The Fio index of the first NewGRF to load. + * @param num_baseset Number of NewGRFs at the front of the list to look up in the baseset dir instead of the newgrf dir. */ -void LoadNewGRF(uint load_index, uint file_index) +void LoadNewGRF(uint load_index, uint file_index, uint num_baseset) { /* In case of networking we need to "sync" the start values * so all NewGRFs are loaded equally. For this we use the @@ -9264,13 +9231,14 @@ void LoadNewGRF(uint load_index, uint file_index) } uint slot = file_index; + uint num_non_static = 0; _cur.stage = stage; for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue; if (stage > GLS_INIT && HasBit(c->flags, GCF_INIT_ONLY)) continue; - Subdirectory subdir = slot == file_index ? BASESET_DIR : NEWGRF_DIR; + Subdirectory subdir = slot < file_index + num_baseset ? BASESET_DIR : NEWGRF_DIR; if (!FioCheckFileExists(c->filename, subdir)) { DEBUG(grf, 0, "NewGRF file is missing '%s'; disabling", c->filename); c->status = GCS_NOT_FOUND; @@ -9278,6 +9246,16 @@ void LoadNewGRF(uint load_index, uint file_index) } if (stage == GLS_LABELSCAN) InitNewGRFFile(c); + + if (!HasBit(c->flags, GCF_STATIC) && !HasBit(c->flags, GCF_SYSTEM)) { + if (num_non_static == NETWORK_MAX_GRF_COUNT) { + DEBUG(grf, 0, "'%s' is not loaded as the maximum number of non-static GRFs has been reached", c->filename); + c->status = GCS_DISABLED; + c->error = new GRFError(STR_NEWGRF_ERROR_MSG_FATAL, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED); + continue; + } + num_non_static++; + } LoadNewGRFFile(c, slot++, stage, subdir); if (stage == GLS_RESERVE) { SetBit(c->flags, GCF_RESERVED); diff --git a/src/newgrf.h b/src/newgrf.h index 8de6788153..bfafb3b9e9 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -1,4 +1,4 @@ -/* $Id: newgrf.h 27200 2015-03-20 19:27:15Z frosch $ */ +/* $Id: newgrf.h 27730 2017-01-14 15:48:19Z frosch $ */ /* * This file is part of OpenTTD. @@ -103,7 +103,6 @@ struct GRFLabel { /** Dynamic data of a loaded NewGRF */ struct GRFFile : ZeroedMemoryAllocator { char *filename; - bool is_ottdfile; uint32 grfid; byte grf_version; @@ -184,7 +183,7 @@ extern GRFLoadedFeatures _loaded_newgrf_features; byte GetGRFContainerVersion(); void LoadNewGRFFile(struct GRFConfig *config, uint file_index, GrfLoadingStage stage, Subdirectory subdir); -void LoadNewGRF(uint load_index, uint file_index); +void LoadNewGRF(uint load_index, uint file_index, uint num_baseset); void ReloadNewGRFData(); // in saveload/afterload.cpp void ResetNewGRFData(); void ResetPersistentNewGRFData(); diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index 0b2c360472..d21be11d43 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -1,4 +1,4 @@ -/* $Id: newgrf_commons.h 27587 2016-05-29 18:52:56Z frosch $ */ +/* $Id: newgrf_commons.h 27534 2016-04-02 16:02:22Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 1d7a9cf9a3..a92783ff7c 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_config.cpp 27063 2014-11-18 20:12:42Z frosch $ */ +/* $Id: newgrf_config.cpp 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -192,6 +192,7 @@ GRFConfig *_all_grfs; GRFConfig *_grfconfig; GRFConfig *_grfconfig_newgame; GRFConfig *_grfconfig_static; +uint _missing_extra_graphics = 0; /** * Construct a new GRFError. @@ -420,12 +421,12 @@ bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir) config->SetSuitablePalette(); config->FinalizeParameterInfo(); - /* Skip if the grfid is 0 (not read) or 0xFFFFFFFF (ttdp system grf) */ - if (config->ident.grfid == 0 || config->ident.grfid == 0xFFFFFFFF || config->IsOpenTTDBaseGRF()) return false; + /* Skip if the grfid is 0 (not read) or if it is an internal GRF */ + if (config->ident.grfid == 0 || HasBit(config->flags, GCF_SYSTEM)) return false; if (is_static) { /* Perform a 'safety scan' for static GRFs */ - LoadNewGRFFile(config, 62, GLS_SAFETYSCAN, subdir); + LoadNewGRFFile(config, CONFIG_SLOT, GLS_SAFETYSCAN, subdir); /* GCF_UNSAFE is set if GLS_SAFETYSCAN finds unsafe actions */ if (HasBit(config->flags, GCF_UNSAFE)) return false; @@ -786,7 +787,7 @@ void ScanNewGRFFiles(NewGRFScanCallback *callback) /* Only then can we really start, especially by marking the whole screen dirty. Get those other windows hidden!. */ MarkWholeScreenDirty(); - if (!VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&DoScanNewGRFFiles, callback, NULL)) { + if (!VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&DoScanNewGRFFiles, callback, NULL, "ottd:newgrf-scan")) { _modal_progress_work_mutex->EndCritical(); _modal_progress_paint_mutex->EndCritical(); DoScanNewGRFFiles(callback); @@ -915,15 +916,6 @@ char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last) /** Base GRF ID for OpenTTD's base graphics GRFs. */ static const uint32 OPENTTD_GRAPHICS_BASE_GRF_ID = BSWAP32(0xFF4F5400); -/** - * Checks whether this GRF is a OpenTTD base graphic GRF. - * @return true if and only if it is a base GRF. - */ -bool GRFConfig::IsOpenTTDBaseGRF() const -{ - return (this->ident.grfid & 0x00FFFFFF) == OPENTTD_GRAPHICS_BASE_GRF_ID; -} - /** * Search a textfile file next to this NewGRF. * @param type The type of the textfile to search for. diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 3b3882b56b..a4e74e3d44 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -1,4 +1,4 @@ -/* $Id: newgrf_config.h 26612 2014-05-24 19:13:34Z alberth $ */ +/* $Id: newgrf_config.h 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -179,8 +179,6 @@ struct GRFConfig : ZeroedMemoryAllocator { void CopyParams(const GRFConfig &src); - bool IsOpenTTDBaseGRF() const; - const char *GetTextfile(TextfileType type) const; const char *GetName() const; const char *GetDescription() const; @@ -204,6 +202,7 @@ extern GRFConfig *_all_grfs; ///< First item in list of all scanned New extern GRFConfig *_grfconfig; ///< First item in list of current GRF set up extern GRFConfig *_grfconfig_newgame; ///< First item in list of default GRF set up extern GRFConfig *_grfconfig_static; ///< First item in list of static GRF set up +extern uint _missing_extra_graphics; ///< Number of sprites provided by the fallback extra GRF, i.e. missing in the baseset. /** Callback for NewGRF scanning. */ struct NewGRFScanCallback { @@ -216,7 +215,6 @@ struct NewGRFScanCallback { size_t GRFGetSizeOfDataSection(FILE *f); void ScanNewGRFFiles(NewGRFScanCallback *callback); -void CheckForMissingSprites(); const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum = NULL, uint32 desired_version = 0); GRFConfig *GetGRFConfig(uint32 grfid, uint32 mask = 0xFFFFFFFF); GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only); diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index ce8817d163..91fcf77275 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_engine.cpp 27075 2014-12-07 14:13:21Z frosch $ */ +/* $Id: newgrf_engine.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -1023,17 +1023,29 @@ VehicleResolverObject::VehicleResolverObject(EngineID engine_type, const Vehicle -SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type) +void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) { - VehicleResolverObject object(engine, v, VehicleResolverObject::WO_CACHED, false, CBID_NO_CALLBACK, image_type); - const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->GetNumResults() == 0) return 0; + VehicleResolverObject object(engine, v, VehicleResolverObject::WO_CACHED, false, CBID_NO_CALLBACK); + result->Clear(); - return group->GetResult() + (direction % group->GetNumResults()); + bool sprite_stack = HasBit(EngInfo(engine)->misc_flags, EF_SPRITE_STACK); + uint max_stack = sprite_stack ? lengthof(result->seq) : 1; + for (uint stack = 0; stack < max_stack; ++stack) { + object.ResetState(); + object.callback_param1 = image_type | (stack << 8); + const SpriteGroup *group = object.Resolve(); + uint32 reg100 = sprite_stack ? GetRegister(0x100) : 0; + if (group != NULL && group->GetNumResults() != 0) { + result->seq[result->count].sprite = group->GetResult() + (direction % group->GetNumResults()); + result->seq[result->count].pal = GB(reg100, 0, 16); // zero means default recolouring + result->count++; + } + if (!HasBit(reg100, 31)) break; + } } -SpriteID GetRotorOverrideSprite(EngineID engine, const Aircraft *v, bool info_view, EngineImageType image_type) +void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, bool info_view, EngineImageType image_type, VehicleSpriteSeq *result) { const Engine *e = Engine::Get(engine); @@ -1041,14 +1053,24 @@ SpriteID GetRotorOverrideSprite(EngineID engine, const Aircraft *v, bool info_vi assert(e->type == VEH_AIRCRAFT); assert(!(e->u.air.subtype & AIR_CTOL)); - VehicleResolverObject object(engine, v, VehicleResolverObject::WO_SELF, info_view, CBID_NO_CALLBACK, image_type); - const SpriteGroup *group = object.Resolve(); + VehicleResolverObject object(engine, v, VehicleResolverObject::WO_SELF, info_view, CBID_NO_CALLBACK); + result->Clear(); + uint rotor_pos = v == NULL || info_view ? 0 : v->Next()->Next()->state; - if (group == NULL || group->GetNumResults() == 0) return 0; - - if (v == NULL || info_view) return group->GetResult(); - - return group->GetResult() + (v->Next()->Next()->state % group->GetNumResults()); + bool sprite_stack = HasBit(e->info.misc_flags, EF_SPRITE_STACK); + uint max_stack = sprite_stack ? lengthof(result->seq) : 1; + for (uint stack = 0; stack < max_stack; ++stack) { + object.ResetState(); + object.callback_param1 = image_type | (stack << 8); + const SpriteGroup *group = object.Resolve(); + uint32 reg100 = sprite_stack ? GetRegister(0x100) : 0; + if (group != NULL && group->GetNumResults() != 0) { + result->seq[result->count].sprite = group->GetResult() + (rotor_pos % group->GetNumResults()); + result->seq[result->count].pal = GB(reg100, 0, 16); // zero means default recolouring + result->count++; + } + if (!HasBit(reg100, 31)) break; + } } diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index 2ffa065d88..f8342d4646 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -1,4 +1,4 @@ -/* $Id: newgrf_engine.h 26388 2014-03-03 20:02:31Z frosch $ */ +/* $Id: newgrf_engine.h 27666 2016-10-16 14:57:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -64,13 +64,19 @@ static const uint TRAININFO_DEFAULT_VEHICLE_WIDTH = 29; static const uint ROADVEHINFO_DEFAULT_VEHICLE_WIDTH = 32; static const uint VEHICLEINFO_FULL_VEHICLE_WIDTH = 32; +struct VehicleSpriteSeq; + void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, EngineID *train_id, uint trains); const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine); void SetCustomEngineSprites(EngineID engine, byte cargo, const struct SpriteGroup *group); -SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type); -SpriteID GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, bool info_view, EngineImageType image_type); -#define GetCustomRotorSprite(v, i, image_type) GetRotorOverrideSprite(v->engine_type, v, i, image_type) -#define GetCustomRotorIcon(et, image_type) GetRotorOverrideSprite(et, NULL, true, image_type) + +void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result); +#define GetCustomVehicleSprite(v, direction, image_type, result) GetCustomEngineSprite(v->engine_type, v, direction, image_type, result) +#define GetCustomVehicleIcon(et, direction, image_type, result) GetCustomEngineSprite(et, NULL, direction, image_type, result) + +void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, bool info_view, EngineImageType image_type, VehicleSpriteSeq *result); +#define GetCustomRotorSprite(v, i, image_type, result) GetRotorOverrideSprite(v->engine_type, v, i, image_type, result) +#define GetCustomRotorIcon(et, image_type, result) GetRotorOverrideSprite(et, NULL, true, image_type, result) /* Forward declaration of GRFFile, to avoid unnecessary inclusion of newgrf.h * elsewhere... */ @@ -81,8 +87,6 @@ void SetEngineGRF(EngineID engine, const struct GRFFile *file); uint16 GetVehicleCallback(CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v); uint16 GetVehicleCallbackParent(CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v, const Vehicle *parent); bool UsesWagonOverride(const Vehicle *v); -#define GetCustomVehicleSprite(v, direction, image_type) GetCustomEngineSprite(v->engine_type, v, direction, image_type) -#define GetCustomVehicleIcon(et, direction, image_type) GetCustomEngineSprite(et, NULL, direction, image_type) /* Handler to Evaluate callback 36. If the callback fails (i.e. most of the * time) orig_value is returned */ diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 1f82e6bc56..e4cf835ace 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_gui.cpp 27381 2015-08-10 20:24:13Z michi_cc $ */ +/* $Id: newgrf_gui.cpp 27729 2017-01-14 13:12:49Z frosch $ */ /* * This file is part of OpenTTD. @@ -39,10 +39,6 @@ #include #include "safeguards.h" -/* Maximum number of NewGRFs that may be loaded. Six reserved slots are: - * 0 - config, 1 - sound, 2 - base, 3 - logos, 4 - climate, 5 - extra */ -static const int MAX_NEWGRFS = MAX_FILE_SLOTS - 6; - /** * Show the first NewGRF error we can find. */ @@ -1279,7 +1275,6 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { /* All widgets are now enabled, so disable widgets we can't use */ if (this->active_sel == this->actives) this->DisableWidget(WID_NS_MOVE_UP); if (this->active_sel->next == NULL) this->DisableWidget(WID_NS_MOVE_DOWN); - if (this->active_sel->IsOpenTTDBaseGRF()) this->DisableWidget(WID_NS_REMOVE); } this->SetWidgetDisabledState(WID_NS_PRESET_DELETE, this->preset == -1); @@ -1510,7 +1505,7 @@ private: { if (this->avail_sel == NULL || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) return false; - int count = 0; + uint count = 0; GRFConfig **entry = NULL; GRFConfig **list; /* Find last entry in the list, checking for duplicate grfid on the way */ @@ -1520,10 +1515,10 @@ private: ShowErrorMessage(STR_NEWGRF_DUPLICATE_GRFID, INVALID_STRING_ID, WL_INFO); return false; } - count++; + if (!HasBit((*list)->flags, GCF_STATIC)) count++; } if (entry == NULL) entry = list; - if (count >= MAX_NEWGRFS) { + if (count >= NETWORK_MAX_GRF_COUNT) { ShowErrorMessage(STR_NEWGRF_TOO_MANY_NEWGRFS, INVALID_STRING_ID, WL_INFO); return false; } diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 909d318f1b..73e95ff557 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_house.cpp 27590 2016-05-29 19:01:50Z frosch $ */ +/* $Id: newgrf_house.cpp 27574 2016-05-22 10:23:22Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 3615d66b03..5b1c04d91a 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_spritegroup.cpp 27607 2016-06-30 18:36:01Z frosch $ */ +/* $Id: newgrf_spritegroup.cpp 27600 2016-06-13 17:34:18Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 68f0ae31fb..905786c57b 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_text.cpp 26713 2014-08-03 11:59:07Z frosch $ */ +/* $Id: newgrf_text.cpp 27758 2017-02-26 19:41:30Z frosch $ */ /* * This file is part of OpenTTD. @@ -35,9 +35,6 @@ #include "safeguards.h" -#define GRFTAB 28 -#define TABSIZE 11 - /** * Explains the newgrf shift bit positioning. * the grf base will not be used in order to find the string, but rather for @@ -159,7 +156,7 @@ struct GRFTextEntry { static uint _num_grf_texts = 0; -static GRFTextEntry _grf_text[(1 << TABSIZE) * 3]; +static GRFTextEntry _grf_text[TAB_SIZE_NEWGRF]; static byte _currentLangID = GRFLX_ENGLISH; ///< by default, english is used. /** @@ -527,6 +524,7 @@ char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newline case 0x1B: case 0x1C: case 0x1D: + case 0x1E: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_DATE_LONG + code - 0x16); break; @@ -695,7 +693,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne grfmsg(3, "Added 0x%X: grfid %08X string 0x%X lang 0x%X string '%s'", id, grfid, stringid, newtext->langid, newtext->text); - return (GRFTAB << TABSIZE) + id; + return MakeStringID(TEXT_TAB_NEWGRF_START, id); } /** @@ -705,7 +703,7 @@ StringID GetGRFStringID(uint32 grfid, uint16 stringid) { for (uint id = 0; id < _num_grf_texts; id++) { if (_grf_text[id].grfid == grfid && _grf_text[id].stringid == stringid) { - return (GRFTAB << TABSIZE) + id; + return MakeStringID(TEXT_TAB_NEWGRF_START, id); } } @@ -996,6 +994,7 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const case SCC_NEWGRF_PRINT_WORD_WEIGHT_SHORT: case SCC_NEWGRF_PRINT_WORD_POWER: case SCC_NEWGRF_PRINT_WORD_STATION_NAME: + case SCC_NEWGRF_PRINT_WORD_CARGO_NAME: if (argv_size < 1) { DEBUG(misc, 0, "Too many NewGRF string parameters."); return 0; @@ -1059,6 +1058,12 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const case SCC_NEWGRF_PRINT_WORD_STRING_ID: *argv = MapGRFStringID(_newgrf_textrefstack.grffile->grfid, _newgrf_textrefstack.PopUnsignedWord()); break; + + case SCC_NEWGRF_PRINT_WORD_CARGO_NAME: { + CargoID cargo = GetCargoTranslation(_newgrf_textrefstack.PopUnsignedWord(), _newgrf_textrefstack.grffile); + *argv = cargo < NUM_CARGO ? 1 << cargo : 0; + break; + } } } else { /* Consume additional parameter characters */ @@ -1128,6 +1133,9 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const case SCC_NEWGRF_PRINT_WORD_CARGO_TINY: return SCC_CARGO_TINY; + case SCC_NEWGRF_PRINT_WORD_CARGO_NAME: + return SCC_CARGO_LIST; + case SCC_NEWGRF_PRINT_WORD_STATION_NAME: return SCC_STATION_NAME; diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index e35ff9d90e..3622949c83 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: object_cmd.cpp 26879 2014-09-21 11:24:51Z rubidium $ */ +/* $Id: object_cmd.cpp 27656 2016-09-18 14:07:52Z frosch $ */ /* * This file is part of OpenTTD. @@ -770,6 +770,8 @@ static void ChangeTileOwner_Object(TileIndex tile, Owner old_owner, Owner new_ow { if (!IsTileOwner(tile, old_owner)) return; + bool do_clear = false; + if (IsObjectType(tile, OBJECT_OWNED_LAND) && new_owner != INVALID_OWNER) { SetTileOwner(tile, new_owner); } else if (IsObjectType(tile, OBJECT_STATUE)) { @@ -780,12 +782,18 @@ static void ChangeTileOwner_Object(TileIndex tile, Owner old_owner, Owner new_ow SetBit(t->statues, new_owner); SetTileOwner(tile, new_owner); } else { - ReallyClearObjectTile(Object::GetByTile(tile)); + do_clear = true; } SetWindowDirty(WC_TOWN_AUTHORITY, t->index); } else { + do_clear = true; + } + + if (do_clear) { ReallyClearObjectTile(Object::GetByTile(tile)); + /* When clearing objects, they may turn into canal, which may require transfering ownership. */ + ChangeTileOwner(tile, old_owner, new_owner); } } diff --git a/src/openttd.cpp b/src/openttd.cpp index 43a5e67210..cf438dd139 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1,4 +1,4 @@ -/* $Id: openttd.cpp 26828 2014-09-16 17:14:07Z rubidium $ */ +/* $Id: openttd.cpp 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -328,7 +328,7 @@ static void LoadIntroGame(bool load_newgrfs = true) SetupColoursAndInitialWindow(); /* Load the default opening screen savegame */ - if (SaveOrLoad("opntitle.dat", SL_LOAD, BASESET_DIR) != SL_OK) { + if (SaveOrLoad("opntitle.dat", SLO_LOAD, DFT_GAME_FILE, BASESET_DIR) != SL_OK) { GenerateWorld(GWM_EMPTY, 64, 64); // if failed loading, make empty world. WaitTillGeneratedWorld(); SetLocalCompany(COMPANY_SPECTATOR); @@ -339,7 +339,6 @@ static void LoadIntroGame(bool load_newgrfs = true) _pause_mode = PM_UNPAUSED; _cursor.fix_at = false; - if (load_newgrfs) CheckForMissingSprites(); CheckForMissingGlyphs(); /* Play main theme */ @@ -618,15 +617,16 @@ int openttd_main(int argc, char *argv[]) case 'e': _switch_mode = (_switch_mode == SM_LOAD_GAME || _switch_mode == SM_LOAD_SCENARIO ? SM_LOAD_SCENARIO : SM_EDITOR); break; case 'g': if (mgo.opt != NULL) { - strecpy(_file_to_saveload.name, mgo.opt, lastof(_file_to_saveload.name)); - _switch_mode = (_switch_mode == SM_EDITOR || _switch_mode == SM_LOAD_SCENARIO ? SM_LOAD_SCENARIO : SM_LOAD_GAME); - _file_to_saveload.mode = SL_LOAD; + _file_to_saveload.SetName(mgo.opt); + bool is_scenario = _switch_mode == SM_EDITOR || _switch_mode == SM_LOAD_SCENARIO; + _switch_mode = is_scenario ? SM_LOAD_SCENARIO : SM_LOAD_GAME; + _file_to_saveload.SetMode(SLO_LOAD, is_scenario ? FT_SCENARIO : FT_SAVEGAME, DFT_GAME_FILE); /* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */ const char *t = strrchr(_file_to_saveload.name, '.'); if (t != NULL) { - FiosType ft = FiosGetSavegameListCallback(SLD_LOAD_GAME, _file_to_saveload.name, t, NULL, NULL); - if (ft != FIOS_TYPE_INVALID) SetFiosType(ft); + FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, t, NULL, NULL); + if (ft != FIOS_TYPE_INVALID) _file_to_saveload.SetMode(ft); } break; @@ -647,10 +647,10 @@ int openttd_main(int argc, char *argv[]) char title[80]; title[0] = '\0'; - FiosGetSavegameListCallback(SLD_LOAD_GAME, mgo.opt, strrchr(mgo.opt, '.'), title, lastof(title)); + FiosGetSavegameListCallback(SLO_LOAD, mgo.opt, strrchr(mgo.opt, '.'), title, lastof(title)); _load_check_data.Clear(); - SaveOrLoadResult res = SaveOrLoad(mgo.opt, SL_LOAD_CHECK, SAVE_DIR, false); + SaveOrLoadResult res = SaveOrLoad(mgo.opt, SLO_CHECK, DFT_GAME_FILE, SAVE_DIR, false); if (res != SL_OK || _load_check_data.HasErrors()) { fprintf(stderr, "Failed to open savegame\n"); if (_load_check_data.HasErrors()) { @@ -997,14 +997,15 @@ static void MakeNewEditorWorld() * @param subdir default directory to look for filename, set to 0 if not needed * @param lf Load filter to use, if NULL: use filename + subdir. */ -bool SafeLoad(const char *filename, int mode, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL) +bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL) { - assert(mode == SL_LOAD || (lf == NULL && mode == SL_OLD_LOAD)); + assert(fop == SLO_LOAD); + assert(dft == DFT_GAME_FILE || (lf == NULL && dft == DFT_OLD_GAME_FILE)); GameMode ogm = _game_mode; _game_mode = newgm; - switch (lf == NULL ? SaveOrLoad(filename, mode, subdir) : LoadWithFilter(lf)) { + switch (lf == NULL ? SaveOrLoad(filename, fop, dft, subdir) : LoadWithFilter(lf)) { case SL_OK: return true; case SL_REINIT: @@ -1093,11 +1094,11 @@ void SwitchToMode(SwitchMode new_mode) ResetGRFConfig(true); ResetWindowSystem(); - if (!SafeLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) { + if (!SafeLoad(_file_to_saveload.name, _file_to_saveload.file_op, _file_to_saveload.detail_ftype, GM_NORMAL, NO_DIRECTORY)) { SetDParamStr(0, GetSaveLoadErrorString()); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); } else { - if (_saveload_mode == SLD_LOAD_SCENARIO) { + if (_file_to_saveload.abstract_ftype == FT_SCENARIO) { /* Reset engine pool to simplify changing engine NewGRFs in scenario editor. */ EngineOverrideManager::ResetToCurrentNewGRFConfig(); } @@ -1134,7 +1135,7 @@ void SwitchToMode(SwitchMode new_mode) break; case SM_LOAD_SCENARIO: { // Load scenario from scenario editor - if (SafeLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) { + if (SafeLoad(_file_to_saveload.name, _file_to_saveload.file_op, _file_to_saveload.detail_ftype, GM_EDITOR, NO_DIRECTORY)) { SetLocalCompany(OWNER_NONE); _settings_newgame.game_creation.starting_year = _cur_year; /* Cancel the saveload pausing */ @@ -1156,7 +1157,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_SAVE_GAME: // Save game. /* Make network saved games on pause compatible to singleplayer */ - if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) { + if (SaveOrLoad(_file_to_saveload.name, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { SetDParamStr(0, GetSaveLoadErrorString()); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); } else { @@ -1367,7 +1368,7 @@ void StateGameLoop() /* Save the desync savegame if needed. */ char name[MAX_PATH]; seprintf(name, lastof(name), "dmp_cmds_%08x_%08x.sav", _settings_game.game_creation.generation_seed, _date); - SaveOrLoad(name, SL_SAVE, AUTOSAVE_DIR, false); + SaveOrLoad(name, SLO_SAVE, DFT_GAME_FILE, AUTOSAVE_DIR, false); } CheckCaches(); @@ -1424,7 +1425,7 @@ static void DoAutosave() } DEBUG(sl, 2, "Autosaving to '%s'", buf); - if (SaveOrLoad(buf, SL_SAVE, AUTOSAVE_DIR) != SL_OK) { + if (SaveOrLoad(buf, SLO_SAVE, DFT_GAME_FILE, AUTOSAVE_DIR) != SL_OK) { ShowErrorMessage(STR_ERROR_AUTOSAVE_FAILED, INVALID_STRING_ID, WL_ERROR); } } diff --git a/src/os/macosx/osx_stdafx.h b/src/os/macosx/osx_stdafx.h index 56696b1480..6f9ba2ebe3 100644 --- a/src/os/macosx/osx_stdafx.h +++ b/src/os/macosx/osx_stdafx.h @@ -1,4 +1,4 @@ -/* $Id: osx_stdafx.h 26709 2014-07-30 20:19:29Z planetmaker $ */ +/* $Id: osx_stdafx.h 27675 2016-10-31 19:29:01Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -13,6 +13,17 @@ #define MACOS_STDAFX_H +#include + +/* We assume if these macros are defined, the SDK is also at least this version or later. */ +#ifdef MAC_OS_X_VERSION_10_7 +#define HAVE_OSX_107_SDK +#endif + +#ifdef MAC_OS_X_VERSION_10_11 +#define HAVE_OSX_1011_SDK +#endif + /* It would seem that to ensure backward compability we have to ensure that we have defined MAC_OS_X_VERSION_10_x everywhere */ #ifndef MAC_OS_X_VERSION_10_3 #define MAC_OS_X_VERSION_10_3 1030 @@ -57,8 +68,6 @@ # error "Compiling 64 bits without _SQ64 set! (or vice versa)" #endif -#include - /* Name conflict */ #define Rect OTTDRect #define Point OTTDPoint diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp index e6a094736d..fa93c5816c 100644 --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -1,4 +1,4 @@ -/* $Id: os2.cpp 27290 2015-05-20 18:18:26Z rubidium $ */ +/* $Id: os2.cpp 27643 2016-09-04 12:54:30Z alberth $ */ /* * This file is part of OpenTTD. @@ -45,7 +45,7 @@ bool FiosIsRoot(const char *file) return file[3] == '\0'; } -void FiosGetDrives() +void FiosGetDrives(FileList &file_list) { uint disk, disk2, save, total; @@ -75,7 +75,7 @@ void FiosGetDrives() #endif if (disk == disk2) { - FiosItem *fios = _fios_items.Append(); + FiosItem *fios = file_list.Append(); fios->type = FIOS_TYPE_DRIVE; fios->mtime = 0; #ifndef __INNOTEK_LIBC__ diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index f05955cf10..6bad2012fc 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -1,4 +1,4 @@ -/* $Id: unix.cpp 27290 2015-05-20 18:18:26Z rubidium $ */ +/* $Id: unix.cpp 27643 2016-09-04 12:54:30Z alberth $ */ /* * This file is part of OpenTTD. @@ -16,6 +16,7 @@ #include "../../core/random_func.hpp" #include "../../debug.h" #include "../../string_func.h" +#include "../../fios.h" #include @@ -77,7 +78,7 @@ bool FiosIsRoot(const char *path) #endif } -void FiosGetDrives() +void FiosGetDrives(FileList &file_list) { return; } diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index 4e4746eab4..f037b1bade 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -1,5 +1,5 @@ //Microsoft Developer Studio generated resource script. -// $Id: ottdres.rc.in 27609 2016-06-30 21:15:30Z frosch $ +// $Id: ottdres.rc.in 27777 2017-03-11 16:49:51Z frosch $ // // 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. @@ -79,8 +79,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,6,1,!!REVISION!! - PRODUCTVERSION 1,6,1,!!REVISION!! + FILEVERSION 1,7,0,!!REVISION!! + PRODUCTVERSION 1,7,0,!!REVISION!! FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -100,7 +100,7 @@ BEGIN VALUE "FileDescription", "OpenTTD\0" VALUE "FileVersion", "!!VERSION!!\0" VALUE "InternalName", "openttd\0" - VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2016. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2017. All Rights Reserved.\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "openttd.exe\0" VALUE "PrivateBuild", "\0" diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index b7073b8f05..0e6cdddb29 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -1,4 +1,4 @@ -/* $Id: win32.cpp 27481 2015-12-28 13:16:41Z michi_cc $ */ +/* $Id: win32.cpp 27673 2016-10-30 18:22:55Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -208,11 +208,11 @@ bool FiosIsRoot(const char *file) return file[3] == '\0'; // C:\... } -void FiosGetDrives() +void FiosGetDrives(FileList &file_list) { #if defined(WINCE) /* WinCE only knows one drive: / */ - FiosItem *fios = _fios_items.Append(); + FiosItem *fios = file_list.Append(); fios->type = FIOS_TYPE_DRIVE; fios->mtime = 0; seprintf(fios->name, lastof(fios->name), PATHSEP ""); @@ -223,7 +223,7 @@ void FiosGetDrives() GetLogicalDriveStrings(lengthof(drives), drives); for (s = drives; *s != '\0';) { - FiosItem *fios = _fios_items.Append(); + FiosItem *fios = file_list.Append(); fios->type = FIOS_TYPE_DRIVE; fios->mtime = 0; seprintf(fios->name, lastof(fios->name), "%c:", s[0] & 0xFF); @@ -785,3 +785,36 @@ uint GetCPUCoreCount() GetSystemInfo(&info); return info.dwNumberOfProcessors; } + +#ifdef _MSC_VER +/* Code from MSDN: https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx */ +const DWORD MS_VC_EXCEPTION = 0x406D1388; +#pragma pack(push,8) +typedef struct { + DWORD dwType; ///< Must be 0x1000. + LPCSTR szName; ///< Pointer to name (in user addr space). + DWORD dwThreadID; ///< Thread ID (-1=caller thread). + DWORD dwFlags; ///< Reserved for future use, must be zero. +} THREADNAME_INFO; +#pragma pack(pop) + +/** + * Signal thread name to any attached debuggers. + */ +void SetWin32ThreadName(DWORD dwThreadID, const char* threadName) +{ + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = threadName; + info.dwThreadID = dwThreadID; + info.dwFlags = 0; + +#pragma warning(push) +#pragma warning(disable: 6320 6322) + __try { + RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)&info); + } __except (EXCEPTION_EXECUTE_HANDLER) { + } +#pragma warning(pop) +} +#endif diff --git a/src/os/windows/win32.h b/src/os/windows/win32.h index 13c78b8c09..1f33de24dd 100644 --- a/src/os/windows/win32.h +++ b/src/os/windows/win32.h @@ -1,4 +1,4 @@ -/* $Id: win32.h 27176 2015-03-02 09:10:16Z planetmaker $ */ +/* $Id: win32.h 27674 2016-10-30 19:27:07Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -39,4 +39,10 @@ HRESULT OTTDSHGetFolderPath(HWND, int, HANDLE, DWORD, LPTSTR); #define SHGFP_TYPE_CURRENT 0 #endif /* __MINGW32__ */ +#ifdef _MSC_VER +void SetWin32ThreadName(DWORD dwThreadID, const char* threadName); +#else +static inline void SetWin32ThreadName(DWORD dwThreadID, const char* threadName) {} +#endif + #endif /* WIN32_H */ diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index a9608fd1b2..4a03d8d1d6 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -1,4 +1,4 @@ -/* $Id: aystar.h 24900 2013-01-08 22:46:42Z planetmaker $ */ +/* $Id: aystar.h 27733 2017-01-15 13:59:46Z frosch $ */ /* * This file is part of OpenTTD. @@ -133,7 +133,7 @@ struct AyStar { * everything */ void *user_path; void *user_target; - uint user_data[10]; + void *user_data; byte loops_per_tick; ///< How many loops are there called before Main() gives control back to the caller. 0 = until done. uint max_path_cost; ///< If the g-value goes over this number, it stops searching, 0 = infinite. diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index e108ab20aa..d598f03b4d 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1,4 +1,4 @@ -/* $Id: npf.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: npf.cpp 27733 2017-01-15 13:59:46Z frosch $ */ /* * This file is part of OpenTTD. @@ -38,11 +38,11 @@ struct NPFFindStationOrTileData { }; /** Indices into AyStar.userdata[] */ -enum AyStarUserDataType { - NPF_TYPE = 0, ///< Contains a TransportTypes value - NPF_SUB_TYPE, ///< Contains the sub transport type - NPF_OWNER, ///< Contains an Owner value - NPF_RAILTYPES, ///< Contains a bitmask the compatible RailTypes of the engine when NPF_TYPE == TRANSPORT_RAIL. Unused otherwise. +struct AyStarUserData { + Owner owner; + TransportType type; + RailTypes railtypes; + RoadTypes roadtypes; }; /** Indices into AyStarNode.userdata[] */ @@ -157,13 +157,14 @@ static int32 NPFCalcStationOrTileHeuristic(AyStar *as, AyStarNode *current, Open TileIndex from = current->tile; TileIndex to = fstd->dest_coords; uint dist; + AyStarUserData *user = (AyStarUserData *)as->user_data; /* for train-stations, we are going to aim for the closest station tile */ - if (as->user_data[NPF_TYPE] != TRANSPORT_WATER && fstd->station_index != INVALID_STATION) { + if (user->type != TRANSPORT_WATER && fstd->station_index != INVALID_STATION) { to = CalcClosestStationTile(fstd->station_index, from, fstd->station_type); } - if (as->user_data[NPF_TYPE] == TRANSPORT_ROAD) { + if (user->type == TRANSPORT_ROAD) { /* Since roads only have diagonal pieces, we use manhattan distance here */ dist = DistanceManhattan(from, to) * NPF_TILE_LENGTH; } else { @@ -532,9 +533,10 @@ static int32 NPFRailPathCost(AyStar *as, AyStarNode *current, OpenListNode *pare /* Will find any depot */ static int32 NPFFindDepot(AyStar *as, OpenListNode *current) { + AyStarUserData *user = (AyStarUserData *)as->user_data; /* It's not worth caching the result with NPF_FLAG_IS_TARGET here as below, * since checking the cache not that much faster than the actual check */ - return IsDepotTypeTile(current->path.node.tile, (TransportType)as->user_data[NPF_TYPE]) ? + return IsDepotTypeTile(current->path.node.tile, user->type) ? AYSTAR_FOUND_END_NODE : AYSTAR_DONE; } @@ -612,6 +614,7 @@ static void ClearPathReservation(const PathNode *start, const PathNode *end) */ static void NPFSaveTargetData(AyStar *as, OpenListNode *current) { + AyStarUserData *user = (AyStarUserData *)as->user_data; NPFFoundTargetData *ftd = (NPFFoundTargetData*)as->user_path; ftd->best_trackdir = (Trackdir)current->path.node.user_data[NPF_TRACKDIR_CHOICE]; ftd->best_path_dist = current->g; @@ -619,7 +622,7 @@ static void NPFSaveTargetData(AyStar *as, OpenListNode *current) ftd->node = current->path.node; ftd->res_okay = false; - if (as->user_target != NULL && ((NPFFindStationOrTileData*)as->user_target)->reserve_path && as->user_data[NPF_TYPE] == TRANSPORT_RAIL) { + if (as->user_target != NULL && ((NPFFindStationOrTileData*)as->user_target)->reserve_path && user->type == TRANSPORT_RAIL) { /* Path reservation is requested. */ const Train *v = Train::From(((NPFFindStationOrTileData *)as->user_target)->v); @@ -767,28 +770,25 @@ static inline bool ForceReverse(TileIndex tile, DiagDirection dir, TransportType * * @param tile The tile of interest. * @param dir The direction in which the vehicle drives onto a tile. - * @param type The transporttype of the vehicle. - * @param subtype For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. - * @param railtypes For TRANSPORT_RAIL the compatible RailTypes of the vehicle. - * @param owner The owner of the vehicle. + * @param user Vehicle information. * @return true iff the vehicle can enter the tile. */ -static bool CanEnterTile(TileIndex tile, DiagDirection dir, TransportType type, uint subtype, RailTypes railtypes, Owner owner) +static bool CanEnterTile(TileIndex tile, DiagDirection dir, AyStarUserData *user) { /* Check tunnel entries and bridge ramps */ if (IsTileType(tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(tile) != dir) return false; /* Test ownership */ - if (!CanEnterTileOwnerCheck(owner, tile, dir)) return false; + if (!CanEnterTileOwnerCheck(user->owner, tile, dir)) return false; /* check correct rail type (mono, maglev, etc) */ - if (type == TRANSPORT_RAIL) { + if (user->type == TRANSPORT_RAIL) { RailType rail_type = GetTileRailType(tile); - if (!HasBit(railtypes, rail_type)) return false; + if (!HasBit(user->railtypes, rail_type)) return false; } /* Depots, standard roadstops and single tram bits can only be entered from one direction */ - DiagDirection single_entry = GetTileSingleEntry(tile, type, subtype); + DiagDirection single_entry = GetTileSingleEntry(tile, user->type, user->roadtypes); if (single_entry != INVALID_DIAGDIR && single_entry != ReverseDiagDir(dir)) return false; return true; @@ -849,6 +849,7 @@ static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_tr * copy AyStarNode.user_data[NPF_NODE_FLAGS] from the parent */ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) { + AyStarUserData *user = (AyStarUserData *)aystar->user_data; /* We leave src_tile on track src_trackdir in direction src_exitdir */ Trackdir src_trackdir = current->path.node.direction; TileIndex src_tile = current->path.node.tile; @@ -860,8 +861,8 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) bool ignore_src_tile = (current->path.parent == NULL && NPFGetFlag(¤t->path.node, NPF_FLAG_IGNORE_START_TILE)); /* Information about the vehicle: TransportType (road/rail/water) and SubType (compatible rail/road types) */ - TransportType type = (TransportType)aystar->user_data[NPF_TYPE]; - uint subtype = aystar->user_data[NPF_SUB_TYPE]; + TransportType type = user->type; + uint subtype = user->roadtypes; /* Initialize to 0, so we can jump out (return) somewhere an have no neighbours */ aystar->num_neighbours = 0; @@ -889,7 +890,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) /* We leave src_tile in src_exitdir and reach dst_tile */ dst_tile = AddTileIndexDiffCWrap(src_tile, TileIndexDiffCByDiagDir(src_exitdir)); - if (dst_tile != INVALID_TILE && !CanEnterTile(dst_tile, src_exitdir, type, subtype, (RailTypes)aystar->user_data[NPF_RAILTYPES], (Owner)aystar->user_data[NPF_OWNER])) dst_tile = INVALID_TILE; + if (dst_tile != INVALID_TILE && !CanEnterTile(dst_tile, src_exitdir, user)) dst_tile = INVALID_TILE; if (dst_tile == INVALID_TILE) { /* We cannot enter the next tile. Road vehicles can reverse, others reach dead end */ @@ -960,7 +961,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) * multiple targets that are spread around, we should perform a breadth first * search by specifiying CalcZero as our heuristic. */ -static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, TransportType type, uint sub_type, Owner owner, RailTypes railtypes, uint reverse_penalty) +static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, AyStarUserData *user, uint reverse_penalty) { int r; NPFFoundTargetData result; @@ -970,7 +971,7 @@ static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start _npf_aystar.EndNodeCheck = target_proc; _npf_aystar.FoundEndNode = NPFSaveTargetData; _npf_aystar.GetNeighbours = NPFFollowTrack; - switch (type) { + switch (user->type) { default: NOT_REACHED(); case TRANSPORT_RAIL: _npf_aystar.CalculateG = NPFRailPathCost; break; case TRANSPORT_ROAD: _npf_aystar.CalculateG = NPFRoadPathCost; break; @@ -1002,10 +1003,7 @@ static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start _npf_aystar.user_target = target; /* Initialize user_data */ - _npf_aystar.user_data[NPF_TYPE] = type; - _npf_aystar.user_data[NPF_SUB_TYPE] = sub_type; - _npf_aystar.user_data[NPF_OWNER] = owner; - _npf_aystar.user_data[NPF_RAILTYPES] = railtypes; + _npf_aystar.user_data = user; /* GO! */ r = _npf_aystar.Main(); @@ -1026,7 +1024,7 @@ static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start /* Will search as below, but with two start nodes, the second being the * reverse. Look at the NPF_FLAG_REVERSE flag in the result node to see which * direction was taken (NPFGetFlag(result.node, NPF_FLAG_REVERSE)) */ -static NPFFoundTargetData NPFRouteToStationOrTileTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, TransportType type, uint sub_type, Owner owner, RailTypes railtypes) +static NPFFoundTargetData NPFRouteToStationOrTileTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStarUserData *user) { AyStarNode start1; AyStarNode start2; @@ -1040,15 +1038,15 @@ static NPFFoundTargetData NPFRouteToStationOrTileTwoWay(TileIndex tile1, Trackdi start2.direction = trackdir2; start2.user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR; - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindStationOrTile, NPFCalcStationOrTileHeuristic, type, sub_type, owner, railtypes, 0); + return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindStationOrTile, NPFCalcStationOrTileHeuristic, user, 0); } /* Will search from the given tile and direction, for a route to the given * station for the given transport type. See the declaration of * NPFFoundTargetData above for the meaning of the result. */ -static NPFFoundTargetData NPFRouteToStationOrTile(TileIndex tile, Trackdir trackdir, bool ignore_start_tile, NPFFindStationOrTileData *target, TransportType type, uint sub_type, Owner owner, RailTypes railtypes) +static NPFFoundTargetData NPFRouteToStationOrTile(TileIndex tile, Trackdir trackdir, bool ignore_start_tile, NPFFindStationOrTileData *target, AyStarUserData *user) { - return NPFRouteToStationOrTileTwoWay(tile, trackdir, ignore_start_tile, INVALID_TILE, INVALID_TRACKDIR, false, target, type, sub_type, owner, railtypes); + return NPFRouteToStationOrTileTwoWay(tile, trackdir, ignore_start_tile, INVALID_TILE, INVALID_TRACKDIR, false, target, user); } /* Search using breadth first. Good for little track choice and inaccurate @@ -1058,7 +1056,7 @@ static NPFFoundTargetData NPFRouteToStationOrTile(TileIndex tile, Trackdir track * reverse_penalty applied (NPF_TILE_LENGTH is the equivalent of one full * tile). */ -static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, TransportType type, uint sub_type, Owner owner, RailTypes railtypes, uint reverse_penalty) +static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStarUserData *user, uint reverse_penalty) { AyStarNode start1; AyStarNode start2; @@ -1074,7 +1072,7 @@ static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Tra /* perform a breadth first search. Target is NULL, * since we are just looking for any depot...*/ - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, type, sub_type, owner, railtypes, reverse_penalty); + return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, user, reverse_penalty); } void InitializeNPF() @@ -1123,7 +1121,8 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal { Trackdir trackdir = v->GetVehicleTrackdir(); - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, v->tile, ReverseTrackdir(trackdir), false, NULL, TRANSPORT_ROAD, v->compatible_roadtypes, v->owner, INVALID_RAILTYPES, 0); + AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes }; + NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, v->tile, ReverseTrackdir(trackdir), false, NULL, &user, 0); if (ftd.best_bird_dist != 0) return FindDepotData(); @@ -1142,7 +1141,8 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir NPFFillWithOrderData(&fstd, v); Trackdir trackdir = DiagDirToDiagTrackdir(enterdir); - NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, TRANSPORT_ROAD, v->compatible_roadtypes, v->owner, INVALID_RAILTYPES); + AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes }; + NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user); if (ftd.best_trackdir == INVALID_TRACKDIR) { /* We are already at our target. Just do something * @todo: maybe display error? @@ -1169,7 +1169,8 @@ Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, NPFFillWithOrderData(&fstd, v); - NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, TRANSPORT_WATER, 0, v->owner, INVALID_RAILTYPES); + AyStarUserData user = { v->owner, TRANSPORT_WATER, INVALID_RAILTYPES, ROADTYPES_NONE }; + NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user); /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains * the direction we need to take to get there, if ftd.best_bird_dist is not 0, @@ -1192,7 +1193,8 @@ bool NPFShipCheckReverse(const Ship *v) assert(trackdir != INVALID_TRACKDIR); assert(trackdir_rev != INVALID_TRACKDIR); - ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, false, v->tile, trackdir_rev, false, &fstd, TRANSPORT_WATER, 0, v->owner, INVALID_RAILTYPES); + AyStarUserData user = { v->owner, TRANSPORT_WATER, INVALID_RAILTYPES, ROADTYPES_NONE }; + ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, false, v->tile, trackdir_rev, false, &fstd, &user); /* If we didn't find anything, just keep on going straight ahead, otherwise take the reverse flag */ return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE); } @@ -1209,7 +1211,8 @@ FindDepotData NPFTrainFindNearestDepot(const Train *v, int max_penalty) fstd.reserve_path = false; assert(trackdir != INVALID_TRACKDIR); - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, TRANSPORT_RAIL, 0, v->owner, v->compatible_railtypes, NPF_INFINITE_PENALTY); + AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE }; + NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, &user, NPF_INFINITE_PENALTY); if (ftd.best_bird_dist != 0) return FindDepotData(); /* Found target */ @@ -1241,7 +1244,8 @@ bool NPFTrainFindNearestSafeTile(const Train *v, TileIndex tile, Trackdir trackd /* perform a breadth first search. Target is NULL, * since we are just looking for any safe tile...*/ - return NPFRouteInternal(&start1, true, NULL, false, &fstd, NPFFindSafeTile, NPFCalcZero, TRANSPORT_RAIL, 0, v->owner, railtypes, 0).res_okay; + AyStarUserData user = { v->owner, TRANSPORT_RAIL, railtypes, ROADTYPES_NONE }; + return NPFRouteInternal(&start1, true, NULL, false, &fstd, NPFFindSafeTile, NPFCalcZero, &user, 0).res_okay; } bool NPFTrainCheckReverse(const Train *v) @@ -1257,7 +1261,8 @@ bool NPFTrainCheckReverse(const Train *v) assert(trackdir != INVALID_TRACKDIR); assert(trackdir_rev != INVALID_TRACKDIR); - ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, TRANSPORT_RAIL, 0, v->owner, v->compatible_railtypes); + AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE }; + ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, &user); /* If we didn't find anything, just keep on going straight ahead, otherwise take the reverse flag */ return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE); } @@ -1270,7 +1275,8 @@ Track NPFTrainChooseTrack(const Train *v, TileIndex tile, DiagDirection enterdir PBSTileInfo origin = FollowTrainReservation(v); assert(IsValidTrackdir(origin.trackdir)); - NPFFoundTargetData ftd = NPFRouteToStationOrTile(origin.tile, origin.trackdir, true, &fstd, TRANSPORT_RAIL, 0, v->owner, v->compatible_railtypes); + AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE }; + NPFFoundTargetData ftd = NPFRouteToStationOrTile(origin.tile, origin.trackdir, true, &fstd, &user); if (target != NULL) { target->tile = ftd.node.tile; diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp index 61b856ba3a..07c7c9380c 100644 --- a/src/pathfinder/yapf/yapf_road.cpp +++ b/src/pathfinder/yapf/yapf_road.cpp @@ -1,4 +1,4 @@ -/* $Id: yapf_road.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: yapf_road.cpp 27586 2016-05-29 14:14:52Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/rail.h b/src/rail.h index 208a0a8fa7..e7d30fd2b0 100644 --- a/src/rail.h +++ b/src/rail.h @@ -1,4 +1,4 @@ -/* $Id: rail.h 27427 2015-10-30 17:24:30Z frosch $ */ +/* $Id: rail.h 27687 2016-12-10 13:26:29Z frosch $ */ /* * This file is part of OpenTTD. @@ -113,7 +113,8 @@ typedef SmallVector RailTypeLabelList; /** * This struct contains all the info that is needed to draw and construct tracks. */ -struct RailtypeInfo { +class RailtypeInfo { +public: /** * Struct containing the main sprites. @note not all sprites are listed, but only * the ones used directly in the code diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 7807754a57..5906c2fafe 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: rail_cmd.cpp 27427 2015-10-30 17:24:30Z frosch $ */ +/* $Id: rail_cmd.cpp 27726 2017-01-08 11:45:08Z frosch $ */ /* * This file is part of OpenTTD. @@ -47,8 +47,6 @@ RailtypeInfo _railtypes[RAILTYPE_END]; RailType _sorted_railtypes[RAILTYPE_END]; uint8 _sorted_railtypes_size; -assert_compile(sizeof(_original_railtypes) <= sizeof(_railtypes)); - /** Enum holding the signal offset in the sprite sheet according to the side it is representing. */ enum SignalOffsets { SIGNAL_TO_SOUTHWEST, @@ -66,8 +64,20 @@ enum SignalOffsets { */ void ResetRailTypes() { - memset(_railtypes, 0, sizeof(_railtypes)); - memcpy(_railtypes, _original_railtypes, sizeof(_original_railtypes)); + assert_compile(lengthof(_original_railtypes) <= lengthof(_railtypes)); + + uint i = 0; + for (; i < lengthof(_original_railtypes); i++) _railtypes[i] = _original_railtypes[i]; + + static const RailtypeInfo empty_railtype = { + {0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,{}}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0}, + 0, RAILTYPES_NONE, RAILTYPES_NONE, 0, 0, 0, RTFB_NONE, 0, 0, 0, 0, 0, + RailTypeLabelList(), 0, 0, RAILTYPES_NONE, RAILTYPES_NONE, 0, + {}, {} }; + for (; i < lengthof(_railtypes); i++) _railtypes[i] = empty_railtype; } void ResolveRailTypeGUISprites(RailtypeInfo *rti) @@ -151,11 +161,9 @@ RailType AllocateRailType(RailTypeLabel label) if (rti->label == 0) { /* Set up new rail type */ - memcpy(rti, &_railtypes[RAILTYPE_RAIL], sizeof(*rti)); + *rti = _original_railtypes[RAILTYPE_RAIL]; rti->label = label; - /* Clear alternate label list. Can't use Reset() here as that would free - * the data pointer of RAILTYPE_RAIL and not our new rail type. */ - new (&rti->alternate_labels) RailTypeLabelList; + rti->alternate_labels.Clear(); /* Make us compatible with ourself. */ rti->powered_railtypes = (RailTypes)(1 << rt); @@ -447,7 +455,7 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u CommandCost ret = CheckTileOwnership(tile); if (ret.Failed()) return ret; - if (!IsPlainRail(tile)) return CMD_ERROR; + if (!IsPlainRail(tile)) return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); // just get appropriate error message if (!IsCompatibleRail(GetRailType(tile), railtype)) return_cmd_error(STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION); @@ -2394,7 +2402,7 @@ static void DrawTile_Track(TileInfo *ti) if (HasBit(_display_opt, DO_FULL_DETAIL)) DrawTrackDetails(ti, rti); - if (HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti); + if (HasRailCatenaryDrawn(GetRailType(ti->tile))) DrawRailCatenary(ti); if (HasSignals(ti->tile)) DrawSignals(ti->tile, rails, rti); } else { @@ -2469,7 +2477,7 @@ static void DrawTile_Track(TileInfo *ti) int depot_sprite = GetCustomRailSprite(rti, ti->tile, RTSG_DEPOT); relocation = depot_sprite != 0 ? depot_sprite - SPR_RAIL_DEPOT_SE_1 : rti->GetRailtypeSpriteOffset(); - if (HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti); + if (HasRailCatenaryDrawn(GetRailType(ti->tile))) DrawRailCatenary(ti); DrawRailTileSeq(ti, dts, TO_BUILDINGS, relocation, 0, _drawtile_track_palette); } @@ -2720,8 +2728,8 @@ static void GetTileDesc_Track(TileIndex tile, TileDesc *td) { const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(tile)); td->rail_speed = rti->max_speed; + td->railtype = rti->strings.name; td->owner[0] = GetTileOwner(tile); - SetDParamX(td->dparam, 0, rti->strings.name); switch (GetRailTileType(tile)) { case RAIL_TILE_NORMAL: td->str = STR_LAI_RAIL_DESCRIPTION_TRACK; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 7a3c51f64e..c94b042f0d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: rail_gui.cpp 27587 2016-05-29 18:52:56Z frosch $ */ +/* $Id: rail_gui.cpp 27710 2016-12-25 14:59:53Z frosch $ */ /* * This file is part of OpenTTD. @@ -86,7 +86,7 @@ static bool IsStationAvailable(const StationSpec *statspec) return Convert8bitBooleanCallback(statspec->grf_prop.grffile, CBID_STATION_AVAILABILITY, cb_res); } -void CcPlaySound1E(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) +void CcPlaySound_SPLAT_RAIL(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) { if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_20_SPLAT_RAIL, tile); } @@ -97,7 +97,7 @@ static void GenericPlaceRail(TileIndex tile, int cmd) _remove_button_clicked ? CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK) : CMD_BUILD_SINGLE_RAIL | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK), - CcPlaySound1E); + CcPlaySound_SPLAT_RAIL); } /** @@ -161,7 +161,8 @@ static void PlaceRail_Waypoint(TileIndex tile) Axis axis = GetAxisForNewWaypoint(tile); if (IsValidAxis(axis)) { /* Valid tile for waypoints */ - VpStartPlaceSizing(tile, axis == AXIS_X ? VPM_FIX_X : VPM_FIX_Y, DDSP_BUILD_STATION); + VpStartPlaceSizing(tile, axis == AXIS_X ? VPM_X_LIMITED : VPM_Y_LIMITED, DDSP_BUILD_STATION); + VpSetPlaceSizingLimit(_settings_game.station.station_spread); } else { /* Tile where we can't build rail waypoints. This is always going to fail, * but provides the user with a proper error message. */ @@ -223,7 +224,7 @@ static void GenericPlaceSignals(TileIndex tile) Track track = FindFirstTrack(trackbits); if (_remove_button_clicked) { - DoCommandP(tile, track, 0, CMD_REMOVE_SIGNALS | CMD_MSG(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM), CcPlaySound1E); + DoCommandP(tile, track, 0, CMD_REMOVE_SIGNALS | CMD_MSG(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM), CcPlaySound_SPLAT_RAIL); } else { const Window *w = FindWindowById(WC_BUILD_SIGNAL, 0); @@ -250,7 +251,7 @@ static void GenericPlaceSignals(TileIndex tile) DoCommandP(tile, p1, 0, CMD_BUILD_SIGNALS | CMD_MSG((w != NULL && _convert_signal_button) ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE), - CcPlaySound1E); + CcPlaySound_SPLAT_RAIL); } } @@ -355,7 +356,7 @@ static void DoRailroadTrack(int mode) _remove_button_clicked ? CMD_REMOVE_RAILROAD_TRACK | CMD_MSG(STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK) : CMD_BUILD_RAILROAD_TRACK | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK), - CcPlaySound1E); + CcPlaySound_SPLAT_RAIL); } static void HandleAutodirPlacement() @@ -410,7 +411,7 @@ static void HandleAutoSignalPlacement() _remove_button_clicked ? CMD_REMOVE_SIGNAL_TRACK | CMD_MSG(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM) : CMD_BUILD_SIGNAL_TRACK | CMD_MSG(STR_ERROR_CAN_T_BUILD_SIGNALS_HERE), - CcPlaySound1E); + CcPlaySound_SPLAT_RAIL); } @@ -710,7 +711,7 @@ struct BuildRailToolbarWindow : Window { break; case DDSP_CONVERT_RAIL: - DoCommandP(end_tile, start_tile, _cur_railtype | (_ctrl_pressed ? 0x10 : 0), CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound1E); + DoCommandP(end_tile, start_tile, _cur_railtype | (_ctrl_pressed ? 0x10 : 0), CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound_SPLAT_RAIL); break; case DDSP_REMOVE_STATION: @@ -718,20 +719,20 @@ struct BuildRailToolbarWindow : Window { if (this->IsWidgetLowered(WID_RAT_BUILD_STATION)) { /* Station */ if (_remove_button_clicked) { - DoCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_REMOVE_PART_OF_STATION), CcPlaySound1E); + DoCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_REMOVE_PART_OF_STATION), CcPlaySound_SPLAT_RAIL); } else { HandleStationPlacement(start_tile, end_tile); } } else { /* Waypoint */ if (_remove_button_clicked) { - DoCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT), CcPlaySound1E); + DoCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT), CcPlaySound_SPLAT_RAIL); } else { TileArea ta(start_tile, end_tile); - uint32 p1 = _cur_railtype | (select_method == VPM_FIX_X ? AXIS_X : AXIS_Y) << 4 | ta.w << 8 | ta.h << 16 | _ctrl_pressed << 24; + uint32 p1 = _cur_railtype | (select_method == VPM_X_LIMITED ? AXIS_X : AXIS_Y) << 4 | ta.w << 8 | ta.h << 16 | _ctrl_pressed << 24; uint32 p2 = STAT_CLASS_WAYP | _cur_waypoint_type << 8 | INVALID_STATION << 16; - CommandContainer cmdcont = { ta.tile, p1, p2, CMD_BUILD_RAIL_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT), CcPlaySound1E, "" }; + CommandContainer cmdcont = { ta.tile, p1, p2, CMD_BUILD_RAIL_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT), CcPlaySound_SPLAT_RAIL, "" }; ShowSelectWaypointIfNeeded(cmdcont, ta); } } @@ -1981,9 +1982,10 @@ void InitializeRailGUI() /** * Create a drop down list for all the rail types of the local company. * @param for_replacement Whether this list is for the replacement window. + * @param all_option Whether to add an 'all types' item. * @return The populated and sorted #DropDownList. */ -DropDownList *GetRailTypeDropDownList(bool for_replacement) +DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) { RailTypes used_railtypes = RAILTYPES_NONE; @@ -2000,6 +2002,12 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement) const Company *c = Company::Get(_local_company); DropDownList *list = new DropDownList(); + + if (all_option) { + DropDownListStringItem *item = new DropDownListStringItem(STR_REPLACE_ALL_RAILTYPE, INVALID_RAILTYPE, false); + *list->Append() = item; + } + RailType rt; FOR_ALL_SORTED_RAILTYPES(rt) { /* If it's not used ever, don't show it to the user. */ diff --git a/src/rail_gui.h b/src/rail_gui.h index ce854417b2..7b86169dbc 100644 --- a/src/rail_gui.h +++ b/src/rail_gui.h @@ -1,4 +1,4 @@ -/* $Id: rail_gui.h 21867 2011-01-20 12:40:04Z rubidium $ */ +/* $Id: rail_gui.h 27683 2016-12-08 20:21:39Z frosch $ */ /* * This file is part of OpenTTD. @@ -19,6 +19,6 @@ struct Window *ShowBuildRailToolbar(RailType railtype); void ReinitGuiAfterToggleElrail(bool disable); bool ResetSignalVariant(int32 = 0); void InitializeRailGUI(); -DropDownList *GetRailTypeDropDownList(bool for_replacement = false); +DropDownList *GetRailTypeDropDownList(bool for_replacement = false, bool all_option = false); #endif /* RAIL_GUI_H */ diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 5fce5427b3..a8e1f74a0b 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -1,4 +1,4 @@ -/* $Id: rev.cpp.in 27609 2016-06-30 21:15:30Z frosch $ */ +/* $Id: rev.cpp.in 27518 2016-03-01 20:00:22Z frosch $ */ /* * This file is part of OpenTTD. @@ -72,7 +72,7 @@ const byte _openttd_revision_modified = !!MODIFIED!!; * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. */ -const uint32 _openttd_newgrf_version = 1 << 28 | 6 << 24 | 1 << 20 | 1 << 19 | (!!REVISION!! & ((1 << 19) - 1)); +const uint32 _openttd_newgrf_version = 1 << 28 | 7 << 24 | 0 << 20 | 0 << 19 | (!!REVISION!! & ((1 << 19) - 1)); #ifdef __MORPHOS__ /** diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 40a86c41de..c8d7ab7735 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: road_cmd.cpp 27312 2015-06-21 09:31:50Z frosch $ */ +/* $Id: road_cmd.cpp 27746 2017-02-12 12:03:07Z frosch $ */ /* * This file is part of OpenTTD. @@ -224,7 +224,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec TileIndex other_end = GetOtherTunnelBridgeEnd(tile); /* Pay for *every* tile of the bridge or tunnel */ uint len = GetTunnelBridgeLength(other_end, tile) + 2; - cost.AddCost(len * _price[PR_CLEAR_ROAD]); + cost.AddCost(len * 2 * _price[PR_CLEAR_ROAD]); if (flags & DC_EXEC) { Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); if (c != NULL) { @@ -1191,7 +1191,7 @@ static bool DrawRoadAsSnowDesert(TileIndex tile, Roadside roadside) * @param ti information about the tile (slopes, height etc) * @param tram the roadbits for the tram */ -void DrawTramCatenary(const TileInfo *ti, RoadBits tram) +void DrawRoadCatenary(const TileInfo *ti, RoadBits tram) { /* Do not draw catenary if it is invisible */ if (IsInvisibilitySet(TO_CATENARY)) return; @@ -1298,7 +1298,7 @@ static void DrawRoadBits(TileInfo *ti) return; } - if (tram != ROAD_NONE) DrawTramCatenary(ti, tram); + if (tram != ROAD_NONE) DrawRoadCatenary(ti, tram); /* Return if full detail is disabled, or we are zoomed fully out. */ if (!HasBit(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom > ZOOM_LVL_DETAIL) return; @@ -1388,9 +1388,9 @@ static void DrawTile_Road(TileInfo *ti) if (HasTileRoadType(ti->tile, ROADTYPE_TRAM)) { DrawGroundSprite(SPR_TRAMWAY_OVERLAY + (GetCrossingRoadAxis(ti->tile) ^ 1), pal); - DrawTramCatenary(ti, GetCrossingRoadBits(ti->tile)); + DrawRoadCatenary(ti, GetCrossingRoadBits(ti->tile)); } - if (HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti); + if (HasRailCatenaryDrawn(GetRailType(ti->tile))) DrawRailCatenary(ti); break; } @@ -1684,6 +1684,7 @@ static void GetTileDesc_Road(TileIndex tile, TileDesc *td) if (HasBit(rts, ROADTYPE_TRAM)) tram_owner = GetRoadOwner(tile, ROADTYPE_TRAM); const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(tile)); + td->railtype = rti->strings.name; td->rail_speed = rti->max_speed; break; diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 247866c7ed..5b4194b513 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: road_gui.cpp 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: road_gui.cpp 27734 2017-01-15 14:27:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -64,7 +64,7 @@ static RoadType _cur_roadtype; static DiagDirection _road_depot_orientation; static DiagDirection _road_station_picker_orientation; -void CcPlaySound1D(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) +void CcPlaySound_SPLAT_OTHER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) { if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_1F_SPLAT_OTHER, tile); } @@ -629,7 +629,7 @@ struct BuildRoadToolbarWindow : Window { DoCommandP(start_tile, end_tile, _place_road_flag | (_cur_roadtype << 3) | (_one_way_button_clicked << 5), _remove_button_clicked ? CMD_REMOVE_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) : - CMD_BUILD_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road), CcPlaySound1D); + CMD_BUILD_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road), CcPlaySound_SPLAT_OTHER); break; case DDSP_BUILD_BUSSTOP: @@ -642,13 +642,13 @@ struct BuildRoadToolbarWindow : Window { case DDSP_REMOVE_BUSSTOP: { TileArea ta(start_tile, end_tile); - DoCommandP(ta.tile, ta.w | ta.h << 8, (_ctrl_pressed << 1) | ROADSTOP_BUS, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_BUS]), CcPlaySound1D); + DoCommandP(ta.tile, ta.w | ta.h << 8, (_ctrl_pressed << 1) | ROADSTOP_BUS, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_BUS]), CcPlaySound_SPLAT_OTHER); break; } case DDSP_REMOVE_TRUCKSTOP: { TileArea ta(start_tile, end_tile); - DoCommandP(ta.tile, ta.w | ta.h << 8, (_ctrl_pressed << 1) | ROADSTOP_TRUCK, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_TRUCK]), CcPlaySound1D); + DoCommandP(ta.tile, ta.w | ta.h << 8, (_ctrl_pressed << 1) | ROADSTOP_TRUCK, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_TRUCK]), CcPlaySound_SPLAT_OTHER); break; } } @@ -956,15 +956,11 @@ struct BuildRoadStationWindow : public PickerWindowBase { if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) { _road_station_picker_orientation = DIAGDIR_END; } - this->SetWidgetsDisabledState(_cur_roadtype == ROADTYPE_TRAM, - WID_BROS_STATION_NE, - WID_BROS_STATION_SE, - WID_BROS_STATION_SW, - WID_BROS_STATION_NW, - WIDGET_LIST_END); this->GetWidget(WID_BROS_CAPTION)->widget_data = _road_type_infos[_cur_roadtype].picker_title[rs]; - for (uint i = WID_BROS_STATION_NE; i < WID_BROS_LT_OFF; i++) this->GetWidget(i)->tool_tip = _road_type_infos[_cur_roadtype].picker_tooltip[rs]; + for (uint i = (_cur_roadtype == ROADTYPE_TRAM ? WID_BROS_STATION_X : WID_BROS_STATION_NE); i < WID_BROS_LT_OFF; i++) { + this->GetWidget(i)->tool_tip = _road_type_infos[_cur_roadtype].picker_tooltip[rs]; + } this->LowerWidget(_road_station_picker_orientation + WID_BROS_STATION_NE); this->LowerWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF); @@ -1060,7 +1056,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { }; /** Widget definition of the build road station window */ -static const NWidgetPart _nested_rv_station_picker_widgets[] = { +static const NWidgetPart _nested_road_station_picker_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BROS_CAPTION), @@ -1069,17 +1065,17 @@ static const NWidgetPart _nested_rv_station_picker_widgets[] = { NWidget(NWID_SPACER), SetMinimalSize(0, 3), NWidget(NWID_HORIZONTAL), SetPIP(0, 2, 0), NWidget(NWID_SPACER), SetFill(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetMinimalSize(66, 50), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetMinimalSize(66, 50), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), NWidget(NWID_SPACER), SetFill(1, 0), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 2), NWidget(NWID_HORIZONTAL), SetPIP(0, 2, 0), NWidget(NWID_SPACER), SetFill(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetMinimalSize(66, 50), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetMinimalSize(66, 50), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), NWidget(NWID_SPACER), SetFill(1, 0), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 1), @@ -1099,16 +1095,54 @@ static const NWidgetPart _nested_rv_station_picker_widgets[] = { EndContainer(), }; -static WindowDesc _rv_station_picker_desc( +static WindowDesc _road_station_picker_desc( WDP_AUTO, NULL, 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, - _nested_rv_station_picker_widgets, lengthof(_nested_rv_station_picker_widgets) + _nested_road_station_picker_widgets, lengthof(_nested_road_station_picker_widgets) +); + +/** Widget definition of the build tram station window */ +static const NWidgetPart _nested_tram_station_picker_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BROS_CAPTION), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BROS_BACKGROUND), + NWidget(NWID_SPACER), SetMinimalSize(0, 3), + NWidget(NWID_HORIZONTAL), SetPIP(0, 2, 0), + NWidget(NWID_SPACER), SetFill(1, 0), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), SetFill(0, 0), EndContainer(), + NWidget(NWID_SPACER), SetFill(1, 0), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 1), + NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_INFO), SetMinimalSize(140, 14), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), + NWidget(NWID_SPACER), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2), + NWidget(NWID_SPACER), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_OFF), SetMinimalSize(60, 12), + SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BROS_LT_ON), SetMinimalSize(60, 12), + SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP), + NWidget(NWID_SPACER), SetFill(1, 0), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 10), SetResize(0, 1), + EndContainer(), +}; + +static WindowDesc _tram_station_picker_desc( + WDP_AUTO, NULL, 0, 0, + WC_BUS_STATION, WC_BUILD_TOOLBAR, + WDF_CONSTRUCTION, + _nested_tram_station_picker_widgets, lengthof(_nested_tram_station_picker_widgets) ); static void ShowRVStationPicker(Window *parent, RoadStopType rs) { - new BuildRoadStationWindow(&_rv_station_picker_desc, parent, rs); + new BuildRoadStationWindow(_cur_roadtype == ROADTYPE_ROAD ? &_road_station_picker_desc : &_tram_station_picker_desc, parent, rs); } void InitializeRoadGui() diff --git a/src/road_internal.h b/src/road_internal.h index f964d72f16..1966358cc0 100644 --- a/src/road_internal.h +++ b/src/road_internal.h @@ -1,4 +1,4 @@ -/* $Id: road_internal.h 21846 2011-01-18 23:09:43Z rubidium $ */ +/* $Id: road_internal.h 27676 2016-11-05 11:53:03Z frosch $ */ /* * This file is part of OpenTTD. @@ -19,6 +19,6 @@ RoadBits CleanUpRoadBits(const TileIndex tile, RoadBits org_rb); CommandCost CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, RoadType rt, DoCommandFlag flags, bool town_check = true); -void DrawTramCatenary(const TileInfo *ti, RoadBits tram); +void DrawRoadCatenary(const TileInfo *ti, RoadBits tram); #endif /* ROAD_INTERNAL_H */ diff --git a/src/roadveh.h b/src/roadveh.h index 8e6e722a75..447922e6cc 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -1,4 +1,4 @@ -/* $Id: roadveh.h 25185 2013-04-13 13:42:08Z frosch $ */ +/* $Id: roadveh.h 27666 2016-10-16 14:57:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -108,7 +108,7 @@ struct RoadVehicle FINAL : public GroundVehicle { void UpdateDeltaXY(Direction direction); ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_ROADVEH_INC : EXPENSES_ROADVEH_RUN; } bool IsPrimaryVehicle() const { return this->IsFrontEngine(); } - SpriteID GetImage(Direction direction, EngineImageType image_type) const; + void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const; int GetDisplaySpeed() const { return this->gcache.last_speed / 2; } int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed / 2; } Money GetRunningCost() const; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 90d84431e2..4cbcd4d0a1 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: roadveh_cmd.cpp 27190 2015-03-16 20:01:14Z frosch $ */ +/* $Id: roadveh_cmd.cpp 27667 2016-10-16 14:58:38Z frosch $ */ /* * This file is part of OpenTTD. @@ -113,40 +113,39 @@ int RoadVehicle::GetDisplayImageWidth(Point *offset) const return ScaleGUITrad(this->gcache.cached_veh_length * reference_width / VEHICLE_LENGTH); } -static SpriteID GetRoadVehIcon(EngineID engine, EngineImageType image_type) +static void GetRoadVehIcon(EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result) { const Engine *e = Engine::Get(engine); uint8 spritenum = e->u.road.image_index; if (is_custom_sprite(spritenum)) { - SpriteID sprite = GetCustomVehicleIcon(engine, DIR_W, image_type); - if (sprite != 0) return sprite; + GetCustomVehicleIcon(engine, DIR_W, image_type, result); + if (result->IsValid()) return; spritenum = e->original_image_index; } assert(IsValidImageIndex(spritenum)); - return DIR_W + _roadveh_images[spritenum]; + result->Set(DIR_W + _roadveh_images[spritenum]); } -SpriteID RoadVehicle::GetImage(Direction direction, EngineImageType image_type) const +void RoadVehicle::GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const { uint8 spritenum = this->spritenum; - SpriteID sprite; if (is_custom_sprite(spritenum)) { - sprite = GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(spritenum)), image_type); - if (sprite != 0) return sprite; + GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(spritenum)), image_type, result); + if (result->IsValid()) return; spritenum = this->GetEngine()->original_image_index; } assert(IsValidImageIndex(spritenum)); - sprite = direction + _roadveh_images[spritenum]; + SpriteID sprite = direction + _roadveh_images[spritenum]; if (this->cargo.StoredCount() >= this->cargo_cap / 2U) sprite += _roadveh_full_adder[spritenum]; - return sprite; + result->Set(sprite); } /** @@ -160,12 +159,16 @@ SpriteID RoadVehicle::GetImage(Direction direction, EngineImageType image_type) */ void DrawRoadVehEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) { - SpriteID sprite = GetRoadVehIcon(engine, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + GetRoadVehIcon(engine, image_type, &seq); + + Rect rect; + seq.GetBounds(&rect); preferred_x = Clamp(preferred_x, - left - UnScaleGUI(real_sprite->x_offs), - right - UnScaleGUI(real_sprite->width) - UnScaleGUI(real_sprite->x_offs)); - DrawSprite(sprite, pal, preferred_x, y); + left - UnScaleGUI(rect.left), + right - UnScaleGUI(rect.right)); + + seq.Draw(preferred_x, y, pal, pal == PALETTE_CRASH); } /** @@ -179,12 +182,16 @@ void DrawRoadVehEngine(int left, int right, int preferred_x, int y, EngineID eng */ void GetRoadVehSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type) { - const Sprite *spr = GetSprite(GetRoadVehIcon(engine, image_type), ST_NORMAL); + VehicleSpriteSeq seq; + GetRoadVehIcon(engine, image_type, &seq); - width = UnScaleGUI(spr->width); - height = UnScaleGUI(spr->height); - xoffs = UnScaleGUI(spr->x_offs); - yoffs = UnScaleGUI(spr->y_offs); + Rect rect; + seq.GetBounds(&rect); + + width = UnScaleGUI(rect.right - rect.left + 1); + height = UnScaleGUI(rect.bottom - rect.top + 1); + xoffs = UnScaleGUI(rect.left); + yoffs = UnScaleGUI(rect.top); } /** @@ -306,7 +313,7 @@ CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engin v->date_of_last_service = _date; v->build_year = _cur_year; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); v->SetFrontEngine(); diff --git a/src/roadveh_gui.cpp b/src/roadveh_gui.cpp index 9187d6957e..571875759c 100644 --- a/src/roadveh_gui.cpp +++ b/src/roadveh_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: roadveh_gui.cpp 27134 2015-02-01 20:54:24Z frosch $ */ +/* $Id: roadveh_gui.cpp 27689 2016-12-10 14:33:58Z frosch $ */ /* * This file is part of OpenTTD. @@ -149,7 +149,9 @@ void DrawRoadVehImage(const Vehicle *v, int left, int right, int y, VehicleID se if (rtl ? px + width > 0 : px - width < max_width) { PaletteID pal = (u->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(u); - DrawSprite(u->GetImage(dir, image_type), pal, px + (rtl ? -offset.x : offset.x), ScaleGUITrad(6) + offset.y); + VehicleSpriteSeq seq; + u->GetImage(dir, image_type, &seq); + seq.Draw(px + (rtl ? -offset.x : offset.x), ScaleGUITrad(6) + offset.y, pal, (u->vehstatus & VS_CRASHED) != 0); } px += rtl ? -width : width; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 04cef44783..b28c44d7dd 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1,4 +1,4 @@ -/* $Id: afterload.cpp 27320 2015-06-27 11:46:41Z frosch $ */ +/* $Id: afterload.cpp 27760 2017-02-26 20:31:02Z frosch $ */ /* * This file is part of OpenTTD. @@ -248,7 +248,7 @@ static void InitializeWindowsAndCaches() /* For each company, verify (while loading a scenario) that the inauguration date is the current year and set it * accordingly if it is not the case. No need to set it on companies that are not been used already, * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */ - if (_file_to_saveload.filetype == FT_SCENARIO && c->inaugurated_year != MIN_YEAR) { + if (_file_to_saveload.abstract_ftype == FT_SCENARIO && c->inaugurated_year != MIN_YEAR) { c->inaugurated_year = _cur_year; } } @@ -718,12 +718,14 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(95)) _settings_game.vehicle.dynamic_engines = 0; if (IsSavegameVersionBefore(96)) _settings_game.economy.station_noise_level = false; if (IsSavegameVersionBefore(133)) { - _settings_game.vehicle.roadveh_acceleration_model = 0; _settings_game.vehicle.train_slope_steepness = 3; } if (IsSavegameVersionBefore(134)) _settings_game.economy.feeder_payment_share = 75; if (IsSavegameVersionBefore(138)) _settings_game.vehicle.plane_crashes = 2; - if (IsSavegameVersionBefore(139)) _settings_game.vehicle.roadveh_slope_steepness = 7; + if (IsSavegameVersionBefore(139)) { + _settings_game.vehicle.roadveh_acceleration_model = 0; + _settings_game.vehicle.roadveh_slope_steepness = 7; + } if (IsSavegameVersionBefore(143)) _settings_game.economy.allow_town_level_crossings = true; if (IsSavegameVersionBefore(159)) { _settings_game.vehicle.max_train_length = 50; diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index fd69d7b2a1..fe21860e61 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: company_sl.cpp 26590 2014-05-16 17:39:35Z rubidium $ */ +/* $Id: company_sl.cpp 27757 2017-02-26 19:41:14Z frosch $ */ /* * This file is part of OpenTTD. @@ -16,6 +16,7 @@ #include "../tunnelbridge_map.h" #include "../tunnelbridge.h" #include "../station_base.h" +#include "../strings_func.h" #include "saveload.h" @@ -243,7 +244,7 @@ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, name_1, SLE_STRINGID), SLE_CONDSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_VAR(CompanyProperties, president_name_1, SLE_UINT16), + SLE_VAR(CompanyProperties, president_name_1, SLE_STRINGID), SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32), SLE_CONDSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), @@ -501,11 +502,11 @@ static void Check_PLYR() /* We do not load old custom names */ if (IsSavegameVersionBefore(84)) { - if (GB(cprops->name_1, 11, 5) == 15) { + if (GetStringTab(cprops->name_1) == TEXT_TAB_OLD_CUSTOM) { cprops->name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE; } - if (GB(cprops->president_name_1, 11, 5) == 15) { + if (GetStringTab(cprops->president_name_1) == TEXT_TAB_OLD_CUSTOM) { cprops->president_name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE; } } diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp index 560c3c6c26..6c2f3b2937 100644 --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: newgrf_sl.cpp 27278 2015-05-09 10:04:50Z frosch $ */ +/* $Id: newgrf_sl.cpp 27772 2017-03-07 20:18:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -96,8 +96,16 @@ static void Load_NGRF() { Load_NGRF_common(_grfconfig); - /* Append static NewGRF configuration, but only if there are some NewGRFs. */ - if (_game_mode != GM_MENU || _all_grfs != NULL) AppendStaticGRFConfigs(&_grfconfig); + if (_game_mode == GM_MENU) { + /* Intro game must not have NewGRF. */ + if (_grfconfig != NULL) SlErrorCorrupt("The intro game must not use NewGRF"); + + /* Activate intro NewGRFs (townnames) */ + ResetGRFConfig(false); + } else { + /* Append static NewGRF configuration */ + AppendStaticGRFConfigs(&_grfconfig); + } } static void Check_NGRF() diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index c83d59eaff..35c6eafc3a 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: oldloader_sl.cpp 26878 2014-09-21 11:23:33Z rubidium $ */ +/* $Id: oldloader_sl.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -1165,7 +1165,7 @@ static const OldChunks vehicle_chunk[] = { OCL_SVAR( OC_UINT8, Vehicle, owner ), OCL_SVAR( OC_TILE, Vehicle, tile ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, cur_image ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, sprite_seq.seq[0].sprite ), OCL_NULL( 8 ), ///< Vehicle sprite box, calculated automatically @@ -1258,7 +1258,7 @@ bool LoadOldVehicle(LoadgameState *ls, int num) if (v == NULL) continue; v->refit_cap = v->cargo_cap; - SpriteID sprite = v->cur_image; + SpriteID sprite = v->sprite_seq.seq[0].sprite; /* no need to override other sprites */ if (IsInsideMM(sprite, 1460, 1465)) { sprite += 580; // aircraft smoke puff @@ -1269,7 +1269,7 @@ bool LoadOldVehicle(LoadgameState *ls, int num) } else if (IsInsideMM(sprite, 2516, 2539)) { sprite += 1385; // rotor or disaster-related vehicles } - v->cur_image = sprite; + v->sprite_seq.seq[0].sprite = sprite; switch (v->type) { case VEH_TRAIN: { diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index f50363f862..6244dca816 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1,4 +1,4 @@ -/* $Id: saveload.cpp 27590 2016-05-29 19:01:50Z frosch $ */ +/* $Id: saveload.cpp 27778 2017-03-11 20:37:32Z frosch $ */ /* * This file is part of OpenTTD. @@ -263,10 +263,12 @@ * 193 26802 * 194 26881 1.5.x, 1.6.0 * 195 27572 1.6.x + * 196 27778 1.7.x */ -extern const uint16 SAVEGAME_VERSION = 195; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 196; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading +FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. uint32 _ttdp_version; ///< version of TTDP savegame (if applicable) uint16 _sl_version; ///< the major savegame version identifier @@ -1483,6 +1485,8 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld) return 0; } +#ifdef OTTD_ASSERT + /** * Check whether the variable size of the variable in the saveload configuration * matches with the actual variable size. @@ -1523,9 +1527,13 @@ static bool IsVariableSizeRight(const SaveLoad *sld) } } +#endif /* OTTD_ASSERT */ + bool SlObjectMember(void *ptr, const SaveLoad *sld) { +#ifdef OTTD_ASSERT assert(IsVariableSizeRight(sld)); +#endif VarType conv = GB(sld->conv, 0, 8); switch (sld->cmd) { @@ -2460,7 +2468,7 @@ static void SaveFileStart() { _sl.ff_state = _fast_forward; _fast_forward = 0; - if (_cursor.sprite == SPR_CURSOR_MOUSE) SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE); + SetMouseCursorBusy(true); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SAVELOAD_START); _sl.saveinprogress = true; @@ -2470,7 +2478,7 @@ static void SaveFileStart() static void SaveFileDone() { if (_game_mode != GM_MENU) _fast_forward = _sl.ff_state; - if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); + SetMouseCursorBusy(false); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SAVELOAD_FINISH); _sl.saveinprogress = false; @@ -2584,7 +2592,7 @@ static SaveOrLoadResult DoSave(SaveFilter *writer, bool threaded) SlSaveChunks(); SaveFileStart(); - if (!threaded || !ThreadObject::New(&SaveFileToDiskThread, NULL, &_save_thread)) { + if (!threaded || !ThreadObject::New(&SaveFileToDiskThread, NULL, &_save_thread, "ottd:savegame")) { if (threaded) DEBUG(sl, 1, "Cannot create savegame thread, reverting to single-threaded mode..."); SaveOrLoadResult result = SaveFileToDisk(false); @@ -2777,10 +2785,10 @@ SaveOrLoadResult LoadWithFilter(LoadFilter *reader) * @param threaded True when threaded saving is allowed * @return Return the result of the action. #SL_OK, #SL_ERROR, or #SL_REINIT ("unload" the game) */ -SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb, bool threaded) +SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded) { /* An instance of saving is already active, so don't go saving again */ - if (_sl.saveinprogress && mode == SL_SAVE && threaded) { + if (_sl.saveinprogress && fop == SLO_SAVE && dft == DFT_GAME_FILE && threaded) { /* if not an autosave, but a user action, show error message */ if (!_do_autosave) ShowErrorMessage(STR_ERROR_SAVE_STILL_IN_PROGRESS, INVALID_STRING_ID, WL_ERROR); return SL_OK; @@ -2789,7 +2797,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb, boo try { /* Load a TTDLX or TTDPatch game */ - if (mode == SL_OLD_LOAD) { + if (fop == SLO_LOAD && dft == DFT_OLD_GAME_FILE) { InitializeGame(256, 256, true, true); // set a mapsize of 256x256 for TTDPatch games or it might get confused /* TTD/TTO savegames have no NewGRFs, TTDP savegame have them @@ -2810,25 +2818,35 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb, boo return SL_OK; } - switch (mode) { - case SL_LOAD_CHECK: _sl.action = SLA_LOAD_CHECK; break; - case SL_LOAD: _sl.action = SLA_LOAD; break; - case SL_SAVE: _sl.action = SLA_SAVE; break; + assert(dft == DFT_GAME_FILE); + switch (fop) { + case SLO_CHECK: + _sl.action = SLA_LOAD_CHECK; + break; + + case SLO_LOAD: + _sl.action = SLA_LOAD; + break; + + case SLO_SAVE: + _sl.action = SLA_SAVE; + break; + default: NOT_REACHED(); } - FILE *fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb); + FILE *fh = (fop == SLO_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb); /* Make it a little easier to load savegames from the console */ - if (fh == NULL && mode != SL_SAVE) fh = FioFOpenFile(filename, "rb", SAVE_DIR); - if (fh == NULL && mode != SL_SAVE) fh = FioFOpenFile(filename, "rb", BASE_DIR); - if (fh == NULL && mode != SL_SAVE) fh = FioFOpenFile(filename, "rb", SCENARIO_DIR); + if (fh == NULL && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SAVE_DIR); + if (fh == NULL && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", BASE_DIR); + if (fh == NULL && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SCENARIO_DIR); if (fh == NULL) { - SlError(mode == SL_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); + SlError(fop == SLO_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); } - if (mode == SL_SAVE) { // SAVE game + if (fop == SLO_SAVE) { // SAVE game DEBUG(desync, 1, "save: %08x; %02x; %s", _date, _date_fract, filename); if (_network_server || !_settings_client.gui.threaded_saves) threaded = false; @@ -2836,24 +2854,25 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb, boo } /* LOAD game */ - assert(mode == SL_LOAD || mode == SL_LOAD_CHECK); + assert(fop == SLO_LOAD || fop == SLO_CHECK); DEBUG(desync, 1, "load: %s", filename); - return DoLoad(new FileReader(fh), mode == SL_LOAD_CHECK); + return DoLoad(new FileReader(fh), fop == SLO_CHECK); } catch (...) { + /* This code may be executed both for old and new save games. */ ClearSaveLoadState(); /* Skip the "colour" character */ - if (mode != SL_LOAD_CHECK) DEBUG(sl, 0, "%s", GetSaveLoadErrorString() + 3); + if (fop != SLO_CHECK) DEBUG(sl, 0, "%s", GetSaveLoadErrorString() + 3); /* A saver/loader exception!! reinitialize all variables to prevent crash! */ - return (mode == SL_LOAD || mode == SL_OLD_LOAD) ? SL_REINIT : SL_ERROR; + return (fop == SLO_LOAD) ? SL_REINIT : SL_ERROR; } } /** Do a save when exiting the game (_settings_client.gui.autosave_on_exit) */ void DoExitSave() { - SaveOrLoad("exit.sav", SL_SAVE, AUTOSAVE_DIR); + SaveOrLoad("exit.sav", SLO_SAVE, DFT_GAME_FILE, AUTOSAVE_DIR); } /** @@ -2891,6 +2910,53 @@ void GenerateDefaultSaveName(char *buf, const char *last) SanitizeFilename(buf); } +/** + * Set the mode and file type of the file to save or load based on the type of file entry at the file system. + * @param ft Type of file entry of the file system. + */ +void FileToSaveLoad::SetMode(FiosType ft) +{ + this->SetMode(SLO_LOAD, GetAbstractFileType(ft), GetDetailedFileType(ft)); +} + +/** + * Set the mode and file type of the file to save or load. + * @param fop File operation being performed. + * @param aft Abstract file type. + * @param dft Detailed file type. + */ +void FileToSaveLoad::SetMode(SaveLoadOperation fop, AbstractFileType aft, DetailedFileType dft) +{ + if (aft == FT_INVALID || aft == FT_NONE) { + this->file_op = SLO_INVALID; + this->detail_ftype = DFT_INVALID; + this->abstract_ftype = FT_INVALID; + return; + } + + this->file_op = fop; + this->detail_ftype = dft; + this->abstract_ftype = aft; +} + +/** + * Set the name of the file. + * @param name Name of the file. + */ +void FileToSaveLoad::SetName(const char *name) +{ + strecpy(this->name, name, lastof(this->name)); +} + +/** + * Set the title of the file. + * @param title Title of the file. + */ +void FileToSaveLoad::SetTitle(const char *title) +{ + strecpy(this->title, title, lastof(this->title)); +} + #if 0 /** * Function to get the type of the savegame by looking at the file header. diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 7923ebff74..70d7e0b304 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -1,4 +1,4 @@ -/* $Id: saveload.h 26591 2014-05-16 17:41:55Z rubidium $ */ +/* $Id: saveload.h 27757 2017-02-26 19:41:14Z frosch $ */ /* * This file is part of OpenTTD. @@ -22,15 +22,18 @@ enum SaveOrLoadResult { SL_REINIT = 2, ///< error that was caught in the middle of updating game state, need to clear it. (can only happen during load) }; -/** Save or load mode. @see SaveOrLoad */ -enum SaveOrLoadMode { - SL_INVALID = -1, ///< Invalid mode. - SL_LOAD = 0, ///< Load game. - SL_SAVE = 1, ///< Save game. - SL_OLD_LOAD = 2, ///< Load old game. - SL_PNG = 3, ///< Load PNG file (height map). - SL_BMP = 4, ///< Load BMP file (height map). - SL_LOAD_CHECK = 5, ///< Load for game preview. +/** Deals with the type of the savegame, independent of extension */ +struct FileToSaveLoad { + SaveLoadOperation file_op; ///< File operation to perform. + DetailedFileType detail_ftype; ///< Concrete file type (PNG, BMP, old save, etc). + AbstractFileType abstract_ftype; ///< Abstract type of file (scenario, heightmap, etc). + char name[MAX_PATH]; ///< Name of the file. + char title[255]; ///< Internal name of the game. + + void SetMode(FiosType ft); + void SetMode(SaveLoadOperation fop, AbstractFileType aft, DetailedFileType dft); + void SetName(const char *name); + void SetTitle(const char *title); }; /** Types of save games. */ @@ -43,10 +46,12 @@ enum SavegameType { SGT_INVALID = 0xFF, ///< broken savegame (used internally) }; +extern FileToSaveLoad _file_to_saveload; + void GenerateDefaultSaveName(char *buf, const char *last); -void SetSaveLoadError(uint16 str); +void SetSaveLoadError(StringID str); const char *GetSaveLoadErrorString(); -SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb, bool threaded = true); +SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded = true); void WaitTillSaved(); void ProcessAsyncSaveFinish(); void DoExitSave(); @@ -156,7 +161,7 @@ enum VarTypes { SLE_INT64 = SLE_FILE_I64 | SLE_VAR_I64, SLE_UINT64 = SLE_FILE_U64 | SLE_VAR_U64, SLE_CHAR = SLE_FILE_I8 | SLE_VAR_CHAR, - SLE_STRINGID = SLE_FILE_STRINGID | SLE_VAR_U16, + SLE_STRINGID = SLE_FILE_STRINGID | SLE_VAR_U32, SLE_STRINGBUF = SLE_FILE_STRING | SLE_VAR_STRB, SLE_STRINGBQUOTE = SLE_FILE_STRING | SLE_VAR_STRBQ, SLE_STRING = SLE_FILE_STRING | SLE_VAR_STR, diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index c093fe09e3..6335f936b8 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: signs_sl.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: signs_sl.cpp 27650 2016-09-04 12:57:43Z alberth $ */ /* * This file is part of OpenTTD. @@ -60,7 +60,7 @@ static void Load_SIGN() } /* Signs placed in scenario editor shall now be OWNER_DEITY */ - if (IsSavegameVersionBefore(171) && si->owner == OWNER_NONE && _saveload_mode == SLD_LOAD_SCENARIO) { + if (IsSavegameVersionBefore(171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) { si->owner = OWNER_DEITY; } } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 884feef958..93c4ce9f7e 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: station_sl.cpp 26878 2014-09-21 11:23:33Z rubidium $ */ +/* $Id: station_sl.cpp 27770 2017-03-05 17:06:14Z fonsinchen $ */ /* * This file is part of OpenTTD. @@ -325,6 +325,10 @@ static void SwapPackets(GoodsEntry *ge) static void Load_STNS() { + _cargo_source_xy = 0; + _cargo_days = 0; + _cargo_feeder_share = 0; + int index; while ((index = SlIterateArray()) != -1) { Station *st = new (index) Station(); @@ -514,8 +518,9 @@ static void Save_STNN() static void Load_STNN() { - int index; + _num_flows = 0; + int index; while ((index = SlIterateArray()) != -1) { bool waypoint = (SlReadByte() & FACIL_WAYPOINT) != 0; diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp index 0b980eb207..0a04b808ee 100644 --- a/src/saveload/strings_sl.cpp +++ b/src/saveload/strings_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: strings_sl.cpp 26509 2014-04-25 15:40:32Z rubidium $ */ +/* $Id: strings_sl.cpp 27756 2017-02-26 19:40:53Z frosch $ */ /* * This file is part of OpenTTD. @@ -11,6 +11,7 @@ #include "../stdafx.h" #include "../string_func.h" +#include "../strings_func.h" #include "saveload_internal.h" #include "table/strings.h" @@ -60,7 +61,7 @@ char *_old_name_array = NULL; char *CopyFromOldName(StringID id) { /* Is this name an (old) custom name? */ - if (GB(id, 11, 5) != 15) return NULL; + if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return NULL; if (IsSavegameVersionBefore(37)) { /* Allow for expansion when converted to UTF-8. */ diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 8776c40526..8b9c4fd1e8 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: town_sl.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: town_sl.cpp 27756 2017-02-26 19:40:53Z frosch $ */ /* * This file is part of OpenTTD. @@ -14,6 +14,7 @@ #include "../town.h" #include "../landscape.h" #include "../subsidy_func.h" +#include "../strings_func.h" #include "saveload.h" #include "newgrf_sl.h" @@ -285,7 +286,7 @@ static void Load_TOWN() SlObject(&t->received[i], _town_received_desc); } - if (t->townnamegrfid == 0 && !IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1) && GB(t->townnametype, 11, 5) != 15) { + if (t->townnamegrfid == 0 && !IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1) && GetStringTab(t->townnametype) != TEXT_TAB_OLD_CUSTOM) { SlErrorCorrupt("Invalid town name generator"); } diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index c1a6d6d28f..9b7a60c594 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -1,4 +1,4 @@ -/* $Id: vehicle_sl.cpp 26872 2014-09-21 11:12:42Z rubidium $ */ +/* $Id: vehicle_sl.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -436,21 +436,21 @@ void AfterLoadVehicles(bool part_of_load) case VEH_TRAIN: case VEH_SHIP: - v->cur_image = v->GetImage(v->direction, EIT_ON_MAP); + v->GetImage(v->direction, EIT_ON_MAP, &v->sprite_seq); break; case VEH_AIRCRAFT: if (Aircraft::From(v)->IsNormalAircraft()) { - v->cur_image = v->GetImage(v->direction, EIT_ON_MAP); + v->GetImage(v->direction, EIT_ON_MAP, &v->sprite_seq); - /* The plane's shadow will have the same image as the plane */ + /* The plane's shadow will have the same image as the plane, but no colour */ Vehicle *shadow = v->Next(); - shadow->cur_image = v->cur_image; + shadow->sprite_seq.CopyWithoutPalette(v->sprite_seq); /* In the case of a helicopter we will update the rotor sprites */ if (v->subtype == AIR_HELICOPTER) { Vehicle *rotor = shadow->Next(); - rotor->cur_image = GetRotorImage(Aircraft::From(v), EIT_ON_MAP); + GetRotorImage(Aircraft::From(v), EIT_ON_MAP, &rotor->sprite_seq); } UpdateAircraftCache(Aircraft::From(v), true); @@ -796,7 +796,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163), SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), - SLE_VAR(Vehicle, cur_image, SLE_FILE_U16 | SLE_VAR_U32), + SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), SLE_CONDNULL(5, 0, 57), SLE_VAR(Vehicle, progress, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), @@ -836,7 +836,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, 5, SL_MAX_VERSION), - SLE_VAR(Vehicle, cur_image, SLE_FILE_U16 | SLE_VAR_U32), + SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION), SLE_VAR(Vehicle, tick_counter, SLE_UINT8), diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index ab48ffc993..181d09d23f 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -1,4 +1,4 @@ -/* $Id: ai_changelog.hpp 27596 2016-06-01 18:35:24Z frosch $ */ +/* $Id: ai_changelog.hpp 27776 2017-03-11 13:34:01Z frosch $ */ /* * This file is part of OpenTTD. @@ -15,23 +15,15 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * - * \b 1.6.1 + * \b 1.7.0 + * + * 1.7.0 is not yet released. The following changes are not set in stone yet. + * + * \b 1.6.1 - 1.6.0 * * No changes * - * \b 1.6.0 - * - * No changes - * - * \b 1.5.3 - * - * No changes - * - * \b 1.5.2 - * - * No changes - * - * \b 1.5.1 + * \b 1.5.3 - 1.5.1 * * No changes * @@ -53,20 +45,7 @@ * \li AIStationList_CargoWaitingFromByVia * \li AIStationList_CargoWaitingViaByFrom * - * \b 1.4.4 - * - * No changes - * - * \b 1.4.3 - * - * No changes - * - * \b 1.4.2 - * - * No changes - * - * \b 1.4.1 - * + * \b 1.4.4 - 1.4.1 * No changes * * \b 1.4.0 @@ -87,11 +66,7 @@ * \li AIStation::GetCargoRating does return -1 for cargo-station combinations that * do not have a rating yet instead of returning 69. * - * \b 1.3.3 - * - * No changes - * - * \b 1.3.2 + * \b 1.3.3 - 1.3.2 * * No changes * @@ -110,15 +85,7 @@ * \li AIStation::OpenCloseAirport * \li AIController::Break * - * \b 1.2.3 - * - * No changes - * - * \b 1.2.2 - * - * No changes - * - * \b 1.2.1 + * \b 1.2.3 - 1.2.1 * * No changes * @@ -185,15 +152,7 @@ * API additions: * \li AIVehicle::ERR_VEHICLE_TOO_LONG in case vehicle length limit is reached. * - * \b 1.1.3 - * - * No changes - * - * \b 1.1.2 - * - * No changes - * - * \b 1.1.1 + * \b 1.1.3 - 1.1.1 * * No changes * @@ -224,11 +183,7 @@ * \li AIRoad::BuildDriveThroughRoadStation now allows overbuilding. * \li AIRoad::BuildRoadStation now allows overbuilding. * - * \b 1.0.5 - * - * No changes - * - * \b 1.0.4 + * \b 1.0.5 - 1.0.4 * * No changes * @@ -342,11 +297,7 @@ * station orders for buoys one has to use waypoint orders. * \li Autoreplaces can now also be set for the default group via AIGroup. * - * \b 0.7.5 - * - * No changes - * - * \b 0.7.4 + * \b 0.7.5 - 0.7.4 * * No changes * diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 5bd288e31c..ed8801645f 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -1,4 +1,4 @@ -/* $Id: game_window.hpp.sq 27174 2015-03-01 08:17:14Z alberth $ */ +/* $Id: game_window.hpp.sq 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -225,10 +225,8 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_START_REPLACE, "WID_RV_START_REPLACE"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_INFO_TAB, "WID_RV_INFO_TAB"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_STOP_REPLACE, "WID_RV_STOP_REPLACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_ENGINEWAGON_TOGGLE, "WID_RV_TRAIN_ENGINEWAGON_TOGGLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_FLUFF_LEFT, "WID_RV_TRAIN_FLUFF_LEFT"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_ENGINEWAGON_DROPDOWN, "WID_RV_TRAIN_ENGINEWAGON_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_RAILTYPE_DROPDOWN, "WID_RV_TRAIN_RAILTYPE_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_FLUFF_RIGHT, "WID_RV_TRAIN_FLUFF_RIGHT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_WAGONREMOVE_TOGGLE, "WID_RV_TRAIN_WAGONREMOVE_TOGGLE"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BB_BACKGROUND, "WID_BB_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BAFD_QUESTION, "WID_BAFD_QUESTION"); @@ -584,6 +582,8 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_ARCTIC_LANDSCAPE, "WID_SGI_ARCTIC_LANDSCAPE"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TROPIC_LANDSCAPE, "WID_SGI_TROPIC_LANDSCAPE"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TOYLAND_LANDSCAPE, "WID_SGI_TOYLAND_LANDSCAPE"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_BASESET_SELECTION, "WID_SGI_BASESET_SELECTION"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_BASESET, "WID_SGI_BASESET"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TRANSLATION_SELECTION, "WID_SGI_TRANSLATION_SELECTION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TRANSLATION, "WID_SGI_TRANSLATION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_OPTIONS, "WID_SGI_OPTIONS"); @@ -1183,6 +1183,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_AIRCRAFTS, "WID_TN_AIRCRAFTS"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ZOOM_IN, "WID_TN_ZOOM_IN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ZOOM_OUT, "WID_TN_ZOOM_OUT"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_BUILDING_TOOLS_START, "WID_TN_BUILDING_TOOLS_START"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_RAILS, "WID_TN_RAILS"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ROADS, "WID_TN_ROADS"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_WATER, "WID_TN_WATER"); diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 302ad3e904..3b30f0bc72 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -1,4 +1,4 @@ -/* $Id: game_changelog.hpp 27596 2016-06-01 18:35:24Z frosch $ */ +/* $Id: game_changelog.hpp 27776 2017-03-11 13:34:01Z frosch $ */ /* * This file is part of OpenTTD. @@ -15,23 +15,15 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * - * \b 1.6.1 + * \b 1.7.0 + * + * 1.7.0 is not yet released. The following changes are not set in stone yet. + * + * \b 1.6.1 - 1.6.0 * * No changes * - * \b 1.6.0 - * - * No changes - * - * \b 1.5.3 - * - * No changes - * - * \b 1.5.2 - * - * No changes - * - * \b 1.5.1 + * \b 1.5.3 - 1.5.1 * * No changes * @@ -58,11 +50,7 @@ * industry, or town. The user can click at the news message to jump to the * referred location. * - * \b 1.4.4 - * - * No changes - * - * \b 1.4.3 + * \b 1.4.4 - 1.4.3 * * No changes * @@ -106,11 +94,7 @@ * \li GSStation::GetCargoRating does return -1 for cargo-station combinations that * do not have a rating yet instead of returning 69. * - * \b 1.3.3 - * - * No changes - * - * \b 1.3.2 + * \b 1.3.3 - 1.3.2 * * No changes * @@ -136,15 +120,7 @@ * Other changes: * \li Company specific goals are now removed when a company goes bankrupt or is taken over. * - * \b 1.2.3 - * - * No changes - * - * \b 1.2.2 - * - * No changes - * - * \b 1.2.1 + * \b 1.2.3 - 1.2.1 * * No changes * diff --git a/src/script/api/script_error.cpp b/src/script/api/script_error.cpp index 0df8bf15fa..5ce1e768bf 100644 --- a/src/script/api/script_error.cpp +++ b/src/script/api/script_error.cpp @@ -1,4 +1,4 @@ -/* $Id: script_error.cpp 26509 2014-04-25 15:40:32Z rubidium $ */ +/* $Id: script_error.cpp 27758 2017-02-26 19:41:30Z frosch $ */ /* * This file is part of OpenTTD. @@ -13,6 +13,7 @@ #include "script_error.hpp" #include "../../core/bitmath_func.hpp" #include "../../string_func.h" +#include "../../strings_func.h" #include "../../safeguards.h" @@ -31,17 +32,17 @@ ScriptError::ScriptErrorMapString ScriptError::error_map_string = ScriptError::S /* static */ ScriptErrorType ScriptError::StringToError(StringID internal_string_id) { - uint index = GB(internal_string_id, 11, 5); - switch (GB(internal_string_id, 11, 5)) { - case 26: case 28: case 29: case 30: // NewGRF strings. - return ERR_NEWGRF_SUPPLIED_ERROR; + uint index = GetStringIndex(internal_string_id); + switch (GetStringTab(internal_string_id)) { + case TEXT_TAB_NEWGRF_START: + case TEXT_TAB_GAMESCRIPT_START: + return ERR_NEWGRF_SUPPLIED_ERROR; // NewGRF strings. - /* DO NOT SWAP case 14 and 4 because that will break StringToError due - * to the index dependency that relies on FALL THROUGHs. */ - case 14: if (index < 0xE4) break; // Player name - case 4: if (index < 0xC0) break; // Town name - case 15: // Custom name - case 31: // Dynamic strings + case TEXT_TAB_SPECIAL: + if (index < 0xE4) break; // Player name + /* FALL THROUGH */ + case TEXT_TAB_TOWN: + if (index < 0xC0) break; // Town name /* These strings are 'random' and have no meaning. * They actually shouldn't even be returned as error messages. */ return ERR_UNKNOWN; diff --git a/src/script/api/script_execmode.hpp b/src/script/api/script_execmode.hpp index ee21c47b55..4eb606737b 100644 --- a/src/script/api/script_execmode.hpp +++ b/src/script/api/script_execmode.hpp @@ -1,4 +1,4 @@ -/* $Id: script_execmode.hpp 27587 2016-05-29 18:52:56Z frosch $ */ +/* $Id: script_execmode.hpp 27543 2016-04-17 17:10:07Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp index 08a1593bbb..cd07d91b49 100644 --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -1,4 +1,4 @@ -/* $Id: script_list.cpp 27258 2015-04-27 19:28:22Z frosch $ */ +/* $Id: script_list.cpp 27594 2016-05-30 21:03:11Z frosch $ */ /* * This file is part of OpenTTD. @@ -11,6 +11,7 @@ #include "../../stdafx.h" #include "script_list.hpp" +#include "script_controller.hpp" #include "../../debug.h" #include "../../script/squirrel.hpp" @@ -905,6 +906,16 @@ SQInteger ScriptList::Valuate(HSQUIRRELVM vm) } } + /* Kill the script when the valuator call takes way too long. + * Triggered by nesting valuators, which then take billions of iterations. */ + if (ScriptController::GetOpsTillSuspend() < -1000000) { + /* See below for explanation. The extra pop is the return value. */ + sq_pop(vm, nparam + 4); + + ScriptObject::SetAllowDoCommand(backup_allow); + return sq_throwerror(vm, "excessive CPU usage in valuator function"); + } + /* Was something changed? */ if (previous_modification_count != this->modifications) { /* See below for explanation. The extra pop is the return value. */ diff --git a/src/script/api/script_testmode.hpp b/src/script/api/script_testmode.hpp index a3b41c4724..6f06491866 100644 --- a/src/script/api/script_testmode.hpp +++ b/src/script/api/script_testmode.hpp @@ -1,4 +1,4 @@ -/* $Id: script_testmode.hpp 27587 2016-05-29 18:52:56Z frosch $ */ +/* $Id: script_testmode.hpp 27543 2016-04-17 17:10:07Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index 72265c1fdc..3917e7130b 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -1,4 +1,4 @@ -/* $Id: script_text.hpp 27587 2016-05-29 18:52:56Z frosch $ */ +/* $Id: script_text.hpp 27544 2016-04-17 19:50:27Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/script/api/script_types.hpp b/src/script/api/script_types.hpp index f4f421c7dc..ef7e83cff6 100644 --- a/src/script/api/script_types.hpp +++ b/src/script/api/script_types.hpp @@ -1,4 +1,4 @@ -/* $Id: script_types.hpp 25342 2013-06-09 12:19:09Z zuu $ */ +/* $Id: script_types.hpp 27757 2017-02-26 19:41:14Z frosch $ */ /* * This file is part of OpenTTD. @@ -98,7 +98,7 @@ typedef uint8 IndustryType; ///< The ID of an industry-type. typedef OverflowSafeInt64 Money; ///< Money, stored in a 32bit/64bit safe way. For scripts money is always in pounds. typedef uint16 SignID; ///< The ID of a sign. typedef uint16 StationID; ///< The ID of a station. -typedef uint16 StringID; ///< The ID of a string. +typedef uint32 StringID; ///< The ID of a string. typedef uint16 SubsidyID; ///< The ID of a subsidy. typedef uint16 StoryPageID; ///< The ID of a story page. typedef uint16 StoryPageElementID; ///< The ID of a story page element. diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 838a4058b4..641921bab1 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1,4 +1,4 @@ -/* $Id: script_window.hpp 27286 2015-05-16 12:08:06Z alberth $ */ +/* $Id: script_window.hpp 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -942,10 +942,8 @@ public: WID_RV_STOP_REPLACE = ::WID_RV_STOP_REPLACE, ///< Stop Replacing button. /* Train only widgets. */ - WID_RV_TRAIN_ENGINEWAGON_TOGGLE = ::WID_RV_TRAIN_ENGINEWAGON_TOGGLE, ///< Button to toggle engines and/or wagons. - WID_RV_TRAIN_FLUFF_LEFT = ::WID_RV_TRAIN_FLUFF_LEFT, ///< The fluff on the left. + WID_RV_TRAIN_ENGINEWAGON_DROPDOWN = ::WID_RV_TRAIN_ENGINEWAGON_DROPDOWN, ///< Dropdown to select engines and/or wagons. WID_RV_TRAIN_RAILTYPE_DROPDOWN = ::WID_RV_TRAIN_RAILTYPE_DROPDOWN, ///< Dropdown menu about the railtype. - WID_RV_TRAIN_FLUFF_RIGHT = ::WID_RV_TRAIN_FLUFF_RIGHT, ///< The fluff on the right. WID_RV_TRAIN_WAGONREMOVE_TOGGLE = ::WID_RV_TRAIN_WAGONREMOVE_TOGGLE, ///< Button to toggle removing wagons. }; @@ -1499,8 +1497,10 @@ public: WID_SGI_ARCTIC_LANDSCAPE = ::WID_SGI_ARCTIC_LANDSCAPE, ///< Select arctic landscape button. WID_SGI_TROPIC_LANDSCAPE = ::WID_SGI_TROPIC_LANDSCAPE, ///< Select tropic landscape button. WID_SGI_TOYLAND_LANDSCAPE = ::WID_SGI_TOYLAND_LANDSCAPE, ///< Select toyland landscape button. + WID_SGI_BASESET_SELECTION = ::WID_SGI_BASESET_SELECTION, ///< Baseset selection. + WID_SGI_BASESET = ::WID_SGI_BASESET, ///< Baseset errors. WID_SGI_TRANSLATION_SELECTION = ::WID_SGI_TRANSLATION_SELECTION, ///< Translation selection. - WID_SGI_TRANSLATION = ::WID_SGI_TRANSLATION, ///< Translation. + WID_SGI_TRANSLATION = ::WID_SGI_TRANSLATION, ///< Translation errors. WID_SGI_OPTIONS = ::WID_SGI_OPTIONS, ///< Options button. WID_SGI_HIGHSCORE = ::WID_SGI_HIGHSCORE, ///< Highscore button. WID_SGI_SETTINGS_OPTIONS = ::WID_SGI_SETTINGS_OPTIONS, ///< Settings button. @@ -2384,6 +2384,7 @@ public: WID_TN_AIRCRAFTS = ::WID_TN_AIRCRAFTS, ///< Aircraft menu. WID_TN_ZOOM_IN = ::WID_TN_ZOOM_IN, ///< Zoom in the main viewport. WID_TN_ZOOM_OUT = ::WID_TN_ZOOM_OUT, ///< Zoom out the main viewport. + WID_TN_BUILDING_TOOLS_START = ::WID_TN_BUILDING_TOOLS_START, ///< Helper for the offset of the building tools WID_TN_RAILS = ::WID_TN_RAILS, ///< Rail building menu. WID_TN_ROADS = ::WID_TN_ROADS, ///< Road building menu. WID_TN_WATER = ::WID_TN_WATER, ///< Water building toolbar. diff --git a/src/script/api/squirrel_export.awk b/src/script/api/squirrel_export.awk index 22f25072da..c2c7108fd8 100644 --- a/src/script/api/squirrel_export.awk +++ b/src/script/api/squirrel_export.awk @@ -1,4 +1,4 @@ -# $Id: squirrel_export.awk 27587 2016-05-29 18:52:56Z frosch $ +# $Id: squirrel_export.awk 27545 2016-04-17 19:51:42Z frosch $ # 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. diff --git a/src/ship.h b/src/ship.h index 21e5bb64c7..dbe13788a4 100644 --- a/src/ship.h +++ b/src/ship.h @@ -1,4 +1,4 @@ -/* $Id: ship.h 26546 2014-05-01 14:48:44Z fonsinchen $ */ +/* $Id: ship.h 27666 2016-10-16 14:57:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -34,7 +34,7 @@ struct Ship FINAL : public SpecializedVehicle { ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_SHIP_INC : EXPENSES_SHIP_RUN; } void PlayLeaveStationSound() const; bool IsPrimaryVehicle() const { return true; } - SpriteID GetImage(Direction direction, EngineImageType image_type) const; + void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const; int GetDisplaySpeed() const { return this->cur_speed / 2; } int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed / 2; } int GetCurrentMaxSpeed() const { return min(this->vcache.cached_max_speed, this->current_order.GetMaxSpeed() * 2); } diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index c35c80a2ae..bc25d0a9e6 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: ship_cmd.cpp 27134 2015-02-01 20:54:24Z frosch $ */ +/* $Id: ship_cmd.cpp 27667 2016-10-16 14:58:38Z frosch $ */ /* * This file is part of OpenTTD. @@ -70,30 +70,34 @@ static inline TrackBits GetTileShipTrackStatus(TileIndex tile) return TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)); } -static SpriteID GetShipIcon(EngineID engine, EngineImageType image_type) +static void GetShipIcon(EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result) { const Engine *e = Engine::Get(engine); uint8 spritenum = e->u.ship.image_index; if (is_custom_sprite(spritenum)) { - SpriteID sprite = GetCustomVehicleIcon(engine, DIR_W, image_type); - if (sprite != 0) return sprite; + GetCustomVehicleIcon(engine, DIR_W, image_type, result); + if (result->IsValid()) return; spritenum = e->original_image_index; } assert(IsValidImageIndex(spritenum)); - return DIR_W + _ship_sprites[spritenum]; + result->Set(DIR_W + _ship_sprites[spritenum]); } void DrawShipEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) { - SpriteID sprite = GetShipIcon(engine, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + GetShipIcon(engine, image_type, &seq); + + Rect rect; + seq.GetBounds(&rect); preferred_x = Clamp(preferred_x, - left - UnScaleGUI(real_sprite->x_offs), - right - UnScaleGUI(real_sprite->width) - UnScaleGUI(real_sprite->x_offs)); - DrawSprite(sprite, pal, preferred_x, y); + left - UnScaleGUI(rect.left), + right - UnScaleGUI(rect.right)); + + seq.Draw(preferred_x, y, pal, pal == PALETTE_CRASH); } /** @@ -107,27 +111,31 @@ void DrawShipEngine(int left, int right, int preferred_x, int y, EngineID engine */ void GetShipSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type) { - const Sprite *spr = GetSprite(GetShipIcon(engine, image_type), ST_NORMAL); + VehicleSpriteSeq seq; + GetShipIcon(engine, image_type, &seq); - width = UnScaleGUI(spr->width); - height = UnScaleGUI(spr->height); - xoffs = UnScaleGUI(spr->x_offs); - yoffs = UnScaleGUI(spr->y_offs); + Rect rect; + seq.GetBounds(&rect); + + width = UnScaleGUI(rect.right - rect.left + 1); + height = UnScaleGUI(rect.bottom - rect.top + 1); + xoffs = UnScaleGUI(rect.left); + yoffs = UnScaleGUI(rect.top); } -SpriteID Ship::GetImage(Direction direction, EngineImageType image_type) const +void Ship::GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const { uint8 spritenum = this->spritenum; if (is_custom_sprite(spritenum)) { - SpriteID sprite = GetCustomVehicleSprite(this, direction, image_type); - if (sprite != 0) return sprite; + GetCustomVehicleSprite(this, direction, image_type, result); + if (result->IsValid()) return; spritenum = this->GetEngine()->original_image_index; } assert(IsValidImageIndex(spritenum)); - return _ship_sprites[spritenum] + direction; + result->Set(_ship_sprites[spritenum] + direction); } static const Depot *FindClosestShipDepot(const Vehicle *v, uint max_distance) @@ -710,7 +718,7 @@ CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, const Engine *e, u v->SetServiceInterval(Company::Get(_current_company)->settings.vehicle.servint_ships); v->date_of_last_service = _date; v->build_year = _cur_year; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); v->UpdateCache(); diff --git a/src/ship_gui.cpp b/src/ship_gui.cpp index 2675f80452..4694888d48 100644 --- a/src/ship_gui.cpp +++ b/src/ship_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: ship_gui.cpp 27134 2015-02-01 20:54:24Z frosch $ */ +/* $Id: ship_gui.cpp 27667 2016-10-16 14:58:38Z frosch $ */ /* * This file is part of OpenTTD. @@ -35,20 +35,23 @@ void DrawShipImage(const Vehicle *v, int left, int right, int y, VehicleID selec { bool rtl = _current_text_dir == TD_RTL; - SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + v->GetImage(rtl ? DIR_E : DIR_W, image_type, &seq); - int width = UnScaleGUI(real_sprite->width); - int x_offs = UnScaleGUI(real_sprite->x_offs); + Rect rect; + seq.GetBounds(&rect); + + int width = UnScaleGUI(rect.right - rect.left + 1); + int x_offs = UnScaleGUI(rect.left); int x = rtl ? right - width - x_offs : left - x_offs; y += ScaleGUITrad(10); - DrawSprite(sprite, GetVehiclePalette(v), x, y); + seq.Draw(x, y, GetVehiclePalette(v), false); if (v->index == selection) { x += x_offs; - y += UnScaleGUI(real_sprite->y_offs); - DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(real_sprite->height) + 1, COLOUR_WHITE, FR_BORDERONLY); + y += UnScaleGUI(rect.top); + DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(rect.bottom - rect.top + 1) + 1, COLOUR_WHITE, FR_BORDERONLY); } } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 073f3cb2ff..5430584649 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: smallmap_gui.cpp 27381 2015-08-10 20:24:13Z michi_cc $ */ +/* $Id: smallmap_gui.cpp 27622 2016-07-22 21:44:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -413,26 +413,10 @@ static const byte _tiletype_importance[] = { }; -static inline TileType GetEffectiveTileType(TileIndex tile) -{ - TileType t = GetTileType(tile); - - if (t == MP_TUNNELBRIDGE) { - TransportType tt = GetTunnelBridgeTransportType(tile); - - switch (tt) { - case TRANSPORT_RAIL: t = MP_RAILWAY; break; - case TRANSPORT_ROAD: t = MP_ROAD; break; - default: t = MP_WATER; break; - } - } - return t; -} - /** * Return the colour a tile would be displayed with in the small map in mode "Contour". * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the small map in mode "Contour" */ static inline uint32 GetSmallMapContoursPixels(TileIndex tile, TileType t) @@ -445,7 +429,7 @@ static inline uint32 GetSmallMapContoursPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Vehicles". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the small map in mode "Vehicles" */ static inline uint32 GetSmallMapVehiclesPixels(TileIndex tile, TileType t) @@ -458,23 +442,11 @@ static inline uint32 GetSmallMapVehiclesPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Industries". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the small map in mode "Industries" */ static inline uint32 GetSmallMapIndustriesPixels(TileIndex tile, TileType t) { - if (t == MP_INDUSTRY) { - /* If industry is allowed to be seen, use its colour on the map */ - IndustryType type = Industry::GetByTile(tile)->type; - if (_legend_from_industries[_industry_to_list_pos[type]].show_on_map && - (_smallmap_industry_highlight_state || type != _smallmap_industry_highlight)) { - return (type == _smallmap_industry_highlight ? PC_WHITE : GetIndustrySpec(Industry::GetByTile(tile)->type)->map_colour) * 0x01010101; - } else { - /* Otherwise, return the colour which will make it disappear */ - t = (IsTileOnWater(tile) ? MP_WATER : MP_CLEAR); - } - } - const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; return ApplyMask(_smallmap_show_heightmap ? cs->height_colours[TileHeight(tile)] : cs->default_colour, &_smallmap_vehicles_andor[t]); } @@ -483,7 +455,7 @@ static inline uint32 GetSmallMapIndustriesPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Routes". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the small map in mode "Routes" */ static inline uint32 GetSmallMapRoutesPixels(TileIndex tile, TileType t) @@ -516,7 +488,7 @@ static inline uint32 GetSmallMapRoutesPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "link stats". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the small map in mode "link stats" */ static inline uint32 GetSmallMapLinkStatsPixels(TileIndex tile, TileType t) @@ -539,7 +511,7 @@ static const uint32 _vegetation_clear_bits[] = { * Return the colour a tile would be displayed with in the smallmap in mode "Vegetation". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the smallmap in mode "Vegetation" */ static inline uint32 GetSmallMapVegetationPixels(TileIndex tile, TileType t) @@ -566,7 +538,7 @@ static inline uint32 GetSmallMapVegetationPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Owner". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetEffectiveTileType). + * @param t Effective tile type of the tile (see #GetTileColours). * @return The colour of tile in the small map in mode "Owner" */ static inline uint32 GetSmallMapOwnerPixels(TileIndex tile, TileType t) @@ -754,7 +726,42 @@ inline uint32 SmallMapWindow::GetTileColours(const TileArea &ta) const TileType et = MP_VOID; // Effective tile type at that position. TILE_AREA_LOOP(ti, ta) { - TileType ttype = GetEffectiveTileType(ti); + TileType ttype = GetTileType(ti); + + switch (ttype) { + case MP_TUNNELBRIDGE: { + TransportType tt = GetTunnelBridgeTransportType(ti); + + switch (tt) { + case TRANSPORT_RAIL: ttype = MP_RAILWAY; break; + case TRANSPORT_ROAD: ttype = MP_ROAD; break; + default: ttype = MP_WATER; break; + } + break; + } + + case MP_INDUSTRY: + /* Special handling of industries while in "Industries" smallmap view. */ + if (this->map_type == SMT_INDUSTRY) { + /* If industry is allowed to be seen, use its colour on the map. + * This has the highest priority above any value in _tiletype_importance. */ + IndustryType type = Industry::GetByTile(ti)->type; + if (_legend_from_industries[_industry_to_list_pos[type]].show_on_map) { + if (type == _smallmap_industry_highlight) { + if (_smallmap_industry_highlight_state) return MKCOLOUR_XXXX(PC_WHITE); + } else { + return GetIndustrySpec(type)->map_colour * 0x01010101; + } + } + /* Otherwise make it disappear */ + ttype = IsTileOnWater(ti) ? MP_WATER : MP_CLEAR; + } + break; + + default: + break; + } + if (_tiletype_importance[ttype] > importance) { importance = _tiletype_importance[ttype]; tile = ti; diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index 4e2eec4c7c..7b646bb716 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -1,4 +1,4 @@ -/* $Id: win32_s.cpp 27383 2015-08-12 20:50:10Z rubidium $ */ +/* $Id: win32_s.cpp 27673 2016-10-30 18:22:55Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -19,6 +19,7 @@ #include "win32_s.h" #include #include +#include "../os/windows/win32.h" #include "../safeguards.h" @@ -41,6 +42,8 @@ static void PrepareHeader(WAVEHDR *hdr) static DWORD WINAPI SoundThread(LPVOID arg) { + SetWin32ThreadName(-1, "ottd:win-sound"); + do { for (WAVEHDR *hdr = _wave_hdr; hdr != endof(_wave_hdr); hdr++) { if ((hdr->dwFlags & WHDR_INQUEUE) != 0) continue; diff --git a/src/spritecache.cpp b/src/spritecache.cpp index bca6065e0d..2c139674c9 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -1,4 +1,4 @@ -/* $Id: spritecache.cpp 27016 2014-10-14 16:09:21Z peter1138 $ */ +/* $Id: spritecache.cpp 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -149,6 +149,25 @@ uint GetOriginFileSlot(SpriteID sprite) return GetSpriteCache(sprite)->file_slot; } +/** + * Count the sprites which originate from a specific file slot in a range of SpriteIDs. + * @param file_slot FIOS file slot. + * @param begin First sprite in range. + * @param end First sprite not in range. + * @return Number of sprites. + */ +uint GetSpriteCountForSlot(uint file_slot, SpriteID begin, SpriteID end) +{ + uint count = 0; + for (SpriteID i = begin; i != end; i++) { + if (SpriteExists(i)) { + SpriteCache *sc = GetSpriteCache(i); + if (sc->file_slot == file_slot) count++; + } + } + return count; +} + /** * Get a reasonable (upper bound) estimate of the maximum * SpriteID used in OpenTTD; there will be no sprites with diff --git a/src/spritecache.h b/src/spritecache.h index 716a089f8f..5672574043 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -1,4 +1,4 @@ -/* $Id: spritecache.h 23887 2012-02-04 13:29:04Z michi_cc $ */ +/* $Id: spritecache.h 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -32,6 +32,7 @@ bool SpriteExists(SpriteID sprite); SpriteType GetSpriteType(SpriteID sprite); uint GetOriginFileSlot(SpriteID sprite); +uint GetSpriteCountForSlot(uint file_slot, SpriteID begin, SpriteID end); uint GetMaxSpriteID(); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index a1faf7edce..eee411bf0b 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: station_cmd.cpp 27311 2015-06-21 09:19:27Z frosch $ */ +/* $Id: station_cmd.cpp 27686 2016-12-09 21:27:22Z frosch $ */ /* * This file is part of OpenTTD. @@ -2897,12 +2897,12 @@ draw_default_foundation: } } - if (HasStationRail(ti->tile) && HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti); + if (HasStationRail(ti->tile) && HasRailCatenaryDrawn(GetRailType(ti->tile))) DrawRailCatenary(ti); if (HasBit(roadtypes, ROADTYPE_TRAM)) { Axis axis = GetRoadStopDir(ti->tile) == DIAGDIR_NE ? AXIS_X : AXIS_Y; DrawGroundSprite((HasBit(roadtypes, ROADTYPE_ROAD) ? SPR_TRAMWAY_OVERLAY : SPR_TRAMWAY_TRAM) + (axis ^ 1), PAL_NONE); - DrawTramCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y); + DrawRoadCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y); } if (IsRailWaypoint(ti->tile)) { @@ -2995,6 +2995,7 @@ static void GetTileDesc_Station(TileIndex tile, TileDesc *td) const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(tile)); td->rail_speed = rti->max_speed; + td->railtype = rti->strings.name; } if (IsAirport(tile)) { @@ -3445,6 +3446,7 @@ void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2) void DeleteStaleLinks(Station *from) { for (CargoID c = 0; c < NUM_CARGO; ++c) { + const bool auto_distributed = (_settings_game.linkgraph.GetDistributionType(c) != DT_MANUAL); GoodsEntry &ge = from->goods[c]; LinkGraph *lg = LinkGraph::GetIfValid(ge.link_graph); if (lg == NULL) continue; @@ -3457,36 +3459,52 @@ void DeleteStaleLinks(Station *from) assert(_date >= edge.LastUpdate()); uint timeout = LinkGraph::MIN_TIMEOUT_DISTANCE + (DistanceManhattan(from->xy, to->xy) >> 3); if ((uint)(_date - edge.LastUpdate()) > timeout) { - /* Have all vehicles refresh their next hops before deciding to - * remove the node. */ bool updated = false; - OrderList *l; - FOR_ALL_ORDER_LISTS(l) { - bool found_from = false; - bool found_to = false; - for (Order *order = l->GetFirstOrder(); order != NULL; order = order->next) { - if (!order->IsType(OT_GOTO_STATION) && !order->IsType(OT_IMPLICIT)) continue; - if (order->GetDestination() == from->index) { - found_from = true; - if (found_to) break; - } else if (order->GetDestination() == to->index) { - found_to = true; - if (found_from) break; + + if (auto_distributed) { + /* Have all vehicles refresh their next hops before deciding to + * remove the node. */ + OrderList *l; + SmallVector vehicles; + FOR_ALL_ORDER_LISTS(l) { + bool found_from = false; + bool found_to = false; + for (Order *order = l->GetFirstOrder(); order != NULL; order = order->next) { + if (!order->IsType(OT_GOTO_STATION) && !order->IsType(OT_IMPLICIT)) continue; + if (order->GetDestination() == from->index) { + found_from = true; + if (found_to) break; + } else if (order->GetDestination() == to->index) { + found_to = true; + if (found_from) break; + } } + if (!found_to || !found_from) continue; + *(vehicles.Append()) = l->GetFirstSharedVehicle(); } - if (!found_to || !found_from) continue; - for (Vehicle *v = l->GetFirstSharedVehicle(); !updated && v != NULL; v = v->NextShared()) { - /* There is potential for optimization here: - * - Usually consists of the same order list are the same. It's probably better to - * first check the first of each list, then the second of each list and so on. - * - We could try to figure out if we've seen a consist with the same cargo on the - * same list already and if the consist can actually carry the cargo we're looking - * for. With conditional and refit orders this is not quite trivial, though. */ + + Vehicle **iter = vehicles.Begin(); + while (iter != vehicles.End()) { + Vehicle *v = *iter; + LinkRefresher::Run(v, false); // Don't allow merging. Otherwise lg might get deleted. - if (edge.LastUpdate() == _date) updated = true; + if (edge.LastUpdate() == _date) { + updated = true; + break; + } + + Vehicle *next_shared = v->NextShared(); + if (next_shared) { + *iter = next_shared; + ++iter; + } else { + vehicles.Erase(iter); + } + + if (iter == vehicles.End()) iter = vehicles.Begin(); } - if (updated) break; } + if (!updated) { /* If it's still considered dead remove it. */ node.RemoveEdge(to->goods[c].node); diff --git a/src/story.cpp b/src/story.cpp index 45d555aced..393fdb2b5c 100644 --- a/src/story.cpp +++ b/src/story.cpp @@ -1,4 +1,4 @@ -/* $Id: story.cpp 27588 2016-05-29 18:56:42Z frosch $ */ +/* $Id: story.cpp 27560 2016-05-11 20:48:46Z matthijs $ */ /* * This file is part of OpenTTD. diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index a5c60bc8a0..2a1763e2f7 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -1,4 +1,4 @@ -/* $Id: strgen.cpp 26521 2014-04-26 20:55:08Z rubidium $ */ +/* $Id: strgen.cpp 27759 2017-02-26 20:10:41Z frosch $ */ /* * This file is part of OpenTTD. @@ -439,7 +439,7 @@ int CDECL main(int argc, char *argv[]) switch (i) { case 'v': - puts("$Revision: 26521 $"); + puts("$Revision: 27759 $"); return 0; case 'C': @@ -484,7 +484,7 @@ int CDECL main(int argc, char *argv[]) case 'h': puts( - "strgen - $Revision: 26521 $\n" + "strgen - $Revision: 27759 $\n" " -v | --version print version information and exit\n" " -t | --todo replace any untranslated strings with ''\n" " -w | --warning print a warning for any untranslated strings\n" @@ -525,7 +525,7 @@ int CDECL main(int argc, char *argv[]) mkpath(pathbuf, lastof(pathbuf), src_dir, "english.txt"); /* parse master file */ - StringData data(TAB_COUNT); + StringData data(TEXT_TAB_END); FileStringReader master_reader(data, pathbuf, true, false); master_reader.ParseFile(); if (_errors != 0) return 1; @@ -542,7 +542,7 @@ int CDECL main(int argc, char *argv[]) mkpath(pathbuf, lastof(pathbuf), src_dir, "english.txt"); - StringData data(TAB_COUNT); + StringData data(TEXT_TAB_END); /* parse master file and check if target file is correct */ FileStringReader master_reader(data, pathbuf, true, false); master_reader.ParseFile(); diff --git a/src/strings.cpp b/src/strings.cpp index 2c89734287..6b88c86d89 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1,4 +1,4 @@ -/* $Id: strings.cpp 27607 2016-06-30 18:36:01Z frosch $ */ +/* $Id: strings.cpp 27758 2017-02-26 19:41:30Z frosch $ */ /* * This file is part of OpenTTD. @@ -187,21 +187,19 @@ struct LanguagePack : public LanguagePackHeader { static char **_langpack_offs; static LanguagePack *_langpack; -static uint _langtab_num[TAB_COUNT]; ///< Offset into langpack offs -static uint _langtab_start[TAB_COUNT]; ///< Offset into langpack offs +static uint _langtab_num[TEXT_TAB_END]; ///< Offset into langpack offs +static uint _langtab_start[TEXT_TAB_END]; ///< Offset into langpack offs static bool _scan_for_gender_data = false; ///< Are we scanning for the gender of the current string? (instead of formatting it) const char *GetStringPtr(StringID string) { - switch (GB(string, TAB_COUNT_OFFSET, TAB_COUNT_BITS)) { - case GAME_TEXT_TAB: return GetGameStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS)); + switch (GetStringTab(string)) { + case TEXT_TAB_GAMESCRIPT_START: return GetGameStringPtr(GetStringIndex(string)); /* 0xD0xx and 0xD4xx IDs have been converted earlier. */ - case 26: NOT_REACHED(); - case 28: return GetGRFStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS)); - case 29: return GetGRFStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS) + 0x0800); - case 30: return GetGRFStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS) + 0x1000); - default: return _langpack_offs[_langtab_start[GB(string, TAB_COUNT_OFFSET, TAB_COUNT_BITS)] + GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS)]; + case TEXT_TAB_OLD_NEWGRF: NOT_REACHED(); + case TEXT_TAB_NEWGRF_START: return GetGRFStringPtr(GetStringIndex(string)); + default: return _langpack_offs[_langtab_start[GetStringTab(string)] + GetStringIndex(string)]; } } @@ -219,43 +217,40 @@ char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, co { if (string == 0) return GetStringWithArgs(buffr, STR_UNDEFINED, args, last); - uint index = GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS); - uint tab = GB(string, TAB_COUNT_OFFSET, TAB_COUNT_BITS); + uint index = GetStringIndex(string); + StringTab tab = GetStringTab(string); switch (tab) { - case 4: + case TEXT_TAB_TOWN: if (index >= 0xC0 && !game_script) { return GetSpecialTownNameString(buffr, index - 0xC0, args->GetInt32(), last); } break; - case 14: + case TEXT_TAB_SPECIAL: if (index >= 0xE4 && !game_script) { return GetSpecialNameString(buffr, index - 0xE4, args, last); } break; - case 15: + case TEXT_TAB_OLD_CUSTOM: /* Old table for custom names. This is no longer used */ if (!game_script) { error("Incorrect conversion of custom name string."); } break; - case GAME_TEXT_TAB: + case TEXT_TAB_GAMESCRIPT_START: return FormatString(buffr, GetGameStringPtr(index), args, last, case_index, true); - case 26: + case TEXT_TAB_OLD_NEWGRF: NOT_REACHED(); - case 28: + case TEXT_TAB_NEWGRF_START: return FormatString(buffr, GetGRFStringPtr(index), args, last, case_index); - case 29: - return FormatString(buffr, GetGRFStringPtr(index + 0x0800), args, last, case_index); - - case 30: - return FormatString(buffr, GetGRFStringPtr(index + 0x1000), args, last, case_index); + default: + break; } if (index >= _langtab_num[tab]) { @@ -822,17 +817,16 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg sub_args.ClearTypeInformation(); memset(sub_args_need_free, 0, sizeof(sub_args_need_free)); - uint16 stringid; const char *s = str; char *p; - stringid = strtol(str, &p, 16); + uint32 stringid = strtoul(str, &p, 16); if (*p != ':' && *p != '\0') { while (*p != '\0') p++; str = p; buff = strecat(buff, "(invalid SCC_ENCODED)", last); break; } - if (stringid >= TAB_SIZE) { + if (stringid >= TAB_SIZE_GAMESCRIPT) { while (*p != '\0') p++; str = p; buff = strecat(buff, "(invalid StringID)", last); @@ -880,13 +874,13 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg param = strtoull(s, &p, 16); if (lookup) { - if (param >= TAB_SIZE) { + if (param >= TAB_SIZE_GAMESCRIPT) { while (*p != '\0') p++; str = p; buff = strecat(buff, "(invalid sub-StringID)", last); break; } - param = (GAME_TEXT_TAB << TAB_COUNT_OFFSET) + param; + param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, param); } sub_args.SetParam(i++, param); @@ -901,7 +895,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg /* If we didn't error out, we can actually print the string. */ if (*str != '\0') { str = p; - buff = GetStringWithArgs(buff, (GAME_TEXT_TAB << TAB_COUNT_OFFSET) + stringid, &sub_args, last, true); + buff = GetStringWithArgs(buff, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), &sub_args, last, true); } for (int i = 0; i < 20; i++) { @@ -1017,7 +1011,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_STRING: {// {STRING} StringID str = args->GetInt32(SCC_STRING); - if (game_script && GB(str, TAB_COUNT_OFFSET, TAB_COUNT_BITS) != GAME_TEXT_TAB) break; + if (game_script && GetStringTab(str) != TEXT_TAB_GAMESCRIPT_START) break; /* WARNING. It's prohibited for the included string to consume any arguments. * For included strings that consume argument, you should use STRING1, STRING2 etc. * To debug stuff you can set argv to NULL and it will tell you */ @@ -1036,7 +1030,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_STRING7: { // {STRING1..7} /* Strings that consume arguments */ StringID str = args->GetInt32(b); - if (game_script && GB(str, TAB_COUNT_OFFSET, TAB_COUNT_BITS) != GAME_TEXT_TAB) break; + if (game_script && GetStringTab(str) != TEXT_TAB_GAMESCRIPT_START) break; uint size = b - SCC_STRING1 + 1; if (game_script && size > args->GetDataLeft()) { buff = strecat(buff, "(too many parameters)", last); @@ -1736,13 +1730,13 @@ bool ReadLanguagePack(const LanguageMetadata *lang) } #if TTD_ENDIAN == TTD_BIG_ENDIAN - for (uint i = 0; i < TAB_COUNT; i++) { + for (uint i = 0; i < TEXT_TAB_END; i++) { lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]); } #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ uint count = 0; - for (uint i = 0; i < TAB_COUNT; i++) { + for (uint i = 0; i < TEXT_TAB_END; i++) { uint16 num = lang_pack->offsets[i]; if (num > TAB_SIZE) { free(lang_pack); @@ -2051,12 +2045,12 @@ class LanguagePackGlyphSearcher : public MissingGlyphSearcher { /* virtual */ const char *NextString() { - if (this->i >= TAB_COUNT) return NULL; + if (this->i >= TEXT_TAB_END) return NULL; const char *ret = _langpack_offs[_langtab_start[this->i] + this->j]; this->j++; - while (this->i < TAB_COUNT && this->j >= _langtab_num[this->i]) { + while (this->i < TEXT_TAB_END && this->j >= _langtab_num[this->i]) { this->i++; this->j = 0; } diff --git a/src/strings_func.h b/src/strings_func.h index 9e48e61360..71f5364c0b 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -1,4 +1,4 @@ -/* $Id: strings_func.h 26238 2014-01-12 17:59:43Z frosch $ */ +/* $Id: strings_func.h 27758 2017-02-26 19:41:30Z frosch $ */ /* * This file is part of OpenTTD. @@ -15,6 +15,49 @@ #include "strings_type.h" #include "string_type.h" #include "gfx_type.h" +#include "core/bitmath_func.hpp" + +/** + * Extract the StringTab from a StringID. + * @param str String identifier + * @return StringTab from \a str + */ +static inline StringTab GetStringTab(StringID str) +{ + StringTab result = (StringTab)(str >> TAB_SIZE_BITS); + if (result >= TEXT_TAB_NEWGRF_START) return TEXT_TAB_NEWGRF_START; + if (result >= TEXT_TAB_GAMESCRIPT_START) return TEXT_TAB_GAMESCRIPT_START; + return result; +} + +/** + * Extract the StringIndex from a StringID. + * @param str String identifier + * @return StringIndex from \a str + */ +static inline uint GetStringIndex(StringID str) +{ + return str - (GetStringTab(str) << TAB_SIZE_BITS); +} + +/** + * Create a StringID + * @param tab StringTab + * @param index StringIndex + * @return StringID composed from \a tab and \a index + */ +static inline StringID MakeStringID(StringTab tab, uint index) +{ + if (tab == TEXT_TAB_NEWGRF_START) { + assert(index < TAB_SIZE_NEWGRF); + } else if (tab == TEXT_TAB_GAMESCRIPT_START) { + assert(index < TAB_SIZE_GAMESCRIPT); + } else { + assert(tab < TEXT_TAB_END); + assert(index < TAB_SIZE); + } + return (tab << TAB_SIZE_BITS) + index; +} class StringParameters { StringParameters *parent; ///< If not NULL, this instance references data from this parent instance. diff --git a/src/strings_type.h b/src/strings_type.h index 45bba4d344..ed6fb20365 100644 --- a/src/strings_type.h +++ b/src/strings_type.h @@ -1,4 +1,4 @@ -/* $Id: strings_type.h 26525 2014-04-27 15:13:46Z frosch $ */ +/* $Id: strings_type.h 27758 2017-02-26 19:41:30Z frosch $ */ /* * This file is part of OpenTTD. @@ -15,8 +15,8 @@ /** * Numeric value that represents a string, independent of the selected language. */ -typedef uint16 StringID; -static const StringID INVALID_STRING_ID = 0xFFFF; ///< Constant representing an invalid string +typedef uint32 StringID; +static const StringID INVALID_STRING_ID = 0xFFFF; ///< Constant representing an invalid string (16bit in case it is used in savegames) static const int MAX_CHAR_LENGTH = 4; ///< Max. length of UTF-8 encoded unicode character static const uint MAX_LANG = 0x7F; ///< Maximum number of languages supported by the game, and the NewGRF specs @@ -26,6 +26,33 @@ enum TextDirection { TD_RTL, ///< Text is written right-to-left by default }; +/** StringTabs to group StringIDs */ +enum StringTab { + /* Tabs 0..1 for regular strings */ + TEXT_TAB_TOWN = 4, + TEXT_TAB_INDUSTRY = 9, + TEXT_TAB_STATION = 12, + TEXT_TAB_SPECIAL = 14, + TEXT_TAB_OLD_CUSTOM = 15, + TEXT_TAB_VEHICLE = 16, + /* Tab 17 for regular strings */ + TEXT_TAB_OLD_NEWGRF = 26, + TEXT_TAB_END = 32, ///< End of language files. + TEXT_TAB_GAMESCRIPT_START = 32, ///< Start of GameScript supplied strings. + TEXT_TAB_NEWGRF_START = 64, ///< Start of NewGRF supplied strings. +}; + +/** Number of bits for the StringIndex within a StringTab */ +static const uint TAB_SIZE_BITS = 11; +/** Number of strings per StringTab */ +static const uint TAB_SIZE = 1 << TAB_SIZE_BITS; + +/** Number of strings for GameScripts */ +static const uint TAB_SIZE_GAMESCRIPT = TAB_SIZE * 32; + +/** Number of strings for NewGRFs */ +static const uint TAB_SIZE_NEWGRF = TAB_SIZE * 256; + /** Special string constants */ enum SpecialStrings { diff --git a/src/table/control_codes.h b/src/table/control_codes.h index 775307f5f7..beb0dcc506 100644 --- a/src/table/control_codes.h +++ b/src/table/control_codes.h @@ -1,4 +1,4 @@ -/* $Id: control_codes.h 26244 2014-01-12 18:01:33Z frosch $ */ +/* $Id: control_codes.h 27706 2016-12-23 13:38:50Z frosch $ */ /* * This file is part of OpenTTD. @@ -118,35 +118,36 @@ enum StringControlCode { * It uses a "stack" of bytes and reads from there. */ SCC_NEWGRF_FIRST, - SCC_NEWGRF_PRINT_DWORD_SIGNED = SCC_NEWGRF_FIRST, ///< Read 4 bytes from the stack - SCC_NEWGRF_PRINT_WORD_SIGNED, ///< Read 2 bytes from the stack as signed value - SCC_NEWGRF_PRINT_BYTE_SIGNED, ///< Read 1 byte from the stack as signed value - SCC_NEWGRF_PRINT_WORD_UNSIGNED, ///< Read 2 bytes from the stack as unsigned value - SCC_NEWGRF_PRINT_DWORD_CURRENCY, ///< Read 4 bytes from the stack as currency - SCC_NEWGRF_PRINT_WORD_STRING_ID, ///< Read 2 bytes from the stack as String ID - SCC_NEWGRF_PRINT_WORD_DATE_LONG, ///< Read 2 bytes from the stack as base 1920 date - SCC_NEWGRF_PRINT_WORD_DATE_SHORT, ///< Read 2 bytes from the stack as base 1920 date - SCC_NEWGRF_PRINT_WORD_SPEED, ///< Read 2 bytes from the stack as signed speed - SCC_NEWGRF_PRINT_WORD_VOLUME_LONG, ///< Read 2 bytes from the stack as long signed volume - SCC_NEWGRF_PRINT_WORD_WEIGHT_LONG, ///< Read 2 bytes from the stack as long unsigned weight - SCC_NEWGRF_PRINT_WORD_STATION_NAME, ///< Read 2 bytes from the stack as station name - SCC_NEWGRF_PRINT_QWORD_CURRENCY, ///< Read 8 bytes from the stack as currency - SCC_NEWGRF_PRINT_BYTE_HEX, ///< Read 1 byte from the stack and print it as hex - SCC_NEWGRF_PRINT_WORD_HEX, ///< Read 2 bytes from the stack and print it as hex - SCC_NEWGRF_PRINT_DWORD_HEX, ///< Read 4 bytes from the stack and print it as hex - SCC_NEWGRF_PRINT_QWORD_HEX, ///< Read 8 bytes from the stack and print it as hex - SCC_NEWGRF_PRINT_DWORD_DATE_LONG, ///< Read 4 bytes from the stack as base 0 date - SCC_NEWGRF_PRINT_DWORD_DATE_SHORT, ///< Read 4 bytes from the stack as base 0 date - SCC_NEWGRF_PRINT_WORD_POWER, ///< Read 2 bytes from the stack as unsigned power - SCC_NEWGRF_PRINT_WORD_VOLUME_SHORT, ///< Read 2 bytes from the stack as short signed volume - SCC_NEWGRF_PRINT_WORD_WEIGHT_SHORT, ///< Read 2 bytes from the stack as short unsigned weight - SCC_NEWGRF_PRINT_WORD_CARGO_LONG, ///< Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount - SCC_NEWGRF_PRINT_WORD_CARGO_SHORT, ///< Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount - SCC_NEWGRF_PRINT_WORD_CARGO_TINY, ///< Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount - SCC_NEWGRF_PUSH_WORD, ///< Pushes 2 bytes onto the stack - SCC_NEWGRF_UNPRINT, ///< "Unprints" the given number of bytes from the string - SCC_NEWGRF_DISCARD_WORD, ///< Discard the next two bytes - SCC_NEWGRF_ROTATE_TOP_4_WORDS, ///< Rotate the top 4 words of the stack (W4 W1 W2 W3) + SCC_NEWGRF_PRINT_DWORD_SIGNED = SCC_NEWGRF_FIRST, ///< 7B: Read 4 bytes from the stack + SCC_NEWGRF_PRINT_WORD_SIGNED, ///< 7C: Read 2 bytes from the stack as signed value + SCC_NEWGRF_PRINT_BYTE_SIGNED, ///< 7D: Read 1 byte from the stack as signed value + SCC_NEWGRF_PRINT_WORD_UNSIGNED, ///< 7E: Read 2 bytes from the stack as unsigned value + SCC_NEWGRF_PRINT_DWORD_CURRENCY, ///< 8F: Read 4 bytes from the stack as currency + SCC_NEWGRF_PRINT_WORD_STRING_ID, ///< 81: Read 2 bytes from the stack as String ID + SCC_NEWGRF_PRINT_WORD_DATE_LONG, ///< 82: Read 2 bytes from the stack as base 1920 date + SCC_NEWGRF_PRINT_WORD_DATE_SHORT, ///< 83: Read 2 bytes from the stack as base 1920 date + SCC_NEWGRF_PRINT_WORD_SPEED, ///< 84: Read 2 bytes from the stack as signed speed + SCC_NEWGRF_PRINT_WORD_VOLUME_LONG, ///< 87: Read 2 bytes from the stack as long signed volume + SCC_NEWGRF_PRINT_WORD_WEIGHT_LONG, ///< 9A 0D: Read 2 bytes from the stack as long unsigned weight + SCC_NEWGRF_PRINT_WORD_STATION_NAME, ///< 9A 0C: Read 2 bytes from the stack as station name + SCC_NEWGRF_PRINT_QWORD_CURRENCY, ///< 9A 01: Read 8 bytes from the stack as currency + SCC_NEWGRF_PRINT_BYTE_HEX, ///< 9A 06: Read 1 byte from the stack and print it as hex + SCC_NEWGRF_PRINT_WORD_HEX, ///< 9A 07: Read 2 bytes from the stack and print it as hex + SCC_NEWGRF_PRINT_DWORD_HEX, ///< 9A 08: Read 4 bytes from the stack and print it as hex + SCC_NEWGRF_PRINT_QWORD_HEX, ///< 9A 0B: Read 8 bytes from the stack and print it as hex + SCC_NEWGRF_PRINT_DWORD_DATE_LONG, ///< 9A 16: Read 4 bytes from the stack as base 0 date + SCC_NEWGRF_PRINT_DWORD_DATE_SHORT, ///< 9A 17: Read 4 bytes from the stack as base 0 date + SCC_NEWGRF_PRINT_WORD_POWER, ///< 9A 18: Read 2 bytes from the stack as unsigned power + SCC_NEWGRF_PRINT_WORD_VOLUME_SHORT, ///< 9A 19: Read 2 bytes from the stack as short signed volume + SCC_NEWGRF_PRINT_WORD_WEIGHT_SHORT, ///< 9A 1A: Read 2 bytes from the stack as short unsigned weight + SCC_NEWGRF_PRINT_WORD_CARGO_LONG, ///< 9A 1B: Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount + SCC_NEWGRF_PRINT_WORD_CARGO_SHORT, ///< 9A 1C: Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount + SCC_NEWGRF_PRINT_WORD_CARGO_TINY, ///< 9A 1D: Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount + SCC_NEWGRF_PRINT_WORD_CARGO_NAME, ///< 9A 1E: Read 2 bytes from the stack as cargo name + SCC_NEWGRF_PUSH_WORD, ///< 9A 03: Pushes 2 bytes onto the stack + SCC_NEWGRF_UNPRINT, ///< 9A 04: "Unprints" the given number of bytes from the string + SCC_NEWGRF_DISCARD_WORD, ///< 85: Discard the next two bytes + SCC_NEWGRF_ROTATE_TOP_4_WORDS, ///< 86: Rotate the top 4 words of the stack (W4 W1 W2 W3) SCC_NEWGRF_LAST = SCC_NEWGRF_ROTATE_TOP_4_WORDS, SCC_NEWGRF_STRINL, ///< Inline another string at the current position, StringID is encoded in the string diff --git a/src/table/elrail_data.h b/src/table/elrail_data.h index 88df728552..86f5b0ca30 100644 --- a/src/table/elrail_data.h +++ b/src/table/elrail_data.h @@ -1,4 +1,4 @@ -/* $Id: elrail_data.h 24900 2013-01-08 22:46:42Z planetmaker $ */ +/* $Id: elrail_data.h 27676 2016-11-05 11:53:03Z frosch $ */ /* * This file is part of OpenTTD. @@ -331,7 +331,7 @@ static const uint ELRAIL_ELEVATION = 10; /** Wires that a draw one level higher than the north corner. */ static const uint ELRAIL_ELEVRAISE = ELRAIL_ELEVATION + TILE_HEIGHT; -static const SortableSpriteStruct CatenarySpriteData[] = { +static const SortableSpriteStruct RailCatenarySpriteData[] = { /* X direction * Flat tiles: * Wires */ @@ -392,14 +392,14 @@ static const SortableSpriteStruct CatenarySpriteData[] = { { WSO_EW_E, 15, 8, 3, 3, 1, ELRAIL_ELEVATION } //!33: LOWER trackbit wire, pylon on both ends }; -static const SortableSpriteStruct CatenarySpriteData_Depot[] = { +static const SortableSpriteStruct RailCatenarySpriteData_Depot[] = { { WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE depot exit { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE depot exit { WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW depot exit { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit }; -static const SortableSpriteStruct CatenarySpriteData_Tunnel[] = { +static const SortableSpriteStruct RailCatenarySpriteData_Tunnel[] = { { WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel exit { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel exit { WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel exit @@ -419,7 +419,7 @@ static const SortableSpriteStruct CatenarySpriteData_Tunnel[] = { *
  • Position of the Pylon relative to the track
  • *
  • Position of the Pylon inside the tile
  • */ -enum CatenarySprite { +enum RailCatenarySprite { WIRE_X_FLAT_SW, WIRE_X_FLAT_NE, WIRE_X_FLAT_BOTH, @@ -471,7 +471,7 @@ enum CatenarySprite { * c) the second * d) both * PCP exists.*/ -static const CatenarySprite Wires[5][TRACK_END][4] = { +static const RailCatenarySprite Wires[5][TRACK_END][4] = { { // Tileh == 0 {INVALID_CATENARY, WIRE_X_FLAT_NE, WIRE_X_FLAT_SW, WIRE_X_FLAT_BOTH}, {INVALID_CATENARY, WIRE_Y_FLAT_SE, WIRE_Y_FLAT_NW, WIRE_Y_FLAT_BOTH}, diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 25ea4cfbdc..e96c7ab1e9 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -1,4 +1,4 @@ -/* $Id: newgrf_debug_data.h 27381 2015-08-10 20:24:13Z michi_cc $ */ +/* $Id: newgrf_debug_data.h 27654 2016-09-05 19:11:01Z frosch $ */ /* * This file is part of OpenTTD. @@ -17,7 +17,7 @@ #define NIP_END() { NULL, 0, 0, 0, 0 } /* Helper for filling callback tables */ -#define NIC(cb_id, base, variable, bit) { #cb_id, cpp_offsetof(base, variable), cpp_sizeof(base, variable), bit, cb_id } +#define NIC(cb_id, base, variable, bit) { #cb_id, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), bit, cb_id } #define NIC_END() { NULL, 0, 0, 0, 0 } /* Helper for filling variable tables */ diff --git a/src/table/settings.ini b/src/table/settings.ini index 7ee500507a..960e5c0a61 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1,4 +1,4 @@ -; $Id: settings.ini 27231 2015-04-11 18:45:18Z alberth $ +; $Id: settings.ini 27760 2017-02-26 20:31:02Z frosch $ ; ; 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. @@ -760,7 +760,7 @@ base = GameSettings var = vehicle.train_acceleration_model type = SLE_UINT8 guiflags = SGF_MULTISTRING -def = 0 +def = 1 min = 0 max = 1 interval = 1 @@ -775,7 +775,7 @@ var = vehicle.roadveh_acceleration_model type = SLE_UINT8 from = 139 guiflags = SGF_MULTISTRING -def = 0 +def = 1 min = 0 max = 1 interval = 1 diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 16bb830610..c5bd25b20a 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: terraform_gui.cpp 27397 2015-09-13 12:04:47Z alberth $ */ +/* $Id: terraform_gui.cpp 27571 2016-05-22 10:07:48Z frosch $ */ /* * This file is part of OpenTTD. @@ -114,7 +114,7 @@ bool GUIPlaceProcDragXY(ViewportDragDropSelectionProcess proc, TileIndex start_t switch (proc) { case DDSP_DEMOLISH_AREA: - DoCommandP(end_tile, start_tile, _ctrl_pressed ? 1 : 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound10); + DoCommandP(end_tile, start_tile, _ctrl_pressed ? 1 : 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound_EXPLOSION); break; case DDSP_RAISE_AND_LEVEL_AREA: DoCommandP(end_tile, start_tile, LM_RAISE << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_RAISE_LAND_HERE), CcTerraform); @@ -237,7 +237,7 @@ struct TerraformToolbarWindow : Window { break; case WID_TT_BUY_LAND: // Buy land button - DoCommandP(tile, OBJECT_OWNED_LAND, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound1E); + DoCommandP(tile, OBJECT_OWNED_LAND, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound_SPLAT_RAIL); break; case WID_TT_PLACE_SIGN: // Place sign button diff --git a/src/thread/thread.h b/src/thread/thread.h index b4b5d111fa..f4e22d89b0 100644 --- a/src/thread/thread.h +++ b/src/thread/thread.h @@ -1,4 +1,4 @@ -/* $Id: thread.h 26349 2014-02-16 21:37:05Z frosch $ */ +/* $Id: thread.h 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -44,9 +44,10 @@ public: * @param proc The procedure to call inside the thread. * @param param The params to give with 'proc'. * @param thread Place to store a pointer to the thread in. May be NULL. + * @param name A name for the thread. May be NULL. * @return True if the thread was started correctly. */ - static bool New(OTTDThreadFunc proc, void *param, ThreadObject **thread = NULL); + static bool New(OTTDThreadFunc proc, void *param, ThreadObject **thread = NULL, const char *name = NULL); }; /** diff --git a/src/thread/thread_morphos.cpp b/src/thread/thread_morphos.cpp index 1041d6b0cc..9c3f007ddc 100644 --- a/src/thread/thread_morphos.cpp +++ b/src/thread/thread_morphos.cpp @@ -1,4 +1,4 @@ -/* $Id: thread_morphos.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: thread_morphos.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -193,7 +193,7 @@ private: } }; -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread) +/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) { ThreadObject *to = new ThreadObject_MorphOS(proc, param, thread == NULL); if (thread != NULL) *thread = to; diff --git a/src/thread/thread_none.cpp b/src/thread/thread_none.cpp index 2bd1301305..d65664c1e4 100644 --- a/src/thread/thread_none.cpp +++ b/src/thread/thread_none.cpp @@ -1,4 +1,4 @@ -/* $Id: thread_none.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: thread_none.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -14,7 +14,7 @@ #include "../safeguards.h" -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread) +/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) { if (thread != NULL) *thread = NULL; return false; diff --git a/src/thread/thread_os2.cpp b/src/thread/thread_os2.cpp index 247e487605..6af92e3c99 100644 --- a/src/thread/thread_os2.cpp +++ b/src/thread/thread_os2.cpp @@ -1,4 +1,4 @@ -/* $Id: thread_os2.cpp 27092 2014-12-24 17:17:18Z frosch $ */ +/* $Id: thread_os2.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -83,7 +83,7 @@ private: } }; -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread) +/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) { ThreadObject *to = new ThreadObject_OS2(proc, param, thread == NULL); if (thread != NULL) *thread = to; diff --git a/src/thread/thread_pthread.cpp b/src/thread/thread_pthread.cpp index faa159ad1e..f87a11555f 100644 --- a/src/thread/thread_pthread.cpp +++ b/src/thread/thread_pthread.cpp @@ -1,4 +1,4 @@ -/* $Id: thread_pthread.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: thread_pthread.cpp 27670 2016-10-30 17:29:33Z frosch $ */ /* * This file is part of OpenTTD. @@ -25,16 +25,18 @@ private: OTTDThreadFunc proc; ///< External thread procedure. void *param; ///< Parameter for the external thread procedure. bool self_destruct; ///< Free ourselves when done? + const char *name; ///< Name for the thread public: /** * Create a pthread and start it, calling proc(param). */ - ThreadObject_pthread(OTTDThreadFunc proc, void *param, bool self_destruct) : + ThreadObject_pthread(OTTDThreadFunc proc, void *param, bool self_destruct, const char *name) : thread(0), proc(proc), param(param), - self_destruct(self_destruct) + self_destruct(self_destruct), + name(name) { pthread_create(&this->thread, NULL, &stThreadProc, this); } @@ -60,7 +62,15 @@ private: */ static void *stThreadProc(void *thr) { - ((ThreadObject_pthread *)thr)->ThreadProc(); + ThreadObject_pthread *self = (ThreadObject_pthread *) thr; +#if defined(__GLIBC__) +#if __GLIBC_PREREQ(2, 12) + if (self->name) { + pthread_setname_np(pthread_self(), self->name); + } +#endif +#endif + self->ThreadProc(); pthread_exit(NULL); } @@ -85,9 +95,9 @@ private: } }; -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread) +/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) { - ThreadObject *to = new ThreadObject_pthread(proc, param, thread == NULL); + ThreadObject *to = new ThreadObject_pthread(proc, param, thread == NULL, name); if (thread != NULL) *thread = to; return true; } diff --git a/src/thread/thread_win32.cpp b/src/thread/thread_win32.cpp index 43ae704263..60b90e93e1 100644 --- a/src/thread/thread_win32.cpp +++ b/src/thread/thread_win32.cpp @@ -1,4 +1,4 @@ -/* $Id: thread_win32.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: thread_win32.cpp 27673 2016-10-30 18:22:55Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -16,6 +16,7 @@ #include #include #include +#include "../os/windows/win32.h" #include "../safeguards.h" @@ -29,17 +30,19 @@ private: OTTDThreadFunc proc; ///< External thread procedure. void *param; ///< Parameter for the external thread procedure. bool self_destruct; ///< Free ourselves when done? + const char *name; ///< Thread name. public: /** * Create a win32 thread and start it, calling proc(param). */ - ThreadObject_Win32(OTTDThreadFunc proc, void *param, bool self_destruct) : + ThreadObject_Win32(OTTDThreadFunc proc, void *param, bool self_destruct, const char *name) : thread(NULL), id(0), proc(proc), param(param), - self_destruct(self_destruct) + self_destruct(self_destruct), + name(name) { this->thread = (HANDLE)_beginthreadex(NULL, 0, &stThreadProc, this, CREATE_SUSPENDED, &this->id); if (this->thread == NULL) return; @@ -85,6 +88,10 @@ private: */ void ThreadProc() { +#ifdef _MSC_VER + /* Set thread name for debuggers. Has to be done from the thread due to a race condition in older MS debuggers. */ + SetWin32ThreadName(-1, this->name); +#endif try { this->proc(this->param); } catch (OTTDThreadExitSignal) { @@ -96,9 +103,9 @@ private: } }; -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread) +/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) { - ThreadObject *to = new ThreadObject_Win32(proc, param, thread == NULL); + ThreadObject *to = new ThreadObject_Win32(proc, param, thread == NULL, name); if (thread != NULL) *thread = to; return true; } diff --git a/src/tile_cmd.h b/src/tile_cmd.h index db9287a02c..4fd70bfbd6 100644 --- a/src/tile_cmd.h +++ b/src/tile_cmd.h @@ -1,4 +1,4 @@ -/* $Id: tile_cmd.h 26277 2014-01-26 13:50:10Z frosch $ */ +/* $Id: tile_cmd.h 27686 2016-12-09 21:27:22Z frosch $ */ /* * This file is part of OpenTTD. @@ -62,6 +62,7 @@ struct TileDesc { StringID airport_tile_name; ///< Name of the airport tile const char *grf; ///< newGRF used for the tile contents uint64 dparam[2]; ///< Parameters of the \a str string + StringID railtype; ///< Type of rail on the tile. uint16 rail_speed; ///< Speed limit of rail (bridges and track) uint16 road_speed; ///< Speed limit of road (bridges) }; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 087d4eeadf..7b1b5fdc45 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: toolbar_gui.cpp 27178 2015-03-07 18:27:01Z frosch $ */ +/* $Id: toolbar_gui.cpp 27671 2016-10-30 17:36:57Z frosch $ */ /* * This file is part of OpenTTD. @@ -79,6 +79,9 @@ enum CallBackFunction { CBF_PLACE_LANDINFO, }; +static CallBackFunction _last_started_action = CBF_NONE; ///< Last started user action. + + /** * Drop down list entry for showing a checked/unchecked toggle item. */ @@ -247,7 +250,7 @@ static ToolbarMode _toolbar_mode; static CallBackFunction SelectSignTool() { - if (_cursor.sprite == SPR_CURSOR_SIGN) { + if (_last_started_action == CBF_PLACE_SIGN) { ResetObjectToPlace(); return CBF_NONE; } else { @@ -424,17 +427,17 @@ static CallBackFunction MenuClickSaveLoad(int index = 0) { if (_game_mode == GM_EDITOR) { switch (index) { - case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(SLD_SAVE_SCENARIO); break; - case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break; - case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(SLD_SAVE_HEIGHTMAP); break; - case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break; + case SLEME_SAVE_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_SAVE); break; + case SLEME_LOAD_SCENARIO: ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD); break; + case SLEME_SAVE_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_SAVE); break; + case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD); break; case SLEME_EXIT_TOINTRO: AskExitToGameMenu(); break; case SLEME_EXIT_GAME: HandleExitGameRequest(); break; } } else { switch (index) { - case SLNME_SAVE_GAME: ShowSaveLoadDialog(SLD_SAVE_GAME); break; - case SLNME_LOAD_GAME: ShowSaveLoadDialog(SLD_LOAD_GAME); break; + case SLNME_SAVE_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_SAVE); break; + case SLNME_LOAD_GAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break; case SLNME_EXIT_TOINTRO: AskExitToGameMenu(); break; case SLNME_EXIT_GAME: HandleExitGameRequest(); break; } @@ -1031,7 +1034,7 @@ static CallBackFunction MenuClickNewspaper(int index) static CallBackFunction PlaceLandBlockInfo() { - if (_cursor.sprite == SPR_CURSOR_QUERY) { + if (_last_started_action == CBF_PLACE_LANDINFO) { ResetObjectToPlace(); return CBF_NONE; } else { @@ -1466,36 +1469,302 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { { static const uint SMALLEST_ARRANGEMENT = 14; static const uint BIGGEST_ARRANGEMENT = 20; + + /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible. + * The total number of buttons should be equal to arrangable_count * 2. + * No bad things happen, but we could see strange behaviours if we have buttons < (arrangable_count * 2) like a + * pause button appearing on the right of the lower toolbar and weird resizing of the widgets even if there is + * enough space. + */ static const byte arrange14[] = { - 0, 1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29, - 2, 3, 4, 5, 6, 7, 8, 9, 12, 14, 26, 27, 28, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_SETTINGS, + WID_TN_SAVE, + WID_TN_SMALL_MAP, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_INDUSTRIES, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + WID_TN_SWITCH_BAR, }; static const byte arrange15[] = { - 0, 1, 4, 15, 16, 17, 18, 21, 22, 23, 24, 25, 19, 20, 29, - 0, 2, 4, 3, 5, 6, 7, 8, 9, 12, 14, 26, 27, 28, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SMALL_MAP, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_PAUSE, + WID_TN_SETTINGS, + WID_TN_SMALL_MAP, + WID_TN_SAVE, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_INDUSTRIES, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + WID_TN_SWITCH_BAR, }; static const byte arrange16[] = { - 0, 1, 2, 4, 15, 16, 17, 18, 21, 22, 23, 24, 25, 19, 20, 29, - 0, 1, 3, 5, 6, 7, 8, 9, 12, 14, 26, 27, 28, 19, 20, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SETTINGS, + WID_TN_SMALL_MAP, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SAVE, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_INDUSTRIES, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, }; static const byte arrange17[] = { - 0, 1, 2, 4, 6, 15, 16, 17, 18, 21, 22, 23, 24, 25, 19, 20, 29, - 0, 1, 3, 4, 6, 5, 7, 8, 9, 12, 14, 26, 27, 28, 19, 20, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SETTINGS, + WID_TN_SMALL_MAP, + WID_TN_SUBSIDIES, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SAVE, + WID_TN_SMALL_MAP, + WID_TN_SUBSIDIES, + WID_TN_TOWNS, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_INDUSTRIES, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, }; static const byte arrange18[] = { - 0, 1, 2, 4, 5, 6, 7, 8, 9, 14, 21, 22, 23, 24, 25, 19, 20, 29, - 0, 1, 3, 4, 5, 6, 7, 12, 15, 16, 17, 18, 26, 27, 28, 19, 20, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SETTINGS, + WID_TN_SMALL_MAP, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_INDUSTRIES, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SAVE, + WID_TN_SMALL_MAP, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_STATIONS, + WID_TN_GRAPHS, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, }; static const byte arrange19[] = { - 0, 1, 2, 4, 5, 6, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 19, 20, 29, - 0, 1, 3, 4, 7, 8, 9, 12, 14, 27, 21, 22, 23, 24, 25, 28, 19, 20, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SETTINGS, + WID_TN_SMALL_MAP, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_MUSIC_SOUND, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SAVE, + WID_TN_SMALL_MAP, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_INDUSTRIES, + WID_TN_MESSAGES, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_HELP, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, }; static const byte arrange20[] = { - 0, 1, 2, 4, 5, 6, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 11, 19, 20, 29, - 0, 1, 3, 4, 7, 8, 9, 12, 14, 27, 21, 22, 23, 24, 25, 10, 28, 19, 20, 29, + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SETTINGS, + WID_TN_SMALL_MAP, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_MUSIC_SOUND, + WID_TN_GOAL, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, + // lower toolbar + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SAVE, + WID_TN_SMALL_MAP, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_GRAPHS, + WID_TN_INDUSTRIES, + WID_TN_MESSAGES, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_STORY, + WID_TN_HELP, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_SWITCH_BAR, }; static const byte arrange_all[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 + WID_TN_PAUSE, + WID_TN_FAST_FORWARD, + WID_TN_SETTINGS, + WID_TN_SAVE, + WID_TN_SMALL_MAP, + WID_TN_TOWNS, + WID_TN_SUBSIDIES, + WID_TN_STATIONS, + WID_TN_FINANCES, + WID_TN_COMPANIES, + WID_TN_STORY, + WID_TN_GOAL, + WID_TN_GRAPHS, + WID_TN_LEAGUE, + WID_TN_INDUSTRIES, + WID_TN_TRAINS, + WID_TN_ROADVEHS, + WID_TN_SHIPS, + WID_TN_AIRCRAFTS, + WID_TN_ZOOM_IN, + WID_TN_ZOOM_OUT, + WID_TN_RAILS, + WID_TN_ROADS, + WID_TN_WATER, + WID_TN_AIR, + WID_TN_LANDSCAPE, + WID_TN_MUSIC_SOUND, + WID_TN_MESSAGES, + WID_TN_HELP }; /* If at least BIGGEST_ARRANGEMENT fit, just spread all the buttons nicely */ @@ -1537,14 +1806,65 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer { /* virtual */ const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const { static const byte arrange_all[] = { - 0, 1, 2, 3, 4, 18, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 26, 28, + WID_TE_PAUSE, + WID_TE_FAST_FORWARD, + WID_TE_SETTINGS, + WID_TE_SAVE, + WID_TE_SPACER, + WID_TE_DATE_PANEL, + WID_TE_SMALL_MAP, + WID_TE_ZOOM_IN, + WID_TE_ZOOM_OUT, + WID_TE_LAND_GENERATE, + WID_TE_TOWN_GENERATE, + WID_TE_INDUSTRY, + WID_TE_ROADS, + WID_TE_WATER, + WID_TE_TREES, + WID_TE_SIGNS, + WID_TE_MUSIC_SOUND, + WID_TE_HELP, }; static const byte arrange_nopanel[] = { - 0, 1, 2, 3, 18, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 26, 28, + WID_TE_PAUSE, + WID_TE_FAST_FORWARD, + WID_TE_SETTINGS, + WID_TE_SAVE, + WID_TE_DATE_PANEL, + WID_TE_SMALL_MAP, + WID_TE_ZOOM_IN, + WID_TE_ZOOM_OUT, + WID_TE_LAND_GENERATE, + WID_TE_TOWN_GENERATE, + WID_TE_INDUSTRY, + WID_TE_ROADS, + WID_TE_WATER, + WID_TE_TREES, + WID_TE_SIGNS, + WID_TE_MUSIC_SOUND, + WID_TE_HELP, }; static const byte arrange_switch[] = { - 18, 8, 11, 12, 13, 14, 15, 16, 17, 29, - 0, 1, 2, 3, 18, 9, 10, 26, 28, 29, + WID_TE_DATE_PANEL, + WID_TE_SMALL_MAP, + WID_TE_LAND_GENERATE, + WID_TE_TOWN_GENERATE, + WID_TE_INDUSTRY, + WID_TE_ROADS, + WID_TE_WATER, + WID_TE_TREES, + WID_TE_SIGNS, + WID_TE_SWITCH_BAR, + // lower toolbar + WID_TE_PAUSE, + WID_TE_FAST_FORWARD, + WID_TE_SETTINGS, + WID_TE_SAVE, + WID_TE_DATE_PANEL, + WID_TE_ZOOM_IN, + WID_TE_ZOOM_OUT, + WID_TE_MUSIC_SOUND, + WID_TE_HELP, WID_TE_SWITCH_BAR, }; /* If we can place all buttons *and* the panels, show them. */ @@ -1656,13 +1976,11 @@ enum MainToolbarHotkeys { /** Main toolbar. */ struct MainToolbarWindow : Window { - CallBackFunction last_started_action; ///< Last started user action. - MainToolbarWindow(WindowDesc *desc) : Window(desc) { this->InitNested(0); - this->last_started_action = CBF_NONE; + _last_started_action = CBF_NONE; CLRBITS(this->flags, WF_WHITE_BORDER); this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button @@ -1701,7 +2019,7 @@ struct MainToolbarWindow : Window { virtual void OnDropdownSelect(int widget, int index) { CallBackFunction cbf = _menu_clicked_procs[widget](index); - if (cbf != CBF_NONE) this->last_started_action = cbf; + if (cbf != CBF_NONE) _last_started_action = cbf; } virtual EventState OnHotkey(int hotkey) @@ -1711,7 +2029,7 @@ struct MainToolbarWindow : Window { case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break; case MTHK_SETTINGS: ShowGameOptions(); break; case MTHK_SAVEGAME: MenuClickSaveLoad(); break; - case MTHK_LOADGAME: ShowSaveLoadDialog(SLD_LOAD_GAME); break; + case MTHK_LOADGAME: ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD); break; case MTHK_SMALLMAP: ShowSmallMap(); break; case MTHK_TOWNDIRECTORY: ShowTownDirectory(); break; case MTHK_SUBSIDIES: ShowSubsidiesList(); break; @@ -1754,7 +2072,7 @@ struct MainToolbarWindow : Window { virtual void OnPlaceObject(Point pt, TileIndex tile) { - switch (this->last_started_action) { + switch (_last_started_action) { case CBF_PLACE_SIGN: PlaceProc_Sign(tile); break; @@ -1767,6 +2085,11 @@ struct MainToolbarWindow : Window { } } + virtual void OnPlaceObjectAbort() + { + _last_started_action = CBF_NONE; + } + virtual void OnTick() { if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) { @@ -1895,7 +2218,14 @@ static NWidgetBase *MakeMainToolbar(int *biggest_index) NWidgetMainToolbarContainer *hor = new NWidgetMainToolbarContainer(); for (uint i = 0; i < WID_TN_END; i++) { switch (i) { - case 4: case 8: case 15: case 19: case 21: case 26: hor->Add(new NWidgetSpacer(0, 0)); break; + case WID_TN_SMALL_MAP: + case WID_TN_FINANCES: + case WID_TN_VEHICLE_START: + case WID_TN_ZOOM_IN: + case WID_TN_BUILDING_TOOLS_START: + case WID_TN_MUSIC_SOUND: + hor->Add(new NWidgetSpacer(0, 0)); + break; } hor->Add(new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i)); } @@ -1978,13 +2308,11 @@ enum MainToolbarEditorHotkeys { }; struct ScenarioEditorToolbarWindow : Window { - CallBackFunction last_started_action; ///< Last started user action. - ScenarioEditorToolbarWindow(WindowDesc *desc) : Window(desc) { this->InitNested(0); - this->last_started_action = CBF_NONE; + _last_started_action = CBF_NONE; CLRBITS(this->flags, WF_WHITE_BORDER); PositionMainToolbar(this); DoZoomInOutWindow(ZOOM_NONE, this); @@ -2043,7 +2371,7 @@ struct ScenarioEditorToolbarWindow : Window { { if (_game_mode == GM_MENU) return; CallBackFunction cbf = _scen_toolbar_button_procs[widget](this); - if (cbf != CBF_NONE) this->last_started_action = cbf; + if (cbf != CBF_NONE) _last_started_action = cbf; } virtual void OnDropdownSelect(int widget, int index) @@ -2052,7 +2380,7 @@ struct ScenarioEditorToolbarWindow : Window { * editor toolbar, so we need to adjust for it. */ if (widget == WID_TE_SMALL_MAP) widget = WID_TN_SMALL_MAP; CallBackFunction cbf = _menu_clicked_procs[widget](index); - if (cbf != CBF_NONE) this->last_started_action = cbf; + if (cbf != CBF_NONE) _last_started_action = cbf; if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); } @@ -2084,13 +2412,13 @@ struct ScenarioEditorToolbarWindow : Window { case MTEHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; default: return ES_NOT_HANDLED; } - if (cbf != CBF_NONE) this->last_started_action = cbf; + if (cbf != CBF_NONE) _last_started_action = cbf; return ES_HANDLED; } virtual void OnPlaceObject(Point pt, TileIndex tile) { - switch (this->last_started_action) { + switch (_last_started_action) { case CBF_PLACE_SIGN: PlaceProc_Sign(tile); break; @@ -2103,6 +2431,11 @@ struct ScenarioEditorToolbarWindow : Window { } } + virtual void OnPlaceObjectAbort() + { + _last_started_action = CBF_NONE; + } + virtual void OnTimeout() { this->SetWidgetsLoweredState(false, WID_TE_DATE_BACKWARD, WID_TE_DATE_FORWARD, WIDGET_LIST_END); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 7b0c01bc9a..e26045ed65 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: town_cmd.cpp 27423 2015-10-30 17:17:54Z frosch $ */ +/* $Id: town_cmd.cpp 27739 2017-01-22 13:13:15Z frosch $ */ /* * This file is part of OpenTTD. @@ -2058,11 +2058,10 @@ static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, Hou * Checks if a house can be built here. Important is slope, bridge above * and ability to clear the land. * @param tile tile to check - * @param town town that is checking * @param noslope are slopes (foundations) allowed? * @return true iff house can be built here */ -static inline bool CanBuildHouseHere(TileIndex tile, TownID town, bool noslope) +static inline bool CanBuildHouseHere(TileIndex tile, bool noslope) { /* cannot build on these slopes... */ Slope slope = GetTileSlope(tile); @@ -2071,9 +2070,6 @@ static inline bool CanBuildHouseHere(TileIndex tile, TownID town, bool noslope) /* building under a bridge? */ if (IsBridgeAbove(tile)) return false; - /* do not try to build over house owned by another town */ - if (IsTileType(tile, MP_HOUSE) && GetTownIndex(tile) != town) return false; - /* can we clear the land? */ return DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR).Succeeded(); } @@ -2082,15 +2078,14 @@ static inline bool CanBuildHouseHere(TileIndex tile, TownID town, bool noslope) /** * Checks if a house can be built at this tile, must have the same max z as parameter. * @param tile tile to check - * @param town town that is checking * @param z max z of this tile so more parts of a house are at the same height (with foundation) * @param noslope are slopes (foundations) allowed? * @return true iff house can be built here * @see CanBuildHouseHere() */ -static inline bool CheckBuildHouseSameZ(TileIndex tile, TownID town, int z, bool noslope) +static inline bool CheckBuildHouseSameZ(TileIndex tile, int z, bool noslope) { - if (!CanBuildHouseHere(tile, town, noslope)) return false; + if (!CanBuildHouseHere(tile, noslope)) return false; /* if building on slopes is allowed, there will be flattening foundation (to tile max z) */ if (GetTileMaxZ(tile) != z) return false; @@ -2102,20 +2097,19 @@ static inline bool CheckBuildHouseSameZ(TileIndex tile, TownID town, int z, bool /** * Checks if a house of size 2x2 can be built at this tile * @param tile tile, N corner - * @param town town that is checking * @param z maximum tile z so all tile have the same max z * @param noslope are slopes (foundations) allowed? * @return true iff house can be built * @see CheckBuildHouseSameZ() */ -static bool CheckFree2x2Area(TileIndex tile, TownID town, int z, bool noslope) +static bool CheckFree2x2Area(TileIndex tile, int z, bool noslope) { /* we need to check this tile too because we can be at different tile now */ - if (!CheckBuildHouseSameZ(tile, town, z, noslope)) return false; + if (!CheckBuildHouseSameZ(tile, z, noslope)) return false; for (DiagDirection d = DIAGDIR_SE; d < DIAGDIR_END; d++) { tile += TileOffsByDiagDir(d); - if (!CheckBuildHouseSameZ(tile, town, z, noslope)) return false; + if (!CheckBuildHouseSameZ(tile, z, noslope)) return false; } return true; @@ -2202,10 +2196,10 @@ static bool CheckTownBuild2House(TileIndex *tile, Town *t, int maxz, bool noslop /* 'tile' is already checked in BuildTownHouse() - CanBuildHouseHere() and slope test */ TileIndex tile2 = *tile + TileOffsByDiagDir(second); - if (TownLayoutAllowsHouseHere(t, tile2) && CheckBuildHouseSameZ(tile2, t->index, maxz, noslope)) return true; + if (TownLayoutAllowsHouseHere(t, tile2) && CheckBuildHouseSameZ(tile2, maxz, noslope)) return true; tile2 = *tile + TileOffsByDiagDir(ReverseDiagDir(second)); - if (TownLayoutAllowsHouseHere(t, tile2) && CheckBuildHouseSameZ(tile2, t->index, maxz, noslope)) { + if (TownLayoutAllowsHouseHere(t, tile2) && CheckBuildHouseSameZ(tile2, maxz, noslope)) { *tile = tile2; return true; } @@ -2227,7 +2221,7 @@ static bool CheckTownBuild2x2House(TileIndex *tile, Town *t, int maxz, bool nosl TileIndex tile2 = *tile; for (DiagDirection d = DIAGDIR_SE;; d++) { // 'd' goes through DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_END - if (TownLayoutAllows2x2HouseHere(t, tile2) && CheckFree2x2Area(tile2, t->index, maxz, noslope)) { + if (TownLayoutAllows2x2HouseHere(t, tile2) && CheckFree2x2Area(tile2, maxz, noslope)) { *tile = tile2; return true; } @@ -2251,7 +2245,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile) if (!TownLayoutAllowsHouseHere(t, tile)) return false; /* no house allowed at all, bail out */ - if (!CanBuildHouseHere(tile, t->index, false)) return false; + if (!CanBuildHouseHere(tile, false)) return false; Slope slope = GetTileSlope(tile); int maxz = GetTileMaxZ(tile); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 7b30b30f01..b97cde092c 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: town_gui.cpp 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: town_gui.cpp 27577 2016-05-22 10:52:02Z frosch $ */ /* * This file is part of OpenTTD. diff --git a/src/train.h b/src/train.h index 8cbca2e7ca..78f76ef227 100644 --- a/src/train.h +++ b/src/train.h @@ -1,4 +1,4 @@ -/* $Id: train.h 26317 2014-02-07 23:48:56Z frosch $ */ +/* $Id: train.h 27666 2016-10-16 14:57:56Z frosch $ */ /* * This file is part of OpenTTD. @@ -114,7 +114,7 @@ struct Train FINAL : public GroundVehicle { ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_TRAIN_INC : EXPENSES_TRAIN_RUN; } void PlayLeaveStationSound() const; bool IsPrimaryVehicle() const { return this->IsFrontEngine(); } - SpriteID GetImage(Direction direction, EngineImageType image_type) const; + void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const; int GetDisplaySpeed() const { return this->gcache.last_speed; } int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed; } Money GetRunningCost() const; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index fa50bf30a9..34b374446b 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: train_cmd.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: train_cmd.cpp 27667 2016-10-16 14:58:38Z frosch $ */ /* * This file is part of OpenTTD. @@ -482,41 +482,40 @@ static SpriteID GetDefaultTrainSprite(uint8 spritenum, Direction direction) * @param image_type Visualisation context. * @return Sprite to display. */ -SpriteID Train::GetImage(Direction direction, EngineImageType image_type) const +void Train::GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const { uint8 spritenum = this->spritenum; - SpriteID sprite; if (HasBit(this->flags, VRF_REVERSE_DIRECTION)) direction = ReverseDir(direction); if (is_custom_sprite(spritenum)) { - sprite = GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(spritenum)), image_type); - if (sprite != 0) return sprite; + GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(spritenum)), image_type, result); + if (result->IsValid()) return; spritenum = this->GetEngine()->original_image_index; } assert(IsValidImageIndex(spritenum)); - sprite = GetDefaultTrainSprite(spritenum, direction); + SpriteID sprite = GetDefaultTrainSprite(spritenum, direction); if (this->cargo.StoredCount() >= this->cargo_cap / 2U) sprite += _wagon_full_adder[spritenum]; - return sprite; + result->Set(sprite); } -static SpriteID GetRailIcon(EngineID engine, bool rear_head, int &y, EngineImageType image_type) +static void GetRailIcon(EngineID engine, bool rear_head, int &y, EngineImageType image_type, VehicleSpriteSeq *result) { const Engine *e = Engine::Get(engine); Direction dir = rear_head ? DIR_E : DIR_W; uint8 spritenum = e->u.rail.image_index; if (is_custom_sprite(spritenum)) { - SpriteID sprite = GetCustomVehicleIcon(engine, dir, image_type); - if (sprite != 0) { + GetCustomVehicleIcon(engine, dir, image_type, result); + if (result->IsValid()) { if (e->GetGRF() != NULL) { y += ScaleGUITrad(e->GetGRF()->traininfo_vehicle_pitch); } - return sprite; + return; } spritenum = Engine::Get(engine)->original_image_index; @@ -524,7 +523,7 @@ static SpriteID GetRailIcon(EngineID engine, bool rear_head, int &y, EngineImage if (rear_head) spritenum++; - return GetDefaultTrainSprite(spritenum, DIR_W); + result->Set(GetDefaultTrainSprite(spritenum, DIR_W)); } void DrawTrainEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) @@ -533,24 +532,31 @@ void DrawTrainEngine(int left, int right, int preferred_x, int y, EngineID engin int yf = y; int yr = y; - SpriteID spritef = GetRailIcon(engine, false, yf, image_type); - SpriteID spriter = GetRailIcon(engine, true, yr, image_type); - const Sprite *real_spritef = GetSprite(spritef, ST_NORMAL); - const Sprite *real_spriter = GetSprite(spriter, ST_NORMAL); + VehicleSpriteSeq seqf, seqr; + GetRailIcon(engine, false, yf, image_type, &seqf); + GetRailIcon(engine, true, yr, image_type, &seqr); + + Rect rectf, rectr; + seqf.GetBounds(&rectf); + seqr.GetBounds(&rectr); preferred_x = Clamp(preferred_x, - left - UnScaleGUI(real_spritef->x_offs) + ScaleGUITrad(14), - right - UnScaleGUI(real_spriter->width) - UnScaleGUI(real_spriter->x_offs) - ScaleGUITrad(15)); + left - UnScaleGUI(rectf.left) + ScaleGUITrad(14), + right - UnScaleGUI(rectr.right) - ScaleGUITrad(15)); - DrawSprite(spritef, pal, preferred_x - ScaleGUITrad(14), yf); - DrawSprite(spriter, pal, preferred_x + ScaleGUITrad(15), yr); + seqf.Draw(preferred_x - ScaleGUITrad(14), yf, pal, pal == PALETTE_CRASH); + seqr.Draw(preferred_x + ScaleGUITrad(15), yr, pal, pal == PALETTE_CRASH); } else { - SpriteID sprite = GetRailIcon(engine, false, y, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + GetRailIcon(engine, false, y, image_type, &seq); + + Rect rect; + seq.GetBounds(&rect); preferred_x = Clamp(preferred_x, - left - UnScaleGUI(real_sprite->x_offs), - right - UnScaleGUI(real_sprite->width) - UnScaleGUI(real_sprite->x_offs)); - DrawSprite(sprite, pal, preferred_x, y); + left - UnScaleGUI(rect.left), + right - UnScaleGUI(rect.right)); + + seq.Draw(preferred_x, y, pal, pal == PALETTE_CRASH); } } @@ -567,23 +573,26 @@ void GetTrainSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, { int y = 0; - SpriteID sprite = GetRailIcon(engine, false, y, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + VehicleSpriteSeq seq; + GetRailIcon(engine, false, y, image_type, &seq); - width = UnScaleGUI(real_sprite->width); - height = UnScaleGUI(real_sprite->height); - xoffs = UnScaleGUI(real_sprite->x_offs); - yoffs = UnScaleGUI(real_sprite->y_offs); + Rect rect; + seq.GetBounds(&rect); + + width = UnScaleGUI(rect.right - rect.left + 1); + height = UnScaleGUI(rect.bottom - rect.top + 1); + xoffs = UnScaleGUI(rect.left); + yoffs = UnScaleGUI(rect.top); if (RailVehInfo(engine)->railveh_type == RAILVEH_MULTIHEAD) { - sprite = GetRailIcon(engine, true, y, image_type); - real_sprite = GetSprite(sprite, ST_NORMAL); + GetRailIcon(engine, true, y, image_type, &seq); + seq.GetBounds(&rect); /* Calculate values relative to an imaginary center between the two sprites. */ - width = ScaleGUITrad(TRAININFO_DEFAULT_VEHICLE_WIDTH) + UnScaleGUI(real_sprite->width) + UnScaleGUI(real_sprite->x_offs) - xoffs; - height = max(height, UnScaleGUI(real_sprite->height)); + width = ScaleGUITrad(TRAININFO_DEFAULT_VEHICLE_WIDTH) + UnScaleGUI(rect.right) - xoffs; + height = max(height, UnScaleGUI(rect.bottom - rect.top + 1)); xoffs = xoffs - ScaleGUITrad(TRAININFO_DEFAULT_VEHICLE_WIDTH) / 2; - yoffs = min(yoffs, UnScaleGUI(real_sprite->y_offs)); + yoffs = min(yoffs, UnScaleGUI(rect.top)); } } @@ -638,7 +647,7 @@ static CommandCost CmdBuildRailWagon(TileIndex tile, DoCommandFlag flags, const v->date_of_last_service = _date; v->build_year = _cur_year; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); v->group_id = DEFAULT_GROUP; @@ -706,7 +715,7 @@ static void AddRearEngineToMultiheadedTrain(Train *v) u->engine_type = v->engine_type; u->date_of_last_service = v->date_of_last_service; u->build_year = v->build_year; - u->cur_image = SPR_IMG_QUERY; + u->sprite_seq.Set(SPR_IMG_QUERY); u->random_bits = VehicleRandomBits(); v->SetMultiheaded(); u->SetMultiheaded(); @@ -772,7 +781,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engin v->SetServiceInterval(Company::Get(_current_company)->settings.vehicle.servint_trains); v->date_of_last_service = _date; v->build_year = _cur_year; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SetBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE); @@ -3521,14 +3530,14 @@ static void ChangeTrainDirRandomly(Train *v) /* We don't need to twist around vehicles if they're not visible */ if (!(v->vehstatus & VS_HIDDEN)) { v->direction = ChangeDir(v->direction, delta[GB(Random(), 0, 2)]); - v->UpdateDeltaXY(v->direction); - v->cur_image = v->GetImage(v->direction, EIT_ON_MAP); /* Refrain from updating the z position of the vehicle when on * a bridge, because UpdateInclination() will put the vehicle under * the bridge in that case */ if (v->track != TRACK_BIT_WORMHOLE) { v->UpdatePosition(); - v->UpdateInclination(false, false); + v->UpdateInclination(false, true); + } else { + v->UpdateViewport(false, true); } } } while ((v = v->Next()) != NULL); diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 9322f7cd2f..e4001fe8b9 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: train_gui.cpp 27134 2015-02-01 20:54:24Z frosch $ */ +/* $Id: train_gui.cpp 27689 2016-12-10 14:33:58Z frosch $ */ /* * This file is part of OpenTTD. @@ -56,15 +56,16 @@ void CcBuildWagon(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p * @param px The current x position to draw from. * @param max_width The maximum space available to draw. * @param selection Selected vehicle that is dragged. + * @param chain Whether a whole chain is dragged. * @return The width of the highlight mark. */ -static int HighlightDragPosition(int px, int max_width, VehicleID selection) +static int HighlightDragPosition(int px, int max_width, VehicleID selection, bool chain) { bool rtl = _current_text_dir == TD_RTL; assert(selection != INVALID_VEHICLE); int dragged_width = WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; - for (Train *t = Train::Get(selection); t != NULL; t = t->HasArticulatedPart() ? t->GetNextArticulatedPart() : NULL) { + for (Train *t = Train::Get(selection); t != NULL; t = chain ? t->Next() : (t->HasArticulatedPart() ? t->GetNextArticulatedPart() : NULL)) { dragged_width += t->GetDisplayImageWidth(NULL); } @@ -114,7 +115,7 @@ void DrawTrainImage(const Train *v, int left, int right, int y, VehicleID select for (; v != NULL && (rtl ? px > 0 : px < max_width); v = v->Next()) { if (dragging && !drag_at_end_of_train && drag_dest == v->index) { /* Highlight the drag-and-drop destination inside the train. */ - int drag_hlight_width = HighlightDragPosition(px, max_width, selection); + int drag_hlight_width = HighlightDragPosition(px, max_width, selection, _cursor.vehchain); px += rtl ? -drag_hlight_width : drag_hlight_width; } @@ -123,7 +124,9 @@ void DrawTrainImage(const Train *v, int left, int right, int y, VehicleID select if (rtl ? px + width > 0 : px - width < max_width) { PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); - DrawSprite(v->GetImage(dir, image_type), pal, px + (rtl ? -offset.x : offset.x), height / 2 + offset.y); + VehicleSpriteSeq seq; + v->GetImage(dir, image_type, &seq); + seq.Draw(px + (rtl ? -offset.x : offset.x), height / 2 + offset.y, pal, (v->vehstatus & VS_CRASHED) != 0); } if (!v->IsArticulatedPart()) sel_articulated = false; @@ -146,7 +149,7 @@ void DrawTrainImage(const Train *v, int left, int right, int y, VehicleID select if (dragging && drag_at_end_of_train) { /* Highlight the drag-and-drop destination at the end of the train. */ - HighlightDragPosition(px, max_width, selection); + HighlightDragPosition(px, max_width, selection, _cursor.vehchain); } if (highlight_l != highlight_r) { @@ -382,7 +385,9 @@ void DrawTrainDetails(const Train *v, int left, int right, int y, int vscroll_po pitch = ScaleGUITrad(e->GetGRF()->traininfo_vehicle_pitch); } PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); - DrawSprite(u->GetImage(dir, EIT_IN_DETAILS), pal, px + (rtl ? -offset.x : offset.x), y - line_height * vscroll_pos + sprite_y_offset + pitch); + VehicleSpriteSeq seq; + u->GetImage(dir, EIT_IN_DETAILS, &seq); + seq.Draw(px + (rtl ? -offset.x : offset.x), y - line_height * vscroll_pos + sprite_y_offset + pitch, pal, (v->vehstatus & VS_CRASHED) != 0); } px += rtl ? -width : width; dx += width; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index bc459937f0..4194d63793 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: tunnelbridge_cmd.cpp 27313 2015-06-21 09:52:30Z frosch $ */ +/* $Id: tunnelbridge_cmd.cpp 27686 2016-12-09 21:27:22Z frosch $ */ /* * This file is part of OpenTTD. @@ -1216,14 +1216,14 @@ static void DrawTile_TunnelBridge(TileInfo *ti) } } - if (HasCatenaryDrawn(GetRailType(ti->tile))) { + if (HasRailCatenaryDrawn(GetRailType(ti->tile))) { /* Maybe draw pylons on the entry side */ - DrawCatenary(ti); + DrawRailCatenary(ti); catenary = true; StartSpriteCombine(); /* Draw wire above the ramp */ - DrawCatenaryOnTunnel(ti); + DrawRailCatenaryOnTunnel(ti); } } @@ -1341,8 +1341,8 @@ static void DrawTile_TunnelBridge(TileInfo *ti) } EndSpriteCombine(); - if (HasCatenaryDrawn(GetRailType(ti->tile))) { - DrawCatenary(ti); + if (HasRailCatenaryDrawn(GetRailType(ti->tile))) { + DrawRailCatenary(ti); } } @@ -1392,7 +1392,7 @@ void DrawBridgeMiddle(const TileInfo *ti) { /* Sectional view of bridge bounding boxes: * - * 1 2 1,2 = SpriteCombine of Bridge front/(back&floor) and TramCatenary + * 1 2 1,2 = SpriteCombine of Bridge front/(back&floor) and RoadCatenary * 1 2 3 = empty helper BB * 1 7 2 4,5 = pillars under higher bridges * 1 6 88888 6 2 6 = elrail-pylons @@ -1491,8 +1491,8 @@ void DrawBridgeMiddle(const TileInfo *ti) EndSpriteCombine(); - if (HasCatenaryDrawn(GetRailType(rampsouth))) { - DrawCatenaryOnBridge(ti); + if (HasRailCatenaryDrawn(GetRailType(rampsouth))) { + DrawRailCatenaryOnBridge(ti); } } @@ -1612,6 +1612,7 @@ static void GetTileDesc_TunnelBridge(TileIndex tile, TileDesc *td) if (tt == TRANSPORT_RAIL) { const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(tile)); td->rail_speed = rti->max_speed; + td->railtype = rti->strings.name; if (!IsTunnel(tile)) { uint16 spd = GetBridgeSpec(GetBridgeType(tile))->speed; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index d38e6bd60b..ac44fbc8c8 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1,4 +1,4 @@ -/* $Id: vehicle.cpp 27592 2016-05-29 19:08:01Z frosch $ */ +/* $Id: vehicle.cpp 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -68,6 +68,47 @@ uint16 _returned_mail_refit_capacity; ///< Stores the mail capacity after a refi VehiclePool _vehicle_pool("Vehicle"); INSTANTIATE_POOL_METHODS(Vehicle) + +/** + * Determine shared bounds of all sprites. + * @param [out] bounds Shared bounds. + */ +void VehicleSpriteSeq::GetBounds(Rect *bounds) const +{ + bounds->left = bounds->top = bounds->right = bounds->bottom = 0; + for (uint i = 0; i < this->count; ++i) { + const Sprite *spr = GetSprite(this->seq[i].sprite, ST_NORMAL); + if (i == 0) { + bounds->left = spr->x_offs; + bounds->top = spr->y_offs; + bounds->right = spr->width + spr->x_offs - 1; + bounds->bottom = spr->height + spr->y_offs - 1; + } else { + if (spr->x_offs < bounds->left) bounds->left = spr->x_offs; + if (spr->y_offs < bounds->top) bounds->top = spr->y_offs; + int right = spr->width + spr->x_offs - 1; + int bottom = spr->height + spr->y_offs - 1; + if (right > bounds->right) bounds->right = right; + if (bottom > bounds->bottom) bounds->bottom = bottom; + } + } +} + +/** + * Draw the sprite sequence. + * @param x X position + * @param y Y position + * @param default_pal Vehicle palette + * @param force_pal Whether to ignore individual palettes, and draw everything with \a default_pal. + */ +void VehicleSpriteSeq::Draw(int x, int y, PaletteID default_pal, bool force_pal) const +{ + for (uint i = 0; i < this->count; ++i) { + PaletteID pal = force_pal || !this->seq[i].pal ? default_pal : this->seq[i].pal; + DrawSprite(this->seq[i].sprite, pal, x, y); + } +} + /** * Function to tell if a vehicle needs to be autorenewed * @param *c The vehicle owner @@ -1008,7 +1049,6 @@ void CallVehicleTicks() */ static void DoDrawVehicle(const Vehicle *v) { - SpriteID image = v->cur_image; PaletteID pal = PAL_NONE; if (v->vehstatus & VS_DEFPAL) pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); @@ -1023,8 +1063,14 @@ static void DoDrawVehicle(const Vehicle *v) if (to != TO_INVALID && (IsTransparencySet(to) || IsInvisibilitySet(to))) return; } - AddSortableSpriteToDraw(image, pal, v->x_pos + v->x_offs, v->y_pos + v->y_offs, - v->x_extent, v->y_extent, v->z_extent, v->z_pos, shadowed, v->x_bb_offs, v->y_bb_offs); + StartSpriteCombine(); + for (uint i = 0; i < v->sprite_seq.count; ++i) { + PaletteID pal2 = v->sprite_seq.seq[i].pal; + if (!pal2 || (v->vehstatus & VS_CRASHED)) pal2 = pal; + AddSortableSpriteToDraw(v->sprite_seq.seq[i].sprite, pal2, v->x_pos + v->x_offs, v->y_pos + v->y_offs, + v->x_extent, v->y_extent, v->z_extent, v->z_pos, shadowed, v->x_bb_offs, v->y_bb_offs); + } + EndSpriteCombine(); } /** @@ -1487,20 +1533,19 @@ void Vehicle::UpdatePosition() */ void Vehicle::UpdateViewport(bool dirty) { - int img = this->cur_image; + Rect new_coord; + this->sprite_seq.GetBounds(&new_coord); + Point pt = RemapCoords(this->x_pos + this->x_offs, this->y_pos + this->y_offs, this->z_pos); - const Sprite *spr = GetSprite(img, ST_NORMAL); + new_coord.left += pt.x; + new_coord.top += pt.y; + new_coord.right += pt.x + 2 * ZOOM_LVL_BASE; + new_coord.bottom += pt.y + 2 * ZOOM_LVL_BASE; - pt.x += spr->x_offs; - pt.y += spr->y_offs; - - UpdateVehicleViewportHash(this, pt.x, pt.y); + UpdateVehicleViewportHash(this, new_coord.left, new_coord.top); Rect old_coord = this->coord; - this->coord.left = pt.x; - this->coord.top = pt.y; - this->coord.right = pt.x + spr->width + 2 * ZOOM_LVL_BASE; - this->coord.bottom = pt.y + spr->height + 2 * ZOOM_LVL_BASE; + this->coord = new_coord; if (dirty) { if (old_coord.left == INVALID_COORD) { diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 02d2795905..f65f2a4df5 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -1,4 +1,4 @@ -/* $Id: vehicle_base.h 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: vehicle_base.h 27668 2016-10-16 14:59:44Z frosch $ */ /* * This file is part of OpenTTD. @@ -126,6 +126,63 @@ struct VehicleCache { byte cached_vis_effect; ///< Visual effect to show (see #VisualEffect) }; +/** Sprite sequence for a vehicle part. */ +struct VehicleSpriteSeq { + PalSpriteID seq[4]; + uint count; + + bool operator==(const VehicleSpriteSeq &other) const + { + return this->count == other.count && MemCmpT(this->seq, other.seq, this->count) == 0; + } + + bool operator!=(const VehicleSpriteSeq &other) const + { + return !this->operator==(other); + } + + /** + * Check whether the sequence contains any sprites. + */ + bool IsValid() const + { + return this->count != 0; + } + + /** + * Clear all information. + */ + void Clear() + { + this->count = 0; + } + + /** + * Assign a single sprite to the sequence. + */ + void Set(SpriteID sprite) + { + this->count = 1; + this->seq[0].sprite = sprite; + this->seq[0].pal = 0; + } + + /** + * Copy data from another sprite sequence, while dropping all recolouring information. + */ + void CopyWithoutPalette(const VehicleSpriteSeq &src) + { + this->count = src.count; + for (uint i = 0; i < src.count; ++i) { + this->seq[i].sprite = src.seq[i].sprite; + this->seq[i].pal = 0; + } + } + + void GetBounds(Rect *bounds) const; + void Draw(int x, int y, PaletteID default_pal, bool force_pal) const; +}; + /** A vehicle pool for a little over 1 million vehicles. */ typedef Pool VehiclePool; extern VehiclePool _vehicle_pool; @@ -220,7 +277,7 @@ public: * 0xff == reserved for another custom sprite */ byte spritenum; - SpriteID cur_image; ///< sprite number for this vehicle + VehicleSpriteSeq sprite_seq; ///< Vehicle appearance. byte x_extent; ///< x-extent of vehicle bounding box byte y_extent; ///< y-extent of vehicle bounding box byte z_extent; ///< z-extent of vehicle bounding box @@ -380,9 +437,9 @@ public: /** * Gets the sprite to show for the given direction * @param direction the direction the vehicle is facing - * @return the sprite for the given vehicle in the given direction + * @param [out] result Vehicle sprite sequence. */ - virtual SpriteID GetImage(Direction direction, EngineImageType image_type) const { return 0; } + virtual void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const { result->Clear(); } const GRFFile *GetGRF() const; uint32 GetGRFID() const; @@ -940,7 +997,10 @@ struct SpecializedVehicle : public Vehicle { /** * Set vehicle type correctly */ - inline SpecializedVehicle() : Vehicle(Type) { } + inline SpecializedVehicle() : Vehicle(Type) + { + this->sprite_seq.count = 1; + } /** * Get the first vehicle in the chain @@ -1079,9 +1139,12 @@ struct SpecializedVehicle : public Vehicle { /* Explicitly choose method to call to prevent vtable dereference - * it gives ~3% runtime improvements in games with many vehicles */ if (update_delta) ((T *)this)->T::UpdateDeltaXY(this->direction); - SpriteID old_image = this->cur_image; - this->cur_image = ((T *)this)->T::GetImage(this->direction, EIT_ON_MAP); - if (force_update || this->cur_image != old_image) this->Vehicle::UpdateViewport(true); + VehicleSpriteSeq seq; + ((T *)this)->T::GetImage(this->direction, EIT_ON_MAP, &seq); + if (force_update || this->sprite_seq != seq) { + this->sprite_seq = seq; + this->Vehicle::UpdateViewport(true); + } } }; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 729be9badb..e4ddccc129 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -1,4 +1,4 @@ -/* $Id: vehicle_cmd.cpp 27428 2015-10-30 17:27:21Z frosch $ */ +/* $Id: vehicle_cmd.cpp 27677 2016-11-05 19:16:59Z frosch $ */ /* * This file is part of OpenTTD. @@ -606,7 +606,7 @@ CommandCost CmdMassStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 bool vehicle_list_window = HasBit(p1, 1); VehicleListIdentifier vli; - if (!vli.Unpack(p2)) return CMD_ERROR; + if (!vli.UnpackIfValid(p2)) return CMD_ERROR; if (!IsCompanyBuildableVehicleType(vli.vtype)) return CMD_ERROR; if (vehicle_list_window) { @@ -1001,7 +1001,7 @@ CommandCost CmdSendVehicleToDepot(TileIndex tile, DoCommandFlag flags, uint32 p1 if (p1 & DEPOT_MASS_SEND) { /* Mass goto depot requested */ VehicleListIdentifier vli; - if (!vli.Unpack(p2)) return CMD_ERROR; + if (!vli.UnpackIfValid(p2)) return CMD_ERROR; return SendAllVehiclesToDepot(flags, (p1 & DEPOT_SERVICE) != 0, vli); } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 8f88c158fc..2d72daadd9 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: vehicle_gui.cpp 27587 2016-05-29 18:52:56Z frosch $ */ +/* $Id: vehicle_gui.cpp 27677 2016-11-05 19:16:59Z frosch $ */ /* * This file is part of OpenTTD. @@ -1638,7 +1638,7 @@ public: break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: { - DropDownList *list = this->BuildActionDropdownList(VehicleListIdentifier(this->window_number).type == VL_STANDARD, false); + DropDownList *list = this->BuildActionDropdownList(VehicleListIdentifier::UnPack(this->window_number).type == VL_STANDARD, false); ShowDropDownList(this, list, 0, WID_VL_MANAGE_VEHICLES_DROPDOWN); break; } @@ -2100,9 +2100,7 @@ struct VehicleDetailsWindow : Window { case WID_VD_MIDDLE_DETAILS: { /* For other vehicles, at the place of the matrix. */ bool rtl = _current_text_dir == TD_RTL; - uint sprite_width = UnScaleGUI( - max(GetSprite(v->GetImage(rtl ? DIR_E : DIR_W, EIT_IN_DETAILS), ST_NORMAL)->width, 70U)) + - WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; + uint sprite_width = GetSingleVehicleWidth(v, EIT_IN_DETAILS) + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; uint text_left = r.left + (rtl ? 0 : sprite_width); uint text_right = r.right - (rtl ? sprite_width : 0); @@ -2372,8 +2370,8 @@ static const uint32 _vehicle_command_translation_table[][4] = { }; /** - * This is the Callback method after the cloning attempt of a vehicle - * @param result the result of the cloning command + * This is the Callback method after attempting to start/stop a vehicle + * @param result the result of the start/stop command * @param tile unused * @param p1 vehicle ID * @param p2 unused @@ -2828,36 +2826,85 @@ void CcBuildPrimaryVehicle(const CommandCost &result, TileIndex tile, uint32 p1, ShowVehicleViewWindow(v); } +/** + * Get the width of a vehicle (part) in pixels. + * @param v Vehicle to get the width for. + * @return Width of the vehicle. + */ +int GetSingleVehicleWidth(const Vehicle *v, EngineImageType image_type) +{ + switch (v->type) { + case VEH_TRAIN: + return Train::From(v)->GetDisplayImageWidth(); + + case VEH_ROAD: + return RoadVehicle::From(v)->GetDisplayImageWidth(); + + default: + bool rtl = _current_text_dir == TD_RTL; + VehicleSpriteSeq seq; + v->GetImage(rtl ? DIR_E : DIR_W, image_type, &seq); + Rect rec; + seq.GetBounds(&rec); + return UnScaleGUI(rec.right - rec.left + 1); + } +} + /** * Get the width of a vehicle (including all parts of the consist) in pixels. * @param v Vehicle to get the width for. * @return Width of the vehicle. */ -int GetVehicleWidth(Vehicle *v, EngineImageType image_type) +int GetVehicleWidth(const Vehicle *v, EngineImageType image_type) { - int vehicle_width = 0; + if (v->type == VEH_TRAIN || v->type == VEH_ROAD) { + int vehicle_width = 0; + for (const Vehicle *u = v; u != NULL; u = u->Next()) { + vehicle_width += GetSingleVehicleWidth(u, image_type); + } + return vehicle_width; + } else { + return GetSingleVehicleWidth(v, image_type); + } +} - switch (v->type) { - case VEH_TRAIN: - for (const Train *u = Train::From(v); u != NULL; u = u->Next()) { - vehicle_width += u->GetDisplayImageWidth(); - } - break; +/** + * Set the mouse cursor to look like a vehicle. + * @param v Vehicle + * @param image_type Type of vehicle image to use. + */ +void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type) +{ + bool rtl = _current_text_dir == TD_RTL; - case VEH_ROAD: - for (const RoadVehicle *u = RoadVehicle::From(v); u != NULL; u = u->Next()) { - vehicle_width += u->GetDisplayImageWidth(); - } - break; + _cursor.sprite_count = 0; + int total_width = 0; + for (; v != NULL; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL) { + if (total_width >= 2 * (int)VEHICLEINFO_FULL_VEHICLE_WIDTH) break; - default: - bool rtl = _current_text_dir == TD_RTL; - SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type); - const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); - vehicle_width = UnScaleGUI(real_sprite->width); + PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); + VehicleSpriteSeq seq; + v->GetImage(rtl ? DIR_E : DIR_W, image_type, &seq); - break; + if (_cursor.sprite_count + seq.count > lengthof(_cursor.sprite_seq)) break; + + for (uint i = 0; i < seq.count; ++i) { + PaletteID pal2 = (v->vehstatus & VS_CRASHED) || !seq.seq[i].pal ? pal : seq.seq[i].pal; + _cursor.sprite_seq[_cursor.sprite_count].sprite = seq.seq[i].sprite; + _cursor.sprite_seq[_cursor.sprite_count].pal = pal2; + _cursor.sprite_pos[_cursor.sprite_count].x = rtl ? -total_width : total_width; + _cursor.sprite_pos[_cursor.sprite_count].y = 0; + _cursor.sprite_count++; + } + + total_width += GetSingleVehicleWidth(v, image_type); } - return vehicle_width; + int offs = ((int)VEHICLEINFO_FULL_VEHICLE_WIDTH - total_width) / 2; + if (rtl) offs = -offs; + for (uint i = 0; i < _cursor.sprite_count; ++i) { + _cursor.sprite_pos[i].x += offs; + } + + UpdateCursorSize(); } diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 302ec6ae77..6e10f1e02d 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -1,4 +1,4 @@ -/* $Id: vehicle_gui.h 24839 2012-12-23 01:00:25Z michi_cc $ */ +/* $Id: vehicle_gui.h 27631 2016-08-15 18:34:09Z frosch $ */ /* * This file is part of OpenTTD. @@ -64,7 +64,8 @@ static inline uint GetVehicleHeight(VehicleType type) return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24; } -int GetVehicleWidth(Vehicle *v, EngineImageType image_type); +int GetSingleVehicleWidth(const Vehicle *v, EngineImageType image_type); +int GetVehicleWidth(const Vehicle *v, EngineImageType image_type); /** Dimensions of a cell in the purchase/depot windows. */ struct VehicleCellSize { @@ -100,5 +101,6 @@ void StartStopVehicle(const Vehicle *v, bool texteffect); Vehicle *CheckClickOnVehicle(const struct ViewPort *vp, int x, int y); void DrawVehicleImage(const Vehicle *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip); +void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type); #endif /* VEHICLE_GUI_H */ diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index ec726539a4..824d4f7d22 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -1,4 +1,4 @@ -/* $Id: vehicle_gui_base.h 25287 2013-05-26 19:23:42Z frosch $ */ +/* $Id: vehicle_gui_base.h 27677 2016-11-05 19:16:59Z frosch $ */ /* * This file is part of OpenTTD. @@ -38,7 +38,7 @@ struct BaseVehicleListWindow : public Window { static const StringID vehicle_sorter_names[]; static GUIVehicleList::SortFunction * const vehicle_sorter_funcs[]; - BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno) : Window(desc), vli(wno) + BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno) : Window(desc), vli(VehicleListIdentifier::UnPack(wno)) { this->vehicles.SetSortFuncs(this->vehicle_sorter_funcs); } diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 008c1674cd..7b4d3d5b56 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -1,4 +1,4 @@ -/* $Id: vehiclelist.cpp 26679 2014-07-08 20:07:21Z frosch $ */ +/* $Id: vehiclelist.cpp 27677 2016-11-05 19:16:59Z frosch $ */ /* * This file is part of OpenTTD. @@ -37,7 +37,7 @@ uint32 VehicleListIdentifier::Pack() const * @param data The data to unpack. * @return true iff the data was valid (enough). */ -bool VehicleListIdentifier::Unpack(uint32 data) +bool VehicleListIdentifier::UnpackIfValid(uint32 data) { byte c = GB(data, 28, 4); this->company = c == 0xF ? OWNER_NONE : (CompanyID)c; @@ -52,10 +52,12 @@ bool VehicleListIdentifier::Unpack(uint32 data) * Decode a packed vehicle list identifier into a new one. * @param data The data to unpack. */ -VehicleListIdentifier::VehicleListIdentifier(uint32 data) +/* static */ VehicleListIdentifier VehicleListIdentifier::UnPack(uint32 data) { - bool ret = this->Unpack(data); + VehicleListIdentifier result; + bool ret = result.UnpackIfValid(data); assert(ret); + return result; } /** diff --git a/src/vehiclelist.h b/src/vehiclelist.h index 3a7ddbf51c..7773699709 100644 --- a/src/vehiclelist.h +++ b/src/vehiclelist.h @@ -1,4 +1,4 @@ -/* $Id: vehiclelist.h 27013 2014-10-14 11:23:41Z rubidium $ */ +/* $Id: vehiclelist.h 27677 2016-11-05 19:16:59Z frosch $ */ /* * This file is part of OpenTTD. @@ -35,7 +35,8 @@ struct VehicleListIdentifier { uint32 index; ///< A vehicle list type specific index. uint32 Pack() const; - bool Unpack(uint32 data); + bool UnpackIfValid(uint32 data); + static VehicleListIdentifier UnPack(uint32 data); /** * Create a simple vehicle list. @@ -47,7 +48,7 @@ struct VehicleListIdentifier { VehicleListIdentifier(VehicleListType type, VehicleType vtype, CompanyID company, uint index = 0) : type(type), vtype(vtype), company(company), index(index) {} - VehicleListIdentifier(uint32 data = 0); + VehicleListIdentifier() : type(), vtype(), company(), index() {} }; /** A list of vehicles. */ diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index 40b7d9092e..61073c771b 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -1,4 +1,4 @@ -/* $Id: wnd_quartz.mm 26108 2013-11-25 14:30:22Z rubidium $ */ +/* $Id: wnd_quartz.mm 27675 2016-10-31 19:29:01Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -110,15 +110,23 @@ static CGColorSpaceRef QZ_GetCorrectColorSpace() static CGColorSpaceRef colorSpace = NULL; if (colorSpace == NULL) { - CMProfileRef sysProfile; - - if (CMGetSystemProfile(&sysProfile) == noErr) { - colorSpace = CGColorSpaceCreateWithPlatformColorSpace(sysProfile); - CMCloseProfile(sysProfile); - } else { - colorSpace = CGColorSpaceCreateDeviceRGB(); +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) + if (MacOSVersionIsAtLeast(10, 5, 0)) { + colorSpace = CGDisplayCopyColorSpace(CGMainDisplayID()); + } else +#endif + { +#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) && !defined(HAVE_OSX_1011_SDK) + CMProfileRef sysProfile; + if (CMGetSystemProfile(&sysProfile) == noErr) { + colorSpace = CGColorSpaceCreateWithPlatformColorSpace(sysProfile); + CMCloseProfile(sysProfile); + } +#endif } + if (colorSpace == NULL) colorSpace = CGColorSpaceCreateDeviceRGB(); + if (colorSpace == NULL) error("Could not get system colour space. You might need to recalibrate your monitor."); } diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 80c03807be..18c3c4f605 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -1,4 +1,4 @@ -/* $Id: dedicated_v.cpp 26496 2014-04-24 17:49:31Z frosch $ */ +/* $Id: dedicated_v.cpp 27673 2016-10-30 18:22:55Z michi_cc $ */ /* * This file is part of OpenTTD. @@ -84,6 +84,7 @@ static void DedicatedSignalHandler(int sig) # endif # include # include +# include "../os/windows/win32.h" static HANDLE _hInputReady, _hWaitForInputHandling; static HANDLE _hThread; // Thread to close static char _win_console_thread_buffer[200]; @@ -95,6 +96,8 @@ static void WINAPI CheckForConsoleInput() /* WinCE doesn't support console stuff */ return; #else + SetWin32ThreadName(-1, "ottd:win-console"); + DWORD nb; HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); for (;;) { @@ -142,7 +145,7 @@ static void *_dedicated_video_mem; /* Whether a fork has been done. */ bool _dedicated_forks; -extern bool SafeLoad(const char *filename, int mode, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL); +extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL); static FVideoDriver_Dedicated iFVideoDriver_Dedicated; @@ -286,7 +289,7 @@ void VideoDriver_Dedicated::MainLoop() _switch_mode = SM_NONE; /* First we need to test if the savegame can be loaded, else we will end up playing the * intro game... */ - if (!SafeLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, BASE_DIR)) { + if (!SafeLoad(_file_to_saveload.name, _file_to_saveload.file_op, _file_to_saveload.detail_ftype, GM_NORMAL, BASE_DIR)) { /* Loading failed, pop out.. */ DEBUG(net, 0, "Loading requested map failed, aborting"); _networking = false; diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index b959ea58a5..23e2e1de6a 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -1,4 +1,4 @@ -/* $Id: sdl_v.cpp 27167 2015-02-22 23:06:45Z frosch $ */ +/* $Id: sdl_v.cpp 27775 2017-03-11 13:05:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -404,19 +404,6 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) blitter->PostResize(); InitPalette(); - switch (blitter->UsePaletteAnimation()) { - case Blitter::PALETTE_ANIMATION_NONE: - case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND: - UpdatePalette(); - break; - - case Blitter::PALETTE_ANIMATION_BLITTER: - if (VideoDriver::GetInstance() != NULL) blitter->PaletteAnimate(_local_palette); - break; - - default: - NOT_REACHED(); - } seprintf(caption, lastof(caption), "OpenTTD %s", _openttd_revision); SDL_CALL SDL_WM_SetCaption(caption, caption); @@ -687,7 +674,7 @@ void VideoDriver_SDL::MainLoop() _draw_mutex->BeginCritical(); _draw_continue = true; - _draw_threaded = ThreadObject::New(&DrawSurfaceToScreenThread, NULL, &_draw_thread); + _draw_threaded = ThreadObject::New(&DrawSurfaceToScreenThread, NULL, &_draw_thread, "ottd:draw-sdl"); /* Free the mutex if we won't be able to use it. */ if (!_draw_threaded) { @@ -830,11 +817,18 @@ bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen) } bool VideoDriver_SDL::AfterBlitterChange() +{ + return CreateMainSurface(_screen.width, _screen.height); +} + +void VideoDriver_SDL::AcquireBlitterLock() { if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); - bool ret = CreateMainSurface(_screen.width, _screen.height); +} + +void VideoDriver_SDL::ReleaseBlitterLock() +{ if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); - return ret; } #endif /* WITH_SDL */ diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h index dbc75215e0..0a38e35bb0 100644 --- a/src/video/sdl_v.h +++ b/src/video/sdl_v.h @@ -1,4 +1,4 @@ -/* $Id: sdl_v.h 26108 2013-11-25 14:30:22Z rubidium $ */ +/* $Id: sdl_v.h 27775 2017-03-11 13:05:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -31,6 +31,10 @@ public: /* virtual */ bool AfterBlitterChange(); + /* virtual */ void AcquireBlitterLock(); + + /* virtual */ void ReleaseBlitterLock(); + /* virtual */ bool ClaimMousePointer(); /* virtual */ const char *GetName() const { return "sdl"; } diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp index 00dec035cf..3e6b328ce7 100644 --- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -1,4 +1,4 @@ -/* $Id: video_driver.hpp 26538 2014-04-28 21:06:51Z rubidium $ */ +/* $Id: video_driver.hpp 27775 2017-03-11 13:05:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -49,6 +49,7 @@ public: /** * Callback invoked after the blitter was changed. + * This may only be called between AcquireBlitterLock and ReleaseBlitterLock. * @return True if no error. */ virtual bool AfterBlitterChange() @@ -56,6 +57,18 @@ public: return true; } + /** + * Acquire any lock(s) required to be held when changing blitters. + * These lock(s) may not be acquired recursively. + */ + virtual void AcquireBlitterLock() { } + + /** + * Release any lock(s) required to be held when changing blitters. + * These lock(s) may not be acquired recursively. + */ + virtual void ReleaseBlitterLock() { } + virtual bool ClaimMousePointer() { return true; diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index b401e24e97..43d936fc1b 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1,4 +1,4 @@ -/* $Id: win32_v.cpp 27167 2015-02-22 23:06:45Z frosch $ */ +/* $Id: win32_v.cpp 27775 2017-03-11 13:05:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -1199,7 +1199,7 @@ void VideoDriver_Win32::MainLoop() _draw_threaded = false; } else { _draw_continue = true; - _draw_threaded = ThreadObject::New(&PaintWindowThread, NULL, &_draw_thread); + _draw_threaded = ThreadObject::New(&PaintWindowThread, NULL, &_draw_thread, "ottd:draw-win32"); /* Free the mutex if we won't be able to use it. */ if (!_draw_threaded) { @@ -1333,11 +1333,18 @@ bool VideoDriver_Win32::ToggleFullscreen(bool full_screen) } bool VideoDriver_Win32::AfterBlitterChange() +{ + return AllocateDibSection(_screen.width, _screen.height, true) && this->MakeWindow(_fullscreen); +} + +void VideoDriver_Win32::AcquireBlitterLock() { if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); - bool ret = AllocateDibSection(_screen.width, _screen.height, true) && this->MakeWindow(_fullscreen); +} + +void VideoDriver_Win32::ReleaseBlitterLock() +{ if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); - return ret; } void VideoDriver_Win32::EditBoxLostFocus() diff --git a/src/video/win32_v.h b/src/video/win32_v.h index 4c24ec3c79..001e8cffb1 100644 --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -1,4 +1,4 @@ -/* $Id: win32_v.h 26108 2013-11-25 14:30:22Z rubidium $ */ +/* $Id: win32_v.h 27775 2017-03-11 13:05:54Z frosch $ */ /* * This file is part of OpenTTD. @@ -31,6 +31,10 @@ public: /* virtual */ bool AfterBlitterChange(); + /* virtual */ void AcquireBlitterLock(); + + /* virtual */ void ReleaseBlitterLock(); + /* virtual */ bool ClaimMousePointer(); /* virtual */ void EditBoxLostFocus(); diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index e7727ed7a2..fbd56fb408 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -1,4 +1,4 @@ -/* $Id: viewport_gui.cpp 26482 2014-04-23 20:13:33Z rubidium $ */ +/* $Id: viewport_gui.cpp 27743 2017-02-05 17:54:46Z frosch $ */ /* * This file is part of OpenTTD. @@ -71,7 +71,7 @@ public: pt.x = w->viewport->scrollpos_x + w->viewport->virtual_width / 2; pt.y = w->viewport->scrollpos_y + w->viewport->virtual_height / 2; } else { - pt = RemapCoords(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, TileHeight(tile)); + pt = RemapCoords(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, TilePixelHeight(tile)); } this->viewport->scrollpos_x = pt.x - this->viewport->virtual_width / 2; diff --git a/src/widget.cpp b/src/widget.cpp index af88e470dc..75e8a182ee 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -1,4 +1,4 @@ -/* $Id: widget.cpp 27381 2015-08-10 20:24:13Z michi_cc $ */ +/* $Id: widget.cpp 27713 2016-12-25 17:57:47Z frosch $ */ /* * This file is part of OpenTTD. @@ -2393,15 +2393,22 @@ void NWidgetLeaf::Draw(const Window *w) { if (this->current_x == 0 || this->current_y == 0) return; + /* Setup a clipping rectangle... */ + DrawPixelInfo new_dpi; + if (!FillDrawPixelInfo(&new_dpi, this->pos_x, this->pos_y, this->current_x, this->current_y)) return; + /* ...but keep coordinates relative to the window. */ + new_dpi.left += this->pos_x; + new_dpi.top += this->pos_y; + + DrawPixelInfo *old_dpi = _cur_dpi; + _cur_dpi = &new_dpi; + Rect r; r.left = this->pos_x; r.right = this->pos_x + this->current_x - 1; r.top = this->pos_y; r.bottom = this->pos_y + this->current_y - 1; - const DrawPixelInfo *dpi = _cur_dpi; - if (dpi->left > r.right || dpi->left + dpi->width <= r.left || dpi->top > r.bottom || dpi->top + dpi->height <= r.top) return; - bool clicked = this->IsLowered(); switch (this->type) { case WWT_EMPTY: @@ -2512,6 +2519,8 @@ void NWidgetLeaf::Draw(const Window *w) if (this->IsDisabled()) { GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[this->colour & 0xF][2], FILLRECT_CHECKER); } + + _cur_dpi = old_dpi; } /** diff --git a/src/widgets/autoreplace_widget.h b/src/widgets/autoreplace_widget.h index 72cb9b7459..13163ef461 100644 --- a/src/widgets/autoreplace_widget.h +++ b/src/widgets/autoreplace_widget.h @@ -1,4 +1,4 @@ -/* $Id: autoreplace_widget.h 26811 2014-09-11 17:10:38Z alberth $ */ +/* $Id: autoreplace_widget.h 27683 2016-12-08 20:21:39Z frosch $ */ /* * This file is part of OpenTTD. @@ -35,10 +35,8 @@ enum ReplaceVehicleWidgets { WID_RV_STOP_REPLACE, ///< Stop Replacing button. /* Train only widgets. */ - WID_RV_TRAIN_ENGINEWAGON_TOGGLE, ///< Button to toggle engines and/or wagons. - WID_RV_TRAIN_FLUFF_LEFT, ///< The fluff on the left. + WID_RV_TRAIN_ENGINEWAGON_DROPDOWN, ///< Dropdown to select engines and/or wagons. WID_RV_TRAIN_RAILTYPE_DROPDOWN, ///< Dropdown menu about the railtype. - WID_RV_TRAIN_FLUFF_RIGHT, ///< The fluff on the right. WID_RV_TRAIN_WAGONREMOVE_TOGGLE, ///< Button to toggle removing wagons. }; diff --git a/src/widgets/intro_widget.h b/src/widgets/intro_widget.h index e12becb0bd..07e8b33b26 100644 --- a/src/widgets/intro_widget.h +++ b/src/widgets/intro_widget.h @@ -1,4 +1,4 @@ -/* $Id: intro_widget.h 24791 2012-12-05 19:37:15Z frosch $ */ +/* $Id: intro_widget.h 27732 2017-01-14 18:30:26Z frosch $ */ /* * This file is part of OpenTTD. @@ -24,8 +24,10 @@ enum SelectGameIntroWidgets { WID_SGI_ARCTIC_LANDSCAPE, ///< Select arctic landscape button. WID_SGI_TROPIC_LANDSCAPE, ///< Select tropic landscape button. WID_SGI_TOYLAND_LANDSCAPE, ///< Select toyland landscape button. + WID_SGI_BASESET_SELECTION, ///< Baseset selection. + WID_SGI_BASESET, ///< Baseset errors. WID_SGI_TRANSLATION_SELECTION, ///< Translation selection. - WID_SGI_TRANSLATION, ///< Translation. + WID_SGI_TRANSLATION, ///< Translation errors. WID_SGI_OPTIONS, ///< Options button. WID_SGI_HIGHSCORE, ///< Highscore button. WID_SGI_SETTINGS_OPTIONS, ///< Settings button. diff --git a/src/widgets/toolbar_widget.h b/src/widgets/toolbar_widget.h index c1fd3fa74d..7194fffc35 100644 --- a/src/widgets/toolbar_widget.h +++ b/src/widgets/toolbar_widget.h @@ -1,4 +1,4 @@ -/* $Id: toolbar_widget.h 25376 2013-06-09 13:37:04Z zuu $ */ +/* $Id: toolbar_widget.h 27671 2016-10-30 17:36:57Z frosch $ */ /* * This file is part of OpenTTD. @@ -36,7 +36,8 @@ enum ToolbarNormalWidgets { WID_TN_AIRCRAFTS, ///< Aircraft menu. WID_TN_ZOOM_IN, ///< Zoom in the main viewport. WID_TN_ZOOM_OUT, ///< Zoom out the main viewport. - WID_TN_RAILS, ///< Rail building menu. + WID_TN_BUILDING_TOOLS_START, ///< Helper for the offset of the building tools + WID_TN_RAILS = WID_TN_BUILDING_TOOLS_START, ///< Rail building menu. WID_TN_ROADS, ///< Road building menu. WID_TN_WATER, ///< Water building toolbar. WID_TN_AIR, ///< Airport building toolbar. diff --git a/src/window.cpp b/src/window.cpp index 3570864624..6086d2aaaa 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,4 +1,4 @@ -/* $Id: window.cpp 27591 2016-05-29 19:05:11Z frosch $ */ +/* $Id: window.cpp 27712 2016-12-25 17:56:57Z frosch $ */ /* * This file is part of OpenTTD. @@ -942,7 +942,7 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom) left < w->left + w->width && top < w->top + w->height) { /* Window w intersects with the rectangle => needs repaint */ - DrawOverlappedWindow(w, left, top, right, bottom); + DrawOverlappedWindow(w, max(left, w->left), max(top, w->top), min(right, w->left + w->width), min(bottom, w->top + w->height)); } } } @@ -2825,7 +2825,6 @@ static void MouseLoop(MouseClick click, int mousewheel) switch (click) { case MC_DOUBLE_LEFT: case MC_LEFT: - DEBUG(misc, 2, "Cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite); if (!HandleViewportClicked(vp, x, y) && !(w->flags & WF_DISABLE_VP_SCROLL) && _settings_client.gui.left_mouse_btn_scrolling) {